From e52328b3f5888381402b2b0938388c6af65dfa26 Mon Sep 17 00:00:00 2001 From: OpenAI Codex Date: Thu, 6 Aug 2026 17:44:22 +0800 Subject: [PATCH] feat: add Kyushu semantic icon test delivery --- navsea_audit_kyushu_semantic_icon_test.py | 147 + navsea_build_kyushu_semantic_icon_test.py | 425 ++ .../geometry/geometry_native_audit.json | 378 ++ .../geometry/geometry_native_audit.md | 314 + .../kyushu_semantic_icon_v1.json | 177 + .../kyushu_semantic_icon_v1.md | 46 + .../object_geometry_icon_audit.json | 173 + .../object_geometry_icon_audit.md | 10 + .../sprite_icon_closure.json | 64 + .../sprite_icon_closure.md | 7 + .../visual/full_aoi_visual_audit.json | 141 + .../visual/full_aoi_visual_audit.md | 48 + ...avsea-compare-kyushu-semantic-icon-v1.html | 101 + ...vsea-delivery-kyushu-semantic-icon-v1.json | 2680 ++++++++ ...yle.navsea-newpec-kyushu-icon-test-v1.json | 5656 +++++++++++++++++ ...NavSea_Kyushu_语义图标视觉审计范围-v1.json | 16 + tasks/pbf/NavSea_语义图标替换表-v1.md | 156 + tasks/pbf/navsea_semantic_icon_map_v1.json | 224 + 18 files changed, 10763 insertions(+) create mode 100644 navsea_audit_kyushu_semantic_icon_test.py create mode 100644 navsea_build_kyushu_semantic_icon_test.py create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.json create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.md create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.json create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.md create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.json create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.md create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.json create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.md create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.json create mode 100644 report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.md create mode 100644 src/pbf/navsea-compare-kyushu-semantic-icon-v1.html create mode 100644 src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json create mode 100644 src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json create mode 100644 tasks/pbf/NavSea_Kyushu_语义图标视觉审计范围-v1.json create mode 100644 tasks/pbf/NavSea_语义图标替换表-v1.md create mode 100644 tasks/pbf/navsea_semantic_icon_map_v1.json diff --git a/navsea_audit_kyushu_semantic_icon_test.py b/navsea_audit_kyushu_semantic_icon_test.py new file mode 100644 index 0000000..0f826bc --- /dev/null +++ b/navsea_audit_kyushu_semantic_icon_test.py @@ -0,0 +1,147 @@ +#!/usr/bin/env python3 +"""审计九州语义图标测试版是否丢失对象、几何或非图标属性。""" + +from __future__ import annotations + +import argparse +import json +from collections import Counter +from concurrent.futures import ProcessPoolExecutor +from pathlib import Path +from typing import Any + +import mapbox_vector_tile + + +EXPECTED_FIELDS = {"chart_icon_image", "icon_id", "arc_id"} + + +def stable(value: Any) -> str: + return json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":")) + + +def feature_signature(feature: dict[str, Any]) -> str: + properties = dict(feature.get("properties") or {}) + for field in EXPECTED_FIELDS: + properties.pop(field, None) + return stable({ + "id": feature.get("id"), + "geometry": feature.get("geometry"), + "properties": properties, + }) + + +def audit_tile(args: tuple[str, str]) -> dict[str, Any]: + source_path, target_path = args + source = mapbox_vector_tile.decode(Path(source_path).read_bytes()) + target = mapbox_vector_tile.decode(Path(target_path).read_bytes()) + errors: list[dict[str, Any]] = [] + source_layers = set(source) + target_layers = set(target) + if source_layers != target_layers: + errors.append({"kind": "layer_set", "source": sorted(source_layers), "target": sorted(target_layers)}) + + source_counts = Counter() + target_counts = Counter() + icon_counts = Counter() + old_prefix_counts = Counter() + for layer_name in sorted(source_layers | target_layers): + source_features = source.get(layer_name, {}).get("features", []) + target_features = target.get(layer_name, {}).get("features", []) + source_counts[layer_name] = len(source_features) + target_counts[layer_name] = len(target_features) + source_signatures = Counter(feature_signature(feature) for feature in source_features) + target_signatures = Counter(feature_signature(feature) for feature in target_features) + if source_signatures != target_signatures: + missing = source_signatures - target_signatures + extra = target_signatures - source_signatures + errors.append({ + "kind": "feature_or_geometry_or_property", + "layer": layer_name, + "source_count": len(source_features), + "target_count": len(target_features), + "missing_count": sum(missing.values()), + "extra_count": sum(extra.values()), + }) + for feature in target_features: + properties = feature.get("properties") or {} + for field in ("icon_id", "arc_id"): + value = properties.get(field) + if isinstance(value, str): + icon_counts[f"{field}:{value}"] += 1 + for value in properties.values(): + if isinstance(value, str) and (value.startswith("symbol-daytime-") or value.startswith("arc-daytime-")): + old_prefix_counts[value] += 1 + return { + "tile": source_path, + "errors": errors, + "source_counts": dict(source_counts), + "target_counts": dict(target_counts), + "icon_counts": dict(icon_counts), + "old_prefix_counts": dict(old_prefix_counts), + } + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--source-root", type=Path, required=True) + parser.add_argument("--target-root", type=Path, required=True) + parser.add_argument("--report-dir", type=Path, required=True) + args = parser.parse_args() + pairs = [] + for target in sorted(args.target_root.glob("*/*/*.pbf")): + source = args.source_root / target.relative_to(args.target_root) + if source.exists(): + pairs.append((str(source), str(target))) + + results: list[dict[str, Any]] = [] + with ProcessPoolExecutor() as executor: + for result in executor.map(audit_tile, pairs, chunksize=16): + results.append(result) + + error_rows = [error | {"tile": result["tile"]} for result in results for error in result["errors"]] + icon_counts = Counter() + old_prefix_counts = Counter() + source_features = Counter() + target_features = Counter() + for result in results: + icon_counts.update(result["icon_counts"]) + old_prefix_counts.update(result["old_prefix_counts"]) + source_features.update(result["source_counts"]) + target_features.update(result["target_counts"]) + + payload = { + "source_root": str(args.source_root), + "target_root": str(args.target_root), + "tiles_target": len(list(args.target_root.glob("*/*/*.pbf"))), + "tiles_compared": len(results), + "tiles_with_errors": len({row["tile"] for row in error_rows}), + "errors": error_rows[:200], + "source_features": dict(source_features), + "target_features": dict(target_features), + "icon_counts": dict(icon_counts), + "old_prefix_counts": dict(old_prefix_counts), + "verdict": "PASS" if not error_rows and not old_prefix_counts else "FAIL", + } + args.report_dir.mkdir(parents=True, exist_ok=True) + (args.report_dir / "object_geometry_icon_audit.json").write_text( + json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8" + ) + lines = [ + "# 九州语义图标测试版对象 / 几何 / 图标审计", + "", + f"- 来源:`{args.source_root}`", + f"- 目标:`{args.target_root}`", + f"- 目标瓦片:`{payload['tiles_target']}`,实际比较:`{payload['tiles_compared']}`", + f"- 有错误瓦片:`{payload['tiles_with_errors']}`", + f"- 旧图标前缀残留:`{sum(old_prefix_counts.values())}`", + f"- 结论:`{payload['verdict']}`", + "", + "本审计忽略预期的 `chart_icon_image`、`icon_id`、`arc_id` 字段变化,逐图层比较对象数量、ID、几何和其余属性。", + ] + (args.report_dir / "object_geometry_icon_audit.md").write_text("\n".join(lines) + "\n", encoding="utf-8") + print(json.dumps(payload, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/navsea_build_kyushu_semantic_icon_test.py b/navsea_build_kyushu_semantic_icon_test.py new file mode 100644 index 0000000..a87089e --- /dev/null +++ b/navsea_build_kyushu_semantic_icon_test.py @@ -0,0 +1,425 @@ +#!/usr/bin/env python3 +"""从当前全国 Full 基线生成九州语义图标替换测试包。""" + +from __future__ import annotations + +import json +import os +import shutil +from collections import Counter +from concurrent.futures import ProcessPoolExecutor +from pathlib import Path +from typing import Any + +import mercantile + +from navsea_tile_reencode_guard import ( + assert_reencoded_tile_safe, + decode_tile_with_extents, + encode_layers_preserving_extents, +) + + +REPO_ROOT = Path(__file__).resolve().parent +CONFIG_PATH = REPO_ROOT / "tasks/pbf/navsea_semantic_icon_map_v1.json" +SOURCE_ROOT = Path("/home/wwwroot/pbf-delivery-full-20260418-rebuild") +TARGET_ROOT = Path("/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806") +TARGET_TILE_URL = "http://192.168.200.184/pbf-delivery-kyushu-semantic-icon-v1-20260806/{z}/{x}/{y}.pbf" +KYUSHU_BBOX = (128.0, 30.0, 132.5, 34.9) +ZOOMS = tuple(range(5, 13)) + +SPRITE_SOURCE = Path("/mnt/sda1/www/newpec/sprite-semantic") +SPRITE_TARGET = Path("/mnt/sda1/www/newpec/sprite-kyushu-semantic-icon-v1-20260806") +SPRITE_URL = "http://192.168.200.184/newpec/sprite-kyushu-semantic-icon-v1-20260806/sprite" + +STYLE_SOURCE = REPO_ROOT / "src/pbf/style.navsea-delivery-full-semantic-extentfix.json" +STYLE_OUTPUT = REPO_ROOT / "src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json" +STYLE_DEPLOY = Path("/mnt/sda1/www/newpec/domain/style.navsea-delivery-kyushu-semantic-icon-v1.json") + +NEWPEC_STYLE_SOURCE = REPO_ROOT / "src/pbf/style.json" +NEWPEC_STYLE_OUTPUT = REPO_ROOT / "src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json" +NEWPEC_STYLE_DEPLOY = Path("/mnt/sda1/www/newpec/domain/style.navsea-newpec-kyushu-icon-test-v1.json") + +REPORT_DIR = REPO_ROOT / "report/kyushu_semantic_icon_v1_2026-08-06" + +SIMPLE_ICON_LAYERS = { + "hazard-points", + "anchorage-symbols", + "anchor-hazard-points", + "anchor-hazard-points-428", + "facility-points", + "landmark-points", +} + +STYLE_EXTRA_MAP = { + "light_flare_green": "fl_G", + "light_flare_red": "fl_R", + "light_flare_yellow_white": "fl_YW", +} + +CANONICAL_ICON_MAP = { + "coastal_lighthouse_over_15m": "lt_cst", + "harbor_lighthouse": "lt_hbr", + "breakwater_lighthouse": "lt_bkw", + "minor_light": "lt_min", + "light_beacon": "lt_bcn", + "light_buoy": "bu_lit", + "lattice_buoy": "bu_lat", + "pillar_buoy": "bu_pil", + "can_buoy": "bu_can", + "buoy_generic": "bu_gen", + "nav_mark_vais": "mk_vais", +} + + +def load_config() -> dict[str, Any]: + return json.loads(CONFIG_PATH.read_text(encoding="utf-8")) + + +def collect_tiles() -> list[tuple[int, int, int, Path]]: + tiles: list[tuple[int, int, int, Path]] = [] + west, south, east, north = KYUSHU_BBOX + for z in ZOOMS: + for tile in mercantile.tiles(west, south, east, north, [z]): + rel = Path(str(tile.z)) / str(tile.x) / f"{tile.y}.pbf" + source = SOURCE_ROOT / rel + if source.exists(): + tiles.append((tile.z, tile.x, tile.y, rel)) + return sorted(tiles) + + +def copy_link(source: Path, target: Path) -> None: + target.parent.mkdir(parents=True, exist_ok=True) + if target.exists(): + target.unlink() + try: + target.hardlink_to(source) + except OSError: + shutil.copy2(source, target) + + +def class_icon(layer_name: str, class_code: object, config: dict[str, Any]) -> str | None: + code = str(class_code) + if layer_name in {"navigation_hazard_point", "anchor_caution_hazard_point"}: + return config["hazard_class_map"].get(code) + if layer_name == "onshore_structure_point": + return config["landmark_class_map"].get(code) + if layer_name == "anchorage_point": + return config["anchorage_class_map"].get(code) + if layer_name == "facility_boundary_point": + return config["facility_class_map"].get(code) + return None + + +def navigation_icon(properties: dict[str, Any], config: dict[str, Any]) -> str | None: + legacy = properties.get("chart_icon_image") + if isinstance(legacy, str): + mapped = config["sprite_key_map"].get(legacy) + if mapped: + return mapped + display_code = properties.get("display_code") + if display_code is not None: + mapped = config["display_code_map"].get(str(display_code)) + if mapped: + return mapped + canonical = properties.get("canonical_object_type") + if isinstance(canonical, str): + return CANONICAL_ICON_MAP.get(canonical) + return None + + +def arc_icon(properties: dict[str, Any], config: dict[str, Any]) -> str | None: + if properties.get("chart_symbol_code") != "lighthouse": + return None + if not properties.get("light_color_code"): + return None + if ( + properties.get("canonical_object_type") == "coastal_lighthouse_over_15m" + and properties.get("light_sector_mode") == "sector" + ): + return config["arc_rules"]["sector"] + color = str(properties.get("light_color_code")) + return config["arc_rules"].get(color, config["arc_rules"]["other"]) + + +def rewrite_tile( + source: Path, + target: Path, + config: dict[str, Any], + *, + verify_geometry: bool = False, +) -> dict[str, Any]: + decoded, extents = decode_tile_with_extents(source.read_bytes()) + changed_features = 0 + icon_counts: Counter[str] = Counter() + arc_counts: Counter[str] = Counter() + old_values: Counter[str] = Counter() + unknown_old_values: Counter[str] = Counter() + output_layers: list[dict[str, Any]] = [] + + for layer_name, layer in decoded.items(): + output_features = [] + for feature in layer["features"]: + properties = dict(feature.get("properties") or {}) + before = dict(properties) + legacy = properties.get("chart_icon_image") + if isinstance(legacy, str) and ( + legacy.startswith("symbol-daytime-") or legacy.startswith("arc-daytime-") + ): + old_values[legacy] += 1 + + icon_id = class_icon(layer_name, properties.get("class_code"), config) + if layer_name == "navigation_marks": + icon_id = icon_id or navigation_icon(properties, config) + if icon_id is None and isinstance(legacy, str): + icon_id = config["sprite_key_map"].get(legacy) + + if icon_id: + properties["icon_id"] = icon_id + icon_counts[icon_id] += 1 + properties.pop("chart_icon_image", None) + + if layer_name == "navigation_marks": + arc_id = arc_icon(properties, config) + if arc_id: + properties["arc_id"] = arc_id + arc_counts[arc_id] += 1 + + for value in properties.values(): + if isinstance(value, str) and ( + value.startswith("symbol-daytime-") or value.startswith("arc-daytime-") + ): + unknown_old_values[value] += 1 + + if properties != before: + changed_features += 1 + output_feature = { + "geometry": feature["geometry"], + "properties": properties, + } + if feature.get("id") is not None: + output_feature["id"] = feature["id"] + output_features.append(output_feature) + output_layers.append({"name": layer_name, "features": output_features}) + + target.parent.mkdir(parents=True, exist_ok=True) + target.write_bytes(encode_layers_preserving_extents(output_layers, extents)) + if verify_geometry: + assert_reencoded_tile_safe(source, target) + return { + "changed_features": changed_features, + "icon_counts": dict(icon_counts), + "arc_counts": dict(arc_counts), + "old_values": dict(old_values), + "unknown_old_values": dict(unknown_old_values), + } + + +def rewrite_tile_job(args: tuple[str, str, dict[str, Any], bool]) -> dict[str, Any]: + source, target, config, verify_geometry = args + result = rewrite_tile( + Path(source), Path(target), config, verify_geometry=verify_geometry + ) + result["source"] = source + return result + + +def transform_style(config: dict[str, Any]) -> dict[str, Any]: + style = json.loads(STYLE_SOURCE.read_text(encoding="utf-8")) + key_map = dict(config["sprite_key_map"]) + key_map.update(STYLE_EXTRA_MAP) + + def transform(value: Any) -> Any: + if isinstance(value, dict): + return {key: transform(item) for key, item in value.items()} + if isinstance(value, list): + return [transform(item) for item in value] + if isinstance(value, str): + if value == "chart_icon_image": + return "icon_id" + return key_map.get(value, value) + return value + + style = transform(style) + style["name"] = "NavSea Kyushu Semantic Icon Test v1" + style["sprite"] = SPRITE_URL + style["metadata"] = { + "navsea_test_version": "kyushu-semantic-icon-v1-20260806", + "source_baseline": str(SOURCE_ROOT), + "icon_map": str(CONFIG_PATH), + } + style["sources"]["navsea_delivery"]["tiles"] = [TARGET_TILE_URL] + + for layer in style["layers"]: + layer_id = layer.get("id") + layout = layer.get("layout") or {} + if layer_id in SIMPLE_ICON_LAYERS: + layout["icon-image"] = ["coalesce", ["get", "icon_id"], ""] + layer["layout"] = layout + elif layer_id == "nav-light-arc": + layout["icon-image"] = ["coalesce", ["get", "arc_id"], ""] + layer["layout"] = layout + return style + + +def write_style(style: dict[str, Any], path: Path, deploy_path: Path) -> None: + payload = json.dumps(style, ensure_ascii=False, indent=2) + "\n" + path.write_text(payload, encoding="utf-8") + deploy_path.parent.mkdir(parents=True, exist_ok=True) + deploy_path.write_text(payload, encoding="utf-8") + + +def write_newpec_style() -> None: + style = json.loads(NEWPEC_STYLE_SOURCE.read_text(encoding="utf-8")) + style["name"] = "NavSea Newpec Kyushu Icon Test v1" + style["metadata"] = { + "navsea_test_version": "kyushu-semantic-icon-v1-20260806", + "role": "left_original_newpec_reference", + } + write_style(style, NEWPEC_STYLE_OUTPUT, NEWPEC_STYLE_DEPLOY) + + +def build_sprite(config: dict[str, Any]) -> dict[str, Any]: + if SPRITE_TARGET.exists(): + raise RuntimeError(f"refusing to overwrite existing sprite target: {SPRITE_TARGET}") + SPRITE_TARGET.mkdir(parents=True) + source_meta: dict[str, dict[str, dict[str, Any]]] = {} + for filename in ("sprite.json", "sprite@2x.json"): + source_meta[filename] = json.loads((SPRITE_SOURCE / filename).read_text(encoding="utf-8")) + + key_map = dict(config["sprite_key_map"]) + key_map.update(STYLE_EXTRA_MAP) + fallback_sources = {"lm_cus": "symbol-daytime-660"} + added: dict[str, str] = {} + removed = set(key_map) + for filename, meta in source_meta.items(): + # 测试包只保留新的短语键,避免把未使用的旧 symbol/arc 键继续带入 sprite。 + output: dict[str, dict[str, Any]] = {} + for old_key, new_key in key_map.items(): + source_key = old_key if old_key in meta else None + if source_key is None: + for candidate, candidate_new in key_map.items(): + if candidate_new == new_key and candidate in meta: + source_key = candidate + break + if source_key is None: + source_key = fallback_sources.get(new_key) + if source_key and source_key in meta: + output[new_key] = dict(meta[source_key]) + added[new_key] = source_key + (SPRITE_TARGET / filename).write_text( + json.dumps(output, ensure_ascii=False, indent=2) + "\n", encoding="utf-8" + ) + + for filename in ("sprite.png", "sprite@2x.png"): + shutil.copy2(SPRITE_SOURCE / filename, SPRITE_TARGET / filename) + return {"added": added, "fallbacks": {"lm_cus": fallback_sources["lm_cus"]}} + + +def main() -> None: + config = load_config() + tiles = collect_tiles() + if TARGET_ROOT.exists(): + raise RuntimeError(f"refusing to overwrite existing PBF target: {TARGET_ROOT}") + TARGET_ROOT.mkdir(parents=True) + + totals: Counter[str] = Counter() + old_values: Counter[str] = Counter() + unknown_old_values: Counter[str] = Counter() + icon_counts: Counter[str] = Counter() + arc_counts: Counter[str] = Counter() + rewritten = 0 + candidate_needles = [ + key.encode("utf-8") for key in config["sprite_key_map"] + ] + [ + b"navigation_marks", + b"navigation_hazard_point", + b"anchor_caution_hazard_point", + b"anchorage_point", + b"facility_boundary_point", + b"onshore_structure_point", + ] + rewrite_jobs: list[tuple[str, str, dict[str, Any], bool]] = [] + candidate_count = 0 + for z, x, y, rel in tiles: + source = SOURCE_ROOT / rel + target = TARGET_ROOT / rel + raw = source.read_bytes() + if not any(needle in raw for needle in candidate_needles): + copy_link(source, target) + continue + rewrite_jobs.append( + (str(source), str(target), config, candidate_count < 3) + ) + candidate_count += 1 + + worker_count = min(os.cpu_count() or 4, 12) + with ProcessPoolExecutor(max_workers=worker_count) as executor: + for result in executor.map(rewrite_tile_job, rewrite_jobs, chunksize=8): + if result["changed_features"]: + rewritten += 1 + totals["features_changed"] += result["changed_features"] + old_values.update(result["old_values"]) + unknown_old_values.update(result["unknown_old_values"]) + icon_counts.update(result["icon_counts"]) + arc_counts.update(result["arc_counts"]) + + sprite = build_sprite(config) + style = transform_style(config) + write_style(style, STYLE_OUTPUT, STYLE_DEPLOY) + write_newpec_style() + + REPORT_DIR.mkdir(parents=True, exist_ok=True) + summary = { + "version": "kyushu-semantic-icon-v1-20260806", + "source_root": str(SOURCE_ROOT), + "target_root": str(TARGET_ROOT), + "bbox": KYUSHU_BBOX, + "zooms": list(ZOOMS), + "tiles": len(tiles), + "tiles_rewritten": rewritten, + "candidate_tiles": candidate_count, + **totals, + "old_values": dict(old_values), + "unknown_old_values_after_rewrite": dict(unknown_old_values), + "icon_counts": dict(icon_counts), + "arc_counts": dict(arc_counts), + "sprite": sprite, + "style": str(STYLE_OUTPUT), + "newpec_style": str(NEWPEC_STYLE_OUTPUT), + } + (REPORT_DIR / "kyushu_semantic_icon_v1.json").write_text( + json.dumps(summary, ensure_ascii=False, indent=2) + "\n", encoding="utf-8" + ) + lines = [ + "# 九州语义图标替换测试版 v1", + "", + f"- PBF 来源:`{SOURCE_ROOT}`", + f"- PBF 输出:`{TARGET_ROOT}`", + f"- 范围:`{KYUSHU_BBOX}`", + f"- zoom:`{ZOOMS[0]}-{ZOOMS[-1]}`", + f"- 瓦片数:`{len(tiles)}`", + f"- 重写瓦片:`{rewritten}`", + f"- 改动 feature:`{totals['features_changed']}`", + f"- sprite:`{SPRITE_TARGET}`", + f"- delivery style:`{STYLE_OUTPUT}`", + f"- newpec style:`{NEWPEC_STYLE_OUTPUT}`", + "", + "## 旧图标值", + "", + "```json", + json.dumps(dict(old_values), ensure_ascii=False, indent=2), + "```", + "", + "## 审计关注", + "", + "- `unknown_old_values_after_rewrite` 必须为空。", + "- `lm_cus` 当前使用 `symbol-daytime-660` 的临时视觉回退,需人工确认。", + "- 几何使用原 tile extent 重编码,并执行 extent 安全检查。", + ] + (REPORT_DIR / "kyushu_semantic_icon_v1.md").write_text("\n".join(lines) + "\n", encoding="utf-8") + print(json.dumps(summary, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.json b/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.json new file mode 100644 index 0000000..75acfe4 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.json @@ -0,0 +1,378 @@ +{ + "label": "kyushu-semantic-icon-v1", + "target_root": "/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806", + "source_root": "/home/wwwroot/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles", + "tile_count": 4707, + "outside_extent_tiles": 4707, + "source_extent_mismatch_tiles": 0, + "fixable_from_source_tiles": 0, + "repaired_tiles": 0, + "zoom_summary": { + "5": { + "tile_count": 2, + "outside_extent_tiles": 2, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 2 + } + }, + "6": { + "tile_count": 4, + "outside_extent_tiles": 4, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 4 + } + }, + "7": { + "tile_count": 9, + "outside_extent_tiles": 9, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 9 + } + }, + "8": { + "tile_count": 20, + "outside_extent_tiles": 20, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 20 + } + }, + "9": { + "tile_count": 70, + "outside_extent_tiles": 70, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 70 + } + }, + "10": { + "tile_count": 234, + "outside_extent_tiles": 234, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 234 + } + }, + "11": { + "tile_count": 884, + "outside_extent_tiles": 884, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "4096": 884 + } + }, + "12": { + "tile_count": 3484, + "outside_extent_tiles": 3484, + "source_extent_mismatch_tiles": 0, + "extent_counts": { + "1048576": 3484 + } + } + }, + "sample_tiles": [ + { + "tile": "10/876/405.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/406.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/407.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/408.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/409.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/410.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/411.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/412.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/413.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/414.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/415.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/416.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/417.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/418.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/419.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/420.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/421.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/876/422.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/405.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/406.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/407.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/408.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/409.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/410.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/411.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/412.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/413.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/414.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/415.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + }, + { + "tile": "10/877/416.pbf", + "extent_values": [ + 4096 + ], + "source_extent": 4096, + "outside_extent": true, + "max_overflow": 80, + "fixable_from_source": false + } + ] +} diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.md b/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.md new file mode 100644 index 0000000..9f73a3e --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/geometry/geometry_native_audit.md @@ -0,0 +1,314 @@ +# kyushu-semantic-icon-v1 几何 / Extent / Native 风险审计 + +## 范围 + +- target root: `/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806` +- source root: `/home/wwwroot/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles` +- tiles: `4707` +- repaired tiles: `0` + +## 总体结论 + +- 坐标超当前 extent 的瓦片数:`4707` +- 与源瓦片 extent 不一致的瓦片数:`0` +- 可直接按源 extent 修复的瓦片数:`0` + +## Zoom 汇总 + +### z5 + +- tiles: `2` +- outside extent: `2` +- source mismatch: `0` +- extent counts: `{4096: 2}` + +### z6 + +- tiles: `4` +- outside extent: `4` +- source mismatch: `0` +- extent counts: `{4096: 4}` + +### z7 + +- tiles: `9` +- outside extent: `9` +- source mismatch: `0` +- extent counts: `{4096: 9}` + +### z8 + +- tiles: `20` +- outside extent: `20` +- source mismatch: `0` +- extent counts: `{4096: 20}` + +### z9 + +- tiles: `70` +- outside extent: `70` +- source mismatch: `0` +- extent counts: `{4096: 70}` + +### z10 + +- tiles: `234` +- outside extent: `234` +- source mismatch: `0` +- extent counts: `{4096: 234}` + +### z11 + +- tiles: `884` +- outside extent: `884` +- source mismatch: `0` +- extent counts: `{4096: 884}` + +### z12 + +- tiles: `3484` +- outside extent: `3484` +- source mismatch: `0` +- extent counts: `{1048576: 3484}` + +## 代表问题样本 + +### `10/876/405.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/406.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/407.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/408.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/409.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/410.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/411.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/412.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/413.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/414.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/415.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/416.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/417.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/418.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/419.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/420.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/421.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/876/422.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/405.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/406.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/407.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/408.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/409.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/410.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/411.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/412.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/413.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/414.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/415.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` + +### `10/877/416.pbf` + +- extent values: `[4096]` +- source extent: `4096` +- outside extent: `True` +- max overflow: `80` +- fixable from source: `False` diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.json b/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.json new file mode 100644 index 0000000..d00cb85 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.json @@ -0,0 +1,177 @@ +{ + "version": "kyushu-semantic-icon-v1-20260806", + "source_root": "/home/wwwroot/pbf-delivery-full-20260418-rebuild", + "target_root": "/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806", + "bbox": [ + 128.0, + 30.0, + 132.5, + 34.9 + ], + "zooms": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "tiles": 4707, + "tiles_rewritten": 1340, + "candidate_tiles": 1343, + "features_changed": 40131, + "old_values": { + "symbol-daytime-301": 2536, + "symbol-daytime-308": 33, + "symbol-daytime-428": 13416, + "symbol-daytime-30500003": 165, + "symbol-daytime-303": 4993, + "symbol-daytime-327": 626, + "symbol-daytime-310": 1833, + "symbol-daytime-30500001": 25, + "symbol-daytime-320": 959, + "symbol-daytime-321": 290, + "symbol-daytime-429": 256, + "symbol-daytime-413": 187, + "symbol-daytime-325": 38, + "symbol-daytime-323": 77, + "symbol-daytime-30700003": 24, + "symbol-daytime-30500002": 16, + "symbol-daytime-335359": 12, + "symbol-daytime-405": 5329, + "symbol-daytime-412": 50, + "symbol-daytime-719": 54, + "symbol-daytime-410": 10 + }, + "unknown_old_values_after_rewrite": {}, + "icon_counts": { + "lt_hbr": 2536, + "mk_lead_v": 33, + "hz_foul": 3598, + "hz_reef": 6659, + "lt_lead_c": 165, + "lm_mtn": 2059, + "hz_overfall": 912, + "lt_min": 4993, + "bu_lat": 626, + "lt_bcn": 1833, + "lm_chim": 1907, + "lm_twr": 2527, + "hz_seaweed": 470, + "lt_lead_a": 25, + "bu_lit": 959, + "lm_mar": 121, + "lm_fish": 846, + "lm_cus": 85, + "lm_mon": 42, + "bu_gen": 290, + "hz_wreck_survey": 432, + "hz_sandwave": 662, + "lm_ctrl": 28, + "bu_can": 38, + "hz_outfall": 174, + "hz_danger_clear": 26, + "bu_pil": 77, + "lm_prom": 8, + "hz_whirl": 27, + "mk_lead_c": 24, + "hz_reef_danger": 25, + "lt_lead_b": 16, + "mk_vais": 12, + "fac_fishport": 1164, + "hz_rock_awash": 1397, + "hz_rock_sub": 3932, + "hz_danger_iso": 212, + "fac_port": 261, + "hz_tower": 57, + "hz_wreck_sub": 50, + "fac_seastation": 48, + "hz_dolphin": 205, + "fac_fisherina": 11, + "fac_marina": 95, + "an_quar": 33, + "hz_wreck_hull": 10, + "hz_pile": 340, + "hz_obst": 60, + "an_restrict": 2, + "an_no_anchor": 4, + "an_desig": 15 + }, + "arc_counts": { + "arc_open_YW": 204, + "arc_YW": 977, + "arc_G": 610, + "arc_R": 769 + }, + "sprite": { + "added": { + "lt_cst": "coastal_lighthouse", + "lt_hbr": "harbor_lighthouse", + "lt_bkw": "breakwater_lighthouse", + "lt_min": "light_minor", + "lt_lead_a": "leading_light_variantt_30500001", + "lt_lead_b": "leading_light_variantt_30500002", + "lt_lead_c": "leading_light_variantt_30500003", + "lt_up_G": "symbol-daytime-30700001", + "lt_up_R": "symbol-daytime-30700002", + "mk_lead_c": "leading_mark_variantt_30700003", + "mk_lead_v": "leading_mark_variantt_308", + "lt_bcn": "light_beacon", + "bu_lit": "buoy_light", + "bu_gen": "buoy_generic", + "bu_pil": "buoy_pillar", + "bu_can": "buoy_can", + "bu_lat": "buoy_lattice", + "mk_vais": "nav_mark_vais", + "hz_rock_awash": "rock_exposed_drying_awash_group", + "hz_rock_sub": "sunken_rock", + "hz_danger_clear": "cleared_danger_object", + "hz_danger_iso": "isolated_danger", + "hz_wreck_hull": "wreck_hull_exposed", + "hz_wreck_sub": "wreck_fully_submerged_dangerous", + "hz_wreck_survey": "wreck_surveyed", + "hz_foul": "foul_ground", + "hz_sandwave": "sand_wave", + "hz_overfall": "tide_rips_overfalls", + "hz_whirl": "eddy_whirlpool", + "hz_seaweed": "seaweed", + "hz_obst": "obstruction", + "hz_reef": "fish_reef", + "hz_reef_danger": "fish_reef_dangerous", + "hz_tower": "tower_yagura_observation_platform", + "hz_pile": "bollard_pile_stake", + "hz_dolphin": "dolphin_structure", + "hz_outfall": "subsea_installation_outfall_intake", + "lm_chim": "symbol-daytime-640", + "lm_twr": "symbol-daytime-650", + "lm_mar": "symbol-daytime-660", + "lm_fish": "symbol-daytime-661", + "lm_cus": "symbol-daytime-660", + "lm_prom": "symbol-daytime-680", + "lm_mtn": "symbol-daytime-681", + "lm_ctrl": "symbol-daytime-682", + "lm_mon": "symbol-daytime-698", + "an_quar": "anchorage_quarantine", + "an_desig": "anchorage_designated", + "an_restrict": "restriction_area_group", + "an_no_anchor": "anchoring_prohibited", + "fac_port": "port_general_small_harbor_group", + "fac_fishport": "fishing_port", + "fac_marina": "marina", + "fac_fisherina": "fisherina", + "fac_seastation": "sea_station_umi_no_eki", + "fac_pilot": "pilot_station", + "tide_spot": "tidespot-daytime", + "fl_G": "light_flare_green", + "fl_R": "light_flare_red", + "fl_YW": "light_flare_yellow_white" + }, + "fallbacks": { + "lm_cus": "symbol-daytime-660" + } + }, + "style": "/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json", + "newpec_style": "/root/sourceserver/pbf/src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json" +} diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.md b/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.md new file mode 100644 index 0000000..f148f71 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/kyushu_semantic_icon_v1.md @@ -0,0 +1,46 @@ +# 九州语义图标替换测试版 v1 + +- PBF 来源:`/home/wwwroot/pbf-delivery-full-20260418-rebuild` +- PBF 输出:`/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806` +- 范围:`(128.0, 30.0, 132.5, 34.9)` +- zoom:`5-12` +- 瓦片数:`4707` +- 重写瓦片:`1340` +- 改动 feature:`40131` +- sprite:`/mnt/sda1/www/newpec/sprite-kyushu-semantic-icon-v1-20260806` +- delivery style:`/root/sourceserver/pbf/src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json` +- newpec style:`/root/sourceserver/pbf/src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json` + +## 旧图标值 + +```json +{ + "symbol-daytime-301": 2536, + "symbol-daytime-308": 33, + "symbol-daytime-428": 13416, + "symbol-daytime-30500003": 165, + "symbol-daytime-303": 4993, + "symbol-daytime-327": 626, + "symbol-daytime-310": 1833, + "symbol-daytime-30500001": 25, + "symbol-daytime-320": 959, + "symbol-daytime-321": 290, + "symbol-daytime-429": 256, + "symbol-daytime-413": 187, + "symbol-daytime-325": 38, + "symbol-daytime-323": 77, + "symbol-daytime-30700003": 24, + "symbol-daytime-30500002": 16, + "symbol-daytime-335359": 12, + "symbol-daytime-405": 5329, + "symbol-daytime-412": 50, + "symbol-daytime-719": 54, + "symbol-daytime-410": 10 +} +``` + +## 审计关注 + +- `unknown_old_values_after_rewrite` 必须为空。 +- `lm_cus` 当前使用 `symbol-daytime-660` 的临时视觉回退,需人工确认。 +- 几何使用原 tile extent 重编码,并执行 extent 安全检查。 diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.json b/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.json new file mode 100644 index 0000000..6202f3c --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.json @@ -0,0 +1,173 @@ +{ + "source_root": "/home/wwwroot/pbf-delivery-full-20260418-rebuild", + "target_root": "/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806", + "tiles_target": 4707, + "tiles_compared": 4707, + "tiles_with_errors": 0, + "errors": [], + "source_features": { + "baseline_area": 225324, + "baseline_outline": 401949, + "hole_area": 110994, + "land_area": 65455, + "bathymetry_line": 413730, + "depth_contour": 171277, + "navigation_marks": 11627, + "bridge_structure": 7224, + "hazard_boundary_outline": 20151, + "place_label_land": 10983, + "submerged_reef_area": 770, + "place_label_sea": 12092, + "anchor_caution_hazard_point": 12932, + "baseline_line": 14640, + "fixed_fishing_gear_area": 9044, + "onshore_structure_line": 114122, + "onshore_structure_point": 7623, + "anchor_caution_hazard_area": 1809, + "anchor_caution_hazard_outline": 1815, + "clearance_limit_line": 325, + "hazard_boundary_line": 37, + "onshore_structure_area": 3640, + "depth_contour_overview": 2154, + "depth_zone_739": 181, + "route_boundary_point": 78, + "route_area": 51, + "route_outline": 161, + "depth_zone_740": 9, + "route_axis_line": 14, + "depth_zone_700": 8, + "depth_zone_725": 4, + "seabed_line": 2106, + "seabed_text_point": 33376, + "facility_boundary_point": 1579, + "navigation_hazard_point": 6316, + "depth_zone_741": 497, + "depth_zone_748": 45, + "depth_zone_749": 43, + "clearance_limit_point": 261, + "clip_outline_754": 223, + "facility_boundary_area": 449, + "navigation_hazard_outline": 48, + "anchorage_area": 55, + "anchorage_outline": 55, + "anchorage_point": 54, + "facility_boundary_outline": 233, + "pilot_station_point": 16, + "navigation_hazard_area": 24, + "leading_line_outline": 16, + "clip_outline_730": 4, + "facility_boundary_area_transparent": 4 + }, + "target_features": { + "baseline_area": 225324, + "baseline_outline": 401949, + "hole_area": 110994, + "land_area": 65455, + "bathymetry_line": 413730, + "depth_contour": 171277, + "navigation_marks": 11627, + "bridge_structure": 7224, + "hazard_boundary_outline": 20151, + "place_label_land": 10983, + "submerged_reef_area": 770, + "place_label_sea": 12092, + "anchor_caution_hazard_point": 12932, + "baseline_line": 14640, + "fixed_fishing_gear_area": 9044, + "onshore_structure_line": 114122, + "onshore_structure_point": 7623, + "anchor_caution_hazard_area": 1809, + "anchor_caution_hazard_outline": 1815, + "clearance_limit_line": 325, + "hazard_boundary_line": 37, + "onshore_structure_area": 3640, + "depth_contour_overview": 2154, + "depth_zone_739": 181, + "route_boundary_point": 78, + "route_area": 51, + "route_outline": 161, + "depth_zone_740": 9, + "route_axis_line": 14, + "depth_zone_700": 8, + "depth_zone_725": 4, + "seabed_line": 2106, + "seabed_text_point": 33376, + "facility_boundary_point": 1579, + "navigation_hazard_point": 6316, + "depth_zone_741": 497, + "depth_zone_748": 45, + "depth_zone_749": 43, + "clearance_limit_point": 261, + "clip_outline_754": 223, + "facility_boundary_area": 449, + "navigation_hazard_outline": 48, + "anchorage_area": 55, + "anchorage_outline": 55, + "anchorage_point": 54, + "facility_boundary_outline": 233, + "pilot_station_point": 16, + "navigation_hazard_area": 24, + "leading_line_outline": 16, + "clip_outline_730": 4, + "facility_boundary_area_transparent": 4 + }, + "icon_counts": { + "icon_id:lt_hbr": 2536, + "arc_id:arc_open_YW": 204, + "arc_id:arc_YW": 977, + "arc_id:arc_G": 610, + "arc_id:arc_R": 769, + "icon_id:mk_lead_v": 33, + "icon_id:hz_foul": 3598, + "icon_id:hz_reef": 6659, + "icon_id:lt_lead_c": 165, + "icon_id:lm_mtn": 2059, + "icon_id:hz_overfall": 912, + "icon_id:lt_min": 4993, + "icon_id:bu_lat": 626, + "icon_id:lt_bcn": 1833, + "icon_id:lm_chim": 1907, + "icon_id:lm_twr": 2527, + "icon_id:hz_seaweed": 470, + "icon_id:lt_lead_a": 25, + "icon_id:bu_lit": 959, + "icon_id:lm_mar": 121, + "icon_id:lm_fish": 846, + "icon_id:lm_cus": 85, + "icon_id:lm_mon": 42, + "icon_id:bu_gen": 290, + "icon_id:hz_wreck_survey": 432, + "icon_id:hz_sandwave": 662, + "icon_id:lm_ctrl": 28, + "icon_id:bu_can": 38, + "icon_id:hz_outfall": 174, + "icon_id:hz_danger_clear": 26, + "icon_id:bu_pil": 77, + "icon_id:lm_prom": 8, + "icon_id:hz_whirl": 27, + "icon_id:mk_lead_c": 24, + "icon_id:hz_reef_danger": 25, + "icon_id:lt_lead_b": 16, + "icon_id:mk_vais": 12, + "icon_id:fac_fishport": 1164, + "icon_id:hz_rock_awash": 1397, + "icon_id:hz_rock_sub": 3932, + "icon_id:hz_danger_iso": 212, + "icon_id:fac_port": 261, + "icon_id:hz_tower": 57, + "icon_id:hz_wreck_sub": 50, + "icon_id:fac_seastation": 48, + "icon_id:hz_dolphin": 205, + "icon_id:fac_fisherina": 11, + "icon_id:fac_marina": 95, + "icon_id:an_quar": 33, + "icon_id:hz_wreck_hull": 10, + "icon_id:hz_pile": 340, + "icon_id:hz_obst": 60, + "icon_id:an_restrict": 2, + "icon_id:an_no_anchor": 4, + "icon_id:an_desig": 15 + }, + "old_prefix_counts": {}, + "verdict": "PASS" +} diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.md b/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.md new file mode 100644 index 0000000..1d19698 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/object_geometry_icon_audit.md @@ -0,0 +1,10 @@ +# 九州语义图标测试版对象 / 几何 / 图标审计 + +- 来源:`/home/wwwroot/pbf-delivery-full-20260418-rebuild` +- 目标:`/home/wwwroot/pbf-delivery-kyushu-semantic-icon-v1-20260806` +- 目标瓦片:`4707`,实际比较:`4707` +- 有错误瓦片:`0` +- 旧图标前缀残留:`0` +- 结论:`PASS` + +本审计忽略预期的 `chart_icon_image`、`icon_id`、`arc_id` 字段变化,逐图层比较对象数量、ID、几何和其余属性。 diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.json b/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.json new file mode 100644 index 0000000..e7a7e85 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.json @@ -0,0 +1,64 @@ +{ + "used_keys": [ + "an_desig", + "an_no_anchor", + "an_quar", + "an_restrict", + "arc_G", + "arc_R", + "arc_YW", + "arc_open_YW", + "bu_can", + "bu_gen", + "bu_lat", + "bu_lit", + "bu_pil", + "fac_fisherina", + "fac_fishport", + "fac_marina", + "fac_port", + "fac_seastation", + "hz_danger_clear", + "hz_danger_iso", + "hz_dolphin", + "hz_foul", + "hz_obst", + "hz_outfall", + "hz_overfall", + "hz_pile", + "hz_reef", + "hz_reef_danger", + "hz_rock_awash", + "hz_rock_sub", + "hz_sandwave", + "hz_seaweed", + "hz_tower", + "hz_whirl", + "hz_wreck_hull", + "hz_wreck_sub", + "hz_wreck_survey", + "lm_chim", + "lm_ctrl", + "lm_cus", + "lm_fish", + "lm_mar", + "lm_mon", + "lm_mtn", + "lm_prom", + "lm_twr", + "lt_bcn", + "lt_hbr", + "lt_lead_a", + "lt_lead_b", + "lt_lead_c", + "lt_min", + "mk_lead_c", + "mk_lead_v", + "mk_vais" + ], + "used_key_count": 55, + "sprite_key_count": 64, + "missing_keys": [], + "legacy_sprite_keys": [], + "verdict": "PASS" +} diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.md b/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.md new file mode 100644 index 0000000..a9b32c5 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/sprite_icon_closure.md @@ -0,0 +1,7 @@ +# 九州测试版 Sprite 图标闭合审计 + +- 使用中的 icon_id/arc_id:`55` +- sprite 键数:`64` +- 缺失键:`0` +- 旧前缀键:`0` +- 结论:`PASS` diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.json b/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.json new file mode 100644 index 0000000..1c58201 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.json @@ -0,0 +1,141 @@ +{ + "compare_url": "http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html", + "cases": [ + { + "id": "karatsu_kyushu_icon_v1_semantic_z12", + "label": "唐津九州语义图标测试", + "variant": "semantic", + "zoom": 12, + "center": [ + 129.9697, + 33.4425 + ], + "radius_nm": 5, + "compare_url": "http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=129.9697%2C33.4425&zoom=12", + "changed_pixels": 287577, + "total_pixels": 364800, + "changed_ratio": 0.788314, + "mean_abs_rgb": [ + 39.3424, + 42.4767, + 74.167 + ], + "rms_rgb": [ + 61.2913, + 62.6326, + 97.1048 + ], + "diff_bbox": [ + 0, + 0, + 640, + 513 + ], + "left_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_left.png", + "right_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_right.png", + "diff_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_diff.png" + }, + { + "id": "karatsu_kyushu_icon_v1_semantic_z10", + "label": "唐津九州语义图标测试", + "variant": "semantic", + "zoom": 10, + "center": [ + 129.9697, + 33.4425 + ], + "radius_nm": 5, + "compare_url": "http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=129.9697%2C33.4425&zoom=10", + "changed_pixels": 274296, + "total_pixels": 364800, + "changed_ratio": 0.751908, + "mean_abs_rgb": [ + 33.6012, + 36.7804, + 64.1346 + ], + "rms_rgb": [ + 56.4791, + 56.9124, + 89.4452 + ], + "diff_bbox": [ + 0, + 0, + 640, + 513 + ], + "left_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_left.png", + "right_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_right.png", + "diff_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_diff.png" + }, + { + "id": "hakata_kyushu_icon_v1_semantic_z12", + "label": "博多港九州语义图标测试", + "variant": "semantic", + "zoom": 12, + "center": [ + 130.335, + 33.6385 + ], + "radius_nm": 10, + "compare_url": "http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=130.335%2C33.6385&zoom=12", + "changed_pixels": 237978, + "total_pixels": 364800, + "changed_ratio": 0.652352, + "mean_abs_rgb": [ + 30.9085, + 30.6867, + 39.4968 + ], + "rms_rgb": [ + 55.1912, + 58.1514, + 67.7886 + ], + "diff_bbox": [ + 0, + 0, + 640, + 513 + ], + "left_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_left.png", + "right_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_right.png", + "diff_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_diff.png" + }, + { + "id": "hakata_kyushu_icon_v1_semantic_z10", + "label": "博多港九州语义图标测试", + "variant": "semantic", + "zoom": 10, + "center": [ + 130.335, + 33.6385 + ], + "radius_nm": 10, + "compare_url": "http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=130.335%2C33.6385&zoom=10", + "changed_pixels": 236727, + "total_pixels": 364800, + "changed_ratio": 0.648923, + "mean_abs_rgb": [ + 31.9821, + 32.9781, + 55.3087 + ], + "rms_rgb": [ + 57.9478, + 56.188, + 83.9112 + ], + "diff_bbox": [ + 0, + 0, + 640, + 513 + ], + "left_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_left.png", + "right_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_right.png", + "diff_image": "report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_diff.png" + } + ] +} diff --git a/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.md b/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.md new file mode 100644 index 0000000..a94a453 --- /dev/null +++ b/report/kyushu_semantic_icon_v1_2026-08-06/visual/full_aoi_visual_audit.md @@ -0,0 +1,48 @@ +# 全国 AOI 截图对比审计 + +## 总览 + +- compare page: `http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html` +- cases: `4` + +## 差异排序 + +### 唐津九州语义图标测试 · semantic · z12 + +- changed ratio: `0.788314` +- changed pixels: `287577` / `364800` +- mean abs rgb: `[39.3424, 42.4767, 74.167]` +- compare url: `http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=129.9697%2C33.4425&zoom=12` +- left image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_left.png` +- right image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_right.png` +- diff image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z12/compare_diff.png` + +### 唐津九州语义图标测试 · semantic · z10 + +- changed ratio: `0.751908` +- changed pixels: `274296` / `364800` +- mean abs rgb: `[33.6012, 36.7804, 64.1346]` +- compare url: `http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=129.9697%2C33.4425&zoom=10` +- left image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_left.png` +- right image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_right.png` +- diff image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/karatsu_kyushu_icon_v1_semantic_z10/compare_diff.png` + +### 博多港九州语义图标测试 · semantic · z12 + +- changed ratio: `0.652352` +- changed pixels: `237978` / `364800` +- mean abs rgb: `[30.9085, 30.6867, 39.4968]` +- compare url: `http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=130.335%2C33.6385&zoom=12` +- left image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_left.png` +- right image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_right.png` +- diff image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z12/compare_diff.png` + +### 博多港九州语义图标测试 · semantic · z10 + +- changed ratio: `0.648923` +- changed pixels: `236727` / `364800` +- mean abs rgb: `[31.9821, 32.9781, 55.3087]` +- compare url: `http://192.168.200.184/newpec/navsea-compare-kyushu-semantic-icon-v1.html?variant=semantic&audit=1¢er=130.335%2C33.6385&zoom=10` +- left image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_left.png` +- right image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_right.png` +- diff image: `report/kyushu_semantic_icon_v1_2026-08-06/visual/hakata_kyushu_icon_v1_semantic_z10/compare_diff.png` diff --git a/src/pbf/navsea-compare-kyushu-semantic-icon-v1.html b/src/pbf/navsea-compare-kyushu-semantic-icon-v1.html new file mode 100644 index 0000000..b4ba823 --- /dev/null +++ b/src/pbf/navsea-compare-kyushu-semantic-icon-v1.html @@ -0,0 +1,101 @@ + + + + + + NavSea 九州语义图标替换测试 v1 + + + + +
+
+
NavSea 九州语义图标替换测试 v1
+
左侧:原始 newpec;右侧:当前 Full 基线生成的九州语义图标测试版。两侧同步平移、缩放,可点击对象查看属性。
+
+
+ HTML: kyushu-semantic-icon-v1-20260806 + Style: 加载中 + + +
+
+
+
左侧 · 原始 newpec原始瓦片 + 原始 sprite
+
右侧 · 语义图标测试版Kyushu semantic icon v1
+
+ +
等待加载样式…
+ + + + diff --git a/src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json b/src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json new file mode 100644 index 0000000..cd3487c --- /dev/null +++ b/src/pbf/style.navsea-delivery-kyushu-semantic-icon-v1.json @@ -0,0 +1,2680 @@ +{ + "version": 8, + "name": "NavSea Kyushu Semantic Icon Test v1", + "sprite": "http://192.168.200.184/newpec/sprite-kyushu-semantic-icon-v1-20260806/sprite", + "glyphs": "http://192.168.200.184/newpec/fonts/{fontstack}/{range}.pbf", + "sources": { + "mapple": { + "type": "raster", + "minzoom": 0, + "maxzoom": 19, + "tileSize": 256, + "tiles": [ + "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png" + ], + "attribution": "© 昭文社" + }, + "tide": { + "type": "vector", + "minzoom": 8, + "maxzoom": 8, + "tiles": [ + "https://tile.mapple-on.jp/tide-mvt/{z}/{x}/{y}.pbf?ver=20251001" + ], + "attribution": "© 日本水路協会" + }, + "navsea_delivery": { + "type": "vector", + "minzoom": 0, + "maxzoom": 12, + "tiles": [ + "http://192.168.200.184/pbf-delivery-kyushu-semantic-icon-v1-20260806/{z}/{x}/{y}.pbf" + ], + "attribution": "NavSea semantic vector tiles" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "rgba(255,255,255,1)" + } + }, + { + "id": "base-raster", + "type": "raster", + "source": "mapple", + "paint": { + "raster-opacity": 1, + "raster-saturation": 0, + "raster-contrast": 0.05 + } + }, + { + "id": "tide-spots", + "type": "symbol", + "source": "tide", + "source-layer": "tide", + "layout": { + "icon-allow-overlap": true, + "icon-image": "tide_spot" + } + }, + { + "id": "sea-area-fill", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "match", + [ + "get", + "chart_fill_style" + ], + [ + "depth_zone_0-2m", + "depth_zone_0-5m", + "depth_zone_0-10m", + "depth_zone_0-20m", + "depth_zone_2-5m", + "depth_zone_2-10m", + "depth_zone_2-20m", + "depth_zone_5-10m", + "depth_zone_5-20m", + "depth_zone_10-20m", + "depth_zone_20-100m", + "depth_zone_20-200m", + "depth_zone_100-200m", + "depth_zone_200-500m", + "depth_zone_500-1000m", + "depth_zone_1000-2000m", + "depth_zone_2000-3000m", + "depth_zone_3000-4000m", + "depth_zone_4000-5000m", + "depth_zone_5000-6000m", + "depth_zone_6000-7000m", + "depth_zone_7000-8000m", + "depth_zone_8000-9000m", + "depth_zone_over_9000m", + "water_area" + ], + true, + false + ], + [ + "match", + [ + "get", + "canonical_object_type" + ], + [ + "0-2m", + "0-5m", + "0-10m", + "0-20m", + "2-5m", + "2-10m", + "2-20m", + "5-10m", + "5-20m", + "10-20m", + "20-100m", + "20-200m", + "100-200m", + "200-500m", + "500-1000m", + "1000-2000m", + "2000-3000m", + "3000-4000m", + "4000-5000m", + "5000-6000m", + "6000-7000m", + "7000-8000m", + "8000-9000m", + "over_9000m" + ], + true, + false + ] + ], + "paint": { + "fill-color": [ + "match", + [ + "get", + "canonical_object_type" + ], + "0-2m", + "rgba(240,250,255,1)", + "0-5m", + "rgba(240,250,255,1)", + "0-10m", + "rgba(230,250,255,1)", + "0-20m", + "rgba(220,250,251,1)", + "2-5m", + "rgba(240,250,255,1)", + "2-10m", + "rgba(230,250,255,1)", + "2-20m", + "rgba(220,250,255,1)", + "5-10m", + "rgba(230,250,255,1)", + "5-20m", + "rgba(220,250,255,1)", + "10-20m", + "rgba(220,250,255,1)", + "20-100m", + "rgba(200,240,255,1)", + "20-200m", + "rgba(200,230,255,1)", + "100-200m", + "rgba(200,230,255,1)", + "200-500m", + "rgba(180,220,255,1)", + "500-1000m", + "rgba(171,192,255,1)", + "1000-2000m", + "rgba(163,181,255,1)", + "2000-3000m", + "rgba(132,169,255,1)", + "3000-4000m", + "rgba(89,155,255,1)", + "4000-5000m", + "rgba(90,140,255,1)", + "5000-6000m", + "rgba(100,132,255,1)", + "6000-7000m", + "rgba(128,128,255,1)", + "7000-8000m", + "rgba(139,118,255,1)", + "8000-9000m", + "rgba(150,100,255,1)", + "over_9000m", + "rgba(160,100,255,1)", + "river_area", + "rgba(129,195,226,1)", + "lake_area", + "rgba(129,195,226,1)", + "inland_water_area", + "rgba(129,195,226,1)", + "tidal_flat", + "rgba(143,191,147,1)", + [ + "match", + [ + "get", + "chart_fill_style" + ], + "depth_zone_0-2m", + "rgba(240,250,255,1)", + "depth_zone_0-5m", + "rgba(240,250,255,1)", + "depth_zone_0-10m", + "rgba(230,250,255,1)", + "depth_zone_0-20m", + "rgba(220,250,251,1)", + "depth_zone_2-5m", + "rgba(240,250,255,1)", + "depth_zone_2-10m", + "rgba(230,250,255,1)", + "depth_zone_2-20m", + "rgba(220,250,255,1)", + "depth_zone_5-10m", + "rgba(230,250,255,1)", + "depth_zone_5-20m", + "rgba(220,250,255,1)", + "depth_zone_10-20m", + "rgba(220,250,255,1)", + "depth_zone_20-100m", + "rgba(200,240,255,1)", + "depth_zone_20-200m", + "rgba(200,230,255,1)", + "depth_zone_100-200m", + "rgba(200,230,255,1)", + "depth_zone_200-500m", + "rgba(180,220,255,1)", + "depth_zone_500-1000m", + "rgba(171,192,255,1)", + "depth_zone_1000-2000m", + "rgba(163,181,255,1)", + "depth_zone_2000-3000m", + "rgba(132,169,255,1)", + "depth_zone_3000-4000m", + "rgba(89,155,255,1)", + "depth_zone_4000-5000m", + "rgba(90,140,255,1)", + "depth_zone_5000-6000m", + "rgba(100,132,255,1)", + "depth_zone_6000-7000m", + "rgba(128,128,255,1)", + "depth_zone_7000-8000m", + "rgba(139,118,255,1)", + "depth_zone_8000-9000m", + "rgba(150,100,255,1)", + "depth_zone_over_9000m", + "rgba(160,100,255,1)", + "water_area", + "rgba(129,195,226,1)", + "rgba(160,100,255,1)" + ] + ] + } + }, + { + "id": "tidal-flat", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "==", + [ + "get", + "chart_fill_style" + ], + "tidal_flat" + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "tidal_flat" + ] + ], + "paint": { + "fill-color": "rgba(143,191,147,1)" + } + }, + { + "id": "river-water", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "==", + [ + "get", + "chart_fill_style" + ], + "river_water" + ], + [ + "match", + [ + "get", + "canonical_object_type" + ], + [ + "river_area", + "lake_area", + "inland_water_area" + ], + true, + false + ] + ], + "paint": { + "fill-color": "rgba(129,195,226,1)" + } + }, + { + "id": "unsurveyed-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "==", + [ + "get", + "chart_fill_style" + ], + "unsurveyed_area" + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "unsurveyed_area" + ] + ], + "paint": { + "fill-color": "#efe3a8", + "fill-opacity": 0.55 + } + }, + { + "id": "shoal-danger-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "==", + [ + "get", + "chart_fill_style" + ], + "shoal_danger_area" + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "shoal_danger_area" + ] + ], + "paint": { + "fill-color": "#f0a85d", + "fill-opacity": 0.45 + } + }, + { + "id": "coast-structures-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "baseline_area", + "filter": [ + "any", + [ + "==", + [ + "get", + "chart_fill_style" + ], + "coast_structure_area" + ], + [ + "match", + [ + "get", + "canonical_object_type" + ], + [ + "breakwater", + "floating_facility_pier", + "removed_structure_remains" + ], + true, + false + ] + ], + "paint": { + "fill-color": "#8e887d", + "fill-opacity": 0.85 + } + }, + { + "id": "hazard-polygons", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "anchor_caution_hazard_area", + "paint": { + "fill-pattern": [ + "coalesce", + [ + "get", + "chart_fill_pattern" + ], + "" + ] + } + }, + { + "id": "navigation-hazard-polygons", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "navigation_hazard_area", + "paint": { + "fill-pattern": [ + "coalesce", + [ + "get", + "chart_fill_pattern" + ], + "" + ] + } + }, + { + "id": "fishery-areas", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "fixed_fishing_gear_area", + "paint": { + "fill-pattern": [ + "match", + [ + "get", + "chart_fill_style" + ], + "fishery_area", + "pattern_fill_fishery_or_fish_reef_area", + "fish_reef_area", + "pattern_fill_fishery_or_fish_reef_area", + "pattern_fill_fishery_or_fish_reef_area" + ] + } + }, + { + "id": "fishery-areas-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "fixed_fishing_gear_area", + "paint": { + "line-color": "rgba(198,77,187,1)", + "line-width": 1 + } + }, + { + "id": "anchorage-areas", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "anchorage_area", + "paint": { + "fill-color": "rgba(0,0,0,0)" + } + }, + { + "id": "facility-zones", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "facility_boundary_area", + "paint": { + "fill-pattern": [ + "coalesce", + [ + "get", + "chart_fill_pattern" + ], + "" + ] + } + }, + { + "id": "submerged-structures", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "submerged_reef_area", + "paint": { + "fill-color": "#7d7f95", + "fill-opacity": 0.45, + "fill-outline-color": "#55586f" + } + }, + { + "id": "bridge-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "bridge_structure", + "paint": { + "fill-color": "rgba(0,0,0,0)" + } + }, + { + "id": "bridge-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "bridge_structure", + "paint": { + "line-color": "rgba(95,106,95,1)", + "line-width": 2 + } + }, + { + "id": "land-structures-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "onshore_structure_area", + "paint": { + "fill-color": "#8a6d3b", + "fill-opacity": 0.8 + } + }, + { + "id": "land-area", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "land_area", + "paint": { + "fill-color": "rgba(210,200,128,1)" + } + }, + { + "id": "land-hole", + "type": "fill", + "source": "navsea_delivery", + "source-layer": "hole_area", + "paint": { + "fill-color": "rgba(0,0,0,0)" + } + }, + { + "id": "bathymetry-support", + "type": "line", + "source": "navsea_delivery", + "source-layer": "bathymetry_line", + "paint": { + "line-width": [ + "match", + [ + "get", + "depth_value_m" + ], + 10, + 1, + 20, + 1, + 40, + 1, + 60, + 1, + 80, + 1, + 100, + 1, + 150, + 1, + 200, + 1, + 300, + 1, + 400, + 1, + 500, + 1, + 600, + 1, + 700, + 1, + 800, + 1, + 900, + 1, + 1000, + 1, + 1500, + 1, + 2000, + 1, + 2500, + 1, + 3000, + 1, + 3500, + 1, + 4000, + 1, + 4500, + 1, + 5000, + 1, + 5500, + 1, + 6000, + 1, + 8000, + 1, + 10000, + 1, + 0.5 + ], + "line-color": [ + "step", + [ + "get", + "depth_value_m" + ], + "rgba(126,230,146,1)", + 10, + "rgba(106,210,126,1)", + 11, + "rgba(126,230,146,1)", + 20, + "rgba(106,210,126,1)", + 21, + "rgba(126,230,146,1)", + 30, + "rgba(144,220,255,1)", + 40, + "rgba(113,193,235,1)", + 41, + "rgba(133,213,255,1)", + 45, + "rgba(122,206,255,1)", + 50, + "rgba(111,199,255,1)", + 55, + "rgba(100,192,255,1)", + 60, + "rgba(69,164,235,1)", + 61, + "rgba(89,184,255,1)", + 65, + "rgba(78,177,255,1)", + 70, + "rgba(67,170,255,1)", + 75, + "rgba(56,163,255,1)", + 80, + "rgba(24,136,235,1)", + 81, + "rgba(44,156,255,1)", + 85, + "rgba(22,142,255,1)", + 90, + "rgba(33,149,255,1)", + 95, + "rgba(11,135,255,1)", + 100, + "rgba(0,108,235,1)", + 101, + "rgba(0,128,255,1)", + 110, + "rgba(0,115,255,1)", + 120, + "rgba(0,102,255,1)", + 130, + "rgba(0,90,255,1)", + 140, + "rgba(0,77,255,1)", + 150, + "rgba(0,44,235,1)", + 151, + "rgba(0,64,255,1)", + 160, + "rgba(0,51,255,1)", + 170, + "rgba(0,38,255,1)", + 180, + "rgba(0,26,255,1)", + 190, + "rgba(0,13,255,1)", + 200, + "rgba(0,0,235,1)", + 201, + "rgba(0,0,255,1)", + 300, + "rgba(0,0,219,1)", + 301, + "rgba(0,0,239,1)", + 400, + "rgba(0,0,203,1)", + 401, + "rgba(0,0,223,1)", + 500, + "rgba(0,0,187,1)", + 501, + "rgba(0,0,207,1)", + 600, + "rgba(0,0,172,1)", + 601, + "rgba(0,0,192,1)", + 700, + "rgba(0,0,156,1)", + 701, + "rgba(0,0,176,1)", + 800, + "rgba(0,0,140,1)", + 801, + "rgba(0,0,160,1)", + 900, + "rgba(0,0,124,1)", + 901, + "rgba(0,0,144,1)", + 1000, + "rgba(0,0,108,1)", + 1001, + "rgba(0,0,128,1)", + 1100, + "rgba(0,6,122,1)", + 1200, + "rgba(0,13,115,1)", + 1300, + "rgba(0,19,109,1)", + 1400, + "rgba(0,26,102,1)", + 1500, + "rgba(20,50,116,1)", + 1501, + "rgba(0,32,96,1)", + 1600, + "rgba(0,39,90,1)", + 1700, + "rgba(0,45,83,1)", + 1800, + "rgba(0,51,77,1)", + 1900, + "rgba(0,58,70,1)", + 2000, + "rgba(0,51,77,1)", + 2001, + "rgba(0,51,77,1)", + 2100, + "rgba(0,56,72,1)", + 2200, + "rgba(0,61,67,1)", + 2300, + "rgba(0,67,61,1)", + 2400, + "rgba(0,72,56,1)", + 2500, + "rgba(10,87,61,1)", + 2501, + "rgba(0,77,51,1)", + 2600, + "rgba(0,82,46,1)", + 2700, + "rgba(0,87,41,1)", + 2800, + "rgba(0,92,36,1)", + 2900, + "rgba(0,97,31,1)", + 3000, + "rgba(10,112,36,1)", + 3001, + "rgba(0,102,26,1)", + 3100, + "rgba(0,108,20,1)", + 3200, + "rgba(0,113,15,1)", + 3300, + "rgba(0,112,10,1)", + 3400, + "rgba(0,123,5,1)", + 3500, + "rgba(10,138,10,1)", + 3501, + "rgba(0,128,0,1)", + 3600, + "rgba(2,124,2,1)", + 3700, + "rgba(3,121,3,1)", + 3800, + "rgba(5,117,5,1)", + 3900, + "rgba(6,114,6,1)", + 4000, + "rgba(18,120,18,1)", + 4001, + "rgba(18,110,18,1)", + 4100, + "rgba(10,107,10,1)", + 4200, + "rgba(11,103,11,1)", + 4300, + "rgba(13,100,13,1)", + 4400, + "rgba(14,96,14,1)", + 4500, + "rgba(26,103,26,1)", + 4501, + "rgba(16,93,16,1)", + 4600, + "rgba(18,89,18,1)", + 4700, + "rgba(19,26,19,1)", + 4800, + "rgba(21,82,21,1)", + 4900, + "rgba(22,79,22,1)", + 5000, + "rgba(34,85,34,1)", + 5001, + "rgba(24,75,24,1)", + 5100, + "rgba(26,72,26,1)", + 5200, + "rgba(27,68,27,1)", + 5300, + "rgba(29,65,29,1)", + 5400, + "rgba(30,61,30,1)", + 5500, + "rgba(42,68,42,1)", + 5501, + "rgba(32,58,32,1)", + 5600, + "rgba(34,54,34,1)", + 5700, + "rgba(35,51,35,1)", + 5800, + "rgba(37,47,37,1)", + 5900, + "rgba(38,44,38,1)", + 6000, + "rgba(50,50,50,1)", + 6001, + "rgba(40,40,40,1)", + 6500, + "rgba(58,30,58,1)", + 7000, + "rgba(75,20,75,1)", + 7500, + "rgba(93,10,93,1)", + 8000, + "rgba(120,10,120,1)", + 8001, + "rgba(110,0,110,1)", + 8500, + "rgba(117,0,117,1)", + 9000, + "rgba(123,0,123,1)", + 9500, + "rgba(130,0,130,1)", + 10000, + "rgba(147,0,147,1)", + 10001, + "rgba(137,0,137,1)", + 10500, + "rgba(143,0,143,1)" + ] + } + }, + { + "id": "depth-contours", + "type": "line", + "source": "navsea_delivery", + "source-layer": "depth_contour", + "paint": { + "line-color": "rgba(136,152,139,1)", + "line-width": 1 + } + }, + { + "id": "depth-contour-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "depth_contour", + "minzoom": 11, + "layout": { + "symbol-placement": "line", + "symbol-spacing": 200, + "text-allow-overlap": true, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-rotation-alignment": "viewport" + }, + "filter": [ + "all", + [ + "==", + [ + "get", + "chart_text_style" + ], + "depth_text" + ], + [ + "has", + "chart_label_text" + ] + ], + "paint": { + "text-color": "rgba(7,7,7,1)" + } + }, + { + "id": "bathymetry-depth-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "bathymetry_line", + "minzoom": 11, + "filter": [ + "all", + [ + "==", + [ + "get", + "chart_text_style" + ], + "depth_text" + ], + [ + "has", + "chart_label_text" + ] + ], + "layout": { + "text-allow-overlap": true, + "symbol-placement": "line", + "symbol-spacing": 200, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-rotation-alignment": "viewport" + }, + "paint": { + "text-color": "rgba(7,7,7,1)" + } + }, + { + "id": "subsea-cables", + "type": "line", + "source": "navsea_delivery", + "source-layer": "seabed_line", + "paint": { + "line-color": "#814d99", + "line-width": 1.3, + "line-dasharray": [ + 3, + 1.2 + ] + } + }, + { + "id": "coast-structures-line", + "type": "line", + "source": "navsea_delivery", + "source-layer": "baseline_line", + "paint": { + "line-color": "#5f5a50", + "line-width": 1.4 + } + }, + { + "id": "land-structures-line", + "type": "line", + "source": "navsea_delivery", + "source-layer": "onshore_structure_line", + "paint": { + "line-color": "rgba(147,116,39,1)", + "line-width": 2 + } + }, + { + "id": "water-boundary", + "type": "line", + "source": "navsea_delivery", + "source-layer": "depth_zone_739", + "paint": { + "line-color": "#4f8ca7", + "line-width": 1.1 + } + }, + { + "id": "regulatory-boundary", + "type": "line", + "source": "navsea_delivery", + "source-layer": "depth_zone_741", + "paint": { + "line-color": "#cb5c46", + "line-width": 1.2, + "line-dasharray": [ + 2, + 2 + ] + } + }, + { + "id": "height-limit-line", + "type": "line", + "source": "navsea_delivery", + "source-layer": "clearance_limit_line", + "paint": { + "line-color": "#ad3b6a", + "line-width": 1.1 + } + }, + { + "id": "clip-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "baseline_outline", + "paint": { + "line-color": "rgba(95,106,95,1)", + "line-width": 2 + } + }, + { + "id": "danger-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "hazard_boundary_outline", + "paint": { + "line-color": "rgba(95,106,95,1)", + "line-width": 3, + "line-dasharray": [ + 3, + 2 + ] + } + }, + { + "id": "navigation-hazard-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "navigation_hazard_outline", + "paint": { + "line-width": [ + "coalesce", + [ + "get", + "chart_line_width" + ], + 1 + ], + "line-color": [ + "coalesce", + [ + "get", + "chart_line_color" + ], + "rgba(136,152,139,1)" + ] + } + }, + { + "id": "anchor-danger-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "anchor_caution_hazard_outline", + "paint": { + "line-width": [ + "coalesce", + [ + "get", + "chart_line_width" + ], + 1 + ], + "line-color": [ + "coalesce", + [ + "get", + "chart_line_color" + ], + "rgba(136,152,139,1)" + ] + } + }, + { + "id": "anchorage-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "anchorage_outline", + "paint": { + "line-color": [ + "coalesce", + [ + "get", + "chart_line_color" + ], + "rgba(136,152,139,1)" + ], + "line-width": [ + "coalesce", + [ + "get", + "chart_line_width" + ], + 2 + ], + "line-dasharray": [ + 2, + 1 + ] + } + }, + { + "id": "facility-zone-outline", + "type": "line", + "source": "navsea_delivery", + "source-layer": "facility_boundary_outline", + "paint": { + "line-color": [ + "coalesce", + [ + "get", + "chart_line_color" + ], + "rgba(136,152,139,1)" + ], + "line-width": [ + "coalesce", + [ + "get", + "chart_line_width" + ], + 1 + ] + } + }, + { + "id": "special-pattern-line-754", + "type": "line", + "source": "navsea_delivery", + "source-layer": "clip_outline_754", + "paint": { + "line-pattern": "special_pattern_line_754", + "line-width": 8 + } + }, + { + "id": "hazard-points", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_hazard_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + } + }, + { + "id": "anchorage-symbols", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "anchorage_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + } + }, + { + "id": "anchor-hazard-points", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "anchor_caution_hazard_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + }, + "filter": [ + "all", + [ + "!", + [ + "has", + "class_code" + ] + ], + [ + "!=", + [ + "get", + "chart_symbol_code" + ], + "hz_obst" + ], + [ + "!=", + [ + "get", + "chart_symbol_code" + ], + "hazard_mark" + ], + [ + "!=", + [ + "get", + "chart_symbol_code" + ], + "hz_reef" + ] + ] + }, + { + "id": "anchor-hazard-points-428", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "anchor_caution_hazard_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + } + }, + { + "id": "nav-light-flare", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-size": 1.0, + "icon-image": [ + "match", + [ + "get", + "light_color_code" + ], + "green", + "fl_G", + "red", + "fl_R", + "yellow", + "fl_YW", + "white", + "fl_YW", + "amber", + "fl_YW", + "orange", + "fl_YW", + "fl_YW" + ] + }, + "filter": [ + "all", + [ + "has", + "light_color_code" + ], + [ + "any", + [ + "all", + [ + "has", + "shape_class_code" + ], + [ + "match", + [ + "to-number", + [ + "get", + "shape_class_code" + ] + ], + 301, + true, + 302, + true, + 303, + true, + 306, + true, + 311, + true, + 312, + true, + 315, + true, + 316, + true, + 318, + true, + 320, + true, + 322, + true, + 324, + true, + 326, + true, + 328, + true, + 332, + true, + 334, + true, + false + ] + ], + [ + "all", + [ + "has", + "display_code" + ], + [ + "match", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "301", + true, + "302", + true, + "303", + true, + "306", + true, + "311", + true, + "312", + true, + "315", + true, + "316", + true, + "318", + true, + "320", + true, + "322", + true, + "324", + true, + "326", + true, + "328", + true, + "332", + true, + "334", + true, + false + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "minor_light" + ] + ] + ] + }, + { + "id": "nav-light-arc", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "visibility": "visible", + "icon-allow-overlap": true, + "icon-rotation-alignment": "map", + "icon-image": [ + "coalesce", + [ + "get", + "arc_id" + ], + "" + ] + }, + "filter": [ + "all", + [ + "==", + [ + "get", + "chart_symbol_code" + ], + "lighthouse" + ], + [ + "has", + "light_color_code" + ] + ] + }, + { + "id": "nav-marks-harbor-lighthouses", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-size": 1.08, + "icon-image": "lt_hbr" + }, + "filter": [ + "any", + [ + "all", + [ + "has", + "display_code" + ], + [ + "==", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "301" + ] + ], + [ + "all", + [ + "!", + [ + "has", + "display_code" + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lt_hbr" + ] + ] + ] + }, + { + "id": "nav-marks-breakwater-lighthouses", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-size": 1.08, + "icon-image": "lt_bkw" + }, + "filter": [ + "any", + [ + "all", + [ + "has", + "display_code" + ], + [ + "==", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "302" + ] + ], + [ + "all", + [ + "!", + [ + "has", + "display_code" + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lt_bkw" + ] + ] + ] + }, + { + "id": "nav-marks-small-lights", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "case", + [ + "has", + "display_code" + ], + [ + "match", + [ + "get", + "display_code" + ], + "30300000", + "lt_min", + "30300002", + "lt_min", + "30300004", + "lt_min", + "30500001", + "lt_lead_a", + "30500002", + "lt_lead_b", + "30500003", + "lt_lead_c", + "30500004", + "lt_lead_c", + "30500010", + "lt_lead_c", + "30600000", + "lt_min", + "30600001", + "lt_min", + "30600002", + "lt_min", + "30600003", + "lt_min", + "30600004", + "lt_min", + "30600006", + "lt_min", + "30700000", + "mk_lead_c", + "30700001", + "light_up_green", + "30700002", + "light_up_red", + "30700003", + "mk_lead_c", + "30700004", + "mk_lead_c", + "30700007", + "mk_lead_c", + "30800000", + "mk_lead_v", + "30900000", + "lt_lead_c", + "30900002", + "lt_lead_b", + "30900004", + "lt_lead_c", + "30900009", + "lt_lead_c", + "30900011", + "lt_lead_c", + "lt_min" + ], + "lt_min" + ] + }, + "filter": [ + "any", + [ + "all", + [ + "has", + "display_code" + ], + [ + "match", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "303", + true, + "305", + true, + "306", + true, + "307", + true, + "308", + true, + "309", + true, + false + ] + ], + [ + "all", + [ + "!", + [ + "has", + "display_code" + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "minor_light" + ] + ] + ] + }, + { + "id": "nav-marks-light-beacons", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "case", + [ + "has", + "display_code" + ], + [ + "match", + [ + "get", + "display_code" + ], + "31100002", + "lt_bcn", + "31100004", + "lt_bcn", + "31135001", + "lt_bcn", + "31135102", + "lt_bcn", + "31135400", + "light_beacon_north_cardinal_variantt", + "31135404", + "light_beacon_north_cardinal_variantt", + "31135504", + "light_beacon_east_cardinal_variantt", + "31135604", + "light_beacon_north_cardinal_variantt_311356", + "31135701", + "light_beacon_south_cardinal_variantt", + "31135704", + "light_beacon_south_cardinal_variantt", + "31135800", + "light_beacon_west_cardinal_variantt_311358", + "31135804", + "light_beacon_west_cardinal_variantt_311358", + "31135900", + "light_beacon_isolated_danger_variantt_311359", + "31135904", + "light_beacon_isolated_danger_variantt_311359", + "31136003", + "light_beacon_safe_water_variantt_311360", + "31136004", + "light_beacon_safe_water_variantt_311360", + "lt_bcn" + ], + "lt_bcn" + ] + }, + "filter": [ + "any", + [ + "all", + [ + "has", + "display_code" + ], + [ + "==", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "311" + ] + ], + [ + "all", + [ + "!", + [ + "has", + "display_code" + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lt_bcn" + ] + ] + ] + }, + { + "id": "nav-marks", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "case", + [ + "has", + "display_code" + ], + [ + "match", + [ + "get", + "display_code" + ], + "31200001", + "bu_lat", + "31200003", + "bu_lat", + "31235001", + "buoy_port_lateral_variantt_312350", + "31235004", + "buoy_port_lateral_variantt_312350", + "31235102", + "buoy_starboard_lateral_variantt_312351", + "31235404", + "buoy_north_cardinal", + "31235504", + "buoy_east_cardinal", + "31235604", + "buoy_west_cardinal", + "31235704", + "buoy_south_cardinal", + "31235804", + "buoy_isolated_danger", + "31235904", + "buoy_safe_water", + "31236003", + "buoy_special_mark", + "31236004", + "buoy_special_mark", + "31236302", + "mooring_buoy", + "31236303", + "mooring_buoy", + "31300000", + "bu_lat", + "31300001", + "bu_lat", + "31300002", + "bu_lat", + "31300003", + "bu_lat", + "31300004", + "bu_lat", + "31300010", + "bu_lat", + "31336300", + "mooring_buoy", + "32300000", + "bu_pil", + "32300001", + "bu_pil", + "32300002", + "bu_pil", + "32300003", + "bu_pil", + "32300004", + "bu_pil", + "32500000", + "bu_can", + "32500001", + "bu_can", + "32500002", + "bu_can", + "32500003", + "bu_can", + "32500004", + "bu_can", + "32700000", + "bu_lat", + "32700001", + "bu_lat", + "32700002", + "bu_lat", + "32700003", + "bu_lat", + "32700004", + "bu_lat", + "32800001", + "bu_lat", + "32800002", + "bu_lat", + "32800003", + "bu_lat", + [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + ], + [ + "==", + [ + "get", + "canonical_object_type" + ], + "coastal_lighthouse_over_15m" + ], + "lt_cst", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lt_hbr" + ], + "lt_hbr", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lt_bkw" + ], + "lt_bkw", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "minor_light" + ], + "lt_min", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "lattice_buoy" + ], + "bu_lat", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "pillar_buoy" + ], + "bu_pil", + [ + "==", + [ + "get", + "canonical_object_type" + ], + "can_buoy" + ], + "bu_can", + [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + ] + }, + "filter": [ + "all", + [ + "!", + [ + "all", + [ + "has", + "display_code" + ], + [ + "match", + [ + "slice", + [ + "get", + "display_code" + ], + 0, + 3 + ], + "301", + true, + "302", + true, + "303", + true, + "305", + true, + "306", + true, + "307", + true, + "308", + true, + "309", + true, + "311", + true, + false + ] + ] + ], + [ + "!=", + [ + "get", + "canonical_object_type" + ], + "lt_hbr" + ], + [ + "!=", + [ + "get", + "canonical_object_type" + ], + "lt_bkw" + ], + [ + "!=", + [ + "get", + "canonical_object_type" + ], + "minor_light" + ], + [ + "!=", + [ + "get", + "canonical_object_type" + ], + "lt_bcn" + ] + ] + }, + { + "id": "facility-points", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "facility_boundary_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + } + }, + { + "id": "pilot-station-points", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "pilot_station_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": "fac_pilot" + } + }, + { + "id": "landmark-points", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "onshore_structure_point", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": [ + "coalesce", + [ + "get", + "icon_id" + ], + "" + ] + }, + "filter": [ + "any", + [ + "has", + "class_code" + ], + [ + "match", + [ + "get", + "canonical_object_type" + ], + "chimney", + true, + "tower_yagura_windmill", + true, + "maritime_office", + true, + "fishing_cooperative", + true, + "mountain_top", + true, + "other_landmark_monument", + true, + false + ] + ] + }, + { + "id": "landmark-point-fallback", + "type": "circle", + "source": "navsea_delivery", + "source-layer": "onshore_structure_point", + "filter": [ + "all", + [ + "!", + [ + "has", + "class_code" + ] + ], + [ + "match", + [ + "get", + "canonical_object_type" + ], + "chimney", + false, + "tower_yagura_windmill", + false, + "maritime_office", + false, + "fishing_cooperative", + false, + "mountain_top", + false, + "other_landmark_monument", + false, + true + ] + ], + "paint": { + "circle-radius": 3, + "circle-color": "#695641", + "circle-stroke-color": "#fff9ee", + "circle-stroke-width": 0.8 + } + }, + { + "id": "bottom-material-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "seabed_text_point", + "minzoom": 11, + "filter": [ + "has", + "chart_label_text" + ], + "layout": { + "text-allow-overlap": true, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10 + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + } + }, + { + "id": "height-limit-points", + "type": "circle", + "source": "navsea_delivery", + "source-layer": "clearance_limit_point", + "paint": { + "circle-radius": 3.5, + "circle-color": "#ab355f", + "circle-stroke-color": "#ffffff", + "circle-stroke-width": 0.8 + } + }, + { + "id": "height-limit-name-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "clearance_limit_point", + "minzoom": 11, + "filter": [ + "has", + "name_ja" + ], + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "name_ja" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 12, + "text-anchor": "bottom" + }, + "paint": { + "text-color": "rgba(255,0,0,1)" + } + }, + { + "id": "height-limit-value-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "clearance_limit_point", + "minzoom": 11, + "filter": [ + "has", + "chart_label_text" + ], + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "concat", + "高さ", + [ + "get", + "chart_label_text" + ], + "m" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 12, + "text-anchor": "top" + }, + "paint": { + "text-color": "rgba(255,0,0,1)" + } + }, + { + "id": "nav-mark-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-offset": [ + "match", + [ + "get", + "chart_label_position_code" + ], + "tl", + [ + "literal", + [ + 2, + 2.5 + ] + ], + "t", + [ + "literal", + [ + 0, + 2.5 + ] + ], + "tr", + [ + "literal", + [ + -2, + 2.5 + ] + ], + "l", + [ + "literal", + [ + 2, + 0.5 + ] + ], + "c", + [ + "literal", + [ + 0, + 0.5 + ] + ], + "r", + [ + "literal", + [ + -2, + 0.5 + ] + ], + "bl", + [ + "literal", + [ + 2, + -1.5 + ] + ], + "b", + [ + "literal", + [ + 0, + -1.5 + ] + ], + "br", + [ + "literal", + [ + -2, + -1.5 + ] + ], + [ + "literal", + [ + 0, + 0.5 + ] + ] + ], + "text-anchor": [ + "match", + [ + "get", + "chart_label_position_code" + ], + "tl", + "top-left", + "t", + "top", + "tr", + "top-right", + "l", + "left", + "c", + "center", + "r", + "right", + "bl", + "bottom-left", + "b", + "bottom", + "br", + "bottom-right", + "center" + ] + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + }, + "filter": [ + "has", + "chart_label_text" + ] + }, + { + "id": "nav-light-abbr-labels", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "navigation_marks", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "chart_label_subtext" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-offset": [ + "match", + [ + "get", + "chart_label_position_code" + ], + "tl", + [ + "literal", + [ + 2, + 1.5 + ] + ], + "t", + [ + "literal", + [ + 0, + 1.5 + ] + ], + "tr", + [ + "literal", + [ + -2, + 1.5 + ] + ], + "l", + [ + "literal", + [ + 2, + -0.5 + ] + ], + "c", + [ + "literal", + [ + 0, + -0.5 + ] + ], + "r", + [ + "literal", + [ + -2, + -0.5 + ] + ], + "bl", + [ + "literal", + [ + 2, + -2.5 + ] + ], + "b", + [ + "literal", + [ + 0, + -2.5 + ] + ], + "br", + [ + "literal", + [ + -2, + -2.5 + ] + ], + [ + "literal", + [ + 0, + -0.5 + ] + ] + ], + "text-anchor": [ + "match", + [ + "get", + "chart_label_position_code" + ], + "tl", + "top-left", + "t", + "top", + "tr", + "top-right", + "l", + "left", + "c", + "center", + "r", + "right", + "bl", + "bottom-left", + "b", + "bottom", + "br", + "bottom-right", + "center" + ] + }, + "paint": { + "text-color": [ + "case", + [ + "==", + [ + "get", + "chart_text_color" + ], + "#000000" + ], + "rgba(0,0,0,1)", + [ + "coalesce", + [ + "get", + "chart_text_color" + ], + "rgba(0,0,0,1)" + ] + ] + }, + "filter": [ + "has", + "chart_label_subtext" + ] + }, + { + "id": "place-labels-sea-en", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "place_label_sea", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "place_name_en" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "top" + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + }, + "filter": [ + "has", + "place_name_en" + ] + }, + { + "id": "place-labels-sea-ja", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "place_label_sea", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "bottom" + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + }, + "filter": [ + "has", + "chart_label_text" + ] + }, + { + "id": "place-labels-land-en", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "place_label_land", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "place_name_en" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "top" + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + }, + "filter": [ + "has", + "place_name_en" + ] + }, + { + "id": "place-labels-land-ja", + "type": "symbol", + "source": "navsea_delivery", + "source-layer": "place_label_land", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "chart_label_text" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "bottom" + }, + "paint": { + "text-color": "rgba(0,0,0,1)" + }, + "filter": [ + "has", + "chart_label_text" + ] + } + ], + "metadata": { + "navsea_test_version": "kyushu-semantic-icon-v1-20260806", + "source_baseline": "/home/wwwroot/pbf-delivery-full-20260418-rebuild", + "icon_map": "/root/sourceserver/pbf/tasks/pbf/navsea_semantic_icon_map_v1.json" + } +} diff --git a/src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json b/src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json new file mode 100644 index 0000000..a0ac5db --- /dev/null +++ b/src/pbf/style.navsea-newpec-kyushu-icon-test-v1.json @@ -0,0 +1,5656 @@ +{ + "version": 8, + "name": "NavSea Newpec Kyushu Icon Test v1", + "sprite": "http://192.168.200.184/newpec/sprite/sprite?v=111", + "glyphs": "http://192.168.200.184/newpec/fonts/{fontstack}/{range}.pbf", + "sources": { + "newpec": { + "type": "vector", + "minzoom": 0, + "maxzoom": 12, + "tiles": [ + "http://192.168.200.184/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles/{z}/{x}/{y}.pbf" + ], + "attribution": "" + }, + "mapple": { + "type": "raster", + "minzoom": 0, + "maxzoom": 19, + "tileSize": 256, + "tiles": [ + "https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png" + ], + "attribution": "© 昭文社" + }, + "shipfinder": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [] + } + } + }, + "layers": [ + { + "id": "#b#d2#d5#d10#land#P100", + "source": "newpec", + "source-layer": "P陸域", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 210, + 200, + 128, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#land#P陸上構造物陸", + "source": "newpec", + "source-layer": "P陸上構造物陸", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 147, + 116, + 39, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#land#L陸上構造物陸", + "source": "newpec", + "source-layer": "L陸上構造物陸", + "type": "line", + "paint": { + "line-width": 2, + "line-color": [ + "rgba", + 147, + 116, + 39, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#land#C800#EN", + "source": "newpec", + "source-layer": "p地名陸", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "英文字地名" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "top" + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#land#C800#JA", + "source": "newpec", + "source-layer": "p地名陸", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "日本語地名" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "bottom" + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#mapple#background", + "type": "background", + "paint": { + "background-color": [ + "rgba", + 255, + 255, + 255, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#mapple", + "type": "raster", + "source": "mapple" + }, + { + "id": "#b#at#P基本線", + "source": "newpec", + "source-layer": "P基本線", + "type": "fill", + "layout": { + "visibility": "visible" + }, + "paint": { + "fill-color": [ + "match", + [ + "get", + "分類番号" + ], + 120, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 121, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 130, + [ + "rgba", + 143, + 191, + 147, + 1 + ], + 141, + [ + "rgba", + 240, + 250, + 255, + 1 + ], + 142, + [ + "rgba", + 240, + 250, + 255, + 1 + ], + 143, + [ + "rgba", + 230, + 250, + 251, + 1 + ], + 144, + [ + "rgba", + 220, + 250, + 251, + 1 + ], + 145, + [ + "rgba", + 240, + 250, + 255, + 1 + ], + 146, + [ + "rgba", + 230, + 250, + 255, + 1 + ], + 147, + [ + "rgba", + 220, + 250, + 255, + 1 + ], + 148, + [ + "rgba", + 230, + 250, + 255, + 1 + ], + 149, + [ + "rgba", + 220, + 250, + 255, + 1 + ], + 150, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 151, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 152, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 153, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 160, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 161, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 162, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 200, + [ + "rgba", + 220, + 250, + 255, + 1 + ], + 210, + [ + "rgba", + 200, + 240, + 255, + 1 + ], + 220, + [ + "rgba", + 200, + 240, + 255, + 1 + ], + 221, + [ + "rgba", + 200, + 230, + 255, + 1 + ], + 230, + [ + "rgba", + 200, + 230, + 255, + 1 + ], + 240, + [ + "rgba", + 180, + 220, + 255, + 1 + ], + 250, + [ + "rgba", + 171, + 192, + 255, + 1 + ], + 260, + [ + "rgba", + 163, + 181, + 255, + 1 + ], + 270, + [ + "rgba", + 132, + 169, + 255, + 1 + ], + 280, + [ + "rgba", + 89, + 155, + 255, + 1 + ], + 290, + [ + "rgba", + 90, + 140, + 255, + 1 + ], + 291, + [ + "rgba", + 100, + 132, + 255, + 1 + ], + 292, + [ + "rgba", + 128, + 128, + 255, + 1 + ], + 293, + [ + "rgba", + 139, + 118, + 255, + 1 + ], + 294, + [ + "rgba", + 150, + 100, + 255, + 1 + ], + 295, + [ + "rgba", + 160, + 100, + 255, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 0 + ] + ] + } + }, + { + "id": "#d2#at#P基本線", + "source": "newpec", + "source-layer": "P基本線", + "type": "fill", + "layout": { + "visibility": "none" + }, + "paint": { + "fill-color": [ + "match", + [ + "get", + "分類番号" + ], + 120, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 121, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 130, + [ + "rgba", + 143, + 191, + 147, + 1 + ], + 141, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 142, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 143, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 144, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 145, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 146, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 147, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 148, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 149, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 150, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 151, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 152, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 153, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 160, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 161, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 162, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 200, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 210, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 220, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 221, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 230, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 240, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 250, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 260, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 270, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 280, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 290, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 291, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 292, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 293, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 294, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 295, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 0 + ] + ] + } + }, + { + "id": "#d5#at#P基本線", + "source": "newpec", + "source-layer": "P基本線", + "type": "fill", + "layout": { + "visibility": "none" + }, + "paint": { + "fill-color": [ + "match", + [ + "get", + "分類番号" + ], + 120, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 121, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 130, + [ + "rgba", + 143, + 191, + 147, + 1 + ], + 141, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 142, + [ + "rgba", + 167, + 224, + 233, + 1 + ], + 143, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 144, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 145, + [ + "rgba", + 167, + 224, + 233, + 1 + ], + 146, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 147, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 148, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 149, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 150, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 151, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 152, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 153, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 160, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 161, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 162, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 200, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 210, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 220, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 221, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 230, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 240, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 250, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 260, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 270, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 280, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 290, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 291, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 292, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 293, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 294, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 295, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 0 + ] + ] + } + }, + { + "id": "#d10#at#P基本線", + "source": "newpec", + "source-layer": "P基本線", + "type": "fill", + "layout": { + "visibility": "none" + }, + "paint": { + "fill-color": [ + "match", + [ + "get", + "分類番号" + ], + 120, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 121, + [ + "rgba", + 210, + 200, + 128, + 1 + ], + 130, + [ + "rgba", + 143, + 191, + 147, + 1 + ], + 141, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 142, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 143, + [ + "rgba", + 167, + 224, + 233, + 1 + ], + 144, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 145, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 146, + [ + "rgba", + 167, + 224, + 233, + 1 + ], + 147, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 148, + [ + "rgba", + 167, + 224, + 233, + 1 + ], + 149, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 150, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 151, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 152, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 153, + [ + "rgba", + 171, + 192, + 177, + 1 + ], + 160, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 161, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 162, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 200, + [ + "rgba", + 182, + 235, + 219, + 1 + ], + 210, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 220, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 221, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 230, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 240, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 250, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 260, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 270, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 280, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 290, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 291, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 292, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 293, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 294, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + 295, + [ + "rgba", + 216, + 244, + 225, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 0 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#at#P潜堤塗", + "source": "newpec", + "source-layer": "P潜堤", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 129, + 195, + 226, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#P潜堤網", + "source": "newpec", + "source-layer": "P潜堤", + "type": "fill", + "paint": { + "fill-pattern": "fill-daytime-175" + } + }, + { + "id": "#b#海底地形", + "source": "newpec", + "source-layer": "L海底地形", + "type": "line", + "paint": { + "line-width": [ + "match", + [ + "get", + "水深値(m)" + ], + 10, + 1, + 20, + 1, + 40, + 1, + 60, + 1, + 80, + 1, + 100, + 1, + 150, + 1, + 200, + 1, + 300, + 1, + 400, + 1, + 500, + 1, + 600, + 1, + 700, + 1, + 800, + 1, + 900, + 1, + 1000, + 1, + 1500, + 1, + 2000, + 1, + 2500, + 1, + 3000, + 1, + 3500, + 1, + 4000, + 1, + 4500, + 1, + 5000, + 1, + 5500, + 1, + 6000, + 1, + 8000, + 1, + 10000, + 1, + 0.5 + ], + "line-color": [ + "step", + [ + "get", + "水深値(m)" + ], + [ + "rgba", + 126, + 230, + 146, + 1 + ], + 10, + [ + "rgba", + 106, + 210, + 126, + 1 + ], + 11, + [ + "rgba", + 126, + 230, + 146, + 1 + ], + 20, + [ + "rgba", + 106, + 210, + 126, + 1 + ], + 21, + [ + "rgba", + 126, + 230, + 146, + 1 + ], + 30, + [ + "rgba", + 144, + 220, + 255, + 1 + ], + 40, + [ + "rgba", + 113, + 193, + 235, + 1 + ], + 41, + [ + "rgba", + 133, + 213, + 255, + 1 + ], + 45, + [ + "rgba", + 122, + 206, + 255, + 1 + ], + 50, + [ + "rgba", + 111, + 199, + 255, + 1 + ], + 55, + [ + "rgba", + 100, + 192, + 255, + 1 + ], + 60, + [ + "rgba", + 69, + 164, + 235, + 1 + ], + 61, + [ + "rgba", + 89, + 184, + 255, + 1 + ], + 65, + [ + "rgba", + 78, + 177, + 255, + 1 + ], + 70, + [ + "rgba", + 67, + 170, + 255, + 1 + ], + 75, + [ + "rgba", + 56, + 163, + 255, + 1 + ], + 80, + [ + "rgba", + 24, + 136, + 235, + 1 + ], + 81, + [ + "rgba", + 44, + 156, + 255, + 1 + ], + 85, + [ + "rgba", + 22, + 142, + 255, + 1 + ], + 90, + [ + "rgba", + 33, + 149, + 255, + 1 + ], + 95, + [ + "rgba", + 11, + 135, + 255, + 1 + ], + 100, + [ + "rgba", + 0, + 108, + 235, + 1 + ], + 101, + [ + "rgba", + 0, + 128, + 255, + 1 + ], + 110, + [ + "rgba", + 0, + 115, + 255, + 1 + ], + 120, + [ + "rgba", + 0, + 102, + 255, + 1 + ], + 130, + [ + "rgba", + 0, + 90, + 255, + 1 + ], + 140, + [ + "rgba", + 0, + 77, + 255, + 1 + ], + 150, + [ + "rgba", + 0, + 44, + 235, + 1 + ], + 151, + [ + "rgba", + 0, + 64, + 255, + 1 + ], + 160, + [ + "rgba", + 0, + 51, + 255, + 1 + ], + 170, + [ + "rgba", + 0, + 38, + 255, + 1 + ], + 180, + [ + "rgba", + 0, + 26, + 255, + 1 + ], + 190, + [ + "rgba", + 0, + 13, + 255, + 1 + ], + 200, + [ + "rgba", + 0, + 0, + 235, + 1 + ], + 201, + [ + "rgba", + 0, + 0, + 255, + 1 + ], + 300, + [ + "rgba", + 0, + 0, + 219, + 1 + ], + 301, + [ + "rgba", + 0, + 0, + 239, + 1 + ], + 400, + [ + "rgba", + 0, + 0, + 203, + 1 + ], + 401, + [ + "rgba", + 0, + 0, + 223, + 1 + ], + 500, + [ + "rgba", + 0, + 0, + 187, + 1 + ], + 501, + [ + "rgba", + 0, + 0, + 207, + 1 + ], + 600, + [ + "rgba", + 0, + 0, + 172, + 1 + ], + 601, + [ + "rgba", + 0, + 0, + 192, + 1 + ], + 700, + [ + "rgba", + 0, + 0, + 156, + 1 + ], + 701, + [ + "rgba", + 0, + 0, + 176, + 1 + ], + 800, + [ + "rgba", + 0, + 0, + 140, + 1 + ], + 801, + [ + "rgba", + 0, + 0, + 160, + 1 + ], + 900, + [ + "rgba", + 0, + 0, + 124, + 1 + ], + 901, + [ + "rgba", + 0, + 0, + 144, + 1 + ], + 1000, + [ + "rgba", + 0, + 0, + 108, + 1 + ], + 1001, + [ + "rgba", + 0, + 0, + 128, + 1 + ], + 1100, + [ + "rgba", + 0, + 6, + 122, + 1 + ], + 1200, + [ + "rgba", + 0, + 13, + 115, + 1 + ], + 1300, + [ + "rgba", + 0, + 19, + 109, + 1 + ], + 1400, + [ + "rgba", + 0, + 26, + 102, + 1 + ], + 1500, + [ + "rgba", + 20, + 50, + 116, + 1 + ], + 1501, + [ + "rgba", + 0, + 32, + 96, + 1 + ], + 1600, + [ + "rgba", + 0, + 39, + 90, + 1 + ], + 1700, + [ + "rgba", + 0, + 45, + 83, + 1 + ], + 1800, + [ + "rgba", + 0, + 51, + 77, + 1 + ], + 1900, + [ + "rgba", + 0, + 58, + 70, + 1 + ], + 2000, + [ + "rgba", + 0, + 51, + 77, + 1 + ], + 2001, + [ + "rgba", + 0, + 51, + 77, + 1 + ], + 2100, + [ + "rgba", + 0, + 56, + 72, + 1 + ], + 2200, + [ + "rgba", + 0, + 61, + 67, + 1 + ], + 2300, + [ + "rgba", + 0, + 67, + 61, + 1 + ], + 2400, + [ + "rgba", + 0, + 72, + 56, + 1 + ], + 2500, + [ + "rgba", + 10, + 87, + 61, + 1 + ], + 2501, + [ + "rgba", + 0, + 77, + 51, + 1 + ], + 2600, + [ + "rgba", + 0, + 82, + 46, + 1 + ], + 2700, + [ + "rgba", + 0, + 87, + 41, + 1 + ], + 2800, + [ + "rgba", + 0, + 92, + 36, + 1 + ], + 2900, + [ + "rgba", + 0, + 97, + 31, + 1 + ], + 3000, + [ + "rgba", + 10, + 112, + 36, + 1 + ], + 3001, + [ + "rgba", + 0, + 102, + 26, + 1 + ], + 3100, + [ + "rgba", + 0, + 108, + 20, + 1 + ], + 3200, + [ + "rgba", + 0, + 113, + 15, + 1 + ], + 3300, + [ + "rgba", + 0, + 112, + 10, + 1 + ], + 3400, + [ + "rgba", + 0, + 123, + 5, + 1 + ], + 3500, + [ + "rgba", + 10, + 138, + 10, + 1 + ], + 3501, + [ + "rgba", + 0, + 128, + 0, + 1 + ], + 3600, + [ + "rgba", + 2, + 124, + 2, + 1 + ], + 3700, + [ + "rgba", + 3, + 121, + 3, + 1 + ], + 3800, + [ + "rgba", + 5, + 117, + 5, + 1 + ], + 3900, + [ + "rgba", + 6, + 114, + 6, + 1 + ], + 4000, + [ + "rgba", + 18, + 120, + 18, + 1 + ], + 4001, + [ + "rgba", + 18, + 110, + 18, + 1 + ], + 4100, + [ + "rgba", + 10, + 107, + 10, + 1 + ], + 4200, + [ + "rgba", + 11, + 103, + 11, + 1 + ], + 4300, + [ + "rgba", + 13, + 100, + 13, + 1 + ], + 4400, + [ + "rgba", + 14, + 96, + 14, + 1 + ], + 4500, + [ + "rgba", + 26, + 103, + 26, + 1 + ], + 4501, + [ + "rgba", + 16, + 93, + 16, + 1 + ], + 4600, + [ + "rgba", + 18, + 89, + 18, + 1 + ], + 4700, + [ + "rgba", + 19, + 26, + 19, + 1 + ], + 4800, + [ + "rgba", + 21, + 82, + 21, + 1 + ], + 4900, + [ + "rgba", + 22, + 79, + 22, + 1 + ], + 5000, + [ + "rgba", + 34, + 85, + 34, + 1 + ], + 5001, + [ + "rgba", + 24, + 75, + 24, + 1 + ], + 5100, + [ + "rgba", + 26, + 72, + 26, + 1 + ], + 5200, + [ + "rgba", + 27, + 68, + 27, + 1 + ], + 5300, + [ + "rgba", + 29, + 65, + 29, + 1 + ], + 5400, + [ + "rgba", + 30, + 61, + 30, + 1 + ], + 5500, + [ + "rgba", + 42, + 68, + 42, + 1 + ], + 5501, + [ + "rgba", + 32, + 58, + 32, + 1 + ], + 5600, + [ + "rgba", + 34, + 54, + 34, + 1 + ], + 5700, + [ + "rgba", + 35, + 51, + 35, + 1 + ], + 5800, + [ + "rgba", + 37, + 47, + 37, + 1 + ], + 5900, + [ + "rgba", + 38, + 44, + 38, + 1 + ], + 6000, + [ + "rgba", + 50, + 50, + 50, + 1 + ], + 6001, + [ + "rgba", + 40, + 40, + 40, + 1 + ], + 6500, + [ + "rgba", + 58, + 30, + 58, + 1 + ], + 7000, + [ + "rgba", + 75, + 20, + 75, + 1 + ], + 7500, + [ + "rgba", + 93, + 10, + 93, + 1 + ], + 8000, + [ + "rgba", + 120, + 10, + 120, + 1 + ], + 8001, + [ + "rgba", + 110, + 0, + 110, + 1 + ], + 8500, + [ + "rgba", + 117, + 0, + 117, + 1 + ], + 9000, + [ + "rgba", + 123, + 0, + 123, + 1 + ], + 9500, + [ + "rgba", + 130, + 0, + 130, + 1 + ], + 10000, + [ + "rgba", + 147, + 0, + 147, + 1 + ], + 10001, + [ + "rgba", + 137, + 0, + 137, + 1 + ], + 10500, + [ + "rgba", + 143, + 0, + 143, + 1 + ] + ] + } + }, + { + "id": "#b#L等深線", + "source": "newpec", + "source-layer": "L等深線", + "type": "line", + "layout": { + "visibility": "visible" + }, + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 800, + [ + "rgba", + 31, + 102, + 135, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ], + "line-width": 1 + } + }, + { + "id": "#b#L概略等深線", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "visible" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 12, + 4 + ] + ] + } + }, + { + "id": "#d2#L等深線", + "source": "newpec", + "source-layer": "L等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 800, + [ + "rgba", + 31, + 102, + 135, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 140, + 3, + 1 + ] + } + }, + { + "id": "#d2#L概略等深線", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 12, + 3 + ] + ] + }, + "filter": [ + "!=", + [ + "get", + "高さ/深度(m)" + ], + 2 + ] + }, + { + "id": "#d2#L概略等深線強調", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 3, + "line-dasharray": [ + "literal", + [ + 4, + 1 + ] + ] + }, + "filter": [ + "==", + [ + "get", + "高さ/深度(m)" + ], + 2 + ] + }, + { + "id": "#d5#L等深線", + "source": "newpec", + "source-layer": "L等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 800, + [ + "rgba", + 31, + 102, + 135, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 141, + 3, + 1 + ] + } + }, + { + "id": "#d5#L概略等深線", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 12, + 3 + ] + ] + }, + "filter": [ + "!=", + [ + "get", + "高さ/深度(m)" + ], + 5 + ] + }, + { + "id": "#d5#L概略等深線強調", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 3, + "line-dasharray": [ + "literal", + [ + 4, + 1 + ] + ] + }, + "filter": [ + "==", + [ + "get", + "高さ/深度(m)" + ], + 5 + ] + }, + { + "id": "#d10#L等深線", + "source": "newpec", + "source-layer": "L等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 800, + [ + "rgba", + 31, + 102, + 135, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 142, + 3, + 1 + ] + } + }, + { + "id": "#d10#L概略等深線", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 12, + 3 + ] + ] + }, + "filter": [ + "!=", + [ + "get", + "高さ/深度(m)" + ], + 10 + ] + }, + { + "id": "#d10#L概略等深線強調", + "source": "newpec", + "source-layer": "L概略等深線", + "type": "line", + "layout": { + "visibility": "none" + }, + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 3, + "line-dasharray": [ + "literal", + [ + 4, + 1 + ] + ] + }, + "filter": [ + "==", + [ + "get", + "高さ/深度(m)" + ], + 10 + ] + }, + { + "id": "#b#d2#d5#d10#at#P9", + "source": "newpec", + "source-layer": "P漁具定置箇所", + "type": "fill", + "paint": { + "fill-pattern": [ + "match", + [ + "get", + "分類番号" + ], + 900, + "fill-daytime-900", + 910, + "fill-daytime-910", + 920, + "fill-daytime-401", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#P9#ククリ", + "source": "newpec", + "source-layer": "P漁具定置箇所", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 198, + 77, + 187, + 1 + ], + "line-width": 1 + } + }, + { + "id": "#b#d2#d5#d10#P4#at#P投錨注意障害物透明", + "source": "newpec", + "source-layer": "P投錨注意障害物透明", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#P4#P投錨注意障害物", + "source": "newpec", + "source-layer": "P投錨注意障害物", + "type": "fill", + "paint": { + "fill-pattern": [ + "match", + [ + "get", + "分類番号" + ], + 405, + "fill-daytime-401", + 407, + "fill-daytime-407", + 408, + "fill-daytime-407", + 420, + "fill-daytime-420", + 421, + "fill-daytime-421", + 422, + "fill-daytime-421", + 423, + "fill-daytime-421", + 424, + "fill-daytime-421", + 425, + "fill-daytime-421", + 426, + "fill-daytime-421", + 427, + "fill-daytime-427", + 428, + "fill-daytime-428", + 429, + "fill-daytime-429", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#P4#P航行危険障害物", + "source": "newpec", + "source-layer": "P航行危険障害物", + "type": "fill", + "paint": { + "fill-pattern": [ + "match", + [ + "get", + "分類番号" + ], + 405, + "fill-daytime-401", + 407, + "fill-daytime-407", + 408, + "fill-daytime-407", + 420, + "fill-daytime-420", + 421, + "fill-daytime-421", + 422, + "fill-daytime-421", + 423, + "fill-daytime-421", + 424, + "fill-daytime-421", + 425, + "fill-daytime-421", + 426, + "fill-daytime-421", + 427, + "fill-daytime-427", + 428, + "fill-daytime-428", + 429, + "fill-daytime-429", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BB#P錨泊地等", + "source": "newpec", + "source-layer": "P錨泊地等", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BK#P航路", + "source": "newpec", + "source-layer": "P航路", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BS#P施設・境界線等透明", + "source": "newpec", + "source-layer": "P施設・境界線等透明", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BS#P施設・境界線等", + "source": "newpec", + "source-layer": "P施設・境界線等", + "type": "fill", + "paint": { + "fill-pattern": [ + "match", + [ + "get", + "分類番号" + ], + 745, + "fill-daytime-745", + 746, + "fill-daytime-746", + 747, + "fill-daytime-747", + 750, + "fill-daytime-750", + 753, + "fill-daytime-753", + 754, + "fill-daytime-754", + 755, + "fill-daytime-755", + 756, + "fill-daytime-756", + 757, + "fill-daytime-756", + 758, + "fill-daytime-756", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#L4#P投錨注意障害物ククリ", + "source": "newpec", + "source-layer": "P投錨注意障害物ククリ", + "type": "line", + "paint": { + "line-width": 1, + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 405, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 407, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + 408, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + 413, + [ + "rgba", + 158, + 175, + 206, + 1 + ], + 427, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 429, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 434, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#L4#P航行危険障害物ククリ", + "source": "newpec", + "source-layer": "P航行危険障害物ククリ", + "type": "line", + "paint": { + "line-width": 1, + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 405, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 407, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + 408, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + 413, + [ + "rgba", + 158, + 175, + 206, + 1 + ], + 427, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 429, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + 434, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + [ + "rgba", + 136, + 152, + 139, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L700", + "source": "newpec", + "source-layer": "L700", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 198, + 77, + 187, + 1 + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 3, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L701", + "source": "newpec", + "source-layer": "L701", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 10, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L702", + "source": "newpec", + "source-layer": "L702", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 198, + 77, + 187, + 1 + ], + "line-width": 1 + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L725", + "source": "newpec", + "source-layer": "L725", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 198, + 77, + 187, + 1 + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 2, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L739", + "source": "newpec", + "source-layer": "L739", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 7, + 7, + 7, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 4, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L740", + "source": "newpec", + "source-layer": "L740", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 3, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#P航路ククリ", + "source": "newpec", + "source-layer": "P航路ククリ", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 742, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + [ + "rgba", + 171, + 192, + 177, + 1 + ] + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 3, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BK#at#L航路", + "source": "newpec", + "source-layer": "L航路", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 742, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + [ + "rgba", + 171, + 192, + 177, + 1 + ] + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 3, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BB#P錨泊地等ククリ", + "source": "newpec", + "source-layer": "P錨泊地等ククリ", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 720, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + [ + "rgba", + 198, + 77, + 187, + 1 + ] + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 2, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BB#P721ククリ", + "source": "newpec", + "source-layer": "P721ククリ", + "type": "line", + "paint": { + "line-pattern": "line-daytime-721", + "line-width": 8 + } + }, + { + "id": "#b#d2#d5#d10#BS#P施設・境界線等ククリ", + "source": "newpec", + "source-layer": "P施設・境界線等ククリ", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 798, + 3, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#BS#P誘導線ククリ", + "source": "newpec", + "source-layer": "P誘導線ククリ", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 745, + [ + "rgba", + 238, + 90, + 108, + 1 + ], + 746, + [ + "rgba", + 243, + 229, + 77, + 1 + ], + 747, + [ + "rgba", + 124, + 240, + 91, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 0 + ] + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 5, + 2, + 3, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BS#P754ククリ", + "source": "newpec", + "source-layer": "P754ククリ", + "type": "line", + "paint": { + "line-pattern": "line-daytime-754", + "line-width": 8 + } + }, + { + "id": "#b#d2#d5#d10#BS#at#L741", + "source": "newpec", + "source-layer": "L741", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 2, + "line-dasharray": [ + "literal", + [ + 3, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BS#P730ククリ", + "source": "newpec", + "source-layer": "P730ククリ", + "type": "line", + "paint": { + "line-pattern": "line-daytime-730", + "line-width": 64 + } + }, + { + "id": "#b#d2#d5#d10#BS#at#L749", + "source": "newpec", + "source-layer": "L749", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 136, + 152, + 139, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 2, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BS#at#L748", + "source": "newpec", + "source-layer": "L748", + "type": "line", + "paint": { + "line-pattern": "line-daytime-748", + "line-width": 64 + } + }, + { + "id": "#b#d2#d5#d10#BS#at#L738", + "source": "newpec", + "source-layer": "L738", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 7, + 7, + 7, + 1 + ], + "line-width": 1, + "line-dasharray": [ + "literal", + [ + 3, + 1, + 1, + 1, + 1, + 1 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#BS#at#L海底線", + "source": "newpec", + "source-layer": "L海底線", + "type": "line", + "paint": { + "line-width": 16, + "line-pattern": [ + "match", + [ + "get", + "分類番号" + ], + 710, + "line-daytime-710", + 711, + "line-daytime-710", + 712, + "line-daytime-712", + 713, + "line-daytime-713", + 714, + "line-daytime-713", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#L高さ制限", + "source": "newpec", + "source-layer": "L高さ制限", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 731, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + 732, + [ + "rgba", + 7, + 7, + 7, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 1 + ] + ], + "line-width": 1 + } + }, + { + "id": "#b#d2#d5#d10#at#P橋りょう等構造物", + "source": "newpec", + "source-layer": "P橋りょう等構造物", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#b#d2#d5#d10#P橋りょう等構造物ククリ", + "source": "newpec", + "source-layer": "P橋りょう等構造物", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 95, + 106, + 95, + 1 + ], + "line-width": 2 + } + }, + { + "id": "#b#d2#d5#d10#P基本線ククリ", + "source": "newpec", + "source-layer": "P基本線ククリ", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 130, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + 160, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + 175, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + 180, + [ + "rgba", + 212, + 177, + 221, + 1 + ], + [ + "rgba", + 95, + 106, + 95, + 1 + ] + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 130, + 1, + 160, + 1, + 170, + 1, + 175, + 1, + 180, + 1, + 2 + ] + } + }, + { + "id": "#b#d2#d5#d10#P危険界ククリ", + "source": "newpec", + "source-layer": "P危険界ククリ", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 95, + 106, + 95, + 1 + ], + "line-width": 3, + "line-dasharray": [ + "literal", + [ + 3, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#at#L基本線", + "source": "newpec", + "source-layer": "L基本線", + "type": "line", + "paint": { + "line-color": [ + "match", + [ + "get", + "分類番号" + ], + 129, + [ + "rgba", + 129, + 195, + 226, + 1 + ], + 161, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + 176, + [ + "rgba", + 136, + 152, + 139, + 1 + ], + [ + "rgba", + 95, + 106, + 95, + 1 + ] + ], + "line-width": [ + "match", + [ + "get", + "分類番号" + ], + 129, + 1, + 161, + 1, + 171, + 1, + 176, + 1, + 2 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#L危険界", + "source": "newpec", + "source-layer": "L危険界", + "type": "line", + "paint": { + "line-color": [ + "rgba", + 95, + 106, + 95, + 1 + ], + "line-width": 3, + "line-dasharray": [ + "literal", + [ + 3, + 2 + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#at#S4#S航行危険障害物", + "source": "newpec", + "source-layer": "p航行危険障害物", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "分類番号" + ], + 401, + "symbol-daytime-401", + 402, + "symbol-daytime-401", + 403, + "symbol-daytime-401", + 404, + "symbol-daytime-404", + 405, + "symbol-daytime-405", + 406, + "symbol-daytime-406", + 407, + "symbol-daytime-407", + 408, + "symbol-daytime-408", + 409, + "symbol-daytime-409", + 410, + "symbol-daytime-410", + 411, + "symbol-daytime-410", + 412, + "symbol-daytime-412", + 413, + "symbol-daytime-413", + 414, + "symbol-daytime-414", + 415, + "symbol-daytime-413", + 420, + "symbol-daytime-420", + 421, + "symbol-daytime-421", + 422, + "symbol-daytime-422", + 424, + "symbol-daytime-424", + 425, + "symbol-daytime-425", + 426, + "symbol-daytime-426", + 427, + "symbol-daytime-427", + 428, + "symbol-daytime-428", + 429, + "symbol-daytime-429", + 430, + "symbol-daytime-430", + 431, + "symbol-daytime-431", + 432, + "symbol-daytime-432", + 433, + "symbol-daytime-433", + 434, + "symbol-daytime-434", + 498, + "symbol-daytime-498", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#S4#S投錨注意障害物", + "source": "newpec", + "source-layer": "p投錨注意障害物", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "分類番号" + ], + 401, + "symbol-daytime-401", + 402, + "symbol-daytime-401", + 403, + "symbol-daytime-401", + 404, + "symbol-daytime-404", + 405, + "symbol-daytime-405", + 406, + "symbol-daytime-406", + 407, + "symbol-daytime-407", + 408, + "symbol-daytime-408", + 409, + "symbol-daytime-409", + 410, + "symbol-daytime-410", + 411, + "symbol-daytime-410", + 412, + "symbol-daytime-412", + 413, + "symbol-daytime-413", + 414, + "symbol-daytime-414", + 415, + "symbol-daytime-413", + 420, + "symbol-daytime-420", + 421, + "symbol-daytime-421", + 422, + "symbol-daytime-422", + 424, + "symbol-daytime-424", + 425, + "symbol-daytime-425", + 426, + "symbol-daytime-426", + 427, + "symbol-daytime-427", + 428, + "symbol-daytime-428", + 429, + "symbol-daytime-429", + 430, + "symbol-daytime-430", + 431, + "symbol-daytime-431", + 432, + "symbol-daytime-432", + 433, + "symbol-daytime-433", + 434, + "symbol-daytime-434", + 498, + "symbol-daytime-498", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BK#S760", + "source": "newpec", + "source-layer": "p航路境界等", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-rotation-alignment": "map", + "icon-rotate": [ + "get", + "角度" + ], + "icon-image": [ + "match", + [ + "get", + "分類番号" + ], + 759, + "symbol-daytime-759", + 760, + "symbol-daytime-760", + 761, + "symbol-daytime-761", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BB#S720", + "source": "newpec", + "source-layer": "p錨泊地等", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "分類番号" + ], + 719, + "symbol-daytime-719", + 720, + "symbol-daytime-720", + 721, + "symbol-daytime-721", + 722, + "symbol-daytime-721", + 723, + "symbol-daytime-721", + 724, + "symbol-daytime-724", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BS#S底質", + "source": "newpec", + "source-layer": "p底質", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-field": [ + "get", + "名称" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10 + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BS#S500", + "source": "newpec", + "source-layer": "p施設・境界線等", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "分類番号" + ], + 505, + "symbol-daytime-505", + 510, + "symbol-daytime-505", + 520, + "symbol-daytime-520", + 530, + "symbol-daytime-530", + 540, + "symbol-daytime-540", + 550, + "symbol-daytime-550", + "" + ] + } + }, + { + "id": "#b#d2#d5#d10#at#BS#Sパイロットステーション", + "source": "newpec", + "source-layer": "pパイロットステーション", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": "symbol-daytime-500" + } + }, + { + "id": "#b#d2#d5#d10#at#S陸上構造物", + "source": "newpec", + "source-layer": "p陸上構造物", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "concat", + "symbol-daytime-", + [ + "get", + "分類番号" + ] + ] + } + }, + { + "id": "#b#d2#d5#d10#S航路標識群#arc", + "source": "newpec", + "source-layer": "p航路標識群", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-rotation-alignment": "map", + "icon-image": [ + "case", + [ + "has", + "明弧/分孤" + ], + [ + "concat", + "arc-daytime-", + [ + "get", + "明弧/分孤" + ] + ], + [ + "concat", + "arc-daytime-", + [ + "match", + [ + "get", + "形状分類番号" + ], + 300, + "l", + 301, + "m", + "s" + ], + [ + "match", + [ + "get", + "灯色" + ], + 1, + "1", + 2, + "2", + "3" + ] + ] + ] + }, + "filter": [ + "any", + [ + "match", + [ + "get", + "形状分類番号" + ], + 300, + true, + 301, + true, + 302, + true, + false + ], + [ + "has", + "明弧/分孤" + ] + ] + }, + { + "id": "#b#d2#d5#d10#S3#S航路標識群フレア", + "source": "newpec", + "source-layer": "p航路標識群", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "灯色" + ], + 1, + "light-daytime-1", + 2, + "light-daytime-2", + "light-daytime-3" + ] + }, + "filter": [ + "match", + [ + "get", + "形状分類番号" + ], + 301, + true, + 302, + true, + 303, + true, + 306, + true, + 311, + true, + 312, + true, + 315, + true, + 316, + true, + 318, + true, + 320, + true, + 322, + true, + 324, + true, + 326, + true, + 328, + true, + 332, + true, + 334, + true, + false + ] + }, + { + "id": "#b#d2#d5#d10#at#S3#S航路標識群", + "source": "newpec", + "source-layer": "p航路標識群", + "type": "symbol", + "layout": { + "icon-allow-overlap": true, + "icon-image": [ + "match", + [ + "get", + "表示用番号" + ], + "30000000", + "symbol-daytime-300", + "30000001", + "symbol-daytime-300", + "30000002", + "symbol-daytime-300", + "30000003", + "symbol-daytime-300", + "30000004", + "symbol-daytime-300", + "30000005", + "symbol-daytime-300", + "30000006", + "symbol-daytime-300", + "30000007", + "symbol-daytime-300", + "30000008", + "symbol-daytime-300", + "30000009", + "symbol-daytime-300", + "30000010", + "symbol-daytime-300", + "30000011", + "symbol-daytime-300", + "30100000", + "symbol-daytime-300", + "30100001", + "symbol-daytime-301", + "30100002", + "symbol-daytime-301", + "30100003", + "symbol-daytime-301", + "30100004", + "symbol-daytime-301", + "30100005", + "symbol-daytime-301", + "30100006", + "symbol-daytime-301", + "30100007", + "symbol-daytime-301", + "30100008", + "symbol-daytime-301", + "30100009", + "symbol-daytime-301", + "30100010", + "symbol-daytime-301", + "30100011", + "symbol-daytime-301", + "30200001", + "symbol-daytime-302", + "30200002", + "symbol-daytime-302", + "30200003", + "symbol-daytime-302", + "30200004", + "symbol-daytime-302", + "30200005", + "symbol-daytime-302", + "30200006", + "symbol-daytime-302", + "30200007", + "symbol-daytime-302", + "30200008", + "symbol-daytime-302", + "30200009", + "symbol-daytime-302", + "30200010", + "symbol-daytime-302", + "30200011", + "symbol-daytime-302", + "30300000", + "symbol-daytime-303", + "30300002", + "symbol-daytime-303", + "30300004", + "symbol-daytime-303", + "30500001", + "symbol-daytime-30500001", + "30500002", + "symbol-daytime-30500002", + "30500003", + "symbol-daytime-30500003", + "30500004", + "symbol-daytime-30500003", + "30500010", + "symbol-daytime-30500003", + "30600000", + "symbol-daytime-303", + "30600001", + "symbol-daytime-303", + "30600002", + "symbol-daytime-303", + "30600003", + "symbol-daytime-303", + "30600004", + "symbol-daytime-303", + "30600006", + "symbol-daytime-303", + "30700000", + "symbol-daytime-30700003", + "30700001", + "symbol-daytime-30700001", + "30700002", + "symbol-daytime-30700002", + "30700003", + "symbol-daytime-30700003", + "30700004", + "symbol-daytime-30700003", + "30700007", + "symbol-daytime-30700003", + "30800000", + "symbol-daytime-308", + "30900000", + "symbol-daytime-30500003", + "30900002", + "symbol-daytime-30500002", + "30900004", + "symbol-daytime-30500003", + "30900009", + "symbol-daytime-30500003", + "30900011", + "symbol-daytime-30500003", + "31000000", + "symbol-daytime-310", + "31000001", + "symbol-daytime-310", + "31000002", + "symbol-daytime-310", + "31000003", + "symbol-daytime-310", + "31000004", + "symbol-daytime-310", + "31035000", + "symbol-daytime-310", + "31035001", + "symbol-daytime-310", + "31035100", + "symbol-daytime-310", + "31035102", + "symbol-daytime-310", + "31035400", + "symbol-daytime-310", + "31035404", + "symbol-daytime-310", + "31035504", + "symbol-daytime-311355", + "31035600", + "symbol-daytime-310", + "31035700", + "symbol-daytime-310", + "31035704", + "symbol-daytime-310", + "31035800", + "symbol-daytime-310", + "31035804", + "symbol-daytime-310", + "31100002", + "symbol-daytime-310", + "31100004", + "symbol-daytime-310", + "31135001", + "symbol-daytime-311350", + "31135102", + "symbol-daytime-311351", + "31135400", + "symbol-daytime-311354", + "31135404", + "symbol-daytime-311354", + "31135504", + "symbol-daytime-311355", + "31135604", + "symbol-daytime-311356", + "31135701", + "symbol-daytime-311357", + "31135704", + "symbol-daytime-311357", + "31135800", + "symbol-daytime-311358", + "31135804", + "symbol-daytime-311358", + "31135900", + "symbol-daytime-311359", + "31135904", + "symbol-daytime-311359", + "31136003", + "symbol-daytime-311360", + "31136004", + "symbol-daytime-311360", + "31200001", + "symbol-daytime-327", + "31200003", + "symbol-daytime-327", + "31235001", + "symbol-daytime-312350", + "31235004", + "symbol-daytime-312350", + "31235102", + "symbol-daytime-312351", + "31235404", + "symbol-daytime-312354", + "31235504", + "symbol-daytime-312355", + "31235604", + "symbol-daytime-312356", + "31235704", + "symbol-daytime-312357", + "31235804", + "symbol-daytime-312358", + "31235904", + "symbol-daytime-312359", + "31236003", + "symbol-daytime-312360", + "31236004", + "symbol-daytime-312360", + "31236302", + "symbol-daytime-313362", + "31236303", + "symbol-daytime-313362", + "31300000", + "symbol-daytime-327", + "31300001", + "symbol-daytime-327", + "31300002", + "symbol-daytime-327", + "31300003", + "symbol-daytime-327", + "31300004", + "symbol-daytime-327", + "31300010", + "symbol-daytime-327", + "31335000", + "symbol-daytime-325", + "31335001", + "symbol-daytime-325", + "31335100", + "symbol-daytime-327", + "31335102", + "symbol-daytime-327", + "31335400", + "symbol-daytime-312354", + "31335600", + "symbol-daytime-312356", + "31335604", + "symbol-daytime-312356", + "31335700", + "symbol-daytime-312357", + "31335704", + "symbol-daytime-312357", + "31335800", + "symbol-daytime-312358", + "31336003", + "symbol-daytime-312360", + "31336300", + "symbol-daytime-313362", + "31400004", + "symbol-daytime-314", + "31436204", + "symbol-daytime-314362", + "31500003", + "symbol-daytime-314", + "31500004", + "symbol-daytime-314", + "31536203", + "symbol-daytime-314362", + "31536204", + "symbol-daytime-314362", + "31536403", + "symbol-daytime-314", + "31536404", + "symbol-daytime-314", + "31600004", + "symbol-daytime-316", + "31639904", + "symbol-daytime-316", + "31700004", + "symbol-daytime-317", + "31800003", + "symbol-daytime-317", + "31800004", + "symbol-daytime-317", + "32037000", + "symbol-daytime-320", + "32037002", + "symbol-daytime-320", + "32037003", + "symbol-daytime-320", + "32037004", + "symbol-daytime-320", + "32037100", + "symbol-daytime-320", + "32037101", + "symbol-daytime-320", + "32037103", + "symbol-daytime-320", + "32037200", + "symbol-daytime-320", + "32037203", + "symbol-daytime-320", + "32037204", + "symbol-daytime-320", + "32037303", + "symbol-daytime-320", + "32037304", + "symbol-daytime-320", + "32136000", + "symbol-daytime-321", + "32136003", + "symbol-daytime-321", + "32136004", + "symbol-daytime-321", + "32136010", + "symbol-daytime-321", + "32236003", + "symbol-daytime-321", + "32300000", + "symbol-daytime-323", + "32300001", + "symbol-daytime-323", + "32300002", + "symbol-daytime-323", + "32300003", + "symbol-daytime-323", + "32300004", + "symbol-daytime-323", + "32400001", + "symbol-daytime-323", + "32400002", + "symbol-daytime-323", + "32400004", + "symbol-daytime-323", + "32435001", + "symbol-daytime-324350", + "32435102", + "symbol-daytime-324351", + "32436003", + "symbol-daytime-324360", + "32436004", + "symbol-daytime-324360", + "32500000", + "symbol-daytime-325", + "32500001", + "symbol-daytime-325", + "32500002", + "symbol-daytime-325", + "32500003", + "symbol-daytime-325", + "32500004", + "symbol-daytime-325", + "32700000", + "symbol-daytime-327", + "32700001", + "symbol-daytime-327", + "32700002", + "symbol-daytime-327", + "32700003", + "symbol-daytime-327", + "32700004", + "symbol-daytime-327", + "32800001", + "symbol-daytime-327", + "32800002", + "symbol-daytime-327", + "32800003", + "symbol-daytime-327", + "33300000", + "symbol-daytime-333", + "33400001", + "symbol-daytime-333", + "33400002", + "symbol-daytime-333", + "33400003", + "symbol-daytime-333", + "33535000", + "symbol-daytime-335350", + "33535100", + "symbol-daytime-335351", + "33535900", + "symbol-daytime-335359", + "33535904", + "symbol-daytime-335359", + "" + ] + } + }, + { + "id": "#b#C000", + "minzoom": 11, + "source": "newpec", + "source-layer": "L海底地形", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "symbol-placement": "line", + "symbol-spacing": 200, + "text-field": [ + "get", + "水深値(m)" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-rotation-alignment": "viewport" + }, + "paint": { + "text-color": [ + "rgba", + 7, + 7, + 7, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#C140#概略等深線", + "minzoom": 11, + "source": "newpec", + "source-layer": "L概略等深線", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "symbol-placement": "line", + "symbol-spacing": 200, + "text-field": [ + "get", + "高さ/深度(m)" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-rotation-alignment": "viewport" + }, + "paint": { + "text-color": [ + "rgba", + 7, + 7, + 7, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#C140", + "minzoom": 11, + "source": "newpec", + "source-layer": "L等深線", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "symbol-placement": "line", + "symbol-spacing": 200, + "text-field": [ + "get", + "高さ/深度(m)" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-rotation-alignment": "viewport" + }, + "paint": { + "text-color": [ + "rgba", + 7, + 7, + 7, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#LN#C航路標識点名称", + "source": "newpec", + "source-layer": "p航路標識群", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "match", + [ + "get", + "形状分類番号" + ], + 308, + "", + 335, + "", + [ + "concat", + [ + "get", + "名称" + ], + [ + "case", + [ + "has", + "名称補助" + ], + [ + "concat", + "(", + [ + "get", + "名称補助" + ], + ")" + ], + "" + ] + ] + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-offset": [ + "match", + [ + "get", + "表示位置" + ], + 0, + [ + "literal", + [ + 2, + 2.5 + ] + ], + 1, + [ + "literal", + [ + 0, + 2.5 + ] + ], + 2, + [ + "literal", + [ + -2, + 2.5 + ] + ], + 4, + [ + "literal", + [ + 2, + 0.5 + ] + ], + 5, + [ + "literal", + [ + 0, + 0.5 + ] + ], + 6, + [ + "literal", + [ + -2, + 0.5 + ] + ], + 8, + [ + "literal", + [ + 2, + -1.5 + ] + ], + 9, + [ + "literal", + [ + 0, + -1.5 + ] + ], + 10, + [ + "literal", + [ + -2, + -1.5 + ] + ], + [ + "literal", + [ + 0, + 0.5 + ] + ] + ], + "text-anchor": [ + "match", + [ + "get", + "表示位置" + ], + 0, + "top-left", + 1, + "top", + 2, + "top-right", + 4, + "left", + 5, + "center", + 6, + "right", + 8, + "bottom-left", + 9, + "bottom", + 10, + "bottom-right", + "center" + ] + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#LA#C航路標識点灯略記", + "source": "newpec", + "source-layer": "p航路標識群", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "match", + [ + "get", + "形状分類番号" + ], + 335, + "V-AIS", + [ + "get", + "灯略記" + ] + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 10, + "text-offset": [ + "match", + [ + "get", + "表示位置" + ], + 0, + [ + "literal", + [ + 2, + 1.5 + ] + ], + 1, + [ + "literal", + [ + 0, + 1.5 + ] + ], + 2, + [ + "literal", + [ + -2, + 1.5 + ] + ], + 4, + [ + "literal", + [ + 2, + -0.5 + ] + ], + 5, + [ + "literal", + [ + 0, + -0.5 + ] + ], + 6, + [ + "literal", + [ + -2, + -0.5 + ] + ], + 8, + [ + "literal", + [ + 2, + -2.5 + ] + ], + 9, + [ + "literal", + [ + 0, + -2.5 + ] + ], + 10, + [ + "literal", + [ + -2, + -2.5 + ] + ], + [ + "literal", + [ + 0, + -0.5 + ] + ] + ], + "text-anchor": [ + "match", + [ + "get", + "表示位置" + ], + 0, + "top-left", + 1, + "top", + 2, + "top-right", + 4, + "left", + 5, + "center", + 6, + "right", + 8, + "bottom-left", + 9, + "bottom", + 10, + "bottom-right", + "center" + ] + }, + "paint": { + "text-color": [ + "match", + [ + "get", + "形状分類番号" + ], + 335, + [ + "rgba", + 198, + 77, + 187, + 1 + ], + [ + "rgba", + 0, + 0, + 0, + 1 + ] + ] + } + }, + { + "id": "#weather", + "source": "newpec", + "source-layer": "dummy", + "type": "symbol", + "layout": { + "visibility": "none" + } + }, + { + "id": "#b#d2#d5#d10#C800#EN", + "source": "newpec", + "source-layer": "p地名", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "英文字地名" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "top" + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#C800#JA", + "source": "newpec", + "source-layer": "p地名", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "日本語地名" + ], + "text-font": [ + "NotoSerifCJK-Regular" + ], + "text-size": 10, + "text-anchor": "bottom" + }, + "paint": { + "text-color": [ + "rgba", + 0, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#C600#名称", + "source": "newpec", + "source-layer": "p高さ制限", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "get", + "名称" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 12, + "text-anchor": "bottom" + }, + "paint": { + "text-color": [ + "rgba", + 255, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#C600#高さ", + "source": "newpec", + "source-layer": "p高さ制限", + "type": "symbol", + "layout": { + "text-allow-overlap": true, + "text-max-width": 100, + "text-field": [ + "concat", + "高さ", + [ + "get", + "高さ(m)" + ], + "m" + ], + "text-font": [ + "NotoSansCJK-Regular" + ], + "text-size": 12, + "text-anchor": "top" + }, + "paint": { + "text-color": [ + "rgba", + 255, + 0, + 0, + 1 + ] + } + }, + { + "id": "#b#d2#d5#d10#P穴", + "source": "newpec", + "source-layer": "P穴", + "type": "fill", + "paint": { + "fill-color": [ + "rgba", + 0, + 0, + 0, + 0 + ] + } + }, + { + "id": "#d#shipfinder#bread", + "type": "symbol", + "source": "shipfinder", + "filter": [ + "all", + [ + ">=", + [ + "/", + [ + "*", + [ + "get", + "sog" + ], + 3600 + ], + 1852000 + ], + 1 + ], + [ + "<=", + [ + "number", + [ + "get", + "sog" + ] + ], + 52576 + ] + ], + "layout": { + "visibility": "visible", + "icon-image": [ + "concat", + "shipfinder-", + [ + "case", + [ + "all", + [ + ">=", + [ + "number", + [ + "get", + "rot" + ] + ], + -1200 + ], + [ + "<", + [ + "number", + [ + "get", + "rot" + ] + ], + 0 + ], + [ + "!=", + [ + "number", + [ + "get", + "rot" + ] + ], + -128 + ] + ], + "left", + [ + "all", + [ + "<=", + [ + "number", + [ + "get", + "rot" + ] + ], + 1200 + ], + [ + ">", + [ + "number", + [ + "get", + "rot" + ] + ], + 0 + ] + ], + "right", + "straight" + ] + ], + "icon-size": [ + "step", + [ + "get", + "length" + ], + 0.5, + 250, + 0.6, + 500, + 0.7, + 1000, + 0.8, + 2000, + 0.9, + 3000, + 1.0 + ], + "icon-rotate": [ + "/", + [ + "case", + [ + "<", + [ + "number", + [ + "get", + "hdg" + ] + ], + 36000 + ], + [ + "get", + "hdg" + ], + [ + "get", + "cog" + ] + ], + 100 + ], + "icon-rotation-alignment": "map", + "icon-allow-overlap": true + } + }, + { + "id": "#d#shipfinder#hull", + "type": "symbol", + "source": "shipfinder", + "layout": { + "visibility": "visible", + "icon-image": [ + "concat", + "shipfinder-hull-", + [ + "case", + [ + "all", + [ + "has", + "delay" + ], + [ + ">", + [ + "get", + "delay" + ], + 120 + ] + ], + "gray", + [ + "step", + [ + "get", + "length" + ], + "blue", + 250, + "green", + 500, + "yellow", + 1000, + "orange", + 2000, + "red" + ] + ] + ], + "icon-size": [ + "step", + [ + "get", + "length" + ], + 0.6, + 250, + 0.7, + 500, + 0.8, + 1000, + 0.9, + 2000, + 1.0 + ], + "icon-rotate": [ + "/", + [ + "case", + [ + "<", + [ + "number", + [ + "get", + "hdg" + ] + ], + 36000 + ], + [ + "get", + "hdg" + ], + [ + "get", + "cog" + ] + ], + 100 + ], + "icon-rotation-alignment": "map", + "icon-allow-overlap": true + } + }, + { + "id": "#d#shipfinder#sog", + "type": "symbol", + "source": "shipfinder", + "filter": [ + "all", + [ + ">=", + [ + "/", + [ + "*", + [ + "get", + "sog" + ], + 3600 + ], + 1852000 + ], + 1 + ], + [ + "<=", + [ + "number", + [ + "get", + "sog" + ] + ], + 52576 + ] + ], + "layout": { + "visibility": "visible", + "icon-image": [ + "concat", + "shipfinder-sog", + [ + "step", + [ + "/", + [ + "*", + [ + "get", + "sog" + ], + 3600 + ], + 1852000 + ], + "1", + 5, + "2", + 10, + "3", + 20, + "4", + 30, + "5", + 40, + "6" + ] + ], + "icon-rotate": [ + "/", + [ + "get", + "cog" + ], + 100 + ], + "icon-rotation-alignment": "map", + "icon-allow-overlap": true + } + } + ], + "metadata": { + "navsea_test_version": "kyushu-semantic-icon-v1-20260806", + "role": "left_original_newpec_reference" + } +} diff --git a/tasks/pbf/NavSea_Kyushu_语义图标视觉审计范围-v1.json b/tasks/pbf/NavSea_Kyushu_语义图标视觉审计范围-v1.json new file mode 100644 index 0000000..3520327 --- /dev/null +++ b/tasks/pbf/NavSea_Kyushu_语义图标视觉审计范围-v1.json @@ -0,0 +1,16 @@ +[ + { + "id": "hakata_kyushu_icon_v1", + "label": "博多港九州语义图标测试", + "center": [130.335, 33.6385], + "radius_nm": 10, + "zoom_levels": [10, 12] + }, + { + "id": "karatsu_kyushu_icon_v1", + "label": "唐津九州语义图标测试", + "center": [129.9697, 33.4425], + "radius_nm": 5, + "zoom_levels": [10, 12] + } +] diff --git a/tasks/pbf/NavSea_语义图标替换表-v1.md b/tasks/pbf/NavSea_语义图标替换表-v1.md new file mode 100644 index 0000000..4bd169d --- /dev/null +++ b/tasks/pbf/NavSea_语义图标替换表-v1.md @@ -0,0 +1,156 @@ +# NavSea 语义图标替换表-v1 + +状态:设计稿,尚未写入 PBF、style 或 sprite。 + +基线: + +- PBF:`/home/wwwroot/pbf-delivery-full-20260418-rebuild` +- style:`src/pbf/style.navsea-delivery-full-semantic-extentfix.json` +- sprite:`/mnt/sda1/www/newpec/sprite-semantic/sprite` + +## 1. 统一规则 + +PBF、style 和 `sprite.json` 使用同一个短语 ID。PBF 中建议使用: + +```text +icon_id:普通点状图标 +arc_id:灯弧图标 +``` + +`class_code` 继续保留用于对象追溯,但不再被 style 用来拼接图标名称。 + +颜色缩写: + +| 缩写 | 含义 | +|---|---| +| `G` | 绿色 | +| `R` | 红色 | +| `Y` | 黄色 | +| `W` | 白色 | +| `B` | 蓝色 | +| `YW` | 黄/白组合 | + +## 2. 灯弧 + +| 当前 key | 新 ID | 条件/含义 | +|---|---|---| +| `arc-daytime-m1` | `arc_G` | 绿色闭合灯弧 | +| `arc-daytime-m2` | `arc_R` | 红色闭合灯弧 | +| `arc-daytime-m3` | `arc_YW` | 黄/白闭合灯弧 | +| `arc-daytime-04027289` | `arc_open_YW` | `coastal_lighthouse_over_15m` 且 `light_sector_mode=sector` | + +普通灯弧按 `light_color_code` 选择 `arc_G`、`arc_R` 或 `arc_YW`;扇弧条件优先级最高。 + +## 3. 航标、灯塔、浮标 + +| 当前 key | 新 ID | 含义 | +|---|---|---| +| `symbol-daytime-300` | `lt_cst` | 沿岸灯台 | +| `symbol-daytime-301` | `lt_hbr` | 港湾灯台 | +| `symbol-daytime-302` | `lt_bkw` | 防波堤灯台 | +| `symbol-daytime-303` | `lt_min` | 小型灯 | +| `symbol-daytime-30500001` | `lt_lead_a` | 导标变体 A | +| `symbol-daytime-30500002` | `lt_lead_b` | 导标变体 B | +| `symbol-daytime-30500003` | `lt_lead_c` | 导标变体 C | +| `symbol-daytime-30700001` | `lt_up_G` | 绿色上向灯 | +| `symbol-daytime-30700002` | `lt_up_R` | 红色上向灯 | +| `symbol-daytime-30700003` | `mk_lead_c` | 导标变体 | +| `symbol-daytime-308` | `mk_lead_v` | 导标变体 | +| `symbol-daytime-310` | `lt_bcn` | 灯标 | +| `symbol-daytime-320` | `bu_lit` | 灯浮标 | +| `symbol-daytime-321` | `bu_gen` | 普通浮标 | +| `symbol-daytime-323` | `bu_pil` | 圆柱/柱型浮标 | +| `symbol-daytime-325` | `bu_can` | 圆筒型浮标 | +| `symbol-daytime-327` | `bu_lat` | 桁架型浮标 | +| `symbol-daytime-335359` | `mk_vais` | V-AIS 航标 | +| `symbol-daytime-719` | `an_quar` | 检疫锚地 | + +现有 style 中的别名也统一归并: + +| 当前 key | 新 ID | +|---|---| +| `harbor_lighthouse` | `lt_hbr` | +| `breakwater_lighthouse` | `lt_bkw` | + +## 4. 危险物与鱼礁 + +| 当前 class_code / key | 新 ID | 含义 | +|---|---|---| +| `401`、`402`、`403` / `symbol-daytime-401` | `hz_rock_awash` | 水上岩、干出岩、洗岩组 | +| `404` / `symbol-daytime-404` | `hz_rock_sub` | 暗岩 | +| `405` / `symbol-daytime-405` | `hz_danger_clear` | 扫海后的危险物 | +| `409` / `symbol-daytime-409` | `hz_danger_iso` | 孤立危险物 | +| `410` / `symbol-daytime-410` | `hz_wreck_hull` | 船体露出沉船 | +| `412` / `symbol-daytime-412` | `hz_wreck_sub` | 危险全沉没船 | +| `413`、`415` / `symbol-daytime-413` | `hz_wreck_survey` | 测量/调查后的沉船 | +| `420` / `symbol-daytime-420` | `hz_foul` | 险恶物 | +| `421` / `symbol-daytime-421` | `hz_sandwave` | 沙波 | +| `422` / `symbol-daytime-422` | `hz_overfall` | 急潮、波纹、激潮 | +| `424` / `symbol-daytime-424` | `hz_whirl` | 渦流 | +| `425` / `symbol-daytime-425` | `hz_seaweed` | 海草 | +| `427` / `symbol-daytime-427` | `hz_obst` | 障碍物 | +| `428` / `symbol-daytime-428` | `hz_reef` | 鱼礁 | +| `429` / `symbol-daytime-429` | `hz_reef_danger` | 危险鱼礁 | +| `431` / `symbol-daytime-431` | `hz_tower` | 塔、橹、测台 | +| `432` / `symbol-daytime-432` | `hz_pile` | 墩柱、桩、杭 | +| `433` / `symbol-daytime-433` | `hz_dolphin` | 系缆墩 | +| `434` / `symbol-daytime-434` | `hz_outfall` | 海底设施、排水口、取水口 | + +## 5. 陆上地标 + +这些图标由 `onshore_structure_point` 的 `class_code` 生成,必须在重建 PBF 时直接写入 `icon_id`,不能继续由 style 动态拼接编号。 + +| class_code | canonical_object_type | 新 ID | +|---:|---|---| +| 640 | `chimney` | `lm_chim` | +| 650 | `tower_yagura_windmill` | `lm_twr` | +| 660 | `maritime_office` | `lm_mar` | +| 661 | `fishing_cooperative` | `lm_fish` | +| 662 | `customs_office` | `lm_cus` | +| 680 | 陆上显著物(观览车等) | `lm_prom` | +| 681 | `mountain_top` | `lm_mtn` | +| 682 | 管制信号所 | `lm_ctrl` | +| 698 | `other_landmark_monument` | `lm_mon` | + +## 6. 当前 PBF 中的直接图标值 + +当前全国 Full PBF 实际出现的 `chart_icon_image` 值,均应落入本表: + +```text +symbol-daytime-301 +symbol-daytime-303 +symbol-daytime-30500001 +symbol-daytime-30500002 +symbol-daytime-30500003 +symbol-daytime-30700003 +symbol-daytime-308 +symbol-daytime-310 +symbol-daytime-320 +symbol-daytime-321 +symbol-daytime-323 +symbol-daytime-325 +symbol-daytime-327 +symbol-daytime-335359 +symbol-daytime-405 +symbol-daytime-410 +symbol-daytime-412 +symbol-daytime-413 +symbol-daytime-428 +symbol-daytime-429 +symbol-daytime-719 +``` + +其中 `symbol-daytime-719` 当前语义建议为: + +```text +an_quar = quarantine anchorage +``` + +## 7. 实施约束 + +- 本表确认后,统一重建全部 Full PBF,不在现有 PBF 上做局部替换。 +- style 的 `icon-image` 统一读取 `icon_id` 或 `arc_id`,删除 `class_code` 拼接逻辑。 +- sprite JSON key 与新 ID 完全一致。 +- `class_code`、FID 和 source-layer 继续保留,用于反向追溯和对象审计。 +- `symbol-daytime-*`、`arc-daytime-*` 只允许出现在转换审计日志或历史映射表中,不能出现在正式 PBF、正式 style 和正式 sprite JSON 中。 +- `symbol-daytime-662` 对应 `lm_cus`,需要补上海关图标素材。 diff --git a/tasks/pbf/navsea_semantic_icon_map_v1.json b/tasks/pbf/navsea_semantic_icon_map_v1.json new file mode 100644 index 0000000..2b4978e --- /dev/null +++ b/tasks/pbf/navsea_semantic_icon_map_v1.json @@ -0,0 +1,224 @@ +{ + "version": "semantic-icon-v1", + "baseline": "full-semantic-extentfix", + "fields": { + "point_icon": "icon_id", + "light_arc": "arc_id", + "legacy_point_icon": "chart_icon_image" + }, + "color_codes": { + "green": "G", + "red": "R", + "yellow": "Y", + "white": "W", + "blue": "B", + "yellow_white": "YW" + }, + "sprite_key_map": { + "symbol-daytime-300": "lt_cst", + "symbol-daytime-301": "lt_hbr", + "symbol-daytime-302": "lt_bkw", + "symbol-daytime-303": "lt_min", + "symbol-daytime-30500001": "lt_lead_a", + "symbol-daytime-30500002": "lt_lead_b", + "symbol-daytime-30500003": "lt_lead_c", + "symbol-daytime-30700001": "lt_up_G", + "symbol-daytime-30700002": "lt_up_R", + "symbol-daytime-30700003": "mk_lead_c", + "symbol-daytime-308": "mk_lead_v", + "symbol-daytime-310": "lt_bcn", + "symbol-daytime-320": "bu_lit", + "symbol-daytime-321": "bu_gen", + "symbol-daytime-323": "bu_pil", + "symbol-daytime-325": "bu_can", + "symbol-daytime-327": "bu_lat", + "symbol-daytime-335359": "mk_vais", + "symbol-daytime-401": "hz_rock_awash", + "symbol-daytime-404": "hz_rock_sub", + "symbol-daytime-405": "hz_danger_clear", + "symbol-daytime-409": "hz_danger_iso", + "symbol-daytime-410": "hz_wreck_hull", + "symbol-daytime-412": "hz_wreck_sub", + "symbol-daytime-413": "hz_wreck_survey", + "symbol-daytime-420": "hz_foul", + "symbol-daytime-421": "hz_sandwave", + "symbol-daytime-422": "hz_overfall", + "symbol-daytime-424": "hz_whirl", + "symbol-daytime-425": "hz_seaweed", + "symbol-daytime-427": "hz_obst", + "symbol-daytime-428": "hz_reef", + "symbol-daytime-429": "hz_reef_danger", + "symbol-daytime-431": "hz_tower", + "symbol-daytime-432": "hz_pile", + "symbol-daytime-433": "hz_dolphin", + "symbol-daytime-434": "hz_outfall", + "symbol-daytime-640": "lm_chim", + "symbol-daytime-650": "lm_twr", + "symbol-daytime-660": "lm_mar", + "symbol-daytime-661": "lm_fish", + "symbol-daytime-662": "lm_cus", + "symbol-daytime-680": "lm_prom", + "symbol-daytime-681": "lm_mtn", + "symbol-daytime-682": "lm_ctrl", + "symbol-daytime-698": "lm_mon", + "symbol-daytime-719": "an_quar", + "symbol-daytime-720": "an_desig", + "symbol-daytime-721": "an_restrict", + "symbol-daytime-724": "an_no_anchor", + "symbol-daytime-505": "fac_port", + "symbol-daytime-520": "fac_fishport", + "symbol-daytime-530": "fac_marina", + "symbol-daytime-540": "fac_fisherina", + "symbol-daytime-550": "fac_seastation", + "harbor_lighthouse": "lt_hbr", + "breakwater_lighthouse": "lt_bkw", + "coastal_lighthouse": "lt_cst", + "light_minor": "lt_min", + "leading_light_variant_30500001": "lt_lead_a", + "leading_light_variantt_30500001": "lt_lead_a", + "leading_light_variant_30500002": "lt_lead_b", + "leading_light_variantt_30500002": "lt_lead_b", + "leading_light_variant_30500003": "lt_lead_c", + "leading_light_variantt_30500003": "lt_lead_c", + "leading_mark_variant_30700003": "mk_lead_c", + "leading_mark_variantt_30700003": "mk_lead_c", + "leading_mark_variant_308": "mk_lead_v", + "leading_mark_variantt_308": "mk_lead_v", + "light_beacon": "lt_bcn", + "buoy_light": "bu_lit", + "buoy_generic": "bu_gen", + "buoy_pillar": "bu_pil", + "buoy_can": "bu_can", + "buoy_lattice": "bu_lat", + "nav_mark_vais": "mk_vais", + "pilot_station": "fac_pilot", + "tidespot-daytime": "tide_spot", + "light-daytime-1": "fl_G", + "light-daytime-2": "fl_R", + "light-daytime-3": "fl_YW", + "arc-daytime-04027289": "arc_open_YW", + "arc-daytime-m1": "arc_G", + "arc-daytime-m2": "arc_R", + "arc-daytime-m3": "arc_YW", + "rock_exposed_drying_awash_group": "hz_rock_awash", + "sunken_rock": "hz_rock_sub", + "cleared_danger_object": "hz_danger_clear", + "isolated_danger": "hz_danger_iso", + "wreck_hull_exposed": "hz_wreck_hull", + "wreck_fully_submerged_dangerous": "hz_wreck_sub", + "wreck_surveyed": "hz_wreck_survey", + "foul_ground": "hz_foul", + "sand_wave": "hz_sandwave", + "tide_rips_overfalls": "hz_overfall", + "eddy_whirlpool": "hz_whirl", + "seaweed": "hz_seaweed", + "obstruction": "hz_obst", + "fish_reef": "hz_reef", + "fish_reef_dangerous": "hz_reef_danger", + "tower_yagura_observation_platform": "hz_tower", + "bollard_pile_stake": "hz_pile", + "dolphin_structure": "hz_dolphin", + "subsea_installation_outfall_intake": "hz_outfall", + "anchorage_quarantine": "an_quar", + "anchorage_designated": "an_desig", + "restriction_area_group": "an_restrict", + "anchoring_prohibited": "an_no_anchor", + "port_general_small_harbor_group": "fac_port", + "fishing_port": "fac_fishport", + "marina": "fac_marina", + "fisherina": "fac_fisherina", + "sea_station_umi_no_eki": "fac_seastation" + }, + "hazard_class_map": { + "401": "hz_rock_awash", + "402": "hz_rock_awash", + "403": "hz_rock_awash", + "404": "hz_rock_sub", + "405": "hz_danger_clear", + "409": "hz_danger_iso", + "410": "hz_wreck_hull", + "412": "hz_wreck_sub", + "413": "hz_wreck_survey", + "415": "hz_wreck_survey", + "420": "hz_foul", + "421": "hz_sandwave", + "422": "hz_overfall", + "424": "hz_whirl", + "425": "hz_seaweed", + "427": "hz_obst", + "428": "hz_reef", + "429": "hz_reef_danger", + "431": "hz_tower", + "432": "hz_pile", + "433": "hz_dolphin", + "434": "hz_outfall" + }, + "landmark_class_map": { + "640": "lm_chim", + "650": "lm_twr", + "660": "lm_mar", + "661": "lm_fish", + "662": "lm_cus", + "680": "lm_prom", + "681": "lm_mtn", + "682": "lm_ctrl", + "698": "lm_mon" + }, + "anchorage_class_map": { + "719": "an_quar", + "720": "an_desig", + "721": "an_restrict", + "722": "an_restrict", + "723": "an_restrict", + "724": "an_no_anchor" + }, + "facility_class_map": { + "505": "fac_port", + "510": "fac_port", + "520": "fac_fishport", + "530": "fac_marina", + "540": "fac_fisherina", + "550": "fac_seastation" + }, + "display_code_map": { + "30300000": "lt_min", + "30300002": "lt_min", + "30300004": "lt_min", + "30500001": "lt_lead_a", + "30500002": "lt_lead_b", + "30500003": "lt_lead_c", + "30500004": "lt_lead_c", + "30500010": "lt_lead_c", + "30600000": "lt_min", + "30600001": "lt_min", + "30600002": "lt_min", + "30600003": "lt_min", + "30600004": "lt_min", + "30600006": "lt_min", + "30700000": "mk_lead_c", + "30700001": "lt_up_G", + "30700002": "lt_up_R", + "30700003": "mk_lead_c", + "30700004": "mk_lead_c", + "30700007": "mk_lead_c", + "30800000": "mk_lead_v", + "30900000": "lt_lead_c", + "30900002": "lt_lead_b", + "30900004": "lt_lead_c", + "30900009": "lt_lead_c", + "30900011": "lt_lead_c" + }, + "arc_rules": { + "sector": "arc_open_YW", + "green": "arc_G", + "red": "arc_R", + "other": "arc_YW" + }, + "fallbacks": { + "lm_cus": { + "source_sprite_key": "symbol-daytime-660", + "status": "temporary_visual_fallback", + "reason": "当前 sprite 没有 symbol-daytime-662 原图" + } + } +}