feat: resolve S-52 topmarks and light fields

This commit is contained in:
OpenAI Codex
2026-09-17 07:09:30 +08:00
parent 8e51e388c1
commit ef36ec3599
5 changed files with 231 additions and 5 deletions

View File

@@ -218,6 +218,9 @@ def main() -> int:
targets_text = args.targets or ",".join(config.get("targets", DEFAULT_TARGETS))
targets = {x.strip().upper() for x in targets_text.split(",") if x.strip()}
palette = args.palette or config.get("palette", "DAY_BRIGHT")
sprite_scope = str(config.get("sprite_scope", "all"))
if sprite_scope not in {"all", "target"}:
raise SystemExit(f"invalid sprite_scope: {sprite_scope}")
source_id = config.get("source_id", "navsea_delivery")
source_layer = config.get("source_layer", "navigation_marks")
sprite_url = config.get("sprite_url", "./sprite")
@@ -243,12 +246,17 @@ def main() -> int:
atlas_width, atlas_height = _png_size(atlas_path)
direct_symbols = sorted({name for row in lookups for name in row["sy"]})
csp_names = sorted({name for row in lookups for name in row["cs"]})
sprite_symbols = (
sorted(name for name, symbol in symbols.items() if symbol.get("bitmap") is not None)
if sprite_scope == "all"
else direct_symbols
)
metadata: dict[str, dict[str, Any]] = {}
missing_symbols: list[str] = []
vector_only_symbols: list[str] = []
out_of_bounds_symbols: list[str] = []
for name in direct_symbols:
for name in sprite_symbols:
symbol = symbols.get(name)
if symbol is None:
missing_symbols.append(name)
@@ -303,6 +311,7 @@ def main() -> int:
json.dumps(style, ensure_ascii=False, indent=2), encoding="utf-8"
)
by_class = Counter(row["object_class"] for row in lookups)
direct_missing = sorted(name for name in direct_symbols if name not in symbols)
report = {
"schema": "navsea.cm95.s52-maplibre-poc/v1",
"targets": sorted(targets),
@@ -314,8 +323,9 @@ def main() -> int:
"conditional_lookup_count": len(conditional_rows),
"conditional_procedures": csp_names,
"direct_symbol_reference_count": len(direct_symbols),
"sprite_scope": sprite_scope,
"sprite_entry_count": len(sprite_json),
"missing_symbol_definitions": missing_symbols,
"missing_symbol_definitions": direct_missing,
"vector_only_symbol_definitions": vector_only_symbols,
"atlas_out_of_bounds": out_of_bounds_symbols,
"production_boundary": {