RoadwayRegularizer#
- class rapidtools.processing.RoadwayRegularizer(min_width_ft: float = ..., min_network_length_ft: float = ..., output: Literal['both'] = ...)[source]#
- class rapidtools.processing.RoadwayRegularizer(min_width_ft: float = ..., min_network_length_ft: float = ..., *, output: Literal['polygons', 'centerlines'])
- class rapidtools.processing.RoadwayRegularizer(min_width_ft: float = ..., min_network_length_ft: float = ..., output: str = ...)
Bases:
Generic[_OutT]Pipeline component to regularize jagged raster-to-vector road polygons.
This regularizer processes raw input geometries, extracts a Voronoi-based centerline skeleton, heals the graph, merges collinear segments, and statistically samples widths. It outputs in-memory
PhysicalAssetCollectionobjects for both the centerlines and the reconstructed polygons.- Parameters:
min_width_ft (float, optional) – The minimum enforced width for any regularized road segment in feet. Defaults to 22.0.
min_network_length_ft (float, optional) – The minimum cumulative length a connected skeleton component must possess to be considered a valid road network. Any disconnected stub networks shorter than this value will be filtered out. Defaults to 100.0.
Example
>>> from rapidtools.core import PhysicalAssetCollection >>> from rapidtools.processing import RoadwayRegularizer >>> >>> raw = PhysicalAssetCollection.from_geojson('roads_raw.geojson') >>> regularizer = RoadwayRegularizer( ... min_width_ft=22.0, min_network_length_ft=150.0 ... ) >>> centerlines, polygons = regularizer(raw) >>> centerlines[0].attributes {'asset_type': 'road_centerline', 'width_ft': 24.5, 'azimuth_deg': 91.2}
Methods
Execute the regularization logic and return asset collections.
- process(input_assets: PhysicalAssetCollection) tuple[PhysicalAssetCollection, PhysicalAssetCollection][source]#
Execute the regularization logic and return asset collections.
The steps are: project to a local feet-based CRS, drop polygons smaller than
MIN_POLYGON_AREA_SQFT, fuse near-touching polygons, skeletonize with a Voronoi diagram, heal/prune the skeleton graph, remove short stub networks, merge collinear segments, sample widths and azimuths, and finally rebuild WGS84 centerline and polygon assets.- Parameters:
input_assets (PhysicalAssetCollection) – The raw input road polygons (WGS84).
- Returns:
tuple[PhysicalAssetCollection, PhysicalAssetCollection] – A tuple containing:
centerlines_collection: Assets representing the road centerlines (LineStringgeometries) with the attributes'asset_type': 'road_centerline','width_ft'and'azimuth_deg'.polygons_collection: Assets representing the regularized polygons with'asset_type': 'road_polygon'and the same width/azimuth attributes.
Both collections are empty when the input is empty or when no polygon exceeds the minimum area.
Example
>>> centerlines, polygons = RoadwayRegularizer().process(raw_roads) >>> polygons[0].attributes['asset_type'] 'road_polygon'