Trade areas

How MapDove models where a place's visitors come from, what the 85% trade area contains, and how to read its demographic summary.

A trade area answers the question “where do this place’s customers come from?” In MapDove it is a set of hex cells, each with a share of the place’s modeled visitors, plus a summary of the people who live in those cells.

How the trade area is modeled

MapDove uses the same Huff gravity model that powers visit forecasts (Methodology). For each hex cell in the city and each store of the place’s category:

  1. Demand of the hex is population + 0.4 · daytime population — residents plus a share of the people who work or study there.
  2. Each store’s utility for that hex is its attractiveness divided by distance raised to the category’s decay exponent λ. Stores beyond the category’s trade radius are ignored.
  3. The hex’s demand is split across stores in proportion to utility, after reserving a share for an “outside option” (shopping somewhere else or not at all).

The flow from a hex to the place is its probability times the hex’s demand. A hex’s share is that flow divided by the place’s total flow across all hexes.

Because the competitive set is the place’s own category, a café’s trade area shrinks where other cafés are dense and stretches where it has the area to itself.

The 85% cut-off

Every gravity model produces a long tail of hexes that each contribute a tiny fraction of visitors. MapDove sorts hexes by share (largest first), accumulates them, and keeps hexes until 85% of modeled visitors are covered. The remaining 15% is the tail.

The SDSS Huff forecast for a candidate site uses a tighter 80% cut-off, because candidate trade areas are drawn on a map next to existing stores and a smaller core is easier to read.

What the summary contains

GET /api/v1/places/:id/trade-area returns a summary and a GeoJSON FeatureCollection.

Field Meaning
hexes, area_km2 Number of cells in the trade area and their total area
population, households Sum over the cells
median_income, median_age, pct_college, pct_family Population-weighted averages over the cells
avg_distance_km Visitor-weighted mean distance from hex centroids to the place
p50_distance_km Distance within which half of trade-area visitors live
segments Lifestyle-segment mix, weighted by visitor share
neighborhoods Top neighborhoods by visitor share (up to 8)

Each GeoJSON feature carries hex_id, share, cum_share (cumulative share in rank order), population, median_income and segment. Shade by share for a heat map, or by cum_share to draw nested 50% / 70% / 85% contours.

Reading a trade area

  • Compact, high-share core — a convenience format (fuel, coffee, pharmacy). λ is high, so people do not travel far.
  • Large, diffuse area — a destination format (shopping centers, department stores, hotels). λ is low and the trade radius is large.
  • Lopsided shape — a competitor sits on one side. The trade area extends away from it.
  • Segment mix differs from the neighborhood — the place draws a different audience from the people who live next to it, typical of daytime-heavy districts.

Category parameters

Category λ (distance decay) Trade radius
Fuel & Convenience 2.6 5 km
Fitness 2.4 6 km
Coffee & Cafés 2.2 6 km
Pharmacy & Health 2.1 7 km
Quick Service 2.0 7 km
Full-Service Dining 1.9 10 km
Grocery 1.8 9 km
Apparel 1.7 14 km
Electronics 1.6 16 km
Home Improvement 1.5 18 km
Entertainment 1.5 16 km
Department Stores 1.4 20 km
Shopping Centers 1.3 25 km
Hotels 1.2 40 km

Hotels are a special case: their “demand” is still modeled from local population, so treat hotel trade areas as a proxy for local reach, not for where overnight guests actually live.

Limitations

  • Trade areas are modeled, not observed. In the demo dataset no visitor origin is ever measured.
  • Distance is straight-line between hex centroid and store, not travel time.
  • The model ignores cross-category competition; a grocery store’s trade area does not react to a new fuel station.
  • Hex demographics are synthetic (Demo data).

Trade areas also drive cross-shopping, which compares the visitor-origin footprints of two places.