How BlockAtlas computes its numbers

A number is native when BlockAtlas shows it for the geography on which its source published it. A number is computed by BlockAtlas when we combine published values for another area, boundary, or time comparison. This describes where the arithmetic happened. It is separate from whether the source is a survey estimate: American Community Survey values are estimates in both cases.

Population in a custom area

Population uses 2020 Census blocks whose centers fall inside the area. For very large areas, it uses whole 2022 tracts whose centers fall inside the area.

Each block or tract counts in full. A boundary can include part of a unit without its center. The result is an estimate, especially where Census units cover large areas.

Demographics in a custom area

BlockAtlas reads 2020–2024 American Community Survey counts from 2024 block groups for most indicator families. Other families use 2022 tracts because the needed cells are not available for block groups.

For a standard area, BlockAtlas counts each source unit inside the area in full. It weights each boundary unit by its share of 2020 block population inside the area. When population cannot supply that weight, it uses block land area and then spatial overlap.

For a very large area, BlockAtlas selects whole 2022 tracts whose centers fall inside the area. Maps that start from block groups use their prebuilt 2022 tract values. This faster method is an estimate.

BlockAtlas sums counts. It recomputes rates from their allocated numerator and denominator. It rebuilds a median from allocated count ranges. It leaves a value unavailable when the published data cannot support one of these methods.

Demographic change over time

Change maps compare non-overlapping American Community Survey windows. The change itself is computed by BlockAtlas. A count change is a percent change. A percentage change is a percentage-point change. Another count-backed rate uses the difference between its two values.

Each snapshot uses the native Census boundaries for its period. Historical snapshots use historical counties, metros, tracts, and block groups. Numeric change is available only for a custom drawn area, a radius circle, or a travel-time area. Each period estimates its value for the same custom area from its own native sources. Rates combine numerators and denominators separately. Computed medians combine brackets before calculation. Named Census territories do not show numeric change between periods.

Missing data and coverage

A negative Census source cell is a missing-value code, so BlockAtlas changes it to missing before arithmetic. A negative result calculated from valid source values remains valid. A missing or zero denominator makes a rate unavailable. A missing distribution component makes the row unavailable.

A custom-area result with less than 90% coverage is unavailable. A printable result with at least 90% but less than 99.5% coverage has a note below its section. Data coverage details identify the affected measures and areas. Coverage describes missing source data, not survey uncertainty. BlockAtlas does not scale partial data up to 100%.

Other data we use

  • Reachable areas (drive, walk, and bike times) use OpenStreetMap road data with the Valhalla routing engine. © OpenStreetMap contributors.
  • Place names, for labeling a dropped pin or point, are reverse geocoded with Pelias against Who's On First.
  • Points of interest come from the latest OpenStreetMap snapshot that BlockAtlas imported. The snapshot can lag behind live OpenStreetMap data. © OpenStreetMap contributors.
  • Day and night population shift subtracts Census LEHD LODES residence jobs from workplace jobs. It divides the result by 2020–2024 ACS population. Alaska uses 2016 LODES data, Michigan uses 2021, and every other state and DC uses 2023.
  • Base maps (light, dark, and satellite) and forward geocoding (finding a location from an address) are provided by Stadia Maps.

Try it yourself: population by drive time or population by radius. Questions welcome at [email protected].

Appendix: how each tract map is built

This appendix includes every generated United States tract map once. It groups each map by the stored route that builds its tract view. Some current maps also show direct block-group values when you zoom in. Open a map's information panel for its variables and complete source details.

The label beside each map identifies its final calculation. A rebuilt median comes from published count ranges. A plurality selects the largest category. Dot density places a fixed number of dots from published category counts.

Current ACS snapshots (85 maps)

Each value uses published source data on that period's native boundaries.

Historical ACS snapshots (140 maps)

Each value uses published source data on that historical period's native boundaries.

ACS period comparisons (125 maps)

Each pane shows its period's native boundaries. Numeric change is available for custom areas only.

2020 Census population density (1 map)

Divides 2020 Census population by 2020 land area for each 2022 tract.

Day and night population shift (1 map)

Subtracts Census LEHD LODES residence jobs from workplace jobs and divides the result by 2020–2024 ACS population. Alaska uses 2016 LODES data, Michigan uses 2021, and every other state and DC uses 2023.

Historical boundaries

A period comparison shows each period on its native boundaries. A boundary change can alter a Census territory. Matching names or GEOIDs do not establish a fixed area for a numeric comparison.