Migrate maps to @geoscene/core, polish monitoring/alerts UX, fix timeline basemap flicker and district alert regions, and ship compose/nginx Docker deploy assets with CBPOA_ROOT data mounts. Co-authored-by: Cursor <cursoragent@cursor.com>
22 lines
688 B
Python
22 lines
688 B
Python
"""Map 100m grid_id (r{row}_c{col}) → Wuhan district name."""
|
|
from functools import lru_cache
|
|
|
|
import pandas as pd
|
|
|
|
from config import PROJECT_ROOT
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def grid_district_lookup() -> dict[str, str]:
|
|
"""Loaded once from processed/grid_district_mapping.parquet."""
|
|
path = PROJECT_ROOT / "processed" / "grid_district_mapping.parquet"
|
|
if not path.exists():
|
|
return {}
|
|
df = pd.read_parquet(path)
|
|
df = df.dropna(subset=["district_name"])
|
|
return dict(zip(df["grid_id"].astype(str), df["district_name"].astype(str)))
|
|
|
|
|
|
def district_for_grid(grid_id: str, default: str = "其他") -> str:
|
|
return grid_district_lookup().get(grid_id, default)
|