Maps
MapSpec, area anchors and the SVG renderer.
market_map returns a MapSpec: areas as points for one metric, optional roles against a price ceiling, and the same required provenance and attribution as every chart.
MapSpec
type MapSpec = {
kind: "area-map"; version: 1; id: string; title: string;
metric: { key: "price_psf" | "sale_median" | "rent_median" | "gross_yield" | "txn_12m" | "offplan_share"; label: string; unit: string; scale: "sqrt" | "rank" };
areas: { id: string; name: string; lng: number; lat: number; value: number | null; n: number;
role: "anchor" | "fits" | "exceeds" | "other"; overCeiling?: boolean; priceForCeiling?: number | null; distanceKm?: number | null }[];
suppressed: { count: number; reasons: ("n<5" | "n<10" | "no-anchor")[]; names: string[] };
ceiling: { value: number; basis: string } | null;
view: { mode: "2d"; bbox: [number, number, number, number] };
provenance: Provenance; // required
attribution: { data: string; basemap?: string }; // required
synthetic: boolean;
};toGeoJSON(spec) (in packages/core) exports the same points, and MCP results include that GeoJSON so other agents can draw their own map.
Area anchors
- One point per area. Synthetic anchors are invented points around 0°N 0°E.
- A licensed source must supply its own anchors (for example, the median of registered project coordinates per area); none ship with this repository.
- Areas without an anchor stay in tables, are marked "not mapped" and are counted on the map.
- Transaction rows carry no coordinates, so there are no heatmaps or density surfaces.
Renderer
- The renderer is SVG written for this project, with no basemap or map tiles: an equirectangular projection over the bounding box, square-root-scaled bubbles, role colours with a legend, and a data table underneath.
- Colour is never the only signal: every role has a legend entry, a label and a table column.
- The attribution is drawn inside the SVG, and synthetic maps carry a watermark.
- Clicking an area in live mode asks the agent to add it to the comparison.
Methodology
How every figure is computed, what it rests on, and what it is not.
Evals
Deterministic checks on grounding, provenance and stance, with published pass rates.
Code: Apache-2.0. Original docs text and diagrams: CC BY 4.0. Excluded from both: data, figures and charts derived from DLD or Data.Dubai (governed by DATA_LICENSE.md and any DLD grant); EIBOR values (CBUAE terms); third-party names and logos; and the product and operator names and logos (no trademark licence).
The default data is SYNTHETIC – not Dubai data. Nothing here is financial, legal or investment advice.