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 map uses current boundaries. Most current endpoints start from 2024 block groups. The others use 2022 tracts. A historical endpoint starts from that window's block groups when they publish every required cell. Otherwise, it starts from that window's tracts. A changed boundary splits a source unit by land overlap. Rates move their numerator and denominator separately. Historical medians move their count ranges before BlockAtlas rebuilds them, but BlockAtlas does not publish a direct change map for those medians. BlockAtlas shows change only when the source cells, definitions, and units are compatible.

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 reallocated map cell needs at least 99% source coverage. A custom-area result with less than 90% coverage is unavailable. A printable result with at least 90% but less than 99.5% coverage carries an approximately equal sign (≈). 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 from block groups (70 maps)

Reads 2020–2024 ACS counts from 2024 block groups and reallocates them to 2022 tract boundaries before it calculates the map value.

Current ACS from tracts (15 maps)
Historical ACS from block groups (118 maps)

Reads 2010–2014 or 2015–2019 ACS counts from that window's block groups and reallocates them to 2022 tract boundaries.

Historical ACS from tracts (22 maps)
ACS change from block groups (103 maps)

Reallocates the current and historical block-group counts to 2022 tract boundaries, then compares the two endpoints.

ACS change with tract sources (22 maps)
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.

Why historical maps use current boundaries

BlockAtlas has a limited set of display levels for national maps. These levels do not yet include historical tracts or block groups, so BlockAtlas reallocates historical data to current boundaries for display.