| """Spatial helpers. NYC works in EPSG:2263 (NY state plane, feet).""" | |
| from __future__ import annotations | |
| from pathlib import Path | |
| import geopandas as gpd | |
| NYC_CRS = "EPSG:2263" # ft | |
| WGS84 = "EPSG:4326" | |
| DATA = Path(__file__).resolve().parent.parent / "data" | |
| def to_nyc(g: gpd.GeoDataFrame) -> gpd.GeoDataFrame: | |
| if g.crs is None: | |
| raise ValueError("layer has no CRS") | |
| return g.to_crs(NYC_CRS) if g.crs.to_string() != NYC_CRS else g | |
| def load_layer(path: str | Path, layer: str | None = None) -> gpd.GeoDataFrame: | |
| g = gpd.read_file(path, layer=layer) if layer else gpd.read_file(path) | |
| return to_nyc(g) | |