Skip to content

Results Panel & Generative UI

When you ask a spatial question, the AI agent does more than return text. It selects from a catalog of typed UI components — tables, charts, comparison grids — and streams them into a dedicated Results Panel alongside the map. This is the generative UI system.

Traditional chatbot interfaces return unstructured text. That works for simple answers but falls short for spatial analysis. A table of scored parcels needs sortable columns, clickable rows that zoom the map, and export buttons. A score distribution needs a bar chart, not a paragraph of numbers.

The generative UI pattern lets the agent choose the right visual representation for each result. The agent decides what to show; the frontend decides how to render it.

graph LR
    Q[Your question] --> A[AI Agent]
    A --> T[Tool call]
    T --> R[Typed result]
    R --> C{Component selection}
    C --> DT[DataTable]
    C --> BC[BarChart]
    C --> CM[ComparisonMatrix]
    C --> SS[StatSummary]
    C --> MB[MessageBlock]
    C --> MS[MapSnapshot]
  1. You type a spatial question in the chat console
  2. The agent calls a spatial tool (score_parcels, spatial_query)
  3. The tool returns structured data with a component type hint
  4. The Results Panel renders the data using the matching component
  5. Results stream in real-time as the agent works — no page refresh

Each result can contain multiple components. A scoring query might produce a StatSummary (totals), a DataTable (per-parcel scores), and a BarChart (score distribution) in a single response.

The agent selects from six component types based on the query and data shape.

ComponentBest forInteractive?
DataTablePer-parcel results, query outputSortable, clickable rows, multi-select
StatSummaryAggregate metrics (counts, averages)Display only
BarChartScore distributions, criterion breakdownsClickable bars zoom the map
ComparisonMatrixSide-by-side parcel comparison (up to 4)Display only
MessageBlockExplanatory text, methodology notesDisplay only
MapSnapshotCapture the current map view as an imageClick to capture

Results are not isolated from the map. The panel and map stay in sync through bidirectional interaction:

  • Click a table row and the map zooms to that parcel, highlighted in cyan
  • Hover a table row and the map highlights the parcel in real-time
  • Click a parcel on the map and the panel scrolls to the matching row
  • Hover a parcel on the map and the panel highlights the matching row

This two-way binding means you can explore results spatially (on the map) or analytically (in the panel) and both views stay consistent.

The Results Panel includes a filter sidebar and export toolbar.

Filters narrow results without a server roundtrip — status checkboxes, score range sliders, criteria toggles, and text search all apply instantly. Filtered results also sync to the map through layer dimming.

Exports capture results in three formats:

  • CSV — tabular data without geometry, opens in any spreadsheet
  • GeoJSON — includes geometry for use in GIS tools
  • PDF — server-rendered report with optional map snapshot

All three formats respect the current scope: export all results, only selected rows (via checkboxes), or only filtered rows.