Normalize clearance limit object types in final PBF
This commit is contained in:
@@ -46,6 +46,20 @@ def clone_value(dst_value: vector_tile_pb2.tile.value, src_value: vector_tile_pb
|
||||
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:
|
||||
src_tile = vector_tile_pb2.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
|
||||
|
||||
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)
|
||||
if dst_val_idx is None:
|
||||
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
|
||||
|
||||
dst_feature.tags.extend([dst_key_idx, dst_val_idx])
|
||||
|
||||
Reference in New Issue
Block a user