England only
This commit is contained in:
parent
4d08f5d08d
commit
02712f41e8
8 changed files with 294 additions and 60 deletions
33
pipeline/utils/england_geometry.py
Normal file
33
pipeline/utils/england_geometry.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
"""England boundary polygon for accurate point-in-country filtering.
|
||||
|
||||
Uses shapely prepared geometry for fast single-point checks (osmium handlers)
|
||||
and vectorized shapely.contains for batch checks (Polars DataFrames).
|
||||
"""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import shapely
|
||||
from shapely.geometry import shape
|
||||
from shapely.prepared import PreparedGeometry, prep
|
||||
|
||||
|
||||
def load_england_polygon(geojson_path: Path) -> PreparedGeometry:
|
||||
"""Load England boundary as a prepared shapely polygon for fast contains checks."""
|
||||
with open(geojson_path) as f:
|
||||
data = json.load(f)
|
||||
geometry = shape(data["features"][0]["geometry"])
|
||||
return prep(geometry)
|
||||
|
||||
|
||||
def in_england_mask(geojson_path: Path, lats: np.ndarray, lngs: np.ndarray) -> np.ndarray:
|
||||
"""Vectorized check: which (lat, lng) points are within England.
|
||||
|
||||
Returns a boolean numpy array.
|
||||
"""
|
||||
with open(geojson_path) as f:
|
||||
data = json.load(f)
|
||||
polygon = shape(data["features"][0]["geometry"])
|
||||
pts = shapely.points(lngs, lats)
|
||||
return shapely.contains(polygon, pts)
|
||||
Loading…
Add table
Add a link
Reference in a new issue