Expand 20nm preservation audit and add Hakata hotspot audit

This commit is contained in:
OpenAI Codex
2026-04-01 17:50:01 +08:00
parent 62a709d113
commit 931920023e
13 changed files with 1746 additions and 649 deletions

View File

@@ -12,12 +12,12 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
当前页面版本体系:
- `HTML: compare-r14-20260401-1523`
- `HTML: compare-r15-20260401-1705`
当前页面支持 2 个 profile但仍是同一张 HTML
1. 唐津 20 海里
- `Style: karatsu-final-style-r5-20260401-1540 (style.navsea-delivery-karatsu-20nm-final.json)`
- `Style: karatsu-final-style-r11-20260401-1719 (style.navsea-delivery-karatsu-20nm-final.json)`
- `PBF: karatsu-final-pbf-20nm-20260401-0248 (pbf-delivery-karatsu-20nm-final)`
2. 九州
@@ -39,6 +39,8 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
- 左右联动
- 点击拾取
- HTML / Style / PBF 三层版本可见
- 页面现在还支持 URL 相机参数,便于同一张页面切到热点区做自动截图:
- `?profile=karatsu20&center=130.335,33.6385&zoom=12.2`
## Current Truth
@@ -64,24 +66,28 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
当前新增结论:
- 紫色大 `X` 对应的不是 `428`
- 在当前 sprite 体系里
- `409 -> symbol-daytime-409`
- `429 -> symbol-daytime-429`
- `428` 更像鱼礁/椭圆眼形符号
- 第二类“X 丢了”的问题,已经确认有一部分是危险物点与红绿小灯在近坐标重叠:
- 例如同一热点存在:
- `険悪物(class_code=420)` at `[3023,524]`
- red light `30600002` at `[3013,524]`
- green light `30600001` at `[3029,505]`
- 这类问题更像图层叠放和当前 icon-size 过大,不是 PBF 缺对象
- `fid=13025299` 这类对象的最新结论已经纠正:
- 左侧原始版是 `p航行危険障害物 / 分類番号 409 / 孤立危険物`
- 当前 `20nm final` 后台对象保真审计显示这类 `409` 在 final 里是完整保留下来的
- 当前问题已经收敛成:
- `20nm delivery` 没保留 `class_code`
- `20nm final style` 之前没有对 `navigation_hazard_point``class_code` 选 icon
- 也就是说,这批点现在的主问题是 `final style`,不是 `final PBF` 丢对象
- compare 页已经支持热点定位参数strict audit 现在可以在同一张页里切到博多港自动截图
- `20nm final` 的对象保真审计已扩到 5 组
- `p航行危険障害物 -> navigation_hazard_point`
- `p投錨注意障害物 -> anchor_caution_hazard_point`
- `p航路標識群 -> navigation_marks`
- `p施設・境界線等 -> facility_boundary_point`
- `P航路ククリ -> route_outline`
- 扩层后的结论:
- `delivery_20nm``4165/4165` identifier lost
- 当前 `final_20nm``4165/4165` preserved
- 也就是说:
- 现在危险物、航标、设施点、航路线这 5 组在 final PBF 里都没有丢对象
- 后续主问题继续收敛在 `style`
- 博多港这轮已补回:
- `route_outline` 紫色虚线
- `facility_boundary_point` 的 class-based 图标
- `505 -> symbol-daytime-505`
- `510 -> symbol-daytime-505`
- `520 -> symbol-daytime-520`
- `530 -> symbol-daytime-530`
- `550 -> symbol-daytime-550`
- 设施点文字层做过一次试验版 `r10`,但博多港 AOI 截图差异变大,已回退;当前保留的有效版本是 `style-r11`
一句话判断:
@@ -95,7 +101,7 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
## Object Preservation Audit
当前已经新增一条专门的对象保真审计:
当前已经新增并扩展了一条专门的对象保真审计:
- 脚本:
- [`navsea_object_preservation_audit.py`](/root/sourceserver/pbf/navsea_object_preservation_audit.py)
@@ -106,22 +112,20 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
当前结论非常明确:
- `delivery_20nm`
- raw objects: `2090`
- raw objects: `4165`
- preserved: `0`
- raw class lost: `2090`
- identifier lost: `4165`
- `final_20nm`
- raw objects: `2090`
- preserved: `2090`
- raw objects: `4165`
- preserved: `4165`
- missing object: `0`
- raw class lost: `0`
- identifier lost: `0`
重点含义:
-`20nm delivery` 的危险物细分类全部丢失
- 当前 `20nm final` 的危险物细分类已经完整保留下来
- `p航行危険障害物:409` 在 final 中是:
- raw=`25`
- preserved=`25`
-`20nm delivery` 不只是危险物,连航标、设施点、航路线的识别字段也都没保住
- 当前 `20nm final` 里,这 5 组对象的细分类 / 显示码已经完整保留下来
- 当前对象保真审计已经能先把“东西丢了”这类严重问题挡在最前面
## Final Release Candidate
@@ -195,9 +199,10 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
当前认可的可信审计方法:
1. `20nm compare` 肉眼审图
2. 小范围 AOI 图像对比
3. compare 页点击拾取
4. `10nm rerun` 对象级 backend audit
2. `object preservation audit`
3. 小范围 AOI 图像对比
4. compare 页点击拾取
5. `10nm rerun` 对象级 backend audit
当前小范围试验方法文档:
@@ -207,17 +212,22 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
当前 pilot 热点配置:
- [`strict_audit_hotspots_20nm_pilot.json`](/root/sourceserver/pbf/strict_audit_hotspots_20nm_pilot.json)
- [`strict_audit_hotspots_20nm_hakata.json`](/root/sourceserver/pbf/strict_audit_hotspots_20nm_hakata.json)
当前 pilot 报告:
- [`report/strict_audit_pilot/strict_audit_summary.md`](/root/sourceserver/pbf/report/strict_audit_pilot/strict_audit_summary.md)
- [`report/strict_audit_pilot/strict_audit_summary.json`](/root/sourceserver/pbf/report/strict_audit_pilot/strict_audit_summary.json)
- [`report/strict_audit_20nm_hakata_r9/strict_audit_summary.md`](/root/sourceserver/pbf/report/strict_audit_20nm_hakata_r9/strict_audit_summary.md)
- [`report/strict_audit_20nm_hakata_r11/strict_audit_summary.md`](/root/sourceserver/pbf/report/strict_audit_20nm_hakata_r11/strict_audit_summary.md)
当前结论:
- 不再只看整屏 diff
- 不再只看 `20nm` backend 总量数字
- `20nm` backend 仍不适合当严格对象级审计
- 博多港 AOI 现在也已经纳入固定截图审计
- `r10` 的设施文字层试验让热点差异变大,已回退;当前线上保留 `r11`
- 当前正式审计顺序已经明确为:
-`object preservation audit`
-`render audit`

View File

@@ -19,21 +19,42 @@ DEFAULT_DELIVERY_ROOT = Path("/home/wwwroot/pbf-delivery-karatsu-20nm")
DEFAULT_FINAL_ROOT = Path("/home/wwwroot/pbf-delivery-karatsu-20nm-final")
DEFAULT_REPORT_ROOT = Path("/root/sourceserver/pbf/report/object_preservation_20nm")
HAZARD_LAYER_RULES = (
AUDIT_RULES = (
{
"raw_layer": "p航行危険障害物",
"delivery_layer": "navigation_hazard_point",
"raw_class_field": "分類番号",
"delivery_class_field": "class_code",
"raw_match_field": "分類番号",
"delivery_match_field": "class_code",
"label": "navigation hazards",
},
{
"raw_layer": "p投錨注意障害物",
"delivery_layer": "anchor_caution_hazard_point",
"raw_class_field": "分類番号",
"delivery_class_field": "class_code",
"raw_match_field": "分類番号",
"delivery_match_field": "class_code",
"label": "anchor hazards",
},
{
"raw_layer": "p航路標識群",
"delivery_layer": "navigation_marks",
"raw_match_field": "表示用番号",
"delivery_match_field": "display_code",
"label": "navigation marks",
},
{
"raw_layer": "p施設・境界線等",
"delivery_layer": "facility_boundary_point",
"raw_match_field": "分類番号",
"delivery_match_field": "class_code",
"label": "facility points",
},
{
"raw_layer": "P航路ククリ",
"delivery_layer": "route_outline",
"raw_match_field": "分類番号",
"delivery_match_field": "class_code",
"label": "route outlines",
},
)
MAX_EXAMPLES = 20
@@ -109,19 +130,19 @@ def audit_one_target(
x = int(rel.parts[1])
y = int(Path(rel.parts[2]).stem)
tile = TileCoord(z=z, x=x, y=y)
raw_index = build_tile_index(raw_tile, HAZARD_LAYER_RULES)
target_index = build_tile_index(target_tile, HAZARD_LAYER_RULES)
raw_index = build_tile_index(raw_tile, AUDIT_RULES)
target_index = build_tile_index(target_tile, AUDIT_RULES)
all_target_geoms: dict[str, list[tuple[str, dict[str, Any]]]] = defaultdict(list)
for rule in HAZARD_LAYER_RULES:
for rule in AUDIT_RULES:
for feat in target_index[rule["delivery_layer"]]:
all_target_geoms[geometry_signature(feat)].append((rule["delivery_layer"], feat))
for rule in HAZARD_LAYER_RULES:
for rule in AUDIT_RULES:
raw_layer = rule["raw_layer"]
delivery_layer = rule["delivery_layer"]
raw_class_field = rule["raw_class_field"]
delivery_class_field = rule["delivery_class_field"]
raw_match_field = rule["raw_match_field"]
delivery_match_field = rule["delivery_match_field"]
key = f"{raw_layer}->{delivery_layer}"
target_by_geom: dict[str, list[dict[str, Any]]] = defaultdict(list)
@@ -132,8 +153,8 @@ def audit_one_target(
totals["raw_objects"] += 1
rule_stats[key]["raw_objects"] += 1
raw_props = raw_feat.get("properties", {})
raw_class = raw_props.get(raw_class_field)
class_key = f"{raw_layer}:{raw_class}"
raw_match_value = raw_props.get(raw_match_field)
class_key = f"{raw_layer}:{raw_match_value}"
geom_sig = geometry_signature(raw_feat)
name = raw_props.get("名称") or parse_at_name(raw_props.get("at"))
candidates = target_by_geom.get(geom_sig, [])
@@ -155,11 +176,13 @@ def audit_one_target(
"name": name,
"raw_layer": raw_layer,
"delivery_layer": delivery_layer,
"raw_class": raw_class,
"raw_match_field": raw_match_field,
"raw_match_value": raw_match_value,
"other_layer_hits": [
{
"delivery_layer": layer_name,
"delivery_class": feat.get("properties", {}).get(delivery_class_field),
"delivery_match_field": delivery_match_field,
"delivery_match_value": feat.get("properties", {}).get(delivery_match_field),
"canonical_object_type": feat.get("properties", {}).get("canonical_object_type"),
}
for layer_name, feat in other_layer_hits[:5]
@@ -170,7 +193,7 @@ def audit_one_target(
for candidate in candidates:
target_props = candidate.get("properties", {})
if target_props.get(delivery_class_field) == raw_class:
if target_props.get(delivery_match_field) == raw_match_value:
matched_class = True
break
@@ -180,10 +203,10 @@ def audit_one_target(
class_stats[class_key]["preserved"] += 1
continue
if all(candidate.get("properties", {}).get(delivery_class_field) is None for candidate in candidates):
issue = "raw_class_lost"
if all(candidate.get("properties", {}).get(delivery_match_field) is None for candidate in candidates):
issue = "identifier_lost"
else:
issue = "class_mismatch"
issue = "identifier_mismatch"
totals[issue] += 1
rule_stats[key][issue] += 1
@@ -196,10 +219,12 @@ def audit_one_target(
"name": name,
"raw_layer": raw_layer,
"delivery_layer": delivery_layer,
"raw_class": raw_class,
"raw_match_field": raw_match_field,
"raw_match_value": raw_match_value,
"candidates": [
{
"delivery_class": candidate.get("properties", {}).get(delivery_class_field),
"delivery_match_field": delivery_match_field,
"delivery_match_value": candidate.get("properties", {}).get(delivery_match_field),
"canonical_object_type": candidate.get("properties", {}).get("canonical_object_type"),
"chart_symbol_code": candidate.get("properties", {}).get("chart_symbol_code"),
"chart_icon_image": candidate.get("properties", {}).get("chart_icon_image"),
@@ -218,13 +243,13 @@ def audit_one_target(
"preserved": stats.get("preserved", 0),
"missing_object": stats.get("missing_object", 0),
"wrong_relayer": stats.get("wrong_relayer", 0),
"raw_class_lost": stats.get("raw_class_lost", 0),
"class_mismatch": stats.get("class_mismatch", 0),
"identifier_lost": stats.get("identifier_lost", 0),
"identifier_mismatch": stats.get("identifier_mismatch", 0),
}
)
top_class_issues.sort(
key=lambda item: (
item["missing_object"] + item["wrong_relayer"] + item["raw_class_lost"] + item["class_mismatch"],
item["missing_object"] + item["wrong_relayer"] + item["identifier_lost"] + item["identifier_mismatch"],
item["raw_objects"],
),
reverse=True,
@@ -254,8 +279,8 @@ def audit_one_target(
f"- preserved: `{totals.get('preserved', 0)}`",
f"- missing object: `{totals.get('missing_object', 0)}`",
f"- wrong relayer: `{totals.get('wrong_relayer', 0)}`",
f"- raw class lost: `{totals.get('raw_class_lost', 0)}`",
f"- class mismatch: `{totals.get('class_mismatch', 0)}`",
f"- identifier lost: `{totals.get('identifier_lost', 0)}`",
f"- identifier mismatch: `{totals.get('identifier_mismatch', 0)}`",
"",
"## Per Rule",
"",
@@ -269,8 +294,8 @@ def audit_one_target(
f"- preserved: `{stats.get('preserved', 0)}`",
f"- missing object: `{stats.get('missing_object', 0)}`",
f"- wrong relayer: `{stats.get('wrong_relayer', 0)}`",
f"- raw class lost: `{stats.get('raw_class_lost', 0)}`",
f"- class mismatch: `{stats.get('class_mismatch', 0)}`",
f"- identifier lost: `{stats.get('identifier_lost', 0)}`",
f"- identifier mismatch: `{stats.get('identifier_mismatch', 0)}`",
"",
]
)
@@ -279,7 +304,7 @@ def audit_one_target(
for item in top_class_issues[:12]:
lines.append(
"- `{class_key}` raw=`{raw_objects}` preserved=`{preserved}` missing=`{missing_object}` "
"wrong_relayer=`{wrong_relayer}` class_lost=`{raw_class_lost}` class_mismatch=`{class_mismatch}`".format(
"wrong_relayer=`{wrong_relayer}` identifier_lost=`{identifier_lost}` identifier_mismatch=`{identifier_mismatch}`".format(
**item
)
)
@@ -299,7 +324,7 @@ def audit_one_target(
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Audit raw-object preservation for hazard layers between original and delivery/final PBFs."
description="Audit raw-object preservation for hazards, navigation marks, facility points, and route outlines between original and delivery/final PBFs."
)
parser.add_argument("--raw-root", type=Path, default=DEFAULT_RAW_ROOT)
parser.add_argument("--delivery-root", type=Path, default=DEFAULT_DELIVERY_ROOT)

View File

@@ -6,23 +6,41 @@
## Totals
- tiles compared: `154`
- raw objects: `2090`
- raw objects: `4165`
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `2090`
- class mismatch: `0`
- identifier lost: `4165`
- identifier mismatch: `0`
## Per Rule
### `P航路ククリ->route_outline`
- raw objects: `19`
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `19`
- identifier mismatch: `0`
### `p投錨注意障害物->anchor_caution_hazard_point`
- raw objects: `1426`
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `1426`
- class mismatch: `0`
- identifier lost: `1426`
- identifier mismatch: `0`
### `p施設・境界線等->facility_boundary_point`
- raw objects: `171`
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `171`
- identifier mismatch: `0`
### `p航行危険障害物->navigation_hazard_point`
@@ -30,43 +48,52 @@
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `664`
- class mismatch: `0`
- identifier lost: `664`
- identifier mismatch: `0`
### `p航路標識群->navigation_marks`
- raw objects: `1885`
- preserved: `0`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `1885`
- identifier mismatch: `0`
## Top Class Issues
- `p投錨注意障害物:428` raw=`702` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`702` class_mismatch=`0`
- `p航行危険障害物:404` raw=`413` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`413` class_mismatch=`0`
- `p投錨注意障害物:420` raw=`355` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`355` class_mismatch=`0`
- `p投錨注意障害物:425` raw=`255` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`255` class_mismatch=`0`
- `p航行危険障害物:403` raw=`128` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`128` class_mismatch=`0`
- `p航行危険障害物:432` raw=`40` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`40` class_mismatch=`0`
- `p投錨注意障害物:421` raw=`32` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`32` class_mismatch=`0`
- `p投錨注意障害物:415` raw=`25` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`25` class_mismatch=`0`
- `p投錨注意障害物:413` raw=`25` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`25` class_mismatch=`0`
- `p航行危険障害物:409` raw=`25` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`25` class_mismatch=`0`
- `p航行危険障害物:431` raw=`22` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`22` class_mismatch=`0`
- `p投錨注意障害物:434` raw=`18` preserved=`0` missing=`0` wrong_relayer=`0` class_lost=`18` class_mismatch=`0`
- `p投錨注意障害物:428` raw=`702` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`702` identifier_mismatch=`0`
- `p航行危険障害物:404` raw=`413` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`413` identifier_mismatch=`0`
- `p投錨注意障害物:420` raw=`355` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`355` identifier_mismatch=`0`
- `p投錨注意障害物:425` raw=`255` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`255` identifier_mismatch=`0`
- `p航路標識群:30600003` raw=`255` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`255` identifier_mismatch=`0`
- `p航路標識群:31000000` raw=`200` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`200` identifier_mismatch=`0`
- `p航路標識群:30600002` raw=`191` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`191` identifier_mismatch=`0`
- `p航路標識群:30600001` raw=`189` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`189` identifier_mismatch=`0`
- `p航路標識群:30100004` raw=`142` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`142` identifier_mismatch=`0`
- `p航行危険障害物:403` raw=`128` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`128` identifier_mismatch=`0`
- `p施設・境界線等:520` raw=`128` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`128` identifier_mismatch=`0`
- `p航路標識群:31336300` raw=`108` preserved=`0` missing=`0` wrong_relayer=`0` identifier_lost=`108` identifier_mismatch=`0`
## Examples: `raw_class_lost`
## Examples: `identifier_lost`
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018869,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018870,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018918,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020459,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020673,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020674,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020675,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020697,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020698,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"魚礁","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"fish_reef","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13020699,"name":null,"raw_class":428,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018650,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018651,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018652,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018653,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018654,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018655,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018656,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018657,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018658,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"海草","chart_icon_image":"symbol-daytime-428","chart_symbol_code":"hazard_mark","delivery_class":null}],"delivery_layer":"anchor_caution_hazard_point","fid":13018659,"name":null,"raw_class":425,"raw_layer":"p投錨注意障害物","tile":[11,1761,819]}
- {"candidates":[{"canonical_object_type":"沿岸灯台 (15M over)","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007768,"name":"若宮灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30000004","tile":[10,880,409]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007824,"name":"壱岐長島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,409]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007921,"name":"手長島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,409]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007971,"name":"壱岐大瀬灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,409]}
- {"candidates":[{"canonical_object_type":"沿岸灯台 (15M over)","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007773,"name":"二神島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30000007","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007805,"name":"的山大島曲り鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007823,"name":"海豚鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007824,"name":"壱岐長島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007836,"name":"大碆鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007880,"name":"壱岐郷ノ瀬灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007885,"name":"馬ノ頭鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007886,"name":"崎瀬鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007938,"name":"的山大島長崎鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,410]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007795,"name":"青砂埼灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007835,"name":"生月長瀬鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007897,"name":"平戸牛ケ首灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100005","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007919,"name":"津崎鼻灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007939,"name":"肥前横島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007940,"name":"南風埼灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}
- {"candidates":[{"canonical_object_type":"港湾灯台","chart_icon_image":"symbol-daytime-301","chart_symbol_code":"lighthouse","delivery_match_field":"display_code","delivery_match_value":null}],"delivery_layer":"navigation_marks","fid":12007941,"name":"下枯木島灯台","raw_layer":"p航路標識群","raw_match_field":"表示用番号","raw_match_value":"30100004","tile":[10,880,411]}

View File

@@ -4,17 +4,29 @@
"target_root": "/home/wwwroot/pbf-delivery-karatsu-20nm-final",
"totals": {
"tiles_compared": 154,
"raw_objects": 2090,
"preserved": 2090
"raw_objects": 4165,
"preserved": 4165
},
"rule_stats": {
"P航路ククリ->route_outline": {
"raw_objects": 19,
"preserved": 19
},
"p投錨注意障害物->anchor_caution_hazard_point": {
"raw_objects": 1426,
"preserved": 1426
},
"p施設・境界線等->facility_boundary_point": {
"raw_objects": 171,
"preserved": 171
},
"p航行危険障害物->navigation_hazard_point": {
"raw_objects": 664,
"preserved": 664
},
"p航路標識群->navigation_marks": {
"raw_objects": 1885,
"preserved": 1885
}
},
"top_class_issues": [
@@ -24,8 +36,8 @@
"preserved": 702,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航行危険障害物:404",
@@ -33,8 +45,8 @@
"preserved": 413,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p投錨注意障害物:420",
@@ -42,8 +54,8 @@
"preserved": 355,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p投錨注意障害物:425",
@@ -51,8 +63,53 @@
"preserved": 255,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30600003",
"raw_objects": 255,
"preserved": 255,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:31000000",
"raw_objects": 200,
"preserved": 200,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30600002",
"raw_objects": 191,
"preserved": 191,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30600001",
"raw_objects": 189,
"preserved": 189,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30100004",
"raw_objects": 142,
"preserved": 142,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航行危険障害物:403",
@@ -60,8 +117,80 @@
"preserved": 128,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p施設・境界線等:520",
"raw_objects": 128,
"preserved": 128,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:31336300",
"raw_objects": 108,
"preserved": 108,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30200002",
"raw_objects": 75,
"preserved": 75,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:31300003",
"raw_objects": 66,
"preserved": 66,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30600000",
"raw_objects": 60,
"preserved": 60,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30600004",
"raw_objects": 48,
"preserved": 48,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:31235102",
"raw_objects": 46,
"preserved": 46,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航路標識群:30200001",
"raw_objects": 44,
"preserved": 44,
"missing_object": 0,
"wrong_relayer": 0,
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p航行危険障害物:432",
@@ -69,134 +198,17 @@
"preserved": 40,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
},
{
"class_key": "p投錨注意障害物:421",
"raw_objects": 32,
"preserved": 32,
"class_key": "p航路標識群:31135102",
"raw_objects": 37,
"preserved": 37,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:415",
"raw_objects": 25,
"preserved": 25,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:413",
"raw_objects": 25,
"preserved": 25,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:409",
"raw_objects": 25,
"preserved": 25,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:431",
"raw_objects": 22,
"preserved": 22,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:434",
"raw_objects": 18,
"preserved": 18,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:433",
"raw_objects": 15,
"preserved": 15,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:427",
"raw_objects": 9,
"preserved": 9,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:405",
"raw_objects": 5,
"preserved": 5,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:412",
"raw_objects": 5,
"preserved": 5,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:422",
"raw_objects": 4,
"preserved": 4,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p投錨注意障害物:424",
"raw_objects": 3,
"preserved": 3,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:402",
"raw_objects": 3,
"preserved": 3,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
},
{
"class_key": "p航行危険障害物:410",
"raw_objects": 3,
"preserved": 3,
"missing_object": 0,
"wrong_relayer": 0,
"raw_class_lost": 0,
"class_mismatch": 0
"identifier_lost": 0,
"identifier_mismatch": 0
}
],
"issue_examples": {}

View File

@@ -6,23 +6,41 @@
## Totals
- tiles compared: `154`
- raw objects: `2090`
- preserved: `2090`
- raw objects: `4165`
- preserved: `4165`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `0`
- class mismatch: `0`
- identifier lost: `0`
- identifier mismatch: `0`
## Per Rule
### `P航路ククリ->route_outline`
- raw objects: `19`
- preserved: `19`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `0`
- identifier mismatch: `0`
### `p投錨注意障害物->anchor_caution_hazard_point`
- raw objects: `1426`
- preserved: `1426`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `0`
- class mismatch: `0`
- identifier lost: `0`
- identifier mismatch: `0`
### `p施設・境界線等->facility_boundary_point`
- raw objects: `171`
- preserved: `171`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `0`
- identifier mismatch: `0`
### `p航行危険障害物->navigation_hazard_point`
@@ -30,20 +48,29 @@
- preserved: `664`
- missing object: `0`
- wrong relayer: `0`
- raw class lost: `0`
- class mismatch: `0`
- identifier lost: `0`
- identifier mismatch: `0`
### `p航路標識群->navigation_marks`
- raw objects: `1885`
- preserved: `1885`
- missing object: `0`
- wrong relayer: `0`
- identifier lost: `0`
- identifier mismatch: `0`
## Top Class Issues
- `p投錨注意障害物:428` raw=`702` preserved=`702` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p航行危険障害物:404` raw=`413` preserved=`413` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:420` raw=`355` preserved=`355` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:425` raw=`255` preserved=`255` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p航行危険障害物:403` raw=`128` preserved=`128` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p航行危険障害物:432` raw=`40` preserved=`40` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:421` raw=`32` preserved=`32` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:415` raw=`25` preserved=`25` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:413` raw=`25` preserved=`25` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p航行危険障害物:409` raw=`25` preserved=`25` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p航行危険障害物:431` raw=`22` preserved=`22` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:434` raw=`18` preserved=`18` missing=`0` wrong_relayer=`0` class_lost=`0` class_mismatch=`0`
- `p投錨注意障害物:428` raw=`702` preserved=`702` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航行危険障害物:404` raw=`413` preserved=`413` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p投錨注意障害物:420` raw=`355` preserved=`355` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p投錨注意障害物:425` raw=`255` preserved=`255` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:30600003` raw=`255` preserved=`255` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:31000000` raw=`200` preserved=`200` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:30600002` raw=`191` preserved=`191` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:30600001` raw=`189` preserved=`189` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:30100004` raw=`142` preserved=`142` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航行危険障害物:403` raw=`128` preserved=`128` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p施設・境界線等:520` raw=`128` preserved=`128` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`
- `p航路標識群:31336300` raw=`108` preserved=`108` missing=`0` wrong_relayer=`0` identifier_lost=`0` identifier_mismatch=`0`

View File

@@ -0,0 +1,325 @@
{
"compare_url": "http://192.168.200.184/newpec/navsea-compare-karatsu-20nm.html?profile=karatsu20&center=130.335,33.6385&zoom=12.2",
"compare_version": "compare-r15-20260401-1705",
"backend_audit_json": "/root/sourceserver/pbf/NavSea_Original_vs_Delivery_Render_Audit_Karatsu_20nm_2026-03-31.r7.json",
"visual_metrics": {
"image_width": 640,
"image_height": 400,
"total_pixels": 256000,
"changed_pixels": 204870,
"changed_ratio": 0.800273,
"mean_abs_rgb": [
35.246,
30.4837,
37.2849
],
"rms_rgb": [
63.4187,
58.8447,
61.8033
],
"diff_bbox": [
0,
0,
640,
400
],
"full_crop_left": [
0,
150,
640,
550
],
"full_crop_right": [
640,
150,
1280,
550
],
"hotspots": [
{
"image_width": 243,
"image_height": 160,
"total_pixels": 38880,
"changed_pixels": 36572,
"changed_ratio": 0.940638,
"mean_abs_rgb": [
56.5193,
48.903,
59.1648
],
"rms_rgb": [
80.9755,
76.7491,
82.393
],
"diff_bbox": [
0,
0,
243,
160
],
"id": "hakata_inner_harbor_facilities",
"label": "博多港内港设施区",
"notes": "校验港湾、渔港、海之驿、码头设施点是否保留细分类图标。",
"backend_focus": [
"p施設・境界線等",
"facility_boundary_point",
"class_code"
],
"pane_box_norm": [
0.48,
0.36,
0.86,
0.76
],
"pane_box_pixels": [
307,
144,
550,
304
],
"left_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_left.png",
"right_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_diff.png"
},
{
"image_width": 269,
"image_height": 128,
"total_pixels": 34432,
"changed_pixels": 27307,
"changed_ratio": 0.79307,
"mean_abs_rgb": [
26.1097,
26.7583,
39.4596
],
"rms_rgb": [
47.3354,
47.654,
59.348
],
"diff_bbox": [
0,
0,
269,
128
],
"id": "hakata_route_outline_facility",
"label": "博多港航路边界与设施点区",
"notes": "校验紫色航路虚线是否存在,以及 class 505/520/530/550 设施点是否不再被画成通用图标。",
"backend_focus": [
"P航路ククリ",
"p施設・境界線等",
"route_outline",
"facility_boundary_point"
],
"pane_box_norm": [
0.2,
0.2,
0.62,
0.52
],
"pane_box_pixels": [
128,
80,
397,
208
],
"left_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_left.png",
"right_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_diff.png"
},
{
"image_width": 256,
"image_height": 104,
"total_pixels": 26624,
"changed_pixels": 20980,
"changed_ratio": 0.788011,
"mean_abs_rgb": [
28.3871,
26.5249,
30.4682
],
"rms_rgb": [
54.1879,
52.0871,
54.2968
],
"diff_bbox": [
0,
0,
256,
104
],
"id": "hakata_central_passage_marks",
"label": "博多港中央航路灯标区",
"notes": "校验 31135x 灯标、红绿小灯和航路文字是否仍然可见。",
"backend_focus": [
"p航路標識群",
"navigation_marks",
"display_code"
],
"pane_box_norm": [
0.02,
0.1,
0.42,
0.36
],
"pane_box_pixels": [
13,
40,
269,
144
],
"left_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_left.png",
"right_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_diff.png"
}
]
},
"backend_summary": {
"original_feature_instances": 258317,
"engineering_feature_instances": 258317,
"result_count": 516634,
"status_counts": {
"extra_in_engineering": 258317,
"missing_in_engineering": 258317
},
"top_annotation_issues": [
{
"issue": "extra_text_in_engineering",
"source_layer": "bathymetry_line",
"count": 24168
},
{
"issue": "text_missing_in_engineering",
"source_layer": "L海底地形",
"count": 24168
},
{
"issue": "extra_text_in_engineering",
"source_layer": "depth_contour",
"count": 11929
},
{
"issue": "text_missing_in_engineering",
"source_layer": "L等深線",
"count": 11929
},
{
"issue": "extra_text_in_engineering",
"source_layer": "seabed_text_point",
"count": 4499
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p底質",
"count": 4499
},
{
"issue": "extra_text_in_engineering",
"source_layer": "navigation_marks",
"count": 1516
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p航路標識群",
"count": 1516
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p地名",
"count": 1444
},
{
"issue": "extra_text_in_engineering",
"source_layer": "place_label_sea",
"count": 1444
}
],
"top_style_semantic_issues": [
{
"issue": "depth_numeric_missing",
"source_layer": "L海底地形",
"count": 24168
},
{
"issue": "depth_numeric_missing",
"source_layer": "L等深線",
"count": 11929
},
{
"issue": "safety_icon_missing",
"source_layer": "p航路標識群",
"count": 1885
},
{
"issue": "depth_numeric_missing",
"source_layer": "L概略等深線",
"count": 350
},
{
"issue": "clearance_numeric_missing",
"source_layer": "p高さ制限",
"count": 33
}
],
"top_source_layer_issues": [
{
"status": "extra_in_engineering",
"source_layer": "baseline_outline",
"count": 87709
},
{
"status": "missing_in_engineering",
"source_layer": "P基本線ククリ",
"count": 87709
},
{
"status": "extra_in_engineering",
"source_layer": "baseline_area",
"count": 50421
},
{
"status": "missing_in_engineering",
"source_layer": "P基本線",
"count": 50421
},
{
"status": "extra_in_engineering",
"source_layer": "depth_contour",
"count": 36460
},
{
"status": "missing_in_engineering",
"source_layer": "L等深線",
"count": 36460
},
{
"status": "extra_in_engineering",
"source_layer": "bathymetry_line",
"count": 35940
},
{
"status": "missing_in_engineering",
"source_layer": "L海底地形",
"count": 35940
},
{
"status": "extra_in_engineering",
"source_layer": "onshore_structure_line",
"count": 10544
},
{
"status": "missing_in_engineering",
"source_layer": "L陸上構造物陸",
"count": 10544
}
]
},
"notes": [
"Visual metrics are browser-rendered screenshot diff metrics from the fixed compare page.",
"Backend metrics are current render-audit summary metrics and may remain blind to sprite-load failures."
]
}

View File

@@ -0,0 +1,104 @@
# NavSea Strict Audit Summary
## Scope
- Compare page: `http://192.168.200.184/newpec/navsea-compare-karatsu-20nm.html?profile=karatsu20&center=130.335,33.6385&zoom=12.2`
- Compare version: `compare-r15-20260401-1705`
- Backend render audit: `/root/sourceserver/pbf/NavSea_Original_vs_Delivery_Render_Audit_Karatsu_20nm_2026-03-31.r7.json`
## Visual Audit
- changed pixels: `204870` / `256000`
- changed ratio: `0.800273`
- mean abs rgb: `[35.246, 30.4837, 37.2849]`
- rms rgb: `[63.4187, 58.8447, 61.8033]`
- left crop: `[0, 150, 640, 550]`
- right crop: `[640, 150, 1280, 550]`
Artifacts:
- `report/strict_audit_20nm_hakata_r11/compare_full.png`
- `report/strict_audit_20nm_hakata_r11/compare_left.png`
- `report/strict_audit_20nm_hakata_r11/compare_right.png`
- `report/strict_audit_20nm_hakata_r11/compare_diff.png`
## Hotspot AOI Audit
### 博多港内港设施区
- id: `hakata_inner_harbor_facilities`
- notes: `校验港湾、渔港、海之驿、码头设施点是否保留细分类图标。`
- backend focus: `['p施設・境界線等', 'facility_boundary_point', 'class_code']`
- changed pixels: `36572` / `38880`
- changed ratio: `0.940638`
- mean abs rgb: `[56.5193, 48.903, 59.1648]`
- pane box norm: `[0.48, 0.36, 0.86, 0.76]`
- pane box pixels: `[307, 144, 550, 304]`
- left image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_left.png`
- right image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_right.png`
- diff image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_inner_harbor_facilities_diff.png`
### 博多港航路边界与设施点区
- id: `hakata_route_outline_facility`
- notes: `校验紫色航路虚线是否存在,以及 class 505/520/530/550 设施点是否不再被画成通用图标。`
- backend focus: `['P航路ククリ', 'p施設・境界線等', 'route_outline', 'facility_boundary_point']`
- changed pixels: `27307` / `34432`
- changed ratio: `0.79307`
- mean abs rgb: `[26.1097, 26.7583, 39.4596]`
- pane box norm: `[0.2, 0.2, 0.62, 0.52]`
- pane box pixels: `[128, 80, 397, 208]`
- left image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_left.png`
- right image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_right.png`
- diff image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_route_outline_facility_diff.png`
### 博多港中央航路灯标区
- id: `hakata_central_passage_marks`
- notes: `校验 31135x 灯标、红绿小灯和航路文字是否仍然可见。`
- backend focus: `['p航路標識群', 'navigation_marks', 'display_code']`
- changed pixels: `20980` / `26624`
- changed ratio: `0.788011`
- mean abs rgb: `[28.3871, 26.5249, 30.4682]`
- pane box norm: `[0.02, 0.1, 0.42, 0.36]`
- pane box pixels: `[13, 40, 269, 144]`
- left image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_left.png`
- right image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_right.png`
- diff image: `report/strict_audit_20nm_hakata_r11/hotspots/hakata_central_passage_marks_diff.png`
## Backend Render Audit
- original feature instances: `258317`
- delivery feature instances: `258317`
- result count: `516634`
Status counts:
- `extra_in_engineering`: `258317`
- `missing_in_engineering`: `258317`
Top annotation issues:
- `extra_text_in_engineering` | `bathymetry_line` | `24168`
- `text_missing_in_engineering` | `L海底地形` | `24168`
- `extra_text_in_engineering` | `depth_contour` | `11929`
- `text_missing_in_engineering` | `L等深線` | `11929`
- `extra_text_in_engineering` | `seabed_text_point` | `4499`
- `text_missing_in_engineering` | `p底質` | `4499`
- `extra_text_in_engineering` | `navigation_marks` | `1516`
- `text_missing_in_engineering` | `p航路標識群` | `1516`
- `text_missing_in_engineering` | `p地名` | `1444`
- `extra_text_in_engineering` | `place_label_sea` | `1444`
Top style semantic issues:
- `depth_numeric_missing` | `L海底地形` | `24168`
- `depth_numeric_missing` | `L等深線` | `11929`
- `safety_icon_missing` | `p航路標識群` | `1885`
- `depth_numeric_missing` | `L概略等深線` | `350`
- `clearance_numeric_missing` | `p高さ制限` | `33`
## Interpretation
- This report intentionally puts browser-rendered visual output and backend render-audit summary in one place.
- If the browser screenshot improves but backend counts do not, the current backend audit is likely blind to a browser/runtime issue such as sprite resolution.

View File

@@ -0,0 +1,325 @@
{
"compare_url": "http://192.168.200.184/newpec/navsea-compare-karatsu-20nm.html?profile=karatsu20&center=130.335,33.6385&zoom=12.2",
"compare_version": "compare-r15-20260401-1705",
"backend_audit_json": "/root/sourceserver/pbf/NavSea_Original_vs_Delivery_Render_Audit_Karatsu_20nm_2026-03-31.r7.json",
"visual_metrics": {
"image_width": 640,
"image_height": 400,
"total_pixels": 256000,
"changed_pixels": 204833,
"changed_ratio": 0.800129,
"mean_abs_rgb": [
35.2451,
30.4831,
37.2841
],
"rms_rgb": [
63.4189,
58.8449,
61.8034
],
"diff_bbox": [
0,
0,
640,
400
],
"full_crop_left": [
0,
150,
640,
550
],
"full_crop_right": [
640,
150,
1280,
550
],
"hotspots": [
{
"image_width": 243,
"image_height": 160,
"total_pixels": 38880,
"changed_pixels": 36572,
"changed_ratio": 0.940638,
"mean_abs_rgb": [
56.5193,
48.903,
59.1648
],
"rms_rgb": [
80.9755,
76.7491,
82.393
],
"diff_bbox": [
0,
0,
243,
160
],
"id": "hakata_inner_harbor_facilities",
"label": "博多港内港设施区",
"notes": "校验港湾、渔港、海之驿、码头设施点是否保留细分类图标。",
"backend_focus": [
"p施設・境界線等",
"facility_boundary_point",
"class_code"
],
"pane_box_norm": [
0.48,
0.36,
0.86,
0.76
],
"pane_box_pixels": [
307,
144,
550,
304
],
"left_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_left.png",
"right_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_diff.png"
},
{
"image_width": 269,
"image_height": 128,
"total_pixels": 34432,
"changed_pixels": 27307,
"changed_ratio": 0.79307,
"mean_abs_rgb": [
26.1097,
26.7583,
39.4596
],
"rms_rgb": [
47.3354,
47.654,
59.348
],
"diff_bbox": [
0,
0,
269,
128
],
"id": "hakata_route_outline_facility",
"label": "博多港航路边界与设施点区",
"notes": "校验紫色航路虚线是否存在,以及 class 505/520/530/550 设施点是否不再被画成通用图标。",
"backend_focus": [
"P航路ククリ",
"p施設・境界線等",
"route_outline",
"facility_boundary_point"
],
"pane_box_norm": [
0.2,
0.2,
0.62,
0.52
],
"pane_box_pixels": [
128,
80,
397,
208
],
"left_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_left.png",
"right_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_diff.png"
},
{
"image_width": 256,
"image_height": 104,
"total_pixels": 26624,
"changed_pixels": 20980,
"changed_ratio": 0.788011,
"mean_abs_rgb": [
28.3871,
26.5249,
30.4682
],
"rms_rgb": [
54.1879,
52.0871,
54.2968
],
"diff_bbox": [
0,
0,
256,
104
],
"id": "hakata_central_passage_marks",
"label": "博多港中央航路灯标区",
"notes": "校验 31135x 灯标、红绿小灯和航路文字是否仍然可见。",
"backend_focus": [
"p航路標識群",
"navigation_marks",
"display_code"
],
"pane_box_norm": [
0.02,
0.1,
0.42,
0.36
],
"pane_box_pixels": [
13,
40,
269,
144
],
"left_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_left.png",
"right_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_right.png",
"diff_image": "report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_diff.png"
}
]
},
"backend_summary": {
"original_feature_instances": 258317,
"engineering_feature_instances": 258317,
"result_count": 516634,
"status_counts": {
"extra_in_engineering": 258317,
"missing_in_engineering": 258317
},
"top_annotation_issues": [
{
"issue": "extra_text_in_engineering",
"source_layer": "bathymetry_line",
"count": 24168
},
{
"issue": "text_missing_in_engineering",
"source_layer": "L海底地形",
"count": 24168
},
{
"issue": "extra_text_in_engineering",
"source_layer": "depth_contour",
"count": 11929
},
{
"issue": "text_missing_in_engineering",
"source_layer": "L等深線",
"count": 11929
},
{
"issue": "extra_text_in_engineering",
"source_layer": "seabed_text_point",
"count": 4499
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p底質",
"count": 4499
},
{
"issue": "extra_text_in_engineering",
"source_layer": "navigation_marks",
"count": 1516
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p航路標識群",
"count": 1516
},
{
"issue": "text_missing_in_engineering",
"source_layer": "p地名",
"count": 1444
},
{
"issue": "extra_text_in_engineering",
"source_layer": "place_label_sea",
"count": 1444
}
],
"top_style_semantic_issues": [
{
"issue": "depth_numeric_missing",
"source_layer": "L海底地形",
"count": 24168
},
{
"issue": "depth_numeric_missing",
"source_layer": "L等深線",
"count": 11929
},
{
"issue": "safety_icon_missing",
"source_layer": "p航路標識群",
"count": 1885
},
{
"issue": "depth_numeric_missing",
"source_layer": "L概略等深線",
"count": 350
},
{
"issue": "clearance_numeric_missing",
"source_layer": "p高さ制限",
"count": 33
}
],
"top_source_layer_issues": [
{
"status": "extra_in_engineering",
"source_layer": "baseline_outline",
"count": 87709
},
{
"status": "missing_in_engineering",
"source_layer": "P基本線ククリ",
"count": 87709
},
{
"status": "extra_in_engineering",
"source_layer": "baseline_area",
"count": 50421
},
{
"status": "missing_in_engineering",
"source_layer": "P基本線",
"count": 50421
},
{
"status": "extra_in_engineering",
"source_layer": "depth_contour",
"count": 36460
},
{
"status": "missing_in_engineering",
"source_layer": "L等深線",
"count": 36460
},
{
"status": "extra_in_engineering",
"source_layer": "bathymetry_line",
"count": 35940
},
{
"status": "missing_in_engineering",
"source_layer": "L海底地形",
"count": 35940
},
{
"status": "extra_in_engineering",
"source_layer": "onshore_structure_line",
"count": 10544
},
{
"status": "missing_in_engineering",
"source_layer": "L陸上構造物陸",
"count": 10544
}
]
},
"notes": [
"Visual metrics are browser-rendered screenshot diff metrics from the fixed compare page.",
"Backend metrics are current render-audit summary metrics and may remain blind to sprite-load failures."
]
}

View File

@@ -0,0 +1,104 @@
# NavSea Strict Audit Summary
## Scope
- Compare page: `http://192.168.200.184/newpec/navsea-compare-karatsu-20nm.html?profile=karatsu20&center=130.335,33.6385&zoom=12.2`
- Compare version: `compare-r15-20260401-1705`
- Backend render audit: `/root/sourceserver/pbf/NavSea_Original_vs_Delivery_Render_Audit_Karatsu_20nm_2026-03-31.r7.json`
## Visual Audit
- changed pixels: `204833` / `256000`
- changed ratio: `0.800129`
- mean abs rgb: `[35.2451, 30.4831, 37.2841]`
- rms rgb: `[63.4189, 58.8449, 61.8034]`
- left crop: `[0, 150, 640, 550]`
- right crop: `[640, 150, 1280, 550]`
Artifacts:
- `report/strict_audit_20nm_hakata_r9/compare_full.png`
- `report/strict_audit_20nm_hakata_r9/compare_left.png`
- `report/strict_audit_20nm_hakata_r9/compare_right.png`
- `report/strict_audit_20nm_hakata_r9/compare_diff.png`
## Hotspot AOI Audit
### 博多港内港设施区
- id: `hakata_inner_harbor_facilities`
- notes: `校验港湾、渔港、海之驿、码头设施点是否保留细分类图标。`
- backend focus: `['p施設・境界線等', 'facility_boundary_point', 'class_code']`
- changed pixels: `36572` / `38880`
- changed ratio: `0.940638`
- mean abs rgb: `[56.5193, 48.903, 59.1648]`
- pane box norm: `[0.48, 0.36, 0.86, 0.76]`
- pane box pixels: `[307, 144, 550, 304]`
- left image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_left.png`
- right image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_right.png`
- diff image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_inner_harbor_facilities_diff.png`
### 博多港航路边界与设施点区
- id: `hakata_route_outline_facility`
- notes: `校验紫色航路虚线是否存在,以及 class 505/520/530/550 设施点是否不再被画成通用图标。`
- backend focus: `['P航路ククリ', 'p施設・境界線等', 'route_outline', 'facility_boundary_point']`
- changed pixels: `27307` / `34432`
- changed ratio: `0.79307`
- mean abs rgb: `[26.1097, 26.7583, 39.4596]`
- pane box norm: `[0.2, 0.2, 0.62, 0.52]`
- pane box pixels: `[128, 80, 397, 208]`
- left image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_left.png`
- right image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_right.png`
- diff image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_route_outline_facility_diff.png`
### 博多港中央航路灯标区
- id: `hakata_central_passage_marks`
- notes: `校验 31135x 灯标、红绿小灯和航路文字是否仍然可见。`
- backend focus: `['p航路標識群', 'navigation_marks', 'display_code']`
- changed pixels: `20980` / `26624`
- changed ratio: `0.788011`
- mean abs rgb: `[28.3871, 26.5249, 30.4682]`
- pane box norm: `[0.02, 0.1, 0.42, 0.36]`
- pane box pixels: `[13, 40, 269, 144]`
- left image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_left.png`
- right image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_right.png`
- diff image: `report/strict_audit_20nm_hakata_r9/hotspots/hakata_central_passage_marks_diff.png`
## Backend Render Audit
- original feature instances: `258317`
- delivery feature instances: `258317`
- result count: `516634`
Status counts:
- `extra_in_engineering`: `258317`
- `missing_in_engineering`: `258317`
Top annotation issues:
- `extra_text_in_engineering` | `bathymetry_line` | `24168`
- `text_missing_in_engineering` | `L海底地形` | `24168`
- `extra_text_in_engineering` | `depth_contour` | `11929`
- `text_missing_in_engineering` | `L等深線` | `11929`
- `extra_text_in_engineering` | `seabed_text_point` | `4499`
- `text_missing_in_engineering` | `p底質` | `4499`
- `extra_text_in_engineering` | `navigation_marks` | `1516`
- `text_missing_in_engineering` | `p航路標識群` | `1516`
- `text_missing_in_engineering` | `p地名` | `1444`
- `extra_text_in_engineering` | `place_label_sea` | `1444`
Top style semantic issues:
- `depth_numeric_missing` | `L海底地形` | `24168`
- `depth_numeric_missing` | `L等深線` | `11929`
- `safety_icon_missing` | `p航路標識群` | `1885`
- `depth_numeric_missing` | `L概略等深線` | `350`
- `clearance_numeric_missing` | `p高さ制限` | `33`
## Interpretation
- This report intentionally puts browser-rendered visual output and backend render-audit summary in one place.
- If the browser screenshot improves but backend counts do not, the current backend audit is likely blind to a browser/runtime issue such as sprite resolution.

View File

@@ -314,7 +314,7 @@
<script src="https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js"></script>
<script>
const HTML_VERSION = "compare-r14-20260401-1523";
const HTML_VERSION = "compare-r15-20260401-1705";
const ORIGINAL_STYLE_URL = "./style.json";
const ORIGINAL_TILE_URL = "http://192.168.200.184/newpec/exported_auto/tile.mapple-on.jp__newpec-mvt-20260106__z___x___y_.pbf/tiles/{z}/{x}/{y}.pbf";
const PROFILES = {
@@ -325,7 +325,7 @@
deliveryPaneLabel: "最终 release style + 唐津 20 海里 final PBF",
deliveryStyleUrl: "./domain/style.navsea-delivery-karatsu-20nm-final.json",
deliveryTileUrl: "http://192.168.200.184/pbf-delivery-karatsu-20nm-final/{z}/{x}/{y}.pbf",
deliveryStyleVersion: "karatsu-final-style-r8-20260401-1616",
deliveryStyleVersion: "karatsu-final-style-r11-20260401-1719",
deliveryPbfVersion: "karatsu-final-pbf-20nm-20260401-0248",
deliveryStyleFile: "style.navsea-delivery-karatsu-20nm-final.json",
deliveryPbfName: "pbf-delivery-karatsu-20nm-final",
@@ -392,6 +392,43 @@
return PROFILES[currentProfileKey];
}
function parseNumberParam(value) {
if (value === null || value === undefined || value === "") return null;
const parsed = Number(value);
return Number.isFinite(parsed) ? parsed : null;
}
function getRequestedCamera(profile) {
const centerValue = searchParams.get("center");
const zoomValue = parseNumberParam(searchParams.get("zoom"));
const bearingValue = parseNumberParam(searchParams.get("bearing"));
const pitchValue = parseNumberParam(searchParams.get("pitch"));
if (!centerValue && zoomValue === null && bearingValue === null && pitchValue === null) {
return {
center: profile.initialView.center,
zoom: profile.initialView.zoom,
bearing: profile.initialView.bearing,
pitch: profile.initialView.pitch
};
}
let center = profile.initialView.center;
if (centerValue) {
const parts = centerValue.split(",").map((item) => Number(item.trim()));
if (parts.length === 2 && parts.every(Number.isFinite)) {
center = [parts[0], parts[1]];
}
}
return {
center,
zoom: zoomValue ?? profile.initialView.zoom,
bearing: bearingValue ?? profile.initialView.bearing,
pitch: pitchValue ?? profile.initialView.pitch
};
}
function applyProfileUi() {
const profile = getCurrentProfile();
pageTitleEl.textContent = profile.pageTitle;
@@ -504,6 +541,7 @@
async function loadMaps() {
const profile = getCurrentProfile();
const requestedCamera = getRequestedCamera(profile);
styleVersion = `${HTML_VERSION}-${Date.now()}`;
reloadBtn.disabled = true;
homeBtn.disabled = true;
@@ -522,18 +560,18 @@
originalMap = new maplibregl.Map({
container: "map-original",
style: originalStyle,
center: profile.initialView.center,
zoom: profile.initialView.zoom,
bearing: profile.initialView.bearing,
pitch: profile.initialView.pitch
center: requestedCamera.center,
zoom: requestedCamera.zoom,
bearing: requestedCamera.bearing,
pitch: requestedCamera.pitch
});
deliveryMap = new maplibregl.Map({
container: "map-delivery",
style: deliveryStyle,
center: profile.initialView.center,
zoom: profile.initialView.zoom,
bearing: profile.initialView.bearing,
pitch: profile.initialView.pitch
center: requestedCamera.center,
zoom: requestedCamera.zoom,
bearing: requestedCamera.bearing,
pitch: requestedCamera.pitch
});
originalMap.addControl(new maplibregl.NavigationControl(), "top-right");
@@ -553,7 +591,7 @@
originalMap.on("load", markLoaded);
deliveryMap.on("load", markLoaded);
} else {
const camera = profile.initialView;
const camera = requestedCamera;
let loaded = 0;
function markLoaded() {
loaded += 1;
@@ -595,6 +633,11 @@
bearing: profile.initialView.bearing,
pitch: profile.initialView.pitch
};
searchParams.delete("center");
searchParams.delete("zoom");
searchParams.delete("bearing");
searchParams.delete("pitch");
window.history.replaceState({}, "", `${window.location.pathname}?${searchParams.toString()}`);
originalMap.jumpTo(camera);
deliveryMap.jumpTo(camera);
setStatus(`已回到${profile.label}初始视角。`);

View File

@@ -1901,6 +1901,7 @@
"source-layer": "facility_boundary_point",
"layout": {
"icon-allow-overlap": true,
"icon-ignore-placement": true,
"icon-image": [
"case",
[
@@ -1915,8 +1916,14 @@
],
505,
"symbol-daytime-505",
510,
"symbol-daytime-505",
520,
"symbol-daytime-520",
530,
"symbol-daytime-530",
550,
"symbol-daytime-550",
"symbol-daytime-520"
],
"symbol-daytime-520"

View File

@@ -0,0 +1,36 @@
[
{
"id": "hakata_central_passage_marks",
"label": "博多港中央航路灯标区",
"notes": "校验 31135x 灯标、红绿小灯和航路文字是否仍然可见。",
"pane_box_norm": [0.02, 0.10, 0.42, 0.36],
"backend_focus": [
"p航路標識群",
"navigation_marks",
"display_code"
]
},
{
"id": "hakata_route_outline_facility",
"label": "博多港航路边界与设施点区",
"notes": "校验紫色航路虚线是否存在,以及 class 505/520/530/550 设施点是否不再被画成通用图标。",
"pane_box_norm": [0.20, 0.20, 0.62, 0.52],
"backend_focus": [
"P航路ククリ",
"p施設・境界線等",
"route_outline",
"facility_boundary_point"
]
},
{
"id": "hakata_inner_harbor_facilities",
"label": "博多港内港设施区",
"notes": "校验港湾、渔港、海之驿、码头设施点是否保留细分类图标。",
"pane_box_norm": [0.48, 0.36, 0.86, 0.76],
"backend_focus": [
"p施設・境界線等",
"facility_boundary_point",
"class_code"
]
}
]