Normalize clearance limit object types in final PBF
This commit is contained in:
@@ -18,7 +18,7 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
|
|||||||
|
|
||||||
1. 唐津 20 海里
|
1. 唐津 20 海里
|
||||||
- `Style: karatsu-final-style-r12-20260401-1746 (style.navsea-delivery-karatsu-20nm-final.json)`
|
- `Style: karatsu-final-style-r12-20260401-1746 (style.navsea-delivery-karatsu-20nm-final.json)`
|
||||||
- `PBF: karatsu-final-pbf-20nm-20260401-0248 (pbf-delivery-karatsu-20nm-final)`
|
- `PBF: karatsu-final-pbf-20nm-20260402-0015 (pbf-delivery-karatsu-20nm-final)`
|
||||||
|
|
||||||
2. 九州
|
2. 九州
|
||||||
- `Style: kyushu-style-r1-20260331-2205 (style.navsea-delivery-kyushu.json)`
|
- `Style: kyushu-style-r1-20260331-2205 (style.navsea-delivery-kyushu.json)`
|
||||||
@@ -251,6 +251,15 @@ Remote: `ssh://git@nas:2222/tei/pbf.git`
|
|||||||
- 当前观察结论:
|
- 当前观察结论:
|
||||||
- 放大后,博多港中央航路、航路边界、内港设施三块已经基本贴近
|
- 放大后,博多港中央航路、航路边界、内港设施三块已经基本贴近
|
||||||
- 当前剩余差异更多是陆域底色/标签细部,不再是对象丢失或明显错图标
|
- 当前剩余差异更多是陆域底色/标签细部,不再是对象丢失或明显错图标
|
||||||
|
- `p高さ制限` 这一类对象已经确认不是“分解错物体”:
|
||||||
|
- 原始 `fid=8017842 / 名称=荒津大橋 / 高さ(m)=38`
|
||||||
|
- final 里仍是同一点,`name_ja=荒津大橋 / chart_label_text=38`
|
||||||
|
- 当前 style 仍按原始版思路分成:
|
||||||
|
- 名称层:桥名
|
||||||
|
- 数值层:`高さ` + 数值 + `m`
|
||||||
|
- 这一类的 `canonical_object_type` 已从日文值改为英文:
|
||||||
|
- `p高さ制限 -> clearance_limit_point`
|
||||||
|
- 当前 final 统计:`clearance_limit_point = 33`
|
||||||
- 当前正式审计顺序已经明确为:
|
- 当前正式审计顺序已经明确为:
|
||||||
- 先 `object preservation audit`
|
- 先 `object preservation audit`
|
||||||
- 再 `render audit`
|
- 再 `render audit`
|
||||||
|
|||||||
@@ -46,6 +46,20 @@ def clone_value(dst_value: vector_tile_pb2.tile.value, src_value: vector_tile_pb
|
|||||||
dst_value.CopyFrom(src_value)
|
dst_value.CopyFrom(src_value)
|
||||||
|
|
||||||
|
|
||||||
|
def rewrite_release_value(layer_name: str, key: str, src_value: vector_tile_pb2.tile.value) -> vector_tile_pb2.tile.value | None:
|
||||||
|
if key != "canonical_object_type":
|
||||||
|
return None
|
||||||
|
if layer_name == "clearance_limit_point" and src_value.HasField("string_value") and src_value.string_value == "p高さ制限":
|
||||||
|
dst_value = vector_tile_pb2.tile.value()
|
||||||
|
dst_value.string_value = "clearance_limit_point"
|
||||||
|
return dst_value
|
||||||
|
if layer_name == "clearance_limit_line" and src_value.HasField("string_value") and src_value.string_value == "L高さ制限":
|
||||||
|
dst_value = vector_tile_pb2.tile.value()
|
||||||
|
dst_value.string_value = "clearance_limit_line"
|
||||||
|
return dst_value
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def strip_tile_properties(raw_tile: bytes, allowlist: set[str] | frozenset[str]) -> bytes:
|
def strip_tile_properties(raw_tile: bytes, allowlist: set[str] | frozenset[str]) -> bytes:
|
||||||
src_tile = vector_tile_pb2.tile()
|
src_tile = vector_tile_pb2.tile()
|
||||||
src_tile.ParseFromString(raw_tile)
|
src_tile.ParseFromString(raw_tile)
|
||||||
@@ -83,11 +97,13 @@ def strip_tile_properties(raw_tile: bytes, allowlist: set[str] | frozenset[str])
|
|||||||
kept_key_index[src_key_idx] = dst_key_idx
|
kept_key_index[src_key_idx] = dst_key_idx
|
||||||
|
|
||||||
src_value = src_layer.values[src_val_idx]
|
src_value = src_layer.values[src_val_idx]
|
||||||
value_sig = (src_val_idx, src_value.SerializeToString())
|
rewritten_value = rewrite_release_value(src_layer.name, key, src_value)
|
||||||
|
effective_value = rewritten_value or src_value
|
||||||
|
value_sig = (src_val_idx, effective_value.SerializeToString())
|
||||||
dst_val_idx = kept_value_index.get(value_sig)
|
dst_val_idx = kept_value_index.get(value_sig)
|
||||||
if dst_val_idx is None:
|
if dst_val_idx is None:
|
||||||
dst_val_idx = len(dst_layer.values)
|
dst_val_idx = len(dst_layer.values)
|
||||||
clone_value(dst_layer.values.add(), src_value)
|
clone_value(dst_layer.values.add(), effective_value)
|
||||||
kept_value_index[value_sig] = dst_val_idx
|
kept_value_index[value_sig] = dst_val_idx
|
||||||
|
|
||||||
dst_feature.tags.extend([dst_key_idx, dst_val_idx])
|
dst_feature.tags.extend([dst_key_idx, dst_val_idx])
|
||||||
|
|||||||
@@ -78,6 +78,14 @@ FINAL_RELEASE_PROPERTY_ALLOWLIST = frozenset(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def normalize_release_canonical_object_type(source_layer: str, canonical_object_type: str) -> str:
|
||||||
|
if source_layer == "p高さ制限":
|
||||||
|
return "clearance_limit_point"
|
||||||
|
if source_layer == "L高さ制限":
|
||||||
|
return "clearance_limit_line"
|
||||||
|
return canonical_object_type
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class DbConfig:
|
class DbConfig:
|
||||||
host: str = "localhost"
|
host: str = "localhost"
|
||||||
@@ -525,7 +533,11 @@ class NavSeaTileBuilder:
|
|||||||
properties["source_layer_rule_id"] = source_layer_rule_id
|
properties["source_layer_rule_id"] = source_layer_rule_id
|
||||||
properties["feature_id"] = row["feature_id"]
|
properties["feature_id"] = row["feature_id"]
|
||||||
|
|
||||||
properties["canonical_object_type"] = row["canonical_object_type"]
|
canonical_object_type = normalize_release_canonical_object_type(
|
||||||
|
source_layer_jp,
|
||||||
|
text_or_none(row["canonical_object_type"]) or "",
|
||||||
|
)
|
||||||
|
properties["canonical_object_type"] = canonical_object_type
|
||||||
properties["canonical_family"] = row["canonical_family"]
|
properties["canonical_family"] = row["canonical_family"]
|
||||||
properties["semantic_key"] = row["semantic_key"]
|
properties["semantic_key"] = row["semantic_key"]
|
||||||
properties["detection_key"] = row["detection_key"]
|
properties["detection_key"] = row["detection_key"]
|
||||||
@@ -534,7 +546,7 @@ class NavSeaTileBuilder:
|
|||||||
properties=properties,
|
properties=properties,
|
||||||
source_layer=source_layer_jp,
|
source_layer=source_layer_jp,
|
||||||
output_layer=output_layer,
|
output_layer=output_layer,
|
||||||
canonical_object_type=text_or_none(row["canonical_object_type"]) or "",
|
canonical_object_type=canonical_object_type,
|
||||||
canonical_family=text_or_none(row["canonical_family"]) or "",
|
canonical_family=text_or_none(row["canonical_family"]) or "",
|
||||||
geom_type=str(source_feature.get("geometry", {}).get("type", "")),
|
geom_type=str(source_feature.get("geometry", {}).get("type", "")),
|
||||||
feature_id=int(row["feature_id"]),
|
feature_id=int(row["feature_id"]),
|
||||||
@@ -546,7 +558,7 @@ class NavSeaTileBuilder:
|
|||||||
properties, field_name_unresolved = self.standardize_output_properties(
|
properties, field_name_unresolved = self.standardize_output_properties(
|
||||||
properties=properties,
|
properties=properties,
|
||||||
source_layer=source_layer_jp,
|
source_layer=source_layer_jp,
|
||||||
canonical_object_type=text_or_none(row["canonical_object_type"]) or "",
|
canonical_object_type=canonical_object_type,
|
||||||
canonical_family=text_or_none(row["canonical_family"]) or "",
|
canonical_family=text_or_none(row["canonical_family"]) or "",
|
||||||
geom_type=str(source_feature.get("geometry", {}).get("type", "")),
|
geom_type=str(source_feature.get("geometry", {}).get("type", "")),
|
||||||
feature_id=int(row["feature_id"]),
|
feature_id=int(row["feature_id"]),
|
||||||
|
|||||||
@@ -335,7 +335,7 @@
|
|||||||
deliveryStyleUrl: "./domain/style.navsea-delivery-karatsu-20nm-final.json",
|
deliveryStyleUrl: "./domain/style.navsea-delivery-karatsu-20nm-final.json",
|
||||||
deliveryTileUrl: "http://192.168.200.184/pbf-delivery-karatsu-20nm-final/{z}/{x}/{y}.pbf",
|
deliveryTileUrl: "http://192.168.200.184/pbf-delivery-karatsu-20nm-final/{z}/{x}/{y}.pbf",
|
||||||
deliveryStyleVersion: "karatsu-final-style-r12-20260401-1746",
|
deliveryStyleVersion: "karatsu-final-style-r12-20260401-1746",
|
||||||
deliveryPbfVersion: "karatsu-final-pbf-20nm-20260401-0248",
|
deliveryPbfVersion: "karatsu-final-pbf-20nm-20260402-0015",
|
||||||
deliveryStyleFile: "style.navsea-delivery-karatsu-20nm-final.json",
|
deliveryStyleFile: "style.navsea-delivery-karatsu-20nm-final.json",
|
||||||
deliveryPbfName: "pbf-delivery-karatsu-20nm-final",
|
deliveryPbfName: "pbf-delivery-karatsu-20nm-final",
|
||||||
initialView: {
|
initialView: {
|
||||||
|
|||||||
Reference in New Issue
Block a user