Catchment & Service Area Delineation
This guide is part of the Healthcare Access & Network Analysis Automation section. It covers how to draw the boundary of the population a facility serves — a question that sits underneath community health needs assessments, facility-level rates, outreach planning and every access metric that divides supply by a population.
Concept & Epidemiological Alignment
A catchment is the geographic population attributed to a facility. It is a modelling decision, not a fact of nature: patients do not carry a label saying which hospital is theirs, and most areas send patients to several facilities. The catchment converts that messy reality into a set of areas — ZIP codes, tracts or block groups — assigned to each facility, so that the facility can have a denominator.
Three families of method are in common use, and they answer different questions.
Utilisation-based catchments use where patients actually go. Discharge records, visit records or claims show, for each residential area, how many patients used each facility. An area is assigned to the facility that receives the plurality of its patients, or the facility’s catchment is defined as the areas that together supply a set share of its patients. The Dartmouth hospital service areas are the classic example. These catchments describe revealed behaviour, including the effects of insurance networks, referral patterns and reputation.
Travel-time catchments use geography. An area belongs to the nearest facility by drive time, or to every facility within a threshold. These describe potential access: who could reach the facility, whether or not they do. They are simpler to compute, need no patient data and can be drawn for facilities that do not yet exist.
Fixed-radius catchments draw a circle around each facility. They are easy to explain and easy to criticise, since a 10-mile circle crosses rivers without bridges and ignores road networks. They survive because some regulations and grant programs define service areas this way.
The choice matters epidemiologically because the catchment becomes a denominator. A facility’s readmission rate, its screening coverage or its share of community need all divide by the catchment population. A catchment drawn too wide dilutes a facility’s rates; one drawn too narrow inflates them. And catchments that change from year to year break every trend computed on them — a rate that rises because the catchment shrank is not a change in health.
Catchments also carry equity consequences. A utilisation-based catchment reflects who currently uses the facility. If a population avoids a hospital because of cost, language or past experience, a utilisation catchment excludes them, and the hospital’s community health needs assessment will never count them. A travel-time catchment includes them, and so shows the gap between who could be served and who is served — often the most useful single comparison the method produces.
Method Choices
| Approach | Input | Describes | Main weakness |
|---|---|---|---|
| Plurality of discharges | Patient origin by area | Revealed use | Excludes non-users; unstable in small areas |
| Share-of-volume threshold | Patient origin by area | Core service population | Overlapping catchments |
| Nearest by travel time | Road or transit network | Potential access | Ignores choice and insurance |
| Travel-time threshold | Road or transit network | Reachable population | Overlap; threshold choice |
| Fixed radius | Facility point | Regulatory service area | Ignores networks and barriers |
Spatial Data Prerequisites
Utilisation-based delineation needs patient origin data: counts of discharges or visits by residential area and facility, over a period long enough to be stable — usually two to three years pooled. State hospital discharge databases supply this at ZIP code level for inpatient care; outpatient and emergency department databases do so in some states. Counts below the small-cell threshold are often suppressed in public extracts, so delineation from public data must work with suppressed cells, while delineation from restricted data must handle the output as potentially disclosive.
Travel-time delineation needs a routable network — road for drive time, GTFS feeds for transit, as covered in Public Transit Accessibility Modeling — and population-weighted origins for each area, since a tract centroid in a large rural tract can sit far from where its residents live.
All methods need a facility inventory with stable identifiers, service lines and open and close dates, and a geography that is consistent across years. ZIP Code Tabulation Areas change between census vintages, and a catchment defined on 2010 ZCTAs cannot be applied to 2020 counts without a crosswalk, as described in Areal Interpolation & Boundary Harmonization.
Work in a projected metric coordinate reference system for any distance calculation, and keep population denominators on the same geography and vintage as the catchment areas.
Production Implementation
The core of a utilisation-based delineation is a flow matrix — residential areas by facilities — from which each area is assigned by plurality, with rules for areas that are too small or too split to assign reliably.
# Plurality-based service areas from patient origin flows, with stability rules.
# Pinned: pandas==2.2.2, numpy==1.26.4, geopandas==0.14.4
import logging
import numpy as np
import pandas as pd
import geopandas as gpd
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
log = logging.getLogger("catchments")
MIN_PATIENTS = 20 # areas with fewer pooled discharges are assigned by travel time
MIN_SHARE = 0.30 # plurality must reach this share to count as a clear assignment
def flow_matrix(discharges: pd.DataFrame) -> pd.DataFrame:
"""Rows: residential area; columns: facility; values: pooled discharge counts."""
return (discharges.groupby(["origin_area", "facility_id"]).size()
.unstack(fill_value=0))
def assign_plurality(flows: pd.DataFrame) -> pd.DataFrame:
total = flows.sum(axis=1)
top = flows.idxmax(axis=1)
share = flows.max(axis=1) / total.replace(0, np.nan)
out = pd.DataFrame({"facility_id": top, "share": share, "patients": total})
out["basis"] = np.where(total < MIN_PATIENTS, "too_few",
np.where(share < MIN_SHARE, "split", "plurality"))
return out
def fill_by_travel_time(assign: pd.DataFrame, nearest: pd.Series) -> pd.DataFrame:
"""Areas with too few patients take their nearest facility by drive time."""
a = assign.copy()
weak = a["basis"] == "too_few"
a.loc[weak, "facility_id"] = nearest.reindex(a.index[weak]).to_numpy()
a.loc[weak, "basis"] = "travel_time"
return a
def contiguity_check(areas: gpd.GeoDataFrame, assign: pd.DataFrame) -> pd.Series:
"""Count separate pieces per catchment; many pieces signal unstable assignment."""
g = areas.join(assign, on="area_id").dissolve(by="facility_id")
pieces = g.geometry.apply(lambda geom: len(getattr(geom, "geoms", [geom])))
fragmented = pieces[pieces > 3]
if len(fragmented):
log.warning("%d catchments have more than 3 separate pieces", len(fragmented))
return pieces
def delineate(discharges, areas, nearest_by_time) -> pd.DataFrame:
flows = flow_matrix(discharges)
assign = fill_by_travel_time(assign_plurality(flows), nearest_by_time)
pieces = contiguity_check(areas, assign)
log.info("areas=%d plurality=%d split=%d travel_time=%d catchments=%d",
len(assign), int((assign.basis == "plurality").sum()),
int((assign.basis == "split").sum()),
int((assign.basis == "travel_time").sum()), len(pieces))
return assign
Keeping the basis column is what makes the delineation auditable. A reviewer can see which areas were assigned by clear plurality, which were split between facilities, and which fell back to travel time because too few patients came from them. Split areas are often the most interesting: they mark the frontier between competing systems, and they are where catchment assignments change most from year to year.
The step-by-step construction is covered in Delineating Hospital Service Areas From Discharge Flows. The comparison with travel-time and fixed-radius approaches, including when a regulatory radius has to be used anyway, is in Comparing Fixed-Radius and Network Catchments.
Parameter Selection & Tuning
Pooling period. One year of discharges leaves many rural areas with too few patients to assign; five years mixes in facilities that opened or closed. Two to three years is a common compromise. Pool longer for rare service lines such as obstetrics or trauma, and shorter where the facility landscape is changing fast.
Minimum patient count. The threshold below which an area falls back to travel time trades coverage for stability. At 20 pooled discharges, a plurality share can still swing by several percentage points on a handful of patients. Raise it if year-to-year assignments flip for many small areas.
Plurality share. Areas where the top facility receives under about 30 percent of patients have no meaningful single assignment. Rather than force them, report them as shared, or split their population across facilities in proportion to flows — a fractional assignment that makes denominators more honest and boundaries less crisp.
Travel-time thresholds. For travel-time catchments, thresholds should follow the service line: 30 minutes for primary care in urban areas, 60 minutes for hospital care in rural areas, and specific standards where regulations set them, such as network adequacy rules. Report population coverage at several thresholds rather than one.
Geography. ZIP codes are the usual unit because discharge data are coded that way, but they are large and irregular in rural areas. Where addresses allow, tracts or block groups give catchments that follow settlement more closely — at the cost of more areas with small counts.
Edge Cases & Failure Modes
Facilities in the same system. Two hospitals under one owner often share patients through transfers and referrals. Treat them separately and their catchments interleave; treat them together and the system has one large catchment. Decide by purpose: facility-level quality measures need facility catchments; community needs assessments are often filed at system level.
Specialty and tertiary centres. A children’s hospital or a trauma centre draws from a whole state, and its plurality will be won in almost no area because community hospitals handle routine care nearby. Delineate specialty catchments on the relevant service line only, not on all discharges.
Border areas. Areas near a state line send patients to facilities in the neighbouring state, which may not appear in the state’s discharge data. These areas look like they have few patients and fall back to travel time, or are assigned to the in-state facility with the most of the few patients recorded. Obtain cross-border data where agreements allow, or flag border areas explicitly.
Facility openings and closures. A new hospital takes patients gradually. Using pooled data that include years before it opened understates its catchment. Split the pooling period at the opening date, or weight recent years more heavily.
Year-to-year instability. Re-delineating each year moves boundaries and changes denominators even when patient behaviour is stable. Methods for damping those changes are in Stabilizing Catchment Boundaries Across Years.
Non-contiguous catchments. Utilisation catchments are often fragmented — a few distant areas assigned to a hospital because of a specialist or an insurer. Some fragmentation is real; a great deal of it is noise in small areas. The contiguity check flags catchments with many pieces for review.
Compliance & Audit Controls
Record the method, the data source and pooling period, the geography and its vintage, thresholds for minimum patients and plurality share, the travel-time network and date for fallback assignments, and the basis for every area’s assignment. Version catchment files, and keep every version used for a published rate, so the rate can be reproduced after the catchment is revised.
Patient origin data at small-area level are protected health information when counts are small. A catchment file itself is usually safe to publish, since it lists areas and facilities, not counts. The flow matrix behind it is not, and neither is a published table of plurality shares for small areas, which can reveal how many patients from a small ZIP code used a particular facility. Apply small-cell rules to any flow table that leaves the analysis environment.
Nonprofit hospitals in the United States must define their community for community health needs assessments. Where a catchment produced this way is used for that purpose, document how the definition relates to the populations the hospital does not currently serve, since a utilisation-only definition can exclude exactly those populations.
Production Implementation Checklist
Frequently Asked Questions
Should I use patient flows or travel time? Use patient flows to describe who a facility serves and travel time to describe who it could serve. For community health needs assessments and equity work, compute both, because the difference between them is the population that could use the facility and does not.
What geography should catchments use? The one your patient data are coded in, usually ZIP codes for discharges. If addresses are available, tracts or block groups give catchments closer to settlement patterns, at the cost of more small counts.
How often should catchments be redrawn? Annually is common, but apply stabilisation rules so that boundaries only move when patient behaviour has clearly changed, and keep past versions for reproducing earlier rates.
Can a fixed radius ever be the right choice? When a regulation or grant program defines the service area that way, yes. Compute it as required, and report a network-based catchment alongside it so readers can see what the radius includes that is not reachable, and what it misses.
What about areas split between several hospitals? Mark them as shared rather than forcing an assignment, or allocate their population fractionally in proportion to patient flows. Forcing a single assignment makes denominators look more certain than they are.
Related Topics
- Delineating Hospital Service Areas From Discharge Flows — the flow-based method step by step.
- Comparing Fixed-Radius and Network Catchments — what circles include and miss.
- Stabilizing Catchment Boundaries Across Years — keeping denominators comparable over time.
- Drive-Time Isochrone Generation — the travel-time surfaces used for fallback and comparison.
- Spatial Equity Index Calculation — access measures that avoid hard catchment boundaries altogether.