Graph Coverage Zones from Points

Coverage zones represent areas that can be reached from multiple source points within a certain time or distance limit using a transport network. They are built by calculating reachability per point, generating Voronoi polygons, and optionally clipping them to a defined boundary.


The library supports several methods for generating coverage zones, depending on whether you use a full transport graph or simplified geometric rules.


Coverage Using Transport Graph

Uses a full routing engine to determine reachable areas per point, then builds coverage zones based on actual network paths.

objectnat.get_graph_coverage(gdf_to, nx_graph, weight_type, weight_value_cutoff=None, zone=None)[source]

Calculate coverage zones from source points through a graph network using Dijkstra’s algorithm and Voronoi diagrams.

The function works by:
  1. Finding nearest graph nodes for each input point

  2. Calculating all reachable nodes within cutoff distance using Dijkstra

  3. Creating Voronoi polygons around graph nodes

  4. Combining reachability information with Voronoi cells

  5. Clipping results to specified zone boundary

Parameters:
  • gdf_to (geopandas.GeoDataFrame) – Source points to which coverage is calculated.

  • nx_graph (networkx.Graph) – NetworkX graph representing the transportation network.

  • weight_type (Literal['time_min', 'length_meter']) –

    Type of edge weight to use for path calculation:

    • "time_min": Edge travel time in minutes

    • "length_meter": Edge length in meters

  • weight_value_cutoff (float) – Maximum weight value for path calculations (e.g., max travel time/distance).

  • zone (geopandas.GeoDataFrame) – Boundary polygon to clip the resulting coverage zones. If None, concave hull of reachable nodes will be used.

Returns:

GeoDataFrame with coverage zones polygons, each associated with its source point, returns in the same CRS as original gdf_from.

Return type:

gpd.GeoDataFrame

Notes

  • The graph must have a valid CRS attribute in its graph properties

  • MultiGraph/MultiDiGraph inputs will be converted to simple Graph/DiGraph


coverage_zones_time_10min

Coverage zones generated by travel time (10 minutes) on a transport graph.


coverage_zones_distance_600m

Coverage zones generated by distance (600 meters) on a transport graph.


Coverage Using Radius Only

Generates fixed radius-based buffers per point without routing, then merges or clips them via Voronoi diagrams for cleaner borders.

objectnat.get_radius_coverage(gdf_from, radius, resolution=32)[source]

Calculate radius-based coverage zones using Voronoi polygons.

Parameters:
  • gdf_from (geopandas.GeoDataFrame) – Source points for which coverage zones are calculated.

  • radius (float) – Maximum coverage radius in meters.

  • resolution (int) – Number of segments used to approximate quarter-circle in buffer (default=32).

Returns:

GeoDataFrame with smoothed coverage zone polygons in the same CRS as original gdf_from.

Return type:

gpd.GeoDataFrame

Notes

  • Automatically converts to local UTM CRS for accurate distance measurements

  • Final zones are slightly contracted then expanded for smoothing effect


coverage_zones_distance_radius_voronoi

Radius-based coverage zones (800 meters) with Voronoi clipping.


Stepped Graph Coverage

Creates multi-step coverage zones (e.g., 5, 10, 15 minutes) using the full transport graph for each source point.

objectnat.get_stepped_graph_coverage(gdf_to, nx_graph, weight_type, step_type, weight_value_cutoff=None, zone=None, step=None)[source]

Calculate stepped coverage zones from source points through a graph network using Dijkstra’s algorithm and Voronoi-based or buffer-based isochrone steps.

This function combines graph-based accessibility with stepped isochrone logic. It:
  1. Finds nearest graph nodes for each input point

  2. Computes reachability for increasing weights (e.g. time or distance) in defined steps

  3. Generates Voronoi-based or separate buffer zones around network nodes

  4. Aggregates zones into stepped coverage layers

  5. Optionally clips results to a boundary zone

Parameters:
  • gdf_to (geopandas.GeoDataFrame) – Source points from which stepped coverage is calculated.

  • nx_graph (networkx.Graph) – NetworkX graph representing the transportation network.

  • weight_type (Literal['time_min', 'length_meter']) –

    Type of edge weight to use for path calculation:

    • "time_min": Edge travel time in minutes

    • "length_meter": Edge length in meters

  • step_type (Literal['voronoi', 'separate']) –

    Method for generating stepped zones:

    • "voronoi": Stepped zones based on Voronoi polygons around graph nodes

    • "separate": Independent buffer zones per step

  • weight_value_cutoff (float, optional) – Maximum weight value (e.g., max travel time or distance) to limit the coverage extent.

  • zone (geopandas.GeoDataFrame, optional) – Optional boundary polygon to clip resulting stepped zones. If None, concave hull of reachable area is used.

  • step (float, optional) –

    Step interval for coverage zone construction. Defaults to:

    • 100 meters for distance-based weight

    • 1 minute for time-based weight

Returns:

GeoDataFrame with polygons representing stepped coverage zones for each input point, annotated by step range.

Return type:

gpd.GeoDataFrame

Notes

  • Input graph must have a valid CRS defined.

  • MultiGraph or MultiDiGraph inputs will be simplified to Graph/DiGraph.

  • Designed for accessibility and spatial equity analyses over multimodal networks.

stepped_coverage_zones_separate

Stepped coverage zones displayed as separate intervals.


stepped_coverage_zones_voronoi

Stepped coverage zones merged using Voronoi partitioning.


Note

Coverage zones are a powerful tool for evaluating service accessibility, network efficiency, and urban reachability.


Example notebook

Graph Coverage Analysis for Service Points