Checkpoint CM95 PBF production code and docs for Linux migration
This commit is contained in:
229
NavSea_CM95接入规范-v1.md
Normal file
229
NavSea_CM95接入规范-v1.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# NavSea CM95 接入规范
|
||||
|
||||
版本:`v1`
|
||||
状态:首版实施规范
|
||||
用途:定义将具备合法使用授权的 CM95 海图数据转换为 PBF,并直接接入现有 NavSea Full semantic style 的数据契约、实施顺序和验收门禁。
|
||||
|
||||
## 1. 结论
|
||||
|
||||
CM95 必须向 NavSea 的既有 PBF 契约靠齐;不为 CM95 重写一套海图 style,也不允许把 CM95 原始对象类别直接暴露给前端 style。
|
||||
|
||||
当前接入基线为:
|
||||
|
||||
- style:[`src/pbf/style.navsea-delivery-full-semantic-unified-20260808.json`](/root/sourceserver/pbf/src/pbf/style.navsea-delivery-full-semantic-unified-20260808.json)
|
||||
- sprite:`http://192.168.200.184/newpec/sprite-semantic-unified-20260808/sprite`
|
||||
- glyphs:`http://192.168.200.184/newpec/fonts/{fontstack}/{range}.pbf`
|
||||
|
||||
CM95 转换产物必须满足该 style 的 `source-layer`、字段和值域要求。满足后,新 style 只需复制基线文件并修改 `sources.navsea_delivery.tiles` 的瓦片地址。
|
||||
|
||||
## 2. 边界与前提
|
||||
|
||||
- 仅处理已获授权解码、转换、缓存和部署的 CM95 数据。
|
||||
- CM95 解码器不属于本仓库交付物;本规范的输入是已经合法导出的矢量要素及其属性。
|
||||
- 转换过程不得篡改海图几何、深度、净空、航标与危险物的原始业务含义。
|
||||
- 所有要素必须有稳定的上游对象身份;若 CM95 未提供全局稳定 ID,必须由“数据集版本 + 原始 cell/record ID + 几何类型”生成可复现的 `source_id`。
|
||||
- 第一版只追求“复用当前 style 并可审计”,不以压缩字段或全国一次性全量生产为目标。
|
||||
|
||||
## 3. 目标架构
|
||||
|
||||
```text
|
||||
CM95 合法导出数据
|
||||
-> CM95 解析与原始对象归档
|
||||
-> CM95→NavSea 语义/渲染映射
|
||||
-> NavSea 兼容要素集
|
||||
-> Web Mercator MVT/PBF
|
||||
-> 现有 NavSea Full semantic style
|
||||
```
|
||||
|
||||
其中“CM95→NavSea 语义/渲染映射”是唯一允许理解 CM95 原始类别与属性差异的层。MVT 和 style 只消费 NavSea 的标准图层与字段。
|
||||
|
||||
## 4. 固定图层契约
|
||||
|
||||
第一版 PBF 的图层名称必须与当前 style 完全一致。不得随意以 CM95 对象名作为图层名。
|
||||
|
||||
| 业务类别 | 目标 `source-layer` |
|
||||
| --- | --- |
|
||||
| 海域底色、水深区 | `baseline_area`、`depth_zone_739`、`depth_zone_741` |
|
||||
| 海岸、陆地与岸线 | `land_area`、`baseline_line`、`baseline_outline` |
|
||||
| 等深线与测深文字 | `depth_contour`、`bathymetry_line`、`seabed_text_point` |
|
||||
| 航标、灯塔、浮标、灯弧 | `navigation_marks` |
|
||||
| 航行危险物 | `navigation_hazard_point`、`navigation_hazard_area`、`navigation_hazard_outline` |
|
||||
| 锚泊及锚泊注意 | `anchorage_point`、`anchorage_area`、`anchorage_outline`、`anchor_caution_hazard_point`、`anchor_caution_hazard_area`、`anchor_caution_hazard_outline` |
|
||||
| 渔具与渔业禁限 | `fixed_fishing_gear_area` |
|
||||
| 设施、桥梁、净空 | `facility_boundary_point`、`facility_boundary_area`、`facility_boundary_outline`、`bridge_structure`、`clearance_limit_point`、`clearance_limit_line` |
|
||||
| 地名和陆上设施 | `place_label_sea`、`place_label_land`、`onshore_structure_point`、`onshore_structure_line`、`onshore_structure_area` |
|
||||
| 其他已由 style 消费的图层 | `pilot_station_point`、`seabed_line`、`submerged_reef_area`、`hazard_boundary_outline`、`hole_area`、`clip_outline_754` |
|
||||
|
||||
未能映射到上述图层的 CM95 对象不得静默丢弃:应写入工程版的 `cm95_unmapped` 隔离层并生成映射缺口报告;该隔离层不进入正式 style。
|
||||
|
||||
## 5. 字段契约
|
||||
|
||||
### 5.1 每个已交付要素必须有的字段
|
||||
|
||||
| 字段 | 要求 |
|
||||
| --- | --- |
|
||||
| `fid` | NavSea 稳定、可复现的对象标识;不能使用每次构建都会变化的临时序号。 |
|
||||
| `canonical_family` | NavSea 大类语义。 |
|
||||
| `canonical_object_type` | NavSea 细粒度对象类型。 |
|
||||
| `render_layer` | 与实际 `source-layer` 相同的目标渲染层。 |
|
||||
| `chart_render_type` | `fill`、`line`、`symbol`、`label` 或 `none`。 |
|
||||
| `chart_priority` | 绘制/碰撞优先级。 |
|
||||
| `source_id` | 可回查 CM95 上游对象的稳定标识;工程版必留,交付版建议保留。 |
|
||||
| `source_dataset_id` | CM95 数据集、cell 或版本标识;工程版必留。 |
|
||||
|
||||
### 5.2 当前 style 的直接渲染字段
|
||||
|
||||
按对象类型填写以下字段,未适用字段可缺省,但不得以伪造值替代:
|
||||
|
||||
| 对象类别 | 必要或高优先级字段 |
|
||||
| --- | --- |
|
||||
| 面与水深区 | `chart_fill_style`、`chart_fill_pattern` |
|
||||
| 线 | `chart_line_color`、`chart_line_width`、`chart_line_pattern` |
|
||||
| 图标 | `chart_icon_image`、`chart_symbol_code`、`class_code`、`display_code`、`shape_class_code` |
|
||||
| 文字 | `chart_label_text`、`chart_label_subtext`、`chart_text_style`、`chart_text_color`、`chart_label_position_code` |
|
||||
| 灯标 | `light_color_code`、`chart_label_subtext`;有弧段时还需 `arc_id` 与可追溯的原始弧段编码。 |
|
||||
|
||||
`chart_icon_image`、`chart_fill_pattern` 和 `arc_id` 的取值必须是当前 semantic sprite 中真实存在的键。不得写入旧 `symbol-daytime-*`、`fill-daytime-*` 或未经 sprite 审计的新键。
|
||||
|
||||
### 5.3 CM95 原始属性保留
|
||||
|
||||
CM95 的原始属性不得直接成为 style 的长期依赖,但工程版必须保留以下可追溯信息:
|
||||
|
||||
- CM95 对象类别/OBJL;
|
||||
- 原始对象 ID、cell/数据集 ID、更新时间或版本;
|
||||
- 原始属性全集或其不可逆裁剪前的外部 trace;
|
||||
- 原始几何类型;
|
||||
- 映射规则 ID 与映射版本。
|
||||
|
||||
交付版可裁掉详细 trace,但必须能凭 `fid` 在工程索引中回查到上述信息。
|
||||
|
||||
## 6. CM95 映射实施方式
|
||||
|
||||
建立一个版本化映射表,例如 `tasks/pbf/mappings/cm95_to_navsea_v1.yaml`。每条规则至少包含:
|
||||
|
||||
- `cm95_object_class`:CM95 原始对象类别;
|
||||
- `geometry_type`:点、线、面;
|
||||
- `condition`:属性条件;
|
||||
- `target_source_layer`:本规范第 4 节中的目标层;
|
||||
- `canonical_family`、`canonical_object_type`;
|
||||
- `style_fields`:需物化的 `chart_*`、灯标、文字或数值字段;
|
||||
- `rule_id`、`mapping_version`;
|
||||
- `safety_class`:`hard_gate`、`important` 或 `normal`。
|
||||
|
||||
映射优先级如下:
|
||||
|
||||
1. 航标、灯火、浮标、灯弧;
|
||||
2. 暗礁、沉船、障碍物、浅水、干出与露出对象;
|
||||
3. 水深区、等深线、测深与净空;
|
||||
4. 海陆边界、陆地、航道、锚地、限制区、渔具;
|
||||
5. 设施、地名和一般说明。
|
||||
|
||||
同一 CM95 类别因属性不同而表现不同,必须拆成多条显式规则;不能只按对象类别做一对一映射。
|
||||
|
||||
## 7. PBF 生成规则
|
||||
|
||||
- 统一投影为 EPSG:3857,使用 XYZ `z/x/y` 切片。
|
||||
- MVT extent 固定为 `4096`,同一目标图层内保持一致。
|
||||
- 首版目标 zoom 为 `0–12`;小范围试产可先产出覆盖 AOI 的 `z8–12`。
|
||||
- 面、线裁切须带足够 buffer,避免瓦片边缘断裂;点不得因边界判断被重复删除。
|
||||
- 保持原始几何类型;不得将面危险物降级为点,或把线界线误转为面。
|
||||
- 同一 `fid` 在不同 zoom/tile 的实例可重复出现,但其身份和核心语义必须一致。
|
||||
- 构建时输出工程版 PBF、交付版 PBF、映射缺口 JSON/Markdown 和 `fid -> source_id` 审计索引。
|
||||
|
||||
## 8. Style 接入方式
|
||||
|
||||
以当前基线 style 复制一个 CM95 部署版本。首版只允许修改以下内容:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "NavSea CM95 <区域> <版本>",
|
||||
"sources": {
|
||||
"navsea_delivery": {
|
||||
"tiles": ["https://<host>/pbf-cm95-<区域>-<版本>/{z}/{x}/{y}.pbf"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
保持不变:
|
||||
|
||||
- 全部 layer ID、顺序、filter 和 paint/layout;
|
||||
- semantic sprite URL;
|
||||
- glyph URL;
|
||||
- 外部 tide 与底图 source。
|
||||
|
||||
若某一类 CM95 数据无法命中现有 style,优先补充映射字段或 sprite 映射;只有确认现有 style 无法表达且完成专项审计后,才允许新增 style layer。
|
||||
|
||||
## 9. 分阶段交付
|
||||
|
||||
### 阶段 A:单 AOI 可视化样本
|
||||
|
||||
- 选择一个含陆地、水深、航标和危险物的港口或近岸 AOI。
|
||||
- 导出 CM95 原始对象清单及 `source_id`。
|
||||
- 完成第 6 节映射表的最小覆盖。
|
||||
- 生成 z8–12 PBF,使用只改 tile URL 的 style 打开。
|
||||
|
||||
通过条件:底图、水深、等深线、陆地、主要航标和危险物均可显示,且无大面积空白或错误覆盖。
|
||||
|
||||
### 阶段 B:安全对象闭环
|
||||
|
||||
- 补齐所有 `hard_gate` 对象的分类、图层和符号字段。
|
||||
- 灯火必须同时验证灯色、略记和灯弧(如原始数据提供)。
|
||||
- 危险物必须验证水上/水下/露出/干出语义不会画反。
|
||||
|
||||
通过条件:对象保全审计的安全对象缺失数为 `0`,关键图标/文字/symbol sprite 缺失数为 `0`。
|
||||
|
||||
### 阶段 C:区域扩展与发布
|
||||
|
||||
- 扩展至完整目标海域及 z0–12。
|
||||
- 收敛未映射对象;剩余对象须有明确的隔离理由和风险结论。
|
||||
- 生成正式交付版及可回查工程索引。
|
||||
|
||||
## 10. 必须执行的审计顺序
|
||||
|
||||
按项目正式口径执行,不能以视觉相似替代对象保全:
|
||||
|
||||
1. **对象保全审计**:以 `source_id + source_dataset_id + geometry_type` 回对 CM95 原始导出与 PBF;检查缺失、错误重分层、错误合并、身份丢失。
|
||||
2. **渲染审计**:扫描 PBF 字段、style 命中和 sprite 资源;检查关键对象是否获得有效 fill、line、icon、text。
|
||||
3. **AOI 视觉审计**:在固定中心点和 zoom 检查叠压、边缘裁切、标签、海陆关系与安全感知。
|
||||
|
||||
CM95 没有“旧 NavSea PBF”可作为对象基准时,CM95 原始导出数据就是第一层审计的基准;不可跳过这一层。
|
||||
|
||||
## 11. 硬门禁
|
||||
|
||||
以下任一项不通过,CM95 PBF 不得切换到正式 URL:
|
||||
|
||||
- `hard_gate` 对象存在缺失、身份不可回查或错误图层;
|
||||
- `chart_icon_image`、`chart_fill_pattern`、`arc_id` 引用不存在的 sprite 键;
|
||||
- 深度、净空、危险物或灯火发生单位错误、正负号错误或水上/水下语义反转;
|
||||
- PBF 投影、extent、坐标轴或 tile y 方向错误;
|
||||
- style 实际加载的 tile URL 不是候选 CM95 PBF;
|
||||
- 映射缺口被静默丢弃;
|
||||
- 未完成针对目标 AOI 的人工视觉复核。
|
||||
|
||||
## 12. 首次实施的输入与产出
|
||||
|
||||
开始实施前需要提供:
|
||||
|
||||
- 一个合法导出的 CM95 AOI 样本;
|
||||
- 导出格式和字段/对象类别字典;
|
||||
- 数据集版本、坐标参考和深度/高度单位说明;
|
||||
- 目标海域、目标 zoom、部署 PBF URL;
|
||||
- 至少一个包含航标、危险物、水深区和陆地的验收 AOI。
|
||||
|
||||
首次实施完成时必须交付:
|
||||
|
||||
- `cm95_to_navsea_v1.yaml` 映射表;
|
||||
- CM95→NavSea 转换脚本;
|
||||
- 工程版与交付版 PBF;
|
||||
- 映射缺口报告、对象保全报告、sprite 闭合报告和 AOI 审计报告;
|
||||
- 仅替换瓦片 URL 的 CM95 style 文件。
|
||||
|
||||
## 13. 与既有文档的关系
|
||||
|
||||
- 本规范定义 CM95 作为新上游数据源时如何接入;
|
||||
- [NavSea PBF Schema v2](tasks/pbf/NavSea_PBF_schema_v2.md) 定义通用 PBF 字段方向;
|
||||
- [NavSea Tile Generation Pipeline v2](tasks/pbf/NavSea_tile_generation_pipeline_v2.md) 定义既有原始 PBF→交付 PBF 流程;
|
||||
- [NavSea 交付前审计规范](NavSea_Delivery_Preflight_Audit_Spec.md) 定义正式交付审计门禁。
|
||||
|
||||
出现冲突时,以安全对象不丢失、可回查和当前 style 实际字段契约为最高优先级。
|
||||
62
PACKAGE_MANIFEST_SHA256.txt
Normal file
62
PACKAGE_MANIFEST_SHA256.txt
Normal file
@@ -0,0 +1,62 @@
|
||||
# CM95 PBF Production v1.4.7 ROOT OVERLAY
|
||||
# SHA-256 manifest; this manifest does not hash itself.
|
||||
40ab19e0b75714e756b8079744121a27b404175abd7c595fa49cb500046d751a config/mappings/cm95_gap_disposition_japan_dataset_1_v1.yaml
|
||||
2df00c19404adf3510443c615748bff5ecc2789c16da4ea8c2cfd42f3ccc717d config/mappings/cm95_gap_disposition_v1.yaml
|
||||
3947a326e8e805d7eab357463380b2f303ba75ebe08dce4e4b708bc61416b575 config/mappings/cm95_to_navsea_v1.yaml
|
||||
f3036ddb3b89a33577bf9d0ae16ca71aaa3726fd83bb365810ab48abce8381eb config/pbf/cm95_production_v1.yaml
|
||||
8db466b99466a0f15079d6a644049bb30e3a31dca5f6f545a571da8f5d64d4c5 config/pbf/cm95_tile_policy_japan_full_detail_v1.yaml
|
||||
d56396625f9ef25de274f05222156f06d4b39a91a3d9809bc30b1218bd601f7f config/pbf/cm95_tile_policy_v1.yaml
|
||||
37aba6d8a12a4500e6599309430f97776e64aeda867c45728d984dcb6fc3ff1a config/pbf/cm95_v1_4_5_nonrenderable_label_tiles.txt
|
||||
3e89bc20e2465592a2dc70509649e159a958b254452dd26e7d3bf2e8e74e7fb9 config/sprite/semantic-sprite-20260808.json
|
||||
c11aa7b9410171df8b59f5175885ce0ebd2480706f3699eb7c28b1f4d351aaf4 config/style/style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json
|
||||
207b2e4ea7eab1cafd549a894c36195fc060516307c2d73b05b52aad650eb3e2 docs/25个新增映射缺口分类说明_v1.md
|
||||
f7e2f3a6f7ceb7dccd4cc3595e556d296d83300cfb48764b51b80633cb650013 docs/CM95_21张PBF对照审计_v1.md
|
||||
7a24a5b33aac427f7e2be887ada48b346db7418db86d3087899f630582930e47 docs/CM95_PBF_Pilot生成器设计_v1.md
|
||||
bba1fadc7d218b89531611afc25bf8c587667947af5bda024185d13dcd3850cb docs/CM95_PBF_v1.4.7_导航名称冲突审计式省略_v1.md
|
||||
cf75fad5361fd2e502bdeb1a7114631549a36f4fa3f7cc5fd854a672a8c3014f docs/CM95_PBF_v1_2变更说明.md
|
||||
d9fa32f28b7b4c325f3e17e05798f2b971b132274cfb1e0aff546d838ef78bc8 docs/CM95_PBF_v1_3变更说明.md
|
||||
b6ba3051caecf9746c5ae091b32c7e8924ad0a6038c8160b61ea6c6ae8610441 docs/CM95_PBF_v1_4_3离线自检报告_v1.md
|
||||
d6be555db71855a1decc88bb8164c4dd556371880c3818ced2388b415fc7b6fc docs/CM95_PBF生产化阶段_v1_4.md
|
||||
c545546d76a291f30384b8a20bd5e8fb03a8fea214fac3bee11504c1e6dfadd1 docs/CM95_PBF生产化阶段_v1_4_1.md
|
||||
e8a6dc017ed7c7a92fd67afed5a014a6860534de6745a5c404bd5541e92e7d1b docs/CM95_PBF生产化阶段_v1_4_2.md
|
||||
e31ba6dfb53ccc9d69d1108bb8734c101052bdc5b206b4a4b0d7d9eada41212b docs/CM95_PBF生产化阶段_v1_4_3.md
|
||||
cd6ad3f2e1e6e00dbd230fcad48013330500a03556ae6b5e5bda4577bc8705d4 docs/CM95_PBF生产化阶段_v1_4_4.md
|
||||
1614b56f51c6c4f2546dfd2b8b02c527ce24bcc5a0877544b925344841da9e56 docs/CM95_PBF生产化阶段_v1_4_5.md
|
||||
76ab40bfbb90f1a14e8387e16a8ab4942918123eeaf93c0224dac5af796308c4 docs/CM95_PBF生产化阶段_v1_4_6.md
|
||||
6509ee4fdcd057e2e0a959c92ee3768cd672dc27f570279ee2e0267202da114b docs/CM95_助航名称规则冻结_v1.md
|
||||
4fec6374e3ec462946cc6fb6cea04f69513c45066eade42ecbb89c7158e7932f docs/PBF03_离线自检报告_v1.md
|
||||
8daaa1f6e373e1df20c553208e5657a87fcc2f8b291d2164d2240d133bc07252 docs/PBF03_离线自检报告_v1_1.md
|
||||
69f821a70d2bfb8bdbbd53b5a9f20e591b54a3aaabbbab1d6a7f59d526629eba docs/cm95_global_mapping_gap_closure_audit_v2.json
|
||||
ebadb6ea5cf3365a22c06ee5c8806e43ef23c1a8358ed9cfba4aae28aa5876ab docs/cm95_mapping_contract_check_v1.json
|
||||
e527cfe189982ae914bb7f920d7abf8b06c358b132359952e5c9f38be48124f7 docs/cm95_mapping_contract_check_v1_1.json
|
||||
b22aab3cc1d57f77195f367841ce1f585b8ce0300ee1c11275b3a100a9cba1ab docs/cm95_mapping_contract_check_v1_4_3.json
|
||||
836fde71f3e012b0613ab8e9069075a420a8b186c8f13559ab6a925fd0536279 pyproject.toml
|
||||
a460a58863c910fa7593ae36768bf061ed51f956080e9b11497485558d86a6b2 requirements.txt
|
||||
20080eea2aaa7a672f93143fea66944954e578a81e468e99c7c7de6b995fad63 scripts/cm95_japan_continue_from_step8.ps1
|
||||
415b8ffd7d27d81dad461368cfc51c2b2a119cc64f8a44a32b7b3d8d21731c93 scripts/cm95_japan_v1_4_6_continue.ps1
|
||||
0819b124050c7c8262f2da081cf9b2db719a478dd9047b79058c8c8a7b24cd2b scripts/cm95_japan_v1_4_7_finalize_existing.ps1
|
||||
2ba6a657e19ed96cb7581fd9252a9f36b2c87bf3263cc5cf1a9e3b5701caf68b src/cm95pbf/__init__.py
|
||||
e0e2bc0bcdf4e52b93cf5af4dbad4cdd4245d6d7b5d6667dfd2181683780b51f src/cm95pbf/builder.py
|
||||
f9b0f20671aa0860cbfebb0eab83631c26fa02b92b29f863746d5a2f9fdf02c4 src/cm95pbf/cli.py
|
||||
9ff689390d57950094a97d19ba1d1042640aa07f511198b81f0c8a67c9c32a7b src/cm95pbf/identity.py
|
||||
1b60945c08766d57c8c50d34979e665c3a63264e758c85f987086f5d3f550500 src/cm95pbf/mapping.py
|
||||
acf22401be75023d4f01b56c4b4f418310f67687553b4293eda486e89340fe13 src/cm95pbf/policy.py
|
||||
02befc10a9014ada2aba86054b9e79217dc5d1053da5b4a0ac24b67f06015b62 src/cm95pbf/production.py
|
||||
fa96143732bf949e28d560a582f5b0a19f9f0a816acd8096b27ce0b0e0554846 src/cm95pbf/release.py
|
||||
b775aea2807049570f33d493ba8a403ec88e9f1f8c4d487d39d6f6e9b8e38ad2 src/cm95pbf/style_contract.py
|
||||
18ef07d97145d6030dee0a6e9bac689061b7a4c5ea23a84e40b0231f3699e333 tools/cm95_global_mapping_gap_audit_v1.py
|
||||
a604be1eafa2d5a5c58897a1ceabf41bf5987fbbb445f07c70e02d90d55bcd77 tools/cm95_global_mapping_gap_closure_audit_v2.py
|
||||
0fa02b0b2e8393a5481eb5ee7e6762bdf0651a2f7d74a44bc66b5b651a61c058 tools/cm95_mapping_contract_check_v1.py
|
||||
42a430db375a97361113eedc9ad902a074d131845c820db8e3f14b0aa8ee4207 tools/cm95_nav_aid_relation_audit_v1.py
|
||||
30bd4f1480c64279a54b52aa82ca479cb145fadbddecb10e6fb9a203852ba8d0 tools/cm95_nav_name_conflict_audit_v1.py
|
||||
90d5078953a74ec458d6cb356174436a840cd99f4cc721015b4c23d49a0e81a7 tools/cm95_pbf_build_reports_audit_v1.py
|
||||
7e77e496e90af634640a457a09a4ba9cf58bbeb628fb5f63ce90e9b648897b00 tools/cm95_pbf_output_audit_v1.py
|
||||
66f29ee2c1154fc7fadb610462f0b03e7efc0bb3498ffea36022e5cccdf29fb6 tools/cm95_pbf_style_contract_audit_v2.py
|
||||
d1d7877e31b743c655bdbafce845a7b63aca69c14bf5efb706ef7b851acd2c33 tools/cm95_production_failure_audit_v1.py
|
||||
b938f37f1a9b8907d0717c97810b3e8f5332cb0a575f2d5baa63312bf272626d tools/cm95_production_plan_audit_v1.py
|
||||
8899a9dfad6039f07c39281fb4b4211e0520743d4c2d01adee523bd9fdb12407 tools/cm95_v1_4_5_preflight.py
|
||||
b53250bec660bc39265d8de9dc3611a0673539bdb674e2f02964f1d6cf1e9a45 tools/cm95_v1_4_6_preflight.py
|
||||
8f6f8dae52f765cae2148b5a2653d5d7eaa25ae75e2c10a29dbfa55cf1cae63b tools/cm95_v1_4_6_query_equivalence.py
|
||||
252d6edc509dff83c811b2c0d0643d8b97cf4712f247779f5d0ac2a07b05170f tools/cm95_v1_4_7_preflight.py
|
||||
8c91f52e1eaf438415b325f9f97de59107cb52c6dbe57c10eab580c56ed556b8 使用说明.txt
|
||||
5888c482f5cd6d2980e46ecc936f9d1cfb1626b30474a18d0c2e37b990b24472 替换与执行说明.md
|
||||
35
README.txt
Normal file
35
README.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
CM95 Japan Full Rebuild Pipeline v2
|
||||
|
||||
替换:
|
||||
D:\React\cm93-mysql-importer-starter\scripts\cm95_japan_full_rebuild_pipeline.ps1
|
||||
|
||||
执行:
|
||||
cd D:\React\cm93-mysql-importer-starter
|
||||
|
||||
powershell -ExecutionPolicy Bypass `
|
||||
-File .\scripts\cm95_japan_full_rebuild_pipeline.ps1
|
||||
|
||||
默认:
|
||||
ProjectRoot = D:\React\cm93-mysql-importer-starter
|
||||
SourceRoot = D:\Ship\CM93V2\CM93JAPAN
|
||||
ExpectedCells = 1492
|
||||
Workers = 4
|
||||
|
||||
破坏性操作前要求输入:
|
||||
DELETE <CM93_DB_NAME>
|
||||
|
||||
跳过确认:
|
||||
powershell -ExecutionPolicy Bypass `
|
||||
-File .\scripts\cm95_japan_full_rebuild_pipeline.ps1 `
|
||||
-Force
|
||||
|
||||
v2 修复:
|
||||
- 不再使用 PowerShell 把多行 Python 通过 -c 参数传给 python.exe;
|
||||
- 所有 Python helper 使用临时 .py 文件;
|
||||
- audit gate 对齐当前 cm93db JSON;
|
||||
- geometry validity 保持 informational;
|
||||
- status-production 多行 JSON 正确解析;
|
||||
- finalizer 使用当前 Dataset 专属 semantic backlog,不复用旧 Dataset 1 的静态 feature-row 数字。
|
||||
|
||||
如果 mapping gap closure FAIL:
|
||||
pipeline 会在生成 PBF 前停止。
|
||||
1008
cm95_karatsu_aoi_mapping_audit_v1.py
Normal file
1008
cm95_karatsu_aoi_mapping_audit_v1.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"version": "v1.0",
|
||||
"generated_at": "2026-09-03T08:06:34",
|
||||
"database": "cm93_chart",
|
||||
"dataset_id": 1,
|
||||
"read_only": true,
|
||||
"aoi": {
|
||||
"tile": {
|
||||
"z": 10,
|
||||
"x": 881,
|
||||
"y": 410
|
||||
},
|
||||
"bbox_wgs84": {
|
||||
"min_lon": 129.7265625,
|
||||
"min_lat": 33.4314413355753,
|
||||
"max_lon": 130.078125,
|
||||
"max_lat": 33.7243396617476
|
||||
},
|
||||
"known_navsea_samples_inside": [
|
||||
"z10/881/410",
|
||||
"z11/1762/820",
|
||||
"z12/3525/1643"
|
||||
]
|
||||
},
|
||||
"dataset": {
|
||||
"id": 1,
|
||||
"source_type": "CM93",
|
||||
"name": "CM93JAPAN",
|
||||
"source_root": "D:\\Ship\\CM93V2\\CM93JAPAN",
|
||||
"parser_version": "0.2.0",
|
||||
"normalized_srid": 4326
|
||||
},
|
||||
"warnings": [],
|
||||
"counts": {
|
||||
"aoi_cells": 0,
|
||||
"aoi_spatial_features": 0,
|
||||
"object_class_geometry_groups": 0,
|
||||
"attribute_group_count": 0,
|
||||
"sample_feature_count": 0,
|
||||
"related_sample_count": 0
|
||||
},
|
||||
"geometry_counts": [],
|
||||
"object_classes": [],
|
||||
"next_step": "Use AOI_对象映射准备表_v1.csv + 属性值域汇总_v1.csv to author cm95_to_navsea_v1.yaml."
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1 @@
|
||||
|
||||
|
|
@@ -0,0 +1,18 @@
|
||||
CM95 唐津 AOI → NavSea PBF 映射输入审计 v1
|
||||
====================================================================================
|
||||
Dataset ID : 1
|
||||
Tile : z10/881/410
|
||||
BBox WGS84 : 129.7265625000,33.4314413356 → 130.0781250000,33.7243396617
|
||||
|
||||
AOI cells : 0
|
||||
AOI spatial features : 0
|
||||
Object class/geom groups : 0
|
||||
Attribute groups : 0
|
||||
Feature samples : 0
|
||||
Related samples : 0
|
||||
|
||||
Geometry counts:
|
||||
|
||||
NEXT:
|
||||
上传本脚本生成的 ZIP。
|
||||
下一步直接生成 cm95_to_navsea_v1.yaml 初版并标注 UNMAPPED / hard_gate 缺口。
|
||||
1981
cm95_karatsu_presence_diagnostic_v2.json
Normal file
1981
cm95_karatsu_presence_diagnostic_v2.json
Normal file
File diff suppressed because it is too large
Load Diff
304
cm95_karatsu_presence_diagnostic_v2.py
Normal file
304
cm95_karatsu_presence_diagnostic_v2.py
Normal file
@@ -0,0 +1,304 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
CM95 唐津 AOI Presence Diagnostic v2
|
||||
|
||||
只读诊断:
|
||||
1) chart_cell bbox 是否覆盖唐津 z10/881/410;
|
||||
2) chart_feature bbox 是否命中;
|
||||
3) 实际 Point/Line/Area geometry 是否通过 MBRIntersects 命中;
|
||||
4) Sounding point 是否命中;
|
||||
5) 输出离唐津中心最近的 Cell / Feature,帮助判断 Dataset 1 是否根本没有唐津细节数据。
|
||||
|
||||
不修改数据库。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
import argparse
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import DictCursor
|
||||
|
||||
LON_MIN = 129.7265625
|
||||
LAT_MIN = 33.4314413355753
|
||||
LON_MAX = 130.078125
|
||||
LAT_MAX = 33.7243396617476
|
||||
CENTER_LON = (LON_MIN + LON_MAX) / 2
|
||||
CENTER_LAT = (LAT_MIN + LAT_MAX) / 2
|
||||
|
||||
|
||||
def args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password")
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument("--output", default="cm95_karatsu_presence_diagnostic_v2.json")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def fetch(cur, sql, params=()):
|
||||
cur.execute(sql, params)
|
||||
return list(cur.fetchall())
|
||||
|
||||
|
||||
def scalar(cur, sql, params=()):
|
||||
cur.execute(sql, params)
|
||||
r = cur.fetchone()
|
||||
return None if not r else next(iter(r.values()))
|
||||
|
||||
|
||||
def main():
|
||||
a = args()
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host, port=a.port, user=a.user, password=a.password,
|
||||
database=a.database, charset="utf8mb4",
|
||||
cursorclass=DictCursor, autocommit=False,
|
||||
connect_timeout=20, read_timeout=900,
|
||||
)
|
||||
|
||||
report = {
|
||||
"version": "v2",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"target": {
|
||||
"tile": "z10/881/410",
|
||||
"bbox": [LON_MIN, LAT_MIN, LON_MAX, LAT_MAX],
|
||||
"center": [CENTER_LON, CENTER_LAT],
|
||||
},
|
||||
"read_only": True,
|
||||
}
|
||||
|
||||
poly_wkt = (
|
||||
f"POLYGON(({LON_MIN} {LAT_MIN},"
|
||||
f"{LON_MAX} {LAT_MIN},"
|
||||
f"{LON_MAX} {LAT_MAX},"
|
||||
f"{LON_MIN} {LAT_MAX},"
|
||||
f"{LON_MIN} {LAT_MIN}))"
|
||||
)
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
report["dataset"] = fetch(cur, """
|
||||
SELECT id,name,source_type,source_root,parser_version,normalized_srid
|
||||
FROM chart_dataset WHERE id=%s
|
||||
""", (a.dataset_id,))
|
||||
|
||||
report["global_feature_bbox"] = fetch(cur, """
|
||||
SELECT
|
||||
MIN(bbox_min_lon) min_lon,
|
||||
MIN(bbox_min_lat) min_lat,
|
||||
MAX(bbox_max_lon) max_lon,
|
||||
MAX(bbox_max_lat) max_lat,
|
||||
SUM(bbox_min_lon IS NOT NULL) bbox_rows,
|
||||
COUNT(*) total_rows
|
||||
FROM chart_feature
|
||||
WHERE dataset_id=%s
|
||||
""", (a.dataset_id,))
|
||||
|
||||
report["global_cell_bbox"] = fetch(cur, """
|
||||
SELECT
|
||||
MIN(bbox_min_lon) min_lon,
|
||||
MIN(bbox_min_lat) min_lat,
|
||||
MAX(bbox_max_lon) max_lon,
|
||||
MAX(bbox_max_lat) max_lat,
|
||||
SUM(bbox_min_lon IS NOT NULL) bbox_rows,
|
||||
COUNT(*) total_rows
|
||||
FROM chart_cell
|
||||
WHERE dataset_id=%s
|
||||
""", (a.dataset_id,))
|
||||
|
||||
bbox_params = (
|
||||
a.dataset_id,
|
||||
LON_MIN, LON_MAX, LAT_MIN, LAT_MAX,
|
||||
)
|
||||
|
||||
report["cell_bbox_overlap"] = fetch(cur, """
|
||||
SELECT id,source_relative_path,scale_code,native_scale,
|
||||
bbox_min_lon,bbox_min_lat,bbox_max_lon,bbox_max_lat,
|
||||
feature_count
|
||||
FROM chart_cell
|
||||
WHERE dataset_id=%s
|
||||
AND bbox_max_lon >= %s
|
||||
AND bbox_min_lon <= %s
|
||||
AND bbox_max_lat >= %s
|
||||
AND bbox_min_lat <= %s
|
||||
ORDER BY native_scale,source_relative_path
|
||||
""", bbox_params)
|
||||
|
||||
report["feature_bbox_count"] = scalar(cur, """
|
||||
SELECT COUNT(*)
|
||||
FROM chart_feature
|
||||
WHERE dataset_id=%s
|
||||
AND bbox_max_lon >= %s
|
||||
AND bbox_min_lon <= %s
|
||||
AND bbox_max_lat >= %s
|
||||
AND bbox_min_lat <= %s
|
||||
""", bbox_params)
|
||||
|
||||
# Direct actual geometry checks. These bypass chart_feature bbox metadata.
|
||||
direct = {}
|
||||
for kind, table in [
|
||||
("point", "chart_point_geometry"),
|
||||
("line", "chart_line_geometry"),
|
||||
("area", "chart_area_geometry"),
|
||||
]:
|
||||
try:
|
||||
direct[kind] = scalar(cur, f"""
|
||||
SELECT COUNT(*)
|
||||
FROM {table} g
|
||||
JOIN chart_feature f ON f.id=g.feature_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND MBRIntersects(
|
||||
g.geom,
|
||||
ST_GeomFromText(%s,4326)
|
||||
)
|
||||
""", (a.dataset_id, poly_wkt))
|
||||
except Exception as e:
|
||||
direct[kind] = {"error": str(e)}
|
||||
|
||||
report["direct_geometry_mbr_counts"] = direct
|
||||
|
||||
try:
|
||||
report["sounding_bbox_count"] = scalar(cur, """
|
||||
SELECT COUNT(*)
|
||||
FROM chart_sounding_point s
|
||||
JOIN chart_feature f ON f.id=s.feature_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND ST_X(s.geom) BETWEEN %s AND %s
|
||||
AND ST_Y(s.geom) BETWEEN %s AND %s
|
||||
""", (
|
||||
a.dataset_id,
|
||||
LON_MIN, LON_MAX, LAT_MIN, LAT_MAX,
|
||||
))
|
||||
except Exception as e:
|
||||
report["sounding_bbox_count"] = {"error": str(e)}
|
||||
|
||||
# Nearest cell by bbox center, excluding pathological world-scale cells when possible.
|
||||
report["nearest_cells"] = fetch(cur, """
|
||||
SELECT id,source_relative_path,scale_code,native_scale,
|
||||
bbox_min_lon,bbox_min_lat,bbox_max_lon,bbox_max_lat,
|
||||
feature_count,
|
||||
SQRT(
|
||||
POW(((bbox_min_lon+bbox_max_lon)/2)-%s,2) +
|
||||
POW(((bbox_min_lat+bbox_max_lat)/2)-%s,2)
|
||||
) AS center_distance_deg
|
||||
FROM chart_cell
|
||||
WHERE dataset_id=%s
|
||||
AND bbox_min_lon IS NOT NULL
|
||||
AND bbox_min_lat IS NOT NULL
|
||||
AND bbox_max_lon IS NOT NULL
|
||||
AND bbox_max_lat IS NOT NULL
|
||||
AND (bbox_max_lon-bbox_min_lon) < 20
|
||||
AND (bbox_max_lat-bbox_min_lat) < 20
|
||||
ORDER BY center_distance_deg ASC
|
||||
LIMIT 30
|
||||
""", (CENTER_LON, CENTER_LAT, a.dataset_id))
|
||||
|
||||
report["nearest_features"] = fetch(cur, """
|
||||
SELECT f.id,f.cell_id,c.source_relative_path,
|
||||
f.source_record_index,f.object_class_id,f.object_class,
|
||||
f.geometry_type,f.scale_code,f.native_scale,
|
||||
f.bbox_min_lon,f.bbox_min_lat,f.bbox_max_lon,f.bbox_max_lat,
|
||||
SQRT(
|
||||
POW(((f.bbox_min_lon+f.bbox_max_lon)/2)-%s,2) +
|
||||
POW(((f.bbox_min_lat+f.bbox_max_lat)/2)-%s,2)
|
||||
) AS center_distance_deg
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.bbox_min_lon IS NOT NULL
|
||||
AND f.bbox_min_lat IS NOT NULL
|
||||
AND f.bbox_max_lon IS NOT NULL
|
||||
AND f.bbox_max_lat IS NOT NULL
|
||||
ORDER BY center_distance_deg ASC
|
||||
LIMIT 50
|
||||
""", (CENTER_LON, CENTER_LAT, a.dataset_id))
|
||||
|
||||
# Coarse 2-degree spatial occupancy by feature bbox center.
|
||||
report["coarse_feature_grid"] = fetch(cur, """
|
||||
SELECT
|
||||
FLOOR(((bbox_min_lon+bbox_max_lon)/2)/2)*2 AS lon_bin,
|
||||
FLOOR(((bbox_min_lat+bbox_max_lat)/2)/2)*2 AS lat_bin,
|
||||
COUNT(*) AS feature_count
|
||||
FROM chart_feature
|
||||
WHERE dataset_id=%s
|
||||
AND bbox_min_lon IS NOT NULL
|
||||
AND bbox_min_lat IS NOT NULL
|
||||
AND bbox_max_lon IS NOT NULL
|
||||
AND bbox_max_lat IS NOT NULL
|
||||
AND ((bbox_min_lon+bbox_max_lon)/2) BETWEEN 120 AND 160
|
||||
AND ((bbox_min_lat+bbox_max_lat)/2) BETWEEN 20 AND 50
|
||||
GROUP BY lon_bin,lat_bin
|
||||
ORDER BY lat_bin,lon_bin
|
||||
""", (a.dataset_id,))
|
||||
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
# Derive diagnosis.
|
||||
fcnt = report.get("feature_bbox_count")
|
||||
d = report.get("direct_geometry_mbr_counts", {})
|
||||
direct_sum = 0
|
||||
direct_errors = []
|
||||
for k, v in d.items():
|
||||
if isinstance(v, int):
|
||||
direct_sum += v
|
||||
else:
|
||||
direct_errors.append((k, v))
|
||||
|
||||
if isinstance(fcnt, int) and fcnt > 0:
|
||||
diagnosis = "AOI_PRESENT_BY_FEATURE_BBOX"
|
||||
elif direct_sum > 0:
|
||||
diagnosis = "AOI_PRESENT_IN_GEOMETRY_BUT_FEATURE_BBOX_QUERY_FAILED"
|
||||
else:
|
||||
diagnosis = "NO_CM95_GEOMETRY_FOUND_IN_KARATSU_AOI"
|
||||
|
||||
report["diagnosis"] = diagnosis
|
||||
report["direct_geometry_total"] = direct_sum
|
||||
report["direct_geometry_errors"] = direct_errors
|
||||
|
||||
out = Path(a.output).resolve()
|
||||
out.write_text(json.dumps(report, ensure_ascii=False, indent=2, default=str), encoding="utf-8")
|
||||
|
||||
print("CM95 唐津 AOI Presence Diagnostic v2")
|
||||
print("=" * 72)
|
||||
print("Target bbox :", [LON_MIN, LAT_MIN, LON_MAX, LAT_MAX])
|
||||
print("Cell bbox overlap :", len(report["cell_bbox_overlap"]))
|
||||
print("Feature bbox count:", report["feature_bbox_count"])
|
||||
print("Direct geometry :", report["direct_geometry_mbr_counts"])
|
||||
print("Soundings :", report["sounding_bbox_count"])
|
||||
print("Diagnosis :", diagnosis)
|
||||
print("")
|
||||
print("Nearest cells:")
|
||||
for r in report["nearest_cells"][:10]:
|
||||
print(
|
||||
f" {r['source_relative_path']} scale={r['native_scale']} "
|
||||
f"bbox=({r['bbox_min_lon']},{r['bbox_min_lat']},"
|
||||
f"{r['bbox_max_lon']},{r['bbox_max_lat']}) "
|
||||
f"dist={float(r['center_distance_deg']):.3f}°"
|
||||
)
|
||||
print("")
|
||||
print("Output:", out)
|
||||
print("把 JSON 上传给 ChatGPT。")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
4794
cm95_nav_aid_relation_audit_v1.json
Normal file
4794
cm95_nav_aid_relation_audit_v1.json
Normal file
File diff suppressed because it is too large
Load Diff
14
cm95_nav_aid_relation_audit_v1.txt
Normal file
14
cm95_nav_aid_relation_audit_v1.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
CM95 / CM93 助航 relation20 全 AOI 审计 v1
|
||||
============================================================================
|
||||
NAV point rows : 233
|
||||
Relation groups : 93
|
||||
Rows without relation20 : 46
|
||||
Coordinate conflict groups : 0
|
||||
|
||||
LIGHTS total : 96
|
||||
LIGHTS with relation20 : 94
|
||||
LIGHTS mergeable : 94
|
||||
LIGHTS relation no base : 0
|
||||
LIGHTS standalone required : 2
|
||||
|
||||
DECISION : PASS_RELATION20_PRIMARY_KEY
|
||||
94
cm95_nav_aid_relation_groups_v1.csv
Normal file
94
cm95_nav_aid_relation_groups_v1.csv
Normal file
@@ -0,0 +1,94 @@
|
||||
cell_id,relation20,member_count,classes,has_light,has_base_component,base_classes,max_coord_spread_deg,coord_ok,members
|
||||
12,2028,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 329223, ""source_record_index"": 1400, ""object_class"": ""LIGHTS"", ""native_scale"": 1000000, ""lon"": 141.57442375474542, ""lat"": 40.53965048898594, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 57, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 8, ""VALNMR"": 19, ""_cm93_relation20_raw"": 2028}}, {""feature_id"": 329025, ""source_record_index"": 1202, ""object_class"": ""TOWERS"", ""native_scale"": 1000000, ""lon"": 141.57442375474542, ""lat"": 40.53965048898594, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6620"", ""VERLEN"": 23, ""_cm93_relation20_raw"": 2028}}]"
|
||||
12,2039,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 329077, ""source_record_index"": 1254, ""object_class"": ""BCNSPP"", ""native_scale"": 1000000, ""lon"": 141.47157794882685, ""lat"": 40.54722276035132, ""attributes"": {""CATSPM"": 27, ""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6625"", ""VERLEN"": 43, ""_cm93_relation20_raw"": 2039}}, {""feature_id"": 329240, ""source_record_index"": 1417, ""object_class"": ""LIGHTS"", ""native_scale"": 1000000, ""lon"": 141.47157794882685, ""lat"": 40.54722276035132, ""attributes"": {""CATLIT"": 5, ""COLOUR"": [1, 4], ""HEIGHT"": 79, ""LITCHR"": 19, ""SIGGRP"": ""(1)"", ""SIGPER"": 10, ""_cm93_relation20_raw"": 2039}}]"
|
||||
12,2041,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 329081, ""source_record_index"": 1258, ""object_class"": ""BCNSPP"", ""native_scale"": 1000000, ""lon"": 141.35805082775352, ""lat"": 40.68748385272822, ""attributes"": {""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6626"", ""_cm93_relation20_raw"": 2041}}, {""feature_id"": 329190, ""source_record_index"": 1367, ""object_class"": ""LIGHTS"", ""native_scale"": 1000000, ""lon"": 141.35805082775352, ""lat"": 40.68748385272822, ""attributes"": {""CATLIT"": 5, ""COLOUR"": [1, 1, 4], ""HEIGHT"": 69, ""INFORM"": ""The white light can be apparent on 8M"", ""LITCHR"": 19, ""SIGGRP"": ""(1)"", ""SIGPER"": 10, ""VALNMR"": 6, ""_cm93_relation20_raw"": 2041}}]"
|
||||
40,6486,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360413, ""source_record_index"": 4741, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.53481130881366, ""lat"": 40.56513638820441, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 7, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 5, ""_cm93_relation20_raw"": 6486}}, {""feature_id"": 359972, ""source_record_index"": 4300, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.53481130881366, ""lat"": 40.56513638820441, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6624.86"", ""VERLEN"": 5, ""_cm93_relation20_raw"": 6486}}]"
|
||||
40,6501,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360453, ""source_record_index"": 4781, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.43965605140164, ""lat"": 40.68046315791786, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 7, ""_cm93_relation20_raw"": 6501}}, {""feature_id"": 359997, ""source_record_index"": 4325, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.43965605140164, ""lat"": 40.68046315791786, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6625.7"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 6501}}]"
|
||||
40,6510,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360419, ""source_record_index"": 4747, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.6269147619469, ""lat"": 40.49949414054503, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 8, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 3, ""_cm93_relation20_raw"": 6510}}, {""feature_id"": 359963, ""source_record_index"": 4291, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.6269147619469, ""lat"": 40.49949414054503, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6619.5"", ""VERLEN"": 5, ""_cm93_relation20_raw"": 6510}}]"
|
||||
40,6521,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360514, ""source_record_index"": 4842, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.5676487228532, ""lat"": 40.541909757522724, ""attributes"": {""CATLIT"": 8, ""COLOUR"": [1], ""HEIGHT"": 22, ""INFORM"": ""Illuminates Hinode Iwa 430m NNW"", ""LITCHR"": 1, ""_cm93_relation20_raw"": 6521}}, {""feature_id"": 359918, ""source_record_index"": 4246, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.5676487228532, ""lat"": 40.541909757522724, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6621"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 6521}}]"
|
||||
40,6528,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360449, ""source_record_index"": 4777, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.67305804264188, ""lat"": 40.454613089799984, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 11, ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""VALNMR"": 4, ""_cm93_relation20_raw"": 6528}}, {""feature_id"": 359976, ""source_record_index"": 4304, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.67305804264188, ""lat"": 40.454613089799984, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6618.4"", ""VERLEN"": 6, ""_cm93_relation20_raw"": 6528}}]"
|
||||
40,6548,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360502, ""source_record_index"": 4830, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.53481130881366, ""lat"": 40.56201499793302, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 16, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 6, ""_cm93_relation20_raw"": 6548}}, {""feature_id"": 360036, ""source_record_index"": 4364, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.53481130881366, ""lat"": 40.56201499793302, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6624.85"", ""VERLEN"": 16, ""_cm93_relation20_raw"": 6548}}]"
|
||||
40,6558,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360270, ""source_record_index"": 4598, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.51424214797476, ""lat"": 40.55215044794532, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 14, ""INFORM"": ""2 fl in 3s"", ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 4, ""_cm93_relation20_raw"": 6558}}, {""feature_id"": 359931, ""source_record_index"": 4259, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.51424214797476, ""lat"": 40.55215044794532, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6625.5"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 6558}}]"
|
||||
40,6567,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 360291, ""source_record_index"": 4619, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.5765599913472, ""lat"": 40.53922443934611, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 57, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 8, ""VALNMR"": 19, ""_cm93_relation20_raw"": 6567}}, {""feature_id"": 359946, ""source_record_index"": 4274, ""object_class"": ""TOWERS"", ""native_scale"": 200000, ""lon"": 141.5765599913472, ""lat"": 40.53922443934611, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6620"", ""VERLEN"": 23, ""_cm93_relation20_raw"": 6567}}]"
|
||||
40,6602,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 360111, ""source_record_index"": 4439, ""object_class"": ""BCNLAT"", ""native_scale"": 200000, ""lon"": 141.52785319505807, ""lat"": 40.55864373294613, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Concrete"", ""SORIND"": ""GB,UKHO,graph,LL M-6624.8"", ""VERLEN"": 16, ""_cm93_relation20_raw"": 6602}}, {""feature_id"": 360409, ""source_record_index"": 4737, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.52785319505807, ""lat"": 40.55864373294613, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 17, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 5, ""_cm93_relation20_raw"": 6602}}]"
|
||||
40,6620,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 360212, ""source_record_index"": 4540, ""object_class"": ""BCNSPP"", ""native_scale"": 200000, ""lon"": 141.3592715266989, ""lat"": 40.68775404209214, ""attributes"": {""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6626"", ""_cm93_relation20_raw"": 6620}}, {""feature_id"": 360256, ""source_record_index"": 4584, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.3592715266989, ""lat"": 40.68775404209214, ""attributes"": {""CATLIT"": 5, ""COLOUR"": [1, 1, 4], ""HEIGHT"": 69, ""INFORM"": ""The white light can be apparent on 8M"", ""LITCHR"": 19, ""SIGGRP"": ""(1)"", ""SIGPER"": 10, ""VALNMR"": 6, ""_cm93_relation20_raw"": 6620}}]"
|
||||
40,6632,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 360094, ""source_record_index"": 4422, ""object_class"": ""BCNLAT"", ""native_scale"": 200000, ""lon"": 141.54707956201432, ""lat"": 40.53735089780069, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6623"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 6632}}, {""feature_id"": 360386, ""source_record_index"": 4714, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.54707956201432, ""lat"": 40.53735089780069, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 14, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 4, ""_cm93_relation20_raw"": 6632}}]"
|
||||
40,6640,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 360132, ""source_record_index"": 4460, ""object_class"": ""BCNLAT"", ""native_scale"": 200000, ""lon"": 141.6516343766049, ""lat"": 40.472369069669675, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6619"", ""VERLEN"": 6, ""_cm93_relation20_raw"": 6640}}, {""feature_id"": 360318, ""source_record_index"": 4646, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.6516343766049, ""lat"": 40.472369069669675, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 9, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 4, ""_cm93_relation20_raw"": 6640}}]"
|
||||
40,6657,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 360164, ""source_record_index"": 4492, ""object_class"": ""BCNLAT"", ""native_scale"": 200000, ""lon"": 141.5203457565323, ""lat"": 40.53735089780069, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6624.7"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 6657}}, {""feature_id"": 360345, ""source_record_index"": 4673, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.5203457565323, ""lat"": 40.53735089780069, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 3, ""_cm93_relation20_raw"": 6657}}]"
|
||||
40,6663,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 360210, ""source_record_index"": 4538, ""object_class"": ""BCNSPP"", ""native_scale"": 200000, ""lon"": 141.53426198404347, ""lat"": 40.53797541747083, ""attributes"": {""COLMAR"": 5, ""SORIND"": ""GB,UKHO,graph,LL M-6623.2"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 6663}}, {""feature_id"": 360456, ""source_record_index"": 4784, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.53426198404347, ""lat"": 40.53797541747083, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 5, ""VALNMR"": 4, ""_cm93_relation20_raw"": 6663}}]"
|
||||
40,6691,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 360172, ""source_record_index"": 4500, ""object_class"": ""BCNLAT"", ""native_scale"": 200000, ""lon"": 141.55232866537378, ""lat"": 40.533978390984394, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6624"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 6691}}, {""feature_id"": 360342, ""source_record_index"": 4670, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.55232866537378, ""lat"": 40.533978390984394, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 11, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 3, ""_cm93_relation20_raw"": 6691}}]"
|
||||
40,6720,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 360211, ""source_record_index"": 4539, ""object_class"": ""BCNSPP"", ""native_scale"": 200000, ""lon"": 141.47084549113066, ""lat"": 40.54653075073066, ""attributes"": {""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6625"", ""VERLEN"": 43, ""_cm93_relation20_raw"": 6720}}, {""feature_id"": 360511, ""source_record_index"": 4839, ""object_class"": ""LIGHTS"", ""native_scale"": 200000, ""lon"": 141.47084549113066, ""lat"": 40.54653075073066, ""attributes"": {""CATLIT"": 5, ""COLOUR"": [1, 4], ""HEIGHT"": 79, ""LITCHR"": 19, ""SIGGRP"": ""(1)"", ""SIGPER"": 10, ""_cm93_relation20_raw"": 6720}}]"
|
||||
351,992,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513794, ""source_record_index"": 864, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.51457109000057, ""lat"": 40.552446668497204, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 14, ""INFORM"": ""2 fl in 3s"", ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 4, ""_cm93_relation20_raw"": 992}}, {""feature_id"": 513761, ""source_record_index"": 831, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.51457109000057, ""lat"": 40.552446668497204, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,MDHS,graph,LL F-6625.5"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 992}}]"
|
||||
351,993,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513800, ""source_record_index"": 870, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.55525672908215, ""lat"": 40.53632341943859, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 9, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 6, ""VALNMR"": 2, ""_cm93_relation20_raw"": 993}}, {""feature_id"": 513763, ""source_record_index"": 833, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.55525672908215, ""lat"": 40.53632341943859, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,MDHS,graph,LL F-6624.4"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 993}}]"
|
||||
351,994,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513801, ""source_record_index"": 871, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.54818162919935, ""lat"": 40.53947009597325, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 12, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 4, ""_cm93_relation20_raw"": 994}}, {""feature_id"": 513760, ""source_record_index"": 830, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.54818162919935, ""lat"": 40.53947009597325, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,MDHS,graph,LL F-6622"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 994}}]"
|
||||
351,995,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513803, ""source_record_index"": 873, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.53501309318457, ""lat"": 40.562163473376586, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 16, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 6, ""_cm93_relation20_raw"": 995}}, {""feature_id"": 513764, ""source_record_index"": 834, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.53501309318457, ""lat"": 40.562163473376586, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,MDHS,graph,LL F-6624.85"", ""VERLEN"": 16, ""_cm93_relation20_raw"": 995}}]"
|
||||
351,996,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513795, ""source_record_index"": 865, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.57615650292712, ""lat"": 40.539856430562644, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 57, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 8, ""VALNMR"": 19, ""_cm93_relation20_raw"": 996}}, {""feature_id"": 513762, ""source_record_index"": 832, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.57615650292712, ""lat"": 40.539856430562644, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,MDHS,graph,LL F-6620"", ""VERLEN"": 23, ""_cm93_relation20_raw"": 996}}]"
|
||||
351,997,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513802, ""source_record_index"": 872, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5340263430931, ""lat"": 40.538229743548484, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 12, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 5, ""VALNMR"": 4, ""_cm93_relation20_raw"": 997}}, {""feature_id"": 513758, ""source_record_index"": 828, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.5340263430931, ""lat"": 40.538229743548484, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""INFORM"": ""Framework tower"", ""SORIND"": ""GB,MDHS,graph,LL F-6623.2"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 997}}]"
|
||||
351,998,3,"{""LIGHTS"": 2, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 513804, ""source_record_index"": 874, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.56775895446813, ""lat"": 40.5424742970387, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 22, ""INFORM"": ""FW spotlight illuminates Hinode Iwa."", ""LITCHR"": 1, ""QUAVEM"": 1, ""_cm93_relation20_raw"": 998}}, {""feature_id"": 513813, ""source_record_index"": 883, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.56775895446813, ""lat"": 40.5424742970387, ""attributes"": {""CATLIT"": 11, ""COLOUR"": [1], ""LITCHR"": 1, ""_cm93_relation20_raw"": 998}}, {""feature_id"": 513759, ""source_record_index"": 829, ""object_class"": ""TOWERS"", ""native_scale"": 50000, ""lon"": 141.56775895446813, ""lat"": 40.5424742970387, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,MDHS,graph,LL F-6621"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 998}}]"
|
||||
351,999,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 513790, ""source_record_index"": 860, ""object_class"": ""BOYSPP"", ""native_scale"": 50000, ""lon"": 141.5684761285037, ""lat"": 40.56065929040829, ""attributes"": {""BOYSHP"": 1, ""CATSPM"": 10, ""COLMAR"": 4, ""INFORM"": ""Private mark|Wave recorder"", ""_cm93_relation20_raw"": 999}}, {""feature_id"": 513826, ""source_record_index"": 896, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5684761285037, ""lat"": 40.56065929040829, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 999}}]"
|
||||
351,1000,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 513791, ""source_record_index"": 861, ""object_class"": ""BOYSPP"", ""native_scale"": 50000, ""lon"": 141.51750082223097, ""lat"": 40.5455495240557, ""attributes"": {""BOYSHP"": 1, ""CATSPM"": 13, ""COLMAR"": 4, ""_cm93_relation20_raw"": 1000}}, {""feature_id"": 513827, ""source_record_index"": 897, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.51750082223097, ""lat"": 40.5455495240557, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 1000}}]"
|
||||
351,1001,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513809, ""source_record_index"": 879, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52584750728323, ""lat"": 40.53372564780069, ""attributes"": {""COLOUR"": [4], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.A"", ""_cm93_relation20_raw"": 1001}}, {""feature_id"": 513907, ""source_record_index"": 977, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52584750728323, ""lat"": 40.53372564780069, ""attributes"": {""_cm93_relation20_raw"": 1001}}]"
|
||||
351,1002,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513805, ""source_record_index"": 875, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52560844927135, ""lat"": 40.533562965990825, ""attributes"": {""COLOUR"": [1], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.C"", ""_cm93_relation20_raw"": 1002}}, {""feature_id"": 513905, ""source_record_index"": 975, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52560844927135, ""lat"": 40.533562965990825, ""attributes"": {""_cm93_relation20_raw"": 1002}}]"
|
||||
351,1003,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513811, ""source_record_index"": 881, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52294320675622, ""lat"": 40.530431264167966, ""attributes"": {""COLOUR"": [1], ""LITCHR"": 1, ""SORIND"": ""GB,MDHS,graph,LL F-6623.2.A"", ""_cm93_relation20_raw"": 1003}}, {""feature_id"": 513916, ""source_record_index"": 986, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52294320675622, ""lat"": 40.530431264167966, ""attributes"": {""_cm93_relation20_raw"": 1003}}]"
|
||||
351,1004,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 513782, ""source_record_index"": 852, ""object_class"": ""BCNLAT"", ""native_scale"": 50000, ""lon"": 141.54681340355705, ""lat"": 40.537767147215504, ""attributes"": {""BCNSHP"": 3, ""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Metal|Framework tower"", ""SORIND"": ""GB,MDHS,graph,LL F-6623"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 1004}}, {""feature_id"": 513799, ""source_record_index"": 869, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.54681340355705, ""lat"": 40.537767147215504, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 14, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 4, ""_cm93_relation20_raw"": 1004}}]"
|
||||
351,1005,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513825, ""source_record_index"": 895, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5349622297778, ""lat"": 40.56547154065089, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1005}}, {""feature_id"": 513919, ""source_record_index"": 989, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.5349622297778, ""lat"": 40.56547154065089, ""attributes"": {""_cm93_relation20_raw"": 1005}}]"
|
||||
351,1006,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513815, ""source_record_index"": 885, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.53273441256093, ""lat"": 40.53599298441033, ""attributes"": {""COLOUR"": [3], ""STATUS"": [8], ""_cm93_relation20_raw"": 1006}}, {""feature_id"": 513912, ""source_record_index"": 982, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.53273441256093, ""lat"": 40.53599298441033, ""attributes"": {""_cm93_relation20_raw"": 1006}}]"
|
||||
351,1007,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 513786, ""source_record_index"": 856, ""object_class"": ""BCNLAT"", ""native_scale"": 50000, ""lon"": 141.5524745007314, ""lat"": 40.53454921840199, ""attributes"": {""BCNSHP"": 3, ""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,MDHS,graph,LL F-6624"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 1007}}, {""feature_id"": 513796, ""source_record_index"": 866, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5524745007314, ""lat"": 40.53454921840199, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 11, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 3, ""_cm93_relation20_raw"": 1007}}]"
|
||||
351,1008,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 513785, ""source_record_index"": 855, ""object_class"": ""BCNLAT"", ""native_scale"": 50000, ""lon"": 141.52035425935122, ""lat"": 40.53766039376199, ""attributes"": {""BCNSHP"": 3, ""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,MDHS,graph,LL F-6624.7"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 1008}}, {""feature_id"": 513797, ""source_record_index"": 867, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52035425935122, ""lat"": 40.53766039376199, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 12, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 5, ""_cm93_relation20_raw"": 1008}}]"
|
||||
351,1009,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513816, ""source_record_index"": 886, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52412323779345, ""lat"": 40.545107310019546, ""attributes"": {""COLOUR"": [4], ""STATUS"": [8], ""_cm93_relation20_raw"": 1009}}, {""feature_id"": 513904, ""source_record_index"": 974, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52412323779345, ""lat"": 40.545107310019546, ""attributes"": {""_cm93_relation20_raw"": 1009}}]"
|
||||
351,1010,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513818, ""source_record_index"": 888, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5310508337966, ""lat"": 40.54428386920667, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1010}}, {""feature_id"": 513908, ""source_record_index"": 978, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.5310508337966, ""lat"": 40.54428386920667, ""attributes"": {""_cm93_relation20_raw"": 1010}}]"
|
||||
351,1011,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513822, ""source_record_index"": 892, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5495244231383, ""lat"": 40.54752166145216, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1011}}, {""feature_id"": 513902, ""source_record_index"": 972, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.5495244231383, ""lat"": 40.54752166145216, ""attributes"": {""_cm93_relation20_raw"": 1011}}]"
|
||||
351,1012,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513824, ""source_record_index"": 894, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.51802980166147, ""lat"": 40.54034951226258, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1012}}, {""feature_id"": 513906, ""source_record_index"": 976, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.51802980166147, ""lat"": 40.54034951226258, ""attributes"": {""_cm93_relation20_raw"": 1012}}]"
|
||||
351,1013,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 513783, ""source_record_index"": 853, ""object_class"": ""BCNLAT"", ""native_scale"": 50000, ""lon"": 141.53316675151854, ""lat"": 40.53632341943859, ""attributes"": {""BCNSHP"": 3, ""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,MDHS,graph,LL F-6623.6"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 1013}}, {""feature_id"": 513798, ""source_record_index"": 868, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.53316675151854, ""lat"": 40.53632341943859, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 12, ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(1)"", ""SIGPER"": 5, ""VALNMR"": 7, ""_cm93_relation20_raw"": 1013}}]"
|
||||
351,1014,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513821, ""source_record_index"": 891, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52822282837974, ""lat"": 40.54622554676639, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1014}}, {""feature_id"": 513913, ""source_record_index"": 983, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52822282837974, ""lat"": 40.54622554676639, ""attributes"": {""_cm93_relation20_raw"": 1014}}]"
|
||||
351,1015,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513810, ""source_record_index"": 880, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52565422633748, ""lat"": 40.53388832921558, ""attributes"": {""COLOUR"": [4], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.B"", ""_cm93_relation20_raw"": 1015}}, {""feature_id"": 513917, ""source_record_index"": 987, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52565422633748, ""lat"": 40.53388832921558, ""attributes"": {""_cm93_relation20_raw"": 1015}}]"
|
||||
351,1016,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513808, ""source_record_index"": 878, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52510490154427, ""lat"": 40.53350704402745, ""attributes"": {""COLOUR"": [3], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.F"", ""_cm93_relation20_raw"": 1016}}, {""feature_id"": 513920, ""source_record_index"": 990, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52510490154427, ""lat"": 40.53350704402745, ""attributes"": {""_cm93_relation20_raw"": 1016}}]"
|
||||
351,1017,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513819, ""source_record_index"": 889, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.54959563190778, ""lat"": 40.54994100842045, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1017}}, {""feature_id"": 513911, ""source_record_index"": 981, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.54959563190778, ""lat"": 40.54994100842045, ""attributes"": {""_cm93_relation20_raw"": 1017}}]"
|
||||
351,1018,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 513784, ""source_record_index"": 854, ""object_class"": ""BCNLAT"", ""native_scale"": 50000, ""lon"": 141.5280092020713, ""lat"": 40.558667212294104, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Concrete"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.8"", ""VERLEN"": 16, ""_cm93_relation20_raw"": 1018}}, {""feature_id"": 513793, ""source_record_index"": 863, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5280092020713, ""lat"": 40.558667212294104, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 17, ""INFORM"": ""2 fl in 3s"", ""LITCHR"": 2, ""QUAVEM"": 1, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 5, ""_cm93_relation20_raw"": 1018}}]"
|
||||
351,1019,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513820, ""source_record_index"": 890, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.54412781567916, ""lat"": 40.549463245146605, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1019}}, {""feature_id"": 513909, ""source_record_index"": 979, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.54412781567916, ""lat"": 40.549463245146605, ""attributes"": {""_cm93_relation20_raw"": 1019}}]"
|
||||
351,1020,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513823, ""source_record_index"": 893, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.55782533112443, ""lat"": 40.545163222300296, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1020}}, {""feature_id"": 513918, ""source_record_index"": 988, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.55782533112443, ""lat"": 40.545163222300296, ""attributes"": {""_cm93_relation20_raw"": 1020}}]"
|
||||
351,1021,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513807, ""source_record_index"": 877, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52536939125952, ""lat"": 40.533395199960694, ""attributes"": {""COLOUR"": [3], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.E"", ""_cm93_relation20_raw"": 1021}}, {""feature_id"": 513910, ""source_record_index"": 980, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52536939125952, ""lat"": 40.533395199960694, ""attributes"": {""_cm93_relation20_raw"": 1021}}]"
|
||||
351,1022,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513806, ""source_record_index"": 876, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.5254151683256, ""lat"": 40.53372564780069, ""attributes"": {""COLOUR"": [1], ""LITCHR"": 7, ""SIGGRP"": ""(1)"", ""SORIND"": ""GB,MDHS,graph,LL F-6624.7.D"", ""_cm93_relation20_raw"": 1022}}, {""feature_id"": 513915, ""source_record_index"": 985, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.5254151683256, ""lat"": 40.53372564780069, ""attributes"": {""_cm93_relation20_raw"": 1022}}]"
|
||||
351,1023,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513814, ""source_record_index"": 884, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.49825919544693, ""lat"": 40.55623293432891, ""attributes"": {""COLOUR"": [1], ""STATUS"": [8], ""_cm93_relation20_raw"": 1023}}, {""feature_id"": 513914, ""source_record_index"": 984, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.49825919544693, ""lat"": 40.55623293432891, ""attributes"": {""_cm93_relation20_raw"": 1023}}]"
|
||||
351,1024,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513812, ""source_record_index"": 882, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.50759263059066, ""lat"": 40.53502708806053, ""attributes"": {""CATLIT"": 6, ""COLOUR"": [3], ""INFORM"": ""More than one"", ""_cm93_relation20_raw"": 1024}}, {""feature_id"": 513901, ""source_record_index"": 971, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.50759263059066, ""lat"": 40.53502708806053, ""attributes"": {""COLMAR"": 11, ""INFORM"": ""Height: 123m|Chimney|Visually conspicuous"", ""_cm93_relation20_raw"": 1024}}]"
|
||||
351,1025,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 513817, ""source_record_index"": 887, ""object_class"": ""LIGHTS"", ""native_scale"": 50000, ""lon"": 141.52097987925458, ""lat"": 40.555318151462146, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 1025}}, {""feature_id"": 513903, ""source_record_index"": 973, ""object_class"": ""_extgn"", ""native_scale"": 50000, ""lon"": 141.52097987925458, ""lat"": 40.555318151462146, ""attributes"": {""_cm93_relation20_raw"": 1025}}]"
|
||||
693,2239,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606499, ""source_record_index"": 1999, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.51452696025927, ""lat"": 40.55241521469589, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 14, ""INFORM"": ""2 fl in 3s"", ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 4, ""_cm93_relation20_raw"": 2239}}, {""feature_id"": 606454, ""source_record_index"": 1954, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.51452696025927, ""lat"": 40.55241521469589, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6625.5"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 2239}}]"
|
||||
693,2240,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606511, ""source_record_index"": 2011, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.56767921143177, ""lat"": 40.54238692330532, ""attributes"": {""CATLIT"": 8, ""COLOUR"": [1], ""HEIGHT"": 22, ""INFORM"": ""Illuminates Hinode Iwa 430m NNW"", ""LITCHR"": 1, ""_cm93_relation20_raw"": 2240}}, {""feature_id"": 606453, ""source_record_index"": 1953, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.56767921143177, ""lat"": 40.54238692330532, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6621"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 2240}}]"
|
||||
693,2241,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606501, ""source_record_index"": 2001, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5759546863272, ""lat"": 40.53986563666468, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 57, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 8, ""VALNMR"": 19, ""_cm93_relation20_raw"": 2241}}, {""feature_id"": 606455, ""source_record_index"": 1955, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.5759546863272, ""lat"": 40.53986563666468, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6620"", ""VERLEN"": 23, ""_cm93_relation20_raw"": 2241}}]"
|
||||
693,2242,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606507, ""source_record_index"": 2007, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5350198234147, ""lat"": 40.56587201094555, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 7, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 5, ""_cm93_relation20_raw"": 2242}}, {""feature_id"": 606456, ""source_record_index"": 1956, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.5350198234147, ""lat"": 40.56587201094555, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6624.86"", ""VERLEN"": 5, ""_cm93_relation20_raw"": 2242}}]"
|
||||
693,2243,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606509, ""source_record_index"": 2009, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.54813240748382, ""lat"": 40.53939288485493, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 10, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 5, ""_cm93_relation20_raw"": 2243}}, {""feature_id"": 606452, ""source_record_index"": 1952, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.54813240748382, ""lat"": 40.53939288485493, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""NATCON"": [2], ""SORIND"": ""GB,UKHO,graph,LL M-6622"", ""VERLEN"": 8, ""_cm93_relation20_raw"": 2243}}]"
|
||||
693,2244,2,"{""LIGHTS"": 1, ""TOWERS"": 1}",True,True,"[""TOWERS""]",0.0,True,"[{""feature_id"": 606508, ""source_record_index"": 2008, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.55521767886023, ""lat"": 40.536297040550764, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 9, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 6, ""VALNMR"": 3, ""_cm93_relation20_raw"": 2244}}, {""feature_id"": 606457, ""source_record_index"": 1957, ""object_class"": ""TOWERS"", ""native_scale"": 20000, ""lon"": 141.55521767886023, ""lat"": 40.536297040550764, ""attributes"": {""CATTOW"": 1, ""COLOUR"": [1], ""CONVIS"": 1, ""SORIND"": ""GB,UKHO,graph,LL M-6624.4"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 2244}}]"
|
||||
693,2245,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606487, ""source_record_index"": 1987, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.54756782376322, ""lat"": 40.54819670438723, ""attributes"": {""BOYSHP"": 4, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2245}}, {""feature_id"": 606532, ""source_record_index"": 2032, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.54756782376322, ""lat"": 40.54819670438723, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2245}}]"
|
||||
693,2246,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606484, ""source_record_index"": 1984, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.51764488657207, ""lat"": 40.545787460007524, ""attributes"": {""BOYSHP"": 1, ""CATSPM"": 27, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2246}}, {""feature_id"": 606528, ""source_record_index"": 2028, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.51764488657207, ""lat"": 40.545787460007524, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2246}}]"
|
||||
693,2247,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606485, ""source_record_index"": 1985, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.55372738129145, ""lat"": 40.53761368147356, ""attributes"": {""BOYSHP"": 4, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2247}}, {""feature_id"": 606531, ""source_record_index"": 2031, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.55372738129145, ""lat"": 40.53761368147356, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2247}}]"
|
||||
693,2248,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606482, ""source_record_index"": 1982, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.51602234416788, ""lat"": 40.54453705850963, ""attributes"": {""BOYSHP"": 1, ""CATSPM"": 27, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2248}}, {""feature_id"": 606526, ""source_record_index"": 2026, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.51602234416788, ""lat"": 40.54453705850963, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2248}}]"
|
||||
693,2249,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606483, ""source_record_index"": 1983, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.5144252334628, ""lat"": 40.54336796282291, ""attributes"": {""BOYSHP"": 1, ""CATSPM"": 27, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2249}}, {""feature_id"": 606530, ""source_record_index"": 2030, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5144252334628, ""lat"": 40.54336796282291, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2249}}]"
|
||||
693,2250,2,"{""BOYSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BOYSPP""]",0.0,True,"[{""feature_id"": 606486, ""source_record_index"": 1986, ""object_class"": ""BOYSPP"", ""native_scale"": 20000, ""lon"": 141.54760851448182, ""lat"": 40.55077866754792, ""attributes"": {""BOYSHP"": 4, ""COLMAR"": 4, ""STATUS"": [8], ""_cm93_relation20_raw"": 2250}}, {""feature_id"": 606525, ""source_record_index"": 2025, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.54760851448182, ""lat"": 40.55077866754792, ""attributes"": {""COLOUR"": [6], ""_cm93_relation20_raw"": 2250}}]"
|
||||
693,2251,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 606474, ""source_record_index"": 1974, ""object_class"": ""BCNLAT"", ""native_scale"": 20000, ""lon"": 141.5279752427569, ""lat"": 40.55872215426594, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Concrete"", ""SORIND"": ""GB,UKHO,graph,LL M-6624.8"", ""VERLEN"": 16, ""_cm93_relation20_raw"": 2251}}, {""feature_id"": 606506, ""source_record_index"": 2006, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5279752427569, ""lat"": 40.55872215426594, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 17, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 9, ""VALNMR"": 5, ""_cm93_relation20_raw"": 2251}}]"
|
||||
693,2252,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606517, ""source_record_index"": 2017, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.47915655311542, ""lat"": 40.58768781797142, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2252}}, {""feature_id"": 606718, ""source_record_index"": 2218, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.47915655311542, ""lat"": 40.58768781797142, ""attributes"": {""_cm93_relation20_raw"": 2252}}]"
|
||||
693,2253,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606519, ""source_record_index"": 2019, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.50487817361105, ""lat"": 40.55268966278586, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2253}}, {""feature_id"": 606736, ""source_record_index"": 2236, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.50487817361105, ""lat"": 40.55268966278586, ""attributes"": {""_cm93_relation20_raw"": 2253}}]"
|
||||
693,2254,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 606477, ""source_record_index"": 1977, ""object_class"": ""BCNLAT"", ""native_scale"": 20000, ""lon"": 141.55245070999536, ""lat"": 40.53446183378157, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6624"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 2254}}, {""feature_id"": 606502, ""source_record_index"": 2002, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.55245070999536, ""lat"": 40.53446183378157, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 11, ""LITCHR"": 2, ""SIGGRP"": ""(2)"", ""SIGPER"": 6, ""VALNMR"": 3, ""_cm93_relation20_raw"": 2254}}]"
|
||||
693,2255,2,"{""BCNSPP"": 1, ""LIGHTS"": 1}",True,True,"[""BCNSPP""]",0.0,True,"[{""feature_id"": 606478, ""source_record_index"": 1978, ""object_class"": ""BCNSPP"", ""native_scale"": 20000, ""lon"": 141.53411954126562, ""lat"": 40.53822878284375, ""attributes"": {""COLMAR"": 5, ""SORIND"": ""GB,UKHO,graph,LL M-6623.2"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 2255}}, {""feature_id"": 606510, ""source_record_index"": 2010, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.53411954126562, ""lat"": 40.53822878284375, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 5, ""VALNMR"": 4, ""_cm93_relation20_raw"": 2255}}]"
|
||||
693,2256,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 606473, ""source_record_index"": 1973, ""object_class"": ""BCNLAT"", ""native_scale"": 20000, ""lon"": 141.54682521814877, ""lat"": 40.5377458524923, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""INFORM"": ""Metal"", ""SORIND"": ""GB,UKHO,graph,LL M-6623"", ""VERLEN"": 10, ""_cm93_relation20_raw"": 2256}}, {""feature_id"": 606505, ""source_record_index"": 2005, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.54682521814877, ""lat"": 40.5377458524923, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 14, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 4, ""_cm93_relation20_raw"": 2256}}]"
|
||||
693,2257,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606529, ""source_record_index"": 2029, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.47109979083245, ""lat"": 40.546926016675656, ""attributes"": {""CATLIT"": 5, ""_cm93_relation20_raw"": 2257}}, {""feature_id"": 606727, ""source_record_index"": 2227, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.47109979083245, ""lat"": 40.546926016675656, ""attributes"": {""_cm93_relation20_raw"": 2257}}]"
|
||||
693,2258,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606498, ""source_record_index"": 1998, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52570164885506, ""lat"": 40.53382127886439, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 4, ""LITCHR"": 7, ""OBJNAM"": ""L2"", ""SECTR1"": 48, ""SECTR2"": 228, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.631"", ""VALNMR"": 4, ""_cm93_relation20_raw"": 2258}}, {""feature_id"": 606729, ""source_record_index"": 2229, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52570164885506, ""lat"": 40.53382127886439, ""attributes"": {""_cm93_relation20_raw"": 2258}}]"
|
||||
693,2259,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606533, ""source_record_index"": 2033, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.49831170889684, ""lat"": 40.55619131837828, ""attributes"": {""STATUS"": [8], ""_cm93_relation20_raw"": 2259}}, {""feature_id"": 606737, ""source_record_index"": 2237, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.49831170889684, ""lat"": 40.55619131837828, ""attributes"": {""_cm93_relation20_raw"": 2259}}]"
|
||||
693,2260,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606515, ""source_record_index"": 2015, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5075434156794, ""lat"": 40.549081088805, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2260}}, {""feature_id"": 606720, ""source_record_index"": 2220, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.5075434156794, ""lat"": 40.549081088805, ""attributes"": {""_cm93_relation20_raw"": 2260}}]"
|
||||
693,2261,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606524, ""source_record_index"": 2024, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52826516412694, ""lat"": 40.54623983528677, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2261}}, {""feature_id"": 606733, ""source_record_index"": 2233, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52826516412694, ""lat"": 40.54623983528677, ""attributes"": {""_cm93_relation20_raw"": 2261}}]"
|
||||
693,2262,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606516, ""source_record_index"": 2016, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.51800601669967, ""lat"": 40.54032821853955, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2262}}, {""feature_id"": 606716, ""source_record_index"": 2216, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.51800601669967, ""lat"": 40.54032821853955, ""attributes"": {""_cm93_relation20_raw"": 2262}}]"
|
||||
693,2263,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606495, ""source_record_index"": 1995, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52535069140714, ""lat"": 40.53333831674283, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 5, ""LITCHR"": 7, ""OBJNAM"": ""R1"", ""SECTR1"": 228, ""SECTR2"": 48, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.64"", ""VALNMR"": 4, ""_cm93_relation20_raw"": 2263}}, {""feature_id"": 606728, ""source_record_index"": 2228, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52535069140714, ""lat"": 40.53333831674283, ""attributes"": {""_cm93_relation20_raw"": 2263}}]"
|
||||
693,2264,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606518, ""source_record_index"": 2018, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.56030401868534, ""lat"": 40.544648883984316, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2264}}, {""feature_id"": 606717, ""source_record_index"": 2217, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.56030401868534, ""lat"": 40.544648883984316, ""attributes"": {""_cm93_relation20_raw"": 2264}}]"
|
||||
693,2265,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606497, ""source_record_index"": 1997, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52588984342862, ""lat"": 40.53368910010344, ""attributes"": {""COLOUR"": [4], ""HEIGHT"": 4, ""LITCHR"": 7, ""OBJNAM"": ""L1"", ""SECTR1"": 228, ""SECTR2"": 48, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.63"", ""VALNMR"": 4, ""_cm93_relation20_raw"": 2265}}, {""feature_id"": 606735, ""source_record_index"": 2235, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52588984342862, ""lat"": 40.53368910010344, ""attributes"": {""_cm93_relation20_raw"": 2265}}]"
|
||||
693,2266,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606493, ""source_record_index"": 1993, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52561518107802, ""lat"": 40.53350099910942, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 5, ""LITCHR"": 7, ""OBJNAM"": ""C1"", ""SECTR1"": 228, ""SECTR2"": 48, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.62"", ""VALNMR"": 6, ""_cm93_relation20_raw"": 2266}}, {""feature_id"": 606726, ""source_record_index"": 2226, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52561518107802, ""lat"": 40.53350099910942, ""attributes"": {""_cm93_relation20_raw"": 2266}}]"
|
||||
693,2267,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606500, ""source_record_index"": 2000, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52294485266987, ""lat"": 40.53044047091052, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 31, ""LITCHR"": 1, ""OBJNAM"": ""C1"", ""SORIND"": ""GB,UKHO,graph,LL M-6624.5"", ""VALNMR"": 6, ""_cm93_relation20_raw"": 2267}}, {""feature_id"": 606730, ""source_record_index"": 2230, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52294485266987, ""lat"": 40.53044047091052, ""attributes"": {""_cm93_relation20_raw"": 2267}}]"
|
||||
693,2268,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606521, ""source_record_index"": 2021, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52094592111857, ""lat"": 40.55528669920913, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2268}}, {""feature_id"": 606732, ""source_record_index"": 2232, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52094592111857, ""lat"": 40.55528669920913, ""attributes"": {""_cm93_relation20_raw"": 2268}}]"
|
||||
693,2269,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606522, ""source_record_index"": 2022, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.50160257076368, ""lat"": 40.552715074589145, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2269}}, {""feature_id"": 606722, ""source_record_index"": 2222, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.50160257076368, ""lat"": 40.552715074589145, ""attributes"": {""_cm93_relation20_raw"": 2269}}]"
|
||||
693,2270,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606494, ""source_record_index"": 1994, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5254269865045, ""lat"": 40.53363317824145, ""attributes"": {""COLOUR"": [1], ""HEIGHT"": 5, ""LITCHR"": 7, ""OBJNAM"": ""C2"", ""SECTR1"": 48, ""SECTR2"": 228, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.621"", ""VALNMR"": 6, ""_cm93_relation20_raw"": 2270}}, {""feature_id"": 606719, ""source_record_index"": 2219, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.5254269865045, ""lat"": 40.53363317824145, ""attributes"": {""_cm93_relation20_raw"": 2270}}]"
|
||||
693,2271,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606513, ""source_record_index"": 2013, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.53291407872706, ""lat"": 40.54241742215959, ""attributes"": {""COLOUR"": [3], ""STATUS"": [8], ""_cm93_relation20_raw"": 2271}}, {""feature_id"": 606731, ""source_record_index"": 2231, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.53291407872706, ""lat"": 40.54241742215959, ""attributes"": {""_cm93_relation20_raw"": 2271}}]"
|
||||
693,2272,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 606476, ""source_record_index"": 1976, ""object_class"": ""BCNLAT"", ""native_scale"": 20000, ""lon"": 141.52043728713608, ""lat"": 40.53762384848427, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6624.7"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 2272}}, {""feature_id"": 606503, ""source_record_index"": 2003, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52043728713608, ""lat"": 40.53762384848427, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 3, ""VALNMR"": 3, ""_cm93_relation20_raw"": 2272}}]"
|
||||
693,2273,2,"{""BCNLAT"": 1, ""LIGHTS"": 1}",True,True,"[""BCNLAT""]",0.0,True,"[{""feature_id"": 606475, ""source_record_index"": 1975, ""object_class"": ""BCNLAT"", ""native_scale"": 20000, ""lon"": 141.53323451813606, ""lat"": 40.53630720776126, ""attributes"": {""CATLAM"": 2, ""COLMAR"": 3, ""SORIND"": ""GB,UKHO,graph,LL M-6623.6"", ""VERLEN"": 9, ""_cm93_relation20_raw"": 2273}}, {""feature_id"": 606504, ""source_record_index"": 2004, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.53323451813606, ""lat"": 40.53630720776126, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 12, ""LITCHR"": 2, ""SIGGRP"": ""(1)"", ""SIGPER"": 5, ""VALNMR"": 7, ""_cm93_relation20_raw"": 2273}}]"
|
||||
693,2274,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606514, ""source_record_index"": 2014, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.52411979716945, ""lat"": 40.545101266953736, ""attributes"": {""COLOUR"": [4], ""STATUS"": [8], ""_cm93_relation20_raw"": 2274}}, {""feature_id"": 606723, ""source_record_index"": 2223, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.52411979716945, ""lat"": 40.545101266953736, ""attributes"": {""_cm93_relation20_raw"": 2274}}]"
|
||||
693,2275,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606512, ""source_record_index"": 2012, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.53280217925092, ""lat"": 40.535966605369474, ""attributes"": {""COLOUR"": [3], ""STATUS"": [8], ""_cm93_relation20_raw"": 2275}}, {""feature_id"": 606721, ""source_record_index"": 2221, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.53280217925092, ""lat"": 40.535966605369474, ""attributes"": {""_cm93_relation20_raw"": 2275}}]"
|
||||
693,2276,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606496, ""source_record_index"": 1996, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.5251777558531, ""lat"": 40.5334501609123, ""attributes"": {""COLOUR"": [3], ""HEIGHT"": 5, ""LITCHR"": 7, ""OBJNAM"": ""R2"", ""SECTR1"": 48, ""SECTR2"": 228, ""SIGGRP"": ""(1)"", ""SIGPER"": 4, ""SORIND"": ""GB,UKHO,graph,LL M-6624.641"", ""VALNMR"": 4, ""_cm93_relation20_raw"": 2276}}, {""feature_id"": 606725, ""source_record_index"": 2225, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.5251777558531, ""lat"": 40.5334501609123, ""attributes"": {""_cm93_relation20_raw"": 2276}}]"
|
||||
693,2277,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606523, ""source_record_index"": 2023, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.4824321559628, ""lat"": 40.58365441116841, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2277}}, {""feature_id"": 606724, ""source_record_index"": 2224, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.4824321559628, ""lat"": 40.58365441116841, ""attributes"": {""_cm93_relation20_raw"": 2277}}]"
|
||||
693,2278,2,"{""LIGHTS"": 1, ""_extgn"": 1}",True,True,"[""_extgn""]",0.0,True,"[{""feature_id"": 606520, ""source_record_index"": 2020, ""object_class"": ""LIGHTS"", ""native_scale"": 20000, ""lon"": 141.54953623727556, ""lat"": 40.549818066898325, ""attributes"": {""COLOUR"": [6], ""STATUS"": [8], ""_cm93_relation20_raw"": 2278}}, {""feature_id"": 606734, ""source_record_index"": 2234, ""object_class"": ""_extgn"", ""native_scale"": 20000, ""lon"": 141.54953623727556, ""lat"": 40.549818066898325, ""attributes"": {""_cm93_relation20_raw"": 2278}}]"
|
||||
|
546
cm95_nav_name_candidate_audit_v1.py
Normal file
546
cm95_nav_name_candidate_audit_v1.py
Normal file
@@ -0,0 +1,546 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 / CM93 助航名称候选审计 v1
|
||||
|
||||
目的
|
||||
====
|
||||
为 CM95→NavSea `navigation_marks.chart_label_text` 找到可审计的 CM95 自有名称来源,
|
||||
不使用 NEWPEC/reference PBF 名称反灌。
|
||||
|
||||
默认检查第一测试 AOI:
|
||||
z10/914/385
|
||||
lon 141.328125 .. 141.6796875
|
||||
lat 40.44694705960049 .. 40.71395582628604
|
||||
默认重点比例尺:
|
||||
1:200000
|
||||
|
||||
候选来源:
|
||||
1. 助航组件自身 OBJNAM / NOBJNM;
|
||||
2. 同 cell、同 native_scale 的 `_texto._texta.text`;
|
||||
3. 同 native_scale、邻近 cell 的 `_texto._texta.text`,仅作为低置信参考。
|
||||
|
||||
关联原则:
|
||||
- 助航组件仍然用 `(cell_id, _cm93_relation20_raw)` 合成;
|
||||
- 本脚本只审计名称,不改变 relation20 合成规则;
|
||||
- 不自动把最近文字当名称;
|
||||
- 输出距离和来源,由下一步确定安全规则。
|
||||
|
||||
输出:
|
||||
cm95_nav_name_candidates_v1.json
|
||||
cm95_nav_name_candidates_v1.csv
|
||||
cm95_nav_name_candidates_v1.txt
|
||||
|
||||
执行:
|
||||
python .\tools\cm95_nav_name_candidate_audit_v1.py `
|
||||
--host 127.0.0.1 `
|
||||
--port 3306 `
|
||||
--user root `
|
||||
--database cm93_chart `
|
||||
--dataset-id 1 `
|
||||
--native-scale 200000
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from collections import defaultdict
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import DictCursor
|
||||
|
||||
|
||||
NAV_CLASSES = {
|
||||
"LIGHTS",
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
"SISTAT",
|
||||
"SISTAW",
|
||||
}
|
||||
|
||||
DIRECT_NAME_KEYS = (
|
||||
"OBJNAM",
|
||||
"NOBJNM",
|
||||
)
|
||||
|
||||
DEFAULT_BBOX = (
|
||||
141.328125,
|
||||
40.44694705960049,
|
||||
141.6796875,
|
||||
40.71395582628604,
|
||||
)
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password", default=None)
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument("--native-scale", type=int, default=200000)
|
||||
p.add_argument("--min-lon", type=float, default=DEFAULT_BBOX[0])
|
||||
p.add_argument("--min-lat", type=float, default=DEFAULT_BBOX[1])
|
||||
p.add_argument("--max-lon", type=float, default=DEFAULT_BBOX[2])
|
||||
p.add_argument("--max-lat", type=float, default=DEFAULT_BBOX[3])
|
||||
p.add_argument(
|
||||
"--radius-m",
|
||||
type=float,
|
||||
default=800.0,
|
||||
help="每个助航对象保存的文字候选搜索半径",
|
||||
)
|
||||
p.add_argument(
|
||||
"--candidate-limit",
|
||||
type=int,
|
||||
default=12,
|
||||
)
|
||||
p.add_argument("--output-dir", default=".")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def json_dict(value: Any) -> dict[str, Any]:
|
||||
if value is None:
|
||||
return {}
|
||||
if isinstance(value, dict):
|
||||
return value
|
||||
if isinstance(value, (bytes, bytearray, memoryview)):
|
||||
value = bytes(value).decode("utf-8", "replace")
|
||||
try:
|
||||
obj = json.loads(value)
|
||||
except Exception:
|
||||
return {}
|
||||
return obj if isinstance(obj, dict) else {}
|
||||
|
||||
|
||||
def relation20(attrs: dict[str, Any]):
|
||||
value = attrs.get("_cm93_relation20_raw")
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
return int(value)
|
||||
except Exception:
|
||||
return str(value)
|
||||
|
||||
|
||||
def texta(attrs: dict[str, Any]):
|
||||
value = attrs.get("_texta")
|
||||
if not isinstance(value, dict):
|
||||
return None, None
|
||||
text = value.get("text")
|
||||
prefix = value.get("prefix")
|
||||
if text is None:
|
||||
return None, prefix
|
||||
text = str(text).strip()
|
||||
return (text or None), prefix
|
||||
|
||||
|
||||
def direct_names(attrs: dict[str, Any]):
|
||||
out = []
|
||||
for key in DIRECT_NAME_KEYS:
|
||||
value = attrs.get(key)
|
||||
if isinstance(value, str) and value.strip():
|
||||
out.append({
|
||||
"field": key,
|
||||
"text": value.strip(),
|
||||
})
|
||||
return out
|
||||
|
||||
|
||||
def haversine_m(lon1, lat1, lon2, lat2):
|
||||
r = 6371008.8
|
||||
p1 = math.radians(lat1)
|
||||
p2 = math.radians(lat2)
|
||||
dp = p2 - p1
|
||||
dl = math.radians(lon2 - lon1)
|
||||
a = (
|
||||
math.sin(dp / 2) ** 2
|
||||
+ math.cos(p1) * math.cos(p2)
|
||||
* math.sin(dl / 2) ** 2
|
||||
)
|
||||
return 2 * r * math.asin(min(1.0, math.sqrt(a)))
|
||||
|
||||
|
||||
def write_csv(path: Path, rows):
|
||||
rows = list(rows)
|
||||
fields = [
|
||||
"cell_id",
|
||||
"source_relative_path",
|
||||
"native_scale",
|
||||
"relation20",
|
||||
"lon",
|
||||
"lat",
|
||||
"component_classes",
|
||||
"component_source_record_indices",
|
||||
"direct_names",
|
||||
"nearest_same_cell_text",
|
||||
"nearest_same_cell_distance_m",
|
||||
"nearest_any_cell_text",
|
||||
"nearest_any_cell_distance_m",
|
||||
"same_cell_candidate_count",
|
||||
"all_candidate_count",
|
||||
"candidate_summary",
|
||||
]
|
||||
with path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
w = csv.DictWriter(f, fieldnames=fields)
|
||||
w.writeheader()
|
||||
for row in rows:
|
||||
out = dict(row)
|
||||
for key in (
|
||||
"component_classes",
|
||||
"component_source_record_indices",
|
||||
"direct_names",
|
||||
"candidate_summary",
|
||||
):
|
||||
out[key] = json.dumps(
|
||||
out.get(key),
|
||||
ensure_ascii=False,
|
||||
separators=(",", ":"),
|
||||
)
|
||||
w.writerow(out)
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
outdir = Path(a.output_dir).resolve()
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host,
|
||||
port=a.port,
|
||||
user=a.user,
|
||||
password=a.password,
|
||||
database=a.database,
|
||||
charset="utf8mb4",
|
||||
cursorclass=DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
)
|
||||
|
||||
nav_rows = []
|
||||
text_rows = []
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
placeholders = ",".join(["%s"] * len(NAV_CLASSES))
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale=%s
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class IN ({placeholders})
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
a.native_scale,
|
||||
*sorted(NAV_CLASSES),
|
||||
a.min_lon,
|
||||
a.max_lon,
|
||||
a.min_lat,
|
||||
a.max_lat,
|
||||
),
|
||||
)
|
||||
nav_rows = list(cur.fetchall())
|
||||
|
||||
# 扩大少量边界,避免 tile 边缘的文字候选被切掉。
|
||||
lat_pad = a.radius_m / 111320.0
|
||||
mid_lat = (a.min_lat + a.max_lat) / 2.0
|
||||
lon_pad = (
|
||||
a.radius_m
|
||||
/ max(1.0, 111320.0 * math.cos(math.radians(mid_lat)))
|
||||
)
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale=%s
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class='_texto'
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
a.native_scale,
|
||||
a.min_lon - lon_pad,
|
||||
a.max_lon + lon_pad,
|
||||
a.min_lat - lat_pad,
|
||||
a.max_lat + lat_pad,
|
||||
),
|
||||
)
|
||||
text_rows = list(cur.fetchall())
|
||||
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
for row in nav_rows:
|
||||
row["attributes"] = json_dict(row.pop("attributes_json"))
|
||||
row["relation20"] = relation20(row["attributes"])
|
||||
row["lon"] = float(row["lon"])
|
||||
row["lat"] = float(row["lat"])
|
||||
|
||||
parsed_text = []
|
||||
for row in text_rows:
|
||||
attrs = json_dict(row.pop("attributes_json"))
|
||||
text, prefix = texta(attrs)
|
||||
if not text:
|
||||
continue
|
||||
parsed_text.append({
|
||||
"feature_id": int(row["feature_id"]),
|
||||
"cell_id": int(row["cell_id"]),
|
||||
"source_relative_path": str(row["source_relative_path"]),
|
||||
"source_record_index": int(row["source_record_index"]),
|
||||
"native_scale": int(row["native_scale"]),
|
||||
"lon": float(row["lon"]),
|
||||
"lat": float(row["lat"]),
|
||||
"text": text,
|
||||
"prefix": prefix,
|
||||
})
|
||||
|
||||
groups = defaultdict(list)
|
||||
standalone = []
|
||||
|
||||
for row in nav_rows:
|
||||
rel = row["relation20"]
|
||||
if rel is None:
|
||||
standalone.append([row])
|
||||
else:
|
||||
groups[(int(row["cell_id"]), rel)].append(row)
|
||||
|
||||
nav_groups = list(groups.values()) + standalone
|
||||
|
||||
results = []
|
||||
|
||||
for members in nav_groups:
|
||||
# relation20 组成员已由上一步证明同址;
|
||||
# standalone 则只有一条。
|
||||
lon = sum(m["lon"] for m in members) / len(members)
|
||||
lat = sum(m["lat"] for m in members) / len(members)
|
||||
cell_id = int(members[0]["cell_id"])
|
||||
source_path = str(members[0]["source_relative_path"])
|
||||
rel = members[0]["relation20"]
|
||||
|
||||
strong_names = []
|
||||
for m in members:
|
||||
for n in direct_names(m["attributes"]):
|
||||
strong_names.append({
|
||||
"object_class": m["object_class"],
|
||||
"source_record_index": m["source_record_index"],
|
||||
**n,
|
||||
})
|
||||
|
||||
candidates = []
|
||||
for t in parsed_text:
|
||||
distance = haversine_m(
|
||||
lon,
|
||||
lat,
|
||||
t["lon"],
|
||||
t["lat"],
|
||||
)
|
||||
if distance > a.radius_m:
|
||||
continue
|
||||
candidates.append({
|
||||
**t,
|
||||
"same_cell": t["cell_id"] == cell_id,
|
||||
"distance_m": round(distance, 2),
|
||||
})
|
||||
|
||||
candidates.sort(
|
||||
key=lambda c: (
|
||||
not c["same_cell"],
|
||||
c["distance_m"],
|
||||
c["text"],
|
||||
)
|
||||
)
|
||||
|
||||
same_cell = [
|
||||
c for c in candidates if c["same_cell"]
|
||||
]
|
||||
|
||||
nearest_same = same_cell[0] if same_cell else None
|
||||
nearest_any = (
|
||||
min(candidates, key=lambda c: c["distance_m"])
|
||||
if candidates
|
||||
else None
|
||||
)
|
||||
|
||||
results.append({
|
||||
"cell_id": cell_id,
|
||||
"source_relative_path": source_path,
|
||||
"native_scale": a.native_scale,
|
||||
"relation20": rel,
|
||||
"lon": lon,
|
||||
"lat": lat,
|
||||
"component_classes": [
|
||||
m["object_class"] for m in members
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
int(m["source_record_index"]) for m in members
|
||||
],
|
||||
"direct_names": strong_names,
|
||||
"nearest_same_cell_text": (
|
||||
nearest_same["text"] if nearest_same else None
|
||||
),
|
||||
"nearest_same_cell_distance_m": (
|
||||
nearest_same["distance_m"] if nearest_same else None
|
||||
),
|
||||
"nearest_any_cell_text": (
|
||||
nearest_any["text"] if nearest_any else None
|
||||
),
|
||||
"nearest_any_cell_distance_m": (
|
||||
nearest_any["distance_m"] if nearest_any else None
|
||||
),
|
||||
"same_cell_candidate_count": len(same_cell),
|
||||
"all_candidate_count": len(candidates),
|
||||
"candidate_summary": candidates[: a.candidate_limit],
|
||||
})
|
||||
|
||||
results.sort(
|
||||
key=lambda r: (
|
||||
r["cell_id"],
|
||||
-1 if r["relation20"] is None else r["relation20"],
|
||||
r["lon"],
|
||||
r["lat"],
|
||||
)
|
||||
)
|
||||
|
||||
direct_named = sum(
|
||||
1 for r in results if r["direct_names"]
|
||||
)
|
||||
same_100 = sum(
|
||||
1
|
||||
for r in results
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 100.0
|
||||
)
|
||||
same_250 = sum(
|
||||
1
|
||||
for r in results
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 250.0
|
||||
)
|
||||
|
||||
report = {
|
||||
"schema": "navsea.cm95.nav-name-candidate-audit/v1",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"native_scale": a.native_scale,
|
||||
"aoi_bbox": [
|
||||
a.min_lon,
|
||||
a.min_lat,
|
||||
a.max_lon,
|
||||
a.max_lat,
|
||||
],
|
||||
"search_radius_m": a.radius_m,
|
||||
"counts": {
|
||||
"nav_component_rows": len(nav_rows),
|
||||
"nav_groups": len(results),
|
||||
"texto_rows_with_text": len(parsed_text),
|
||||
"groups_with_direct_OBJNAM_or_NOBJNM": direct_named,
|
||||
"groups_with_same_cell_text_within_100m": same_100,
|
||||
"groups_with_same_cell_text_within_250m": same_250,
|
||||
},
|
||||
"groups": results,
|
||||
"decision": (
|
||||
"DATA_READY_FOR_NAME_ASSOCIATION_REVIEW"
|
||||
if results
|
||||
else "NO_NAV_GROUPS"
|
||||
),
|
||||
}
|
||||
|
||||
json_path = outdir / "cm95_nav_name_candidates_v1.json"
|
||||
csv_path = outdir / "cm95_nav_name_candidates_v1.csv"
|
||||
txt_path = outdir / "cm95_nav_name_candidates_v1.txt"
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps(
|
||||
report,
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
default=str,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
write_csv(csv_path, results)
|
||||
|
||||
lines = [
|
||||
"CM95 / CM93 助航名称候选审计 v1",
|
||||
"=" * 76,
|
||||
f"Native scale : {a.native_scale}",
|
||||
f"Nav component rows : {len(nav_rows)}",
|
||||
f"Nav groups : {len(results)}",
|
||||
f"_texto rows with text : {len(parsed_text)}",
|
||||
f"Groups with direct OBJNAM/NOBJNM : {direct_named}",
|
||||
f"Same-cell text <=100m : {same_100}",
|
||||
f"Same-cell text <=250m : {same_250}",
|
||||
"",
|
||||
"注意:最近文字只是候选,不代表自动确定为助航名称。",
|
||||
"下一步由映射审计决定哪些关系可安全写入 chart_label_text。",
|
||||
]
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
print("")
|
||||
print(json_path)
|
||||
print(csv_path)
|
||||
print(txt_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
18
cm95_nav_name_candidates_v1.csv
Normal file
18
cm95_nav_name_candidates_v1.csv
Normal file
@@ -0,0 +1,18 @@
|
||||
cell_id,source_relative_path,native_scale,relation20,lon,lat,component_classes,component_source_record_indices,direct_names,nearest_same_cell_text,nearest_same_cell_distance_m,nearest_any_cell_text,nearest_any_cell_distance_m,same_cell_candidate_count,all_candidate_count,candidate_summary
|
||||
40,03900420\C\03900420.C,200000,,141.65804316559033,40.467367860055134,"[""LIGHTS""]",[4877],[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6486,141.53481130881366,40.56513638820441,"[""TOWERS"",""LIGHTS""]","[4300,4741]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6501,141.43965605140164,40.68046315791786,"[""TOWERS"",""LIGHTS""]","[4325,4781]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6510,141.6269147619469,40.49949414054503,"[""TOWERS"",""LIGHTS""]","[4291,4747]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6521,141.5676487228532,40.541909757522724,"[""TOWERS"",""LIGHTS""]","[4246,4842]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6528,141.67305804264188,40.454613089799984,"[""TOWERS"",""LIGHTS""]","[4304,4777]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6548,141.53481130881366,40.56201499793302,"[""TOWERS"",""LIGHTS""]","[4364,4830]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6558,141.51424214797476,40.55215044794532,"[""TOWERS"",""LIGHTS""]","[4259,4598]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6567,141.5765599913472,40.53922443934611,"[""TOWERS"",""LIGHTS""]","[4274,4619]",[],Same Kado,528.84,Same Kado,528.84,1,1,"[{""feature_id"":361674,""cell_id"":40,""source_relative_path"":""03900420\\C\\03900420.C"",""source_record_index"":6002,""native_scale"":200000,""lon"":141.58071044516635,""lat"":40.54278402393275,""text"":""Same Kado"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":528.84}]"
|
||||
40,03900420\C\03900420.C,200000,6602,141.52785319505807,40.55864373294613,"[""BCNLAT"",""LIGHTS""]","[4439,4737]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6620,141.3592715266989,40.68775404209214,"[""BCNSPP"",""LIGHTS""]","[4540,4584]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6632,141.54707956201432,40.53735089780069,"[""BCNLAT"",""LIGHTS""]","[4422,4714]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6640,141.6516343766049,40.472369069669675,"[""BCNLAT"",""LIGHTS""]","[4460,4646]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6657,141.5203457565323,40.53735089780069,"[""BCNLAT"",""LIGHTS""]","[4492,4673]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6663,141.53426198404347,40.53797541747083,"[""BCNSPP"",""LIGHTS""]","[4538,4784]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6691,141.55232866537378,40.533978390984394,"[""BCNLAT"",""LIGHTS""]","[4500,4670]",[],,,,,0,0,[]
|
||||
40,03900420\C\03900420.C,200000,6720,141.47084549113066,40.54653075073066,"[""BCNSPP"",""LIGHTS""]","[4539,4839]",[],,,,,0,0,[]
|
||||
|
448
cm95_nav_name_candidates_v1.json
Normal file
448
cm95_nav_name_candidates_v1.json
Normal file
@@ -0,0 +1,448 @@
|
||||
{
|
||||
"schema": "navsea.cm95.nav-name-candidate-audit/v1",
|
||||
"generated_at": "2026-09-03T11:04:47",
|
||||
"dataset_id": 1,
|
||||
"native_scale": 200000,
|
||||
"aoi_bbox": [
|
||||
141.328125,
|
||||
40.44694705960049,
|
||||
141.6796875,
|
||||
40.71395582628604
|
||||
],
|
||||
"search_radius_m": 800.0,
|
||||
"counts": {
|
||||
"nav_component_rows": 33,
|
||||
"nav_groups": 17,
|
||||
"texto_rows_with_text": 16,
|
||||
"groups_with_direct_OBJNAM_or_NOBJNM": 0,
|
||||
"groups_with_same_cell_text_within_100m": 0,
|
||||
"groups_with_same_cell_text_within_250m": 0
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": null,
|
||||
"lon": 141.65804316559033,
|
||||
"lat": 40.467367860055134,
|
||||
"component_classes": [
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4877
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6486,
|
||||
"lon": 141.53481130881366,
|
||||
"lat": 40.56513638820441,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4300,
|
||||
4741
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6501,
|
||||
"lon": 141.43965605140164,
|
||||
"lat": 40.68046315791786,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4325,
|
||||
4781
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6510,
|
||||
"lon": 141.6269147619469,
|
||||
"lat": 40.49949414054503,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4291,
|
||||
4747
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6521,
|
||||
"lon": 141.5676487228532,
|
||||
"lat": 40.541909757522724,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4246,
|
||||
4842
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6528,
|
||||
"lon": 141.67305804264188,
|
||||
"lat": 40.454613089799984,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4304,
|
||||
4777
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6548,
|
||||
"lon": 141.53481130881366,
|
||||
"lat": 40.56201499793302,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4364,
|
||||
4830
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6558,
|
||||
"lon": 141.51424214797476,
|
||||
"lat": 40.55215044794532,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4259,
|
||||
4598
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6567,
|
||||
"lon": 141.5765599913472,
|
||||
"lat": 40.53922443934611,
|
||||
"component_classes": [
|
||||
"TOWERS",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4274,
|
||||
4619
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": "Same Kado",
|
||||
"nearest_same_cell_distance_m": 528.84,
|
||||
"nearest_any_cell_text": "Same Kado",
|
||||
"nearest_any_cell_distance_m": 528.84,
|
||||
"same_cell_candidate_count": 1,
|
||||
"all_candidate_count": 1,
|
||||
"candidate_summary": [
|
||||
{
|
||||
"feature_id": 361674,
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"source_record_index": 6002,
|
||||
"native_scale": 200000,
|
||||
"lon": 141.58071044516635,
|
||||
"lat": 40.54278402393275,
|
||||
"text": "Same Kado",
|
||||
"prefix": [
|
||||
0,
|
||||
12,
|
||||
0
|
||||
],
|
||||
"same_cell": true,
|
||||
"distance_m": 528.84
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6602,
|
||||
"lon": 141.52785319505807,
|
||||
"lat": 40.55864373294613,
|
||||
"component_classes": [
|
||||
"BCNLAT",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4439,
|
||||
4737
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6620,
|
||||
"lon": 141.3592715266989,
|
||||
"lat": 40.68775404209214,
|
||||
"component_classes": [
|
||||
"BCNSPP",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4540,
|
||||
4584
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6632,
|
||||
"lon": 141.54707956201432,
|
||||
"lat": 40.53735089780069,
|
||||
"component_classes": [
|
||||
"BCNLAT",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4422,
|
||||
4714
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6640,
|
||||
"lon": 141.6516343766049,
|
||||
"lat": 40.472369069669675,
|
||||
"component_classes": [
|
||||
"BCNLAT",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4460,
|
||||
4646
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6657,
|
||||
"lon": 141.5203457565323,
|
||||
"lat": 40.53735089780069,
|
||||
"component_classes": [
|
||||
"BCNLAT",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4492,
|
||||
4673
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6663,
|
||||
"lon": 141.53426198404347,
|
||||
"lat": 40.53797541747083,
|
||||
"component_classes": [
|
||||
"BCNSPP",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4538,
|
||||
4784
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6691,
|
||||
"lon": 141.55232866537378,
|
||||
"lat": 40.533978390984394,
|
||||
"component_classes": [
|
||||
"BCNLAT",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4500,
|
||||
4670
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
},
|
||||
{
|
||||
"cell_id": 40,
|
||||
"source_relative_path": "03900420\\C\\03900420.C",
|
||||
"native_scale": 200000,
|
||||
"relation20": 6720,
|
||||
"lon": 141.47084549113066,
|
||||
"lat": 40.54653075073066,
|
||||
"component_classes": [
|
||||
"BCNSPP",
|
||||
"LIGHTS"
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
4539,
|
||||
4839
|
||||
],
|
||||
"direct_names": [],
|
||||
"nearest_same_cell_text": null,
|
||||
"nearest_same_cell_distance_m": null,
|
||||
"nearest_any_cell_text": null,
|
||||
"nearest_any_cell_distance_m": null,
|
||||
"same_cell_candidate_count": 0,
|
||||
"all_candidate_count": 0,
|
||||
"candidate_summary": []
|
||||
}
|
||||
],
|
||||
"decision": "DATA_READY_FOR_NAME_ASSOCIATION_REVIEW"
|
||||
}
|
||||
12
cm95_nav_name_candidates_v1.txt
Normal file
12
cm95_nav_name_candidates_v1.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
CM95 / CM93 助航名称候选审计 v1
|
||||
============================================================================
|
||||
Native scale : 200000
|
||||
Nav component rows : 33
|
||||
Nav groups : 17
|
||||
_texto rows with text : 16
|
||||
Groups with direct OBJNAM/NOBJNM : 0
|
||||
Same-cell text <=100m : 0
|
||||
Same-cell text <=250m : 0
|
||||
|
||||
注意:最近文字只是候选,不代表自动确定为助航名称。
|
||||
下一步由映射审计决定哪些关系可安全写入 chart_label_text。
|
||||
10329
cm95_nav_name_multiscale_audit_v2.json
Normal file
10329
cm95_nav_name_multiscale_audit_v2.json
Normal file
File diff suppressed because it is too large
Load Diff
36
cm95_nav_name_multiscale_audit_v2.txt
Normal file
36
cm95_nav_name_multiscale_audit_v2.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
CM95 / CM93 助航名称多尺度与显式关系审计 v2
|
||||
==================================================================================
|
||||
Dataset ID : 1
|
||||
Scales : 20000,50000,200000
|
||||
Nav component rows : 227
|
||||
Nav groups : 136
|
||||
_texto rows : 110
|
||||
|
||||
1:20000
|
||||
groups : 62
|
||||
direct names : 7
|
||||
explicit text relation: 0
|
||||
same-cell <= 50m : 0
|
||||
same-cell <= 100m : 0
|
||||
same-cell <= 250m : 15
|
||||
|
||||
1:50000
|
||||
groups : 57
|
||||
direct names : 0
|
||||
explicit text relation: 0
|
||||
same-cell <= 50m : 0
|
||||
same-cell <= 100m : 2
|
||||
same-cell <= 250m : 10
|
||||
|
||||
1:200000
|
||||
groups : 17
|
||||
direct names : 0
|
||||
explicit text relation: 0
|
||||
same-cell <= 50m : 0
|
||||
same-cell <= 100m : 0
|
||||
same-cell <= 250m : 0
|
||||
|
||||
注意:
|
||||
- 显式关系候选优先于距离候选。
|
||||
- 最近文字仍不会被脚本自动写入 chart_label_text。
|
||||
- 若 20k/50k/200k 都无安全来源,则该数据源的助航名称保持为空,不从 NEWPEC 反灌。
|
||||
137
cm95_nav_name_multiscale_groups_v2.csv
Normal file
137
cm95_nav_name_multiscale_groups_v2.csv
Normal file
@@ -0,0 +1,137 @@
|
||||
native_scale,cell_id,source_relative_path,relation20,lon,lat,component_classes,component_source_record_indices,direct_names,nav_relation_fields,explicit_text_candidates,nearest_same_cell_text,nearest_same_cell_distance_m,same_cell_candidate_count,all_candidate_count,candidate_summary
|
||||
20000,693,03900420\F\03910424.F,,141.487254006117,40.55602869111419,"[""TOWERS""]",[1959],[],{},[],Kitanuma,730.41,1,1,"[{""feature_id"":606700,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2200,""native_scale"":20000,""lon"":141.4815623918527,""lat"":40.56097339975906,""text"":""Kitanuma"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":730.41,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.487370991933,40.55682149529551,"[""TOWERS""]",[1960],[],{},[],Kitanuma,673.74,1,1,"[{""feature_id"":606700,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2200,""native_scale"":20000,""lon"":141.4815623918527,""lat"":40.56097339975906,""text"":""Kitanuma"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":673.74,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.48809833852798,40.556491161360874,"[""TOWERS""]",[1958],[],{},[],Kitanuma,743.83,1,1,"[{""feature_id"":606700,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2200,""native_scale"":20000,""lon"":141.4815623918527,""lat"":40.56097339975906,""text"":""Kitanuma"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":743.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.48819497898467,40.55577458522323,"[""TOWERS""]",[1961],[],{},[],Hamana-Yachi,765.61,1,1,"[{""feature_id"":606692,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2192,""native_scale"":20000,""lon"":141.4941968599783,""lat"":40.550616027137096,""text"":""Hamana-Yachi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":765.61,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.49735547700973,40.52981512984462,"[""TOWERS""]",[1970],[],{},[],Toyama-Shinden,517.72,3,3,"[{""feature_id"":606712,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2212,""native_scale"":20000,""lon"":141.50044288528355,""lat"":40.53383653024312,""text"":""Toyama-Shinden"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":517.72,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606702,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2202,""native_scale"":20000,""lon"":141.49126712823906,""lat"":40.529042342579885,""text"":""Numadate"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":521.69,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606652,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2152,""native_scale"":20000,""lon"":141.5038354739469,""lat"":40.5271713470344,""text"":""Area 3 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":621.58,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5000054600586,40.535127801051665,"[""TOWERS""]",[1966],[],{},[],Toyama-Shinden,148.27,4,4,"[{""feature_id"":606712,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2212,""native_scale"":20000,""lon"":141.50044288528355,""lat"":40.53383653024312,""text"":""Toyama-Shinden"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":148.27,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606683,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2183,""native_scale"":20000,""lon"":141.4964857128996,""lat"":40.53749167722482,""text"":""Mabechi Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":396.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606710,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2210,""native_scale"":20000,""lon"":141.5023960397764,""lat"":40.538406703674674,""text"":""Tate"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":416.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606699,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2199,""native_scale"":20000,""lon"":141.50835214371162,""lat"":40.53415680839427,""text"":""Kawaragi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":713.59,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5003564175065,40.53742559149734,"[""TOWERS""]",[1964],[],{},[],Tate,203.98,5,5,"[{""feature_id"":606710,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2210,""native_scale"":20000,""lon"":141.5023960397764,""lat"":40.538406703674674,""text"":""Tate"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":203.98,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606683,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2183,""native_scale"":20000,""lon"":141.4964857128996,""lat"":40.53749167722482,""text"":""Mabechi Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":327.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606712,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2212,""native_scale"":20000,""lon"":141.50044288528355,""lat"":40.53383653024312,""text"":""Toyama-Shinden"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":399.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606695,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2195,""native_scale"":20000,""lon"":141.49386116154983,""lat"":40.54159903142414,""text"":""Hattaro"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":718.76,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606699,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2199,""native_scale"":20000,""lon"":141.50835214371162,""lat"":40.53415680839427,""text"":""Kawaragi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":767.26,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.51061556493377,40.53027778111349,"[""BCNSPP""]",[1980],[],{},[],Kawaragi,471.84,4,4,"[{""feature_id"":606699,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2199,""native_scale"":20000,""lon"":141.50835214371162,""lat"":40.53415680839427,""text"":""Kawaragi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":471.84,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606653,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2153,""native_scale"":20000,""lon"":141.51512206201883,""lat"":40.52610363595054,""text"":""Area 4 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":600.42,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":618.09,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606652,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2152,""native_scale"":20000,""lon"":141.5038354739469,""lat"":40.5271713470344,""text"":""Area 3 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":669.09,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5108444502259,40.531909745248655,"[""BCNSPP""]",[1979],[],{},[],Kawaragi,326.8,5,5,"[{""feature_id"":606699,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2199,""native_scale"":20000,""lon"":141.50835214371162,""lat"":40.53415680839427,""text"":""Kawaragi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":326.8,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":568.37,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606653,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2153,""native_scale"":20000,""lon"":141.51512206201883,""lat"":40.52610363595054,""text"":""Area 4 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":739.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606663,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2163,""native_scale"":20000,""lon"":141.51672934540358,""lat"":40.53728325278595,""text"":""Service Co., Inc."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":777.4,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606652,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2152,""native_scale"":20000,""lon"":141.5038354739469,""lat"":40.5271713470344,""text"":""Area 3 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":792.79,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5214392960816,40.52781196552014,"[""TOWERS""]",[1962],[],{},[],Tate Hana,111.99,9,9,"[{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":111.99,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":192.38,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606674,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2174,""native_scale"":20000,""lon"":141.51944036453034,""lat"":40.52694255323407,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":194.65,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606669,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2169,""native_scale"":20000,""lon"":141.51948105524897,""lat"":40.52654597546327,""text"":""(Konakano)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":217.28,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606685,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2185,""native_scale"":20000,""lon"":141.52122058346913,""lat"":40.52476643093591,""text"":""Niida Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":339.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":514.47,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606714,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2214,""native_scale"":20000,""lon"":141.525121806115,""lat"":40.52382579545554,""text"":""Uenoyama"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":541.61,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606653,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2153,""native_scale"":20000,""lon"":141.51512206201883,""lat"":40.52610363595054,""text"":""Area 4 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":566.71,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":569.22,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5214392960816,40.52813227246671,"[""SISTAT""]",[2046],[],{},[],Tate Hana,109.72,9,9,"[{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":109.72,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606674,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2174,""native_scale"":20000,""lon"":141.51944036453034,""lat"":40.52694255323407,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":214.58,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":219.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606669,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2169,""native_scale"":20000,""lon"":141.51948105524897,""lat"":40.52654597546327,""text"":""(Konakano)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":241.88,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606685,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2185,""native_scale"":20000,""lon"":141.52122058346913,""lat"":40.52476643093591,""text"":""Niida Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":374.72,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":525.02,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":540.46,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606714,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2214,""native_scale"":20000,""lon"":141.525121806115,""lat"":40.52382579545554,""text"":""Uenoyama"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":571.12,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606653,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2153,""native_scale"":20000,""lon"":141.51512206201883,""lat"":40.52610363595054,""text"":""Area 4 Koyo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":579.62,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.52367219926484,40.52990155944516,"[""SISTAT""]",[2047],[],{},[],Tate Hana,363.04,10,10,"[{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":363.04,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":377.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":479.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606674,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2174,""native_scale"":20000,""lon"":141.51944036453034,""lat"":40.52694255323407,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":485.99,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606669,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2169,""native_scale"":20000,""lon"":141.51948105524897,""lat"":40.52654597546327,""text"":""(Konakano)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":514.49,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":566.22,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606685,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2185,""native_scale"":20000,""lon"":141.52122058346913,""lat"":40.52476643093591,""text"":""Niida Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":607.44,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606714,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2214,""native_scale"":20000,""lon"":141.525121806115,""lat"":40.52382579545554,""text"":""Uenoyama"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":686.61,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":696.11,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":700.69,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.54550785613407,40.549177658809995,"[""LIGHTS""]",[2027],[],{},[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,,141.55333573312492,40.526886625741874,"[""TOWERS""]",[1967],[],{},[],Sunamori,163.04,5,5,"[{""feature_id"":606709,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2209,""native_scale"":20000,""lon"":141.55269485430696,""lat"":40.525503676544034,""text"":""Sunamori"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":163.04,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606654,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2154,""native_scale"":20000,""lon"":141.54897165355496,""lat"":40.52447661492469,""text"":""Area 5 Shirogane"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":455.93,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":498.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":639.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":655.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.55378333102954,40.527262864335846,"[""TOWERS""]",[1968],[],{},[],Sunamori,216.17,5,5,"[{""feature_id"":606709,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2209,""native_scale"":20000,""lon"":141.55269485430696,""lat"":40.525503676544034,""text"":""Sunamori"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":216.17,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606654,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2154,""native_scale"":20000,""lon"":141.54897165355496,""lat"":40.52447661492469,""text"":""Area 5 Shirogane"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":511.25,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":518.62,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":587.75,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":614.98,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.553798590049,40.526698505652824,"[""TOWERS""]",[1963],[],{},[],Sunamori,162.34,5,5,"[{""feature_id"":606709,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2209,""native_scale"":20000,""lon"":141.55269485430696,""lat"":40.525503676544034,""text"":""Sunamori"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":162.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606654,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2154,""native_scale"":20000,""lon"":141.54897165355496,""lat"":40.52447661492469,""text"":""Area 5 Shirogane"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":476.96,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":542.4,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":647.61,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":677.71,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.55411902945798,40.52698322774454,"[""TOWERS""]",[1972],[],{},[],Sunamori,203.85,5,5,"[{""feature_id"":606709,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2209,""native_scale"":20000,""lon"":141.55269485430696,""lat"":40.525503676544034,""text"":""Sunamori"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":203.85,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606654,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2154,""native_scale"":20000,""lon"":141.54897165355496,""lat"":40.52447661492469,""text"":""Area 5 Shirogane"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":516.69,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":555.57,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":610.12,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":648.21,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.55427670599258,40.53193516493641,"[""TOWERS""]",[1971],[],{},[],Hachinohe Fishing Harbour (Same),122.06,6,6,"[{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":122.06,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":138.85,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":520.1,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":645.07,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":720.32,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606709,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2209,""native_scale"":20000,""lon"":141.55269485430696,""lat"":40.525503676544034,""text"":""Sunamori"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":727.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.5546683541591,40.532753673727576,"[""TOWERS""]",[1969],[],{},[],Hachinohe Fishing Harbour (Same),110.53,6,6,"[{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":110.53,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":110.81,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":433.57,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":624.98,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":725.58,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":746.97,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.55547708219132,40.535127801051665,"[""SISTAW""]",[2048],[],{},[],Kami-Same,261.54,6,6,"[{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":261.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":314.7,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":316.05,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":371.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":475.79,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606705,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2205,""native_scale"":20000,""lon"":141.56257761258715,""lat"":40.537257835127086,""text"":""Shimo-Matsunaeba"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":645.1,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.55552285924972,40.53378060850419,"[""TOWERS""]",[1965],[],{},[],Hinode,165.6,6,6,"[{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":165.6,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":213.66,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":307.02,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":489.93,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":616.07,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606705,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2205,""native_scale"":20000,""lon"":141.56257761258715,""lat"":40.537257835127086,""text"":""Shimo-Matsunaeba"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":710.59,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,,141.57670746462134,40.53993171998525,"[""BCNSPP""]",[1981],[],{},[],Same Kado,178.61,9,9,"[{""feature_id"":606661,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2161,""native_scale"":20000,""lon"":141.5748967276436,""lat"":40.54076029762526,""text"":""Same Kado"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":178.61,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606667,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2167,""native_scale"":20000,""lon"":141.5763209027946,""lat"":40.543855935677584,""text"":""Todo Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":437.57,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606687,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2187,""native_scale"":20000,""lon"":141.5735793656289,""lat"":40.54424224499966,""text"":""Okitonda"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":547.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606688,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2188,""native_scale"":20000,""lon"":141.58198199901997,""lat"":40.543093476529926,""text"":""Saku Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":567.67,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606704,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2204,""native_scale"":20000,""lon"":141.5761581399202,""lat"":40.53474143916679,""text"":""Senzogakubo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":579.0,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606680,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2180,""native_scale"":20000,""lon"":141.58295348992658,""lat"":40.54273765929082,""text"":""Kankitsu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":613.12,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606690,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2190,""native_scale"":20000,""lon"":141.58495242147782,""lat"":40.53972330313749,""text"":""Yahazukomone"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":697.11,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606677,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2177,""native_scale"":20000,""lon"":141.58476422690433,""lat"":40.53782210488448,""text"":""Hon-Karimata"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":720.11,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606706,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2206,""native_scale"":20000,""lon"":141.56734859934312,""lat"":40.53952505236351,""text"":""Shimo-Mekurakubo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":792.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2239,141.51452696025927,40.55241521469589,"[""TOWERS"",""LIGHTS""]","[1954,1999]",[],"{""1954"":{""_cm93_relation20_raw"":2239},""1999"":{""_cm93_relation20_raw"":2239}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2240,141.56767921143177,40.54238692330532,"[""TOWERS"",""LIGHTS""]","[1953,2011]",[],"{""1953"":{""_cm93_relation20_raw"":2240},""2011"":{""_cm93_relation20_raw"":2240}}",[],O Saki,166.43,10,10,"[{""feature_id"":606659,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2159,""native_scale"":20000,""lon"":141.56571079791942,""lat"":40.54243775472137,""text"":""O Saki"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":166.43,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606672,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2172,""native_scale"":20000,""lon"":141.5649122425669,""lat"":40.541878607023406,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":240.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606668,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2168,""native_scale"":20000,""lon"":141.5648969835474,""lat"":40.54151261691194,""text"":""(Ebisuhama)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":254.41,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606706,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2206,""native_scale"":20000,""lon"":141.56734859934312,""lat"":40.53952505236351,""text"":""Shimo-Mekurakubo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":319.45,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606666,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2166,""native_scale"":20000,""lon"":141.56636184941704,""lat"":40.546072100989115,""text"":""Hinode Iwa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":424.62,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606687,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2187,""native_scale"":20000,""lon"":141.5735793656289,""lat"":40.54424224499966,""text"":""Okitonda"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":539.55,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606686,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2186,""native_scale"":20000,""lon"":141.56839129900726,""lat"":40.547607108287096,""text"":""Ogomune"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":583.57,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606661,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2161,""native_scale"":20000,""lon"":141.5748967276436,""lat"":40.54076029762526,""text"":""Same Kado"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":636.14,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606705,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2205,""native_scale"":20000,""lon"":141.56257761258715,""lat"":40.537257835127086,""text"":""Shimo-Matsunaeba"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":714.93,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606667,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2167,""native_scale"":20000,""lon"":141.5763209027946,""lat"":40.543855935677584,""text"":""Todo Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":748.26,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2241,141.5759546863272,40.53986563666468,"[""TOWERS"",""LIGHTS""]","[1955,2001]",[],"{""1955"":{""_cm93_relation20_raw"":2241},""2001"":{""_cm93_relation20_raw"":2241}}",[],Same Kado,133.75,9,9,"[{""feature_id"":606661,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2161,""native_scale"":20000,""lon"":141.5748967276436,""lat"":40.54076029762526,""text"":""Same Kado"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":133.75,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606667,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2167,""native_scale"":20000,""lon"":141.5763209027946,""lat"":40.543855935677584,""text"":""Todo Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":444.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606687,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2187,""native_scale"":20000,""lon"":141.5735793656289,""lat"":40.54424224499966,""text"":""Okitonda"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":526.42,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606704,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2204,""native_scale"":20000,""lon"":141.5761581399202,""lat"":40.53474143916679,""text"":""Senzogakubo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":570.04,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606688,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2188,""native_scale"":20000,""lon"":141.58198199901997,""lat"":40.543093476529926,""text"":""Saku Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":623.08,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606680,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2180,""native_scale"":20000,""lon"":141.58295348992658,""lat"":40.54273765929082,""text"":""Kankitsu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":672.12,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606706,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2206,""native_scale"":20000,""lon"":141.56734859934312,""lat"":40.53952505236351,""text"":""Shimo-Mekurakubo"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":728.23,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606690,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2190,""native_scale"":20000,""lon"":141.58495242147782,""lat"":40.53972330313749,""text"":""Yahazukomone"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":760.5,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606677,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2177,""native_scale"":20000,""lon"":141.58476422690433,""lat"":40.53782210488448,""text"":""Hon-Karimata"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":778.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2242,141.5350198234147,40.56587201094555,"[""TOWERS"",""LIGHTS""]","[1956,2007]",[],"{""1956"":{""_cm93_relation20_raw"":2242},""2007"":{""_cm93_relation20_raw"":2242}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2243,141.54813240748382,40.53939288485493,"[""TOWERS"",""LIGHTS""]","[1952,2009]",[],"{""1952"":{""_cm93_relation20_raw"":2243},""2009"":{""_cm93_relation20_raw"":2243}}",[],Ko Ne,682.88,1,1,"[{""feature_id"":606682,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2182,""native_scale"":20000,""lon"":141.5536409135144,""lat"":40.54388643386297,""text"":""Ko Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":682.88,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2244,141.55521767886023,40.536297040550764,"[""TOWERS"",""LIGHTS""]","[1957,2008]",[],"{""1957"":{""_cm93_relation20_raw"":2244},""2008"":{""_cm93_relation20_raw"":2244}}",[],Kami-Same,304.17,6,6,"[{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":304.17,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":309.02,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":370.06,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":420.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":446.33,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606705,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2205,""native_scale"":20000,""lon"":141.56257761258715,""lat"":40.537257835127086,""text"":""Shimo-Matsunaeba"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":631.08,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2245,141.54756782376322,40.54819670438723,"[""BOYSPP"",""LIGHTS""]","[1987,2032]",[],"{""1987"":{""_cm93_relation20_raw"":2245},""2032"":{""_cm93_relation20_raw"":2245}}",[],Ko Ne,702.16,1,1,"[{""feature_id"":606682,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2182,""native_scale"":20000,""lon"":141.5536409135144,""lat"":40.54388643386297,""text"":""Ko Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":702.16,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2246,141.51764488657207,40.545787460007524,"[""BOYSPP"",""LIGHTS""]","[1984,2028]",[],"{""1984"":{""_cm93_relation20_raw"":2246},""2028"":{""_cm93_relation20_raw"":2246}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2247,141.55372738129145,40.53761368147356,"[""BOYSPP"",""LIGHTS""]","[1985,2031]",[],"{""1985"":{""_cm93_relation20_raw"":2247},""2031"":{""_cm93_relation20_raw"":2247}}",[],Kabu Shima,365.74,7,7,"[{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":365.74,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":400.19,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":483.56,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":537.91,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":616.11,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606682,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2182,""native_scale"":20000,""lon"":141.5536409135144,""lat"":40.54388643386297,""text"":""Ko Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":697.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606705,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2205,""native_scale"":20000,""lon"":141.56257761258715,""lat"":40.537257835127086,""text"":""Shimo-Matsunaeba"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":748.95,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2248,141.51602234416788,40.54453705850963,"[""BOYSPP"",""LIGHTS""]","[1982,2026]",[],"{""1982"":{""_cm93_relation20_raw"":2248},""2026"":{""_cm93_relation20_raw"":2248}}",[],Toyosu,681.35,2,2,"[{""feature_id"":606713,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2213,""native_scale"":20000,""lon"":141.51138360224738,""lat"":40.53952505236351,""text"":""Toyosu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":681.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606660,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2160,""native_scale"":20000,""lon"":141.51662761860706,""lat"":40.5377102680129,""text"":""Pier for Tohoku Port"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":760.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2249,141.5144252334628,40.54336796282291,"[""BOYSPP"",""LIGHTS""]","[1983,2030]",[],"{""1983"":{""_cm93_relation20_raw"":2249},""2030"":{""_cm93_relation20_raw"":2249}}",[],Toyosu,498.65,3,3,"[{""feature_id"":606713,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2213,""native_scale"":20000,""lon"":141.51138360224738,""lat"":40.53952505236351,""text"":""Toyosu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":498.65,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606660,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2160,""native_scale"":20000,""lon"":141.51662761860706,""lat"":40.5377102680129,""text"":""Pier for Tohoku Port"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":656.06,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606663,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2163,""native_scale"":20000,""lon"":141.51672934540358,""lat"":40.53728325278595,""text"":""Service Co., Inc."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":704.05,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2250,141.54760851448182,40.55077866754792,"[""BOYSPP"",""LIGHTS""]","[1986,2025]",[],"{""1986"":{""_cm93_relation20_raw"":2250},""2025"":{""_cm93_relation20_raw"":2250}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2251,141.5279752427569,40.55872215426594,"[""BCNLAT"",""LIGHTS""]","[1974,2006]",[],"{""1974"":{""_cm93_relation20_raw"":2251},""2006"":{""_cm93_relation20_raw"":2251}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2252,141.47915655311542,40.58768781797142,"[""LIGHTS"",""_extgn""]","[2017,2218]",[],"{""2017"":{""_cm93_relation20_raw"":2252},""2218"":{""_cm93_relation20_raw"":2252}}",[],Ichikawa Basin,334.87,1,1,"[{""feature_id"":606678,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2178,""native_scale"":20000,""lon"":141.47547404308204,""lat"":40.586570273697056,""text"":""Ichikawa Basin"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":334.87,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2253,141.50487817361105,40.55268966278586,"[""LIGHTS"",""_extgn""]","[2019,2236]",[],"{""2019"":{""_cm93_relation20_raw"":2253},""2236"":{""_cm93_relation20_raw"":2253}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2254,141.55245070999536,40.53446183378157,"[""BCNLAT"",""LIGHTS""]","[1977,2002]",[],"{""1977"":{""_cm93_relation20_raw"":2254},""2002"":{""_cm93_relation20_raw"":2254}}",[],Hachinohe Fishing Harbour (Same),201.79,6,6,"[{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":201.79,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606697,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2197,""native_scale"":20000,""lon"":141.55584329865871,""lat"":40.532311375187646,""text"":""Hinode"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":373.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606698,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2198,""native_scale"":20000,""lon"":141.55856449046513,""lat"":40.53529047907352,""text"":""Kami-Same"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":524.82,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606655,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2155,""native_scale"":20000,""lon"":141.55846276366864,""lat"":40.53757809692398,""text"":""Kabu Island Marine Park"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":614.98,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":673.81,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606651,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2151,""native_scale"":20000,""lon"":141.54794421291032,""lat"":40.52869661907635,""text"":""Area 2 Chikkogai"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":745.67,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2255,141.53411954126562,40.53822878284375,"[""BCNSPP"",""LIGHTS""]","[1978,2010]",[],"{""1978"":{""_cm93_relation20_raw"":2255},""2010"":{""_cm93_relation20_raw"":2255}}",[],Kawaragi No 1 Wharf [Port Island],634.57,1,1,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":634.57,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2256,141.54682521814877,40.5377458524923,"[""BCNLAT"",""LIGHTS""]","[1973,2005]",[],"{""1973"":{""_cm93_relation20_raw"":2256},""2005"":{""_cm93_relation20_raw"":2256}}",[],Hachinohe Fishing Harbour (Same),780.69,1,1,"[{""feature_id"":606671,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2171,""native_scale"":20000,""lon"":141.55336116482405,""lat"":40.53278417696755,""text"":""Hachinohe Fishing Harbour (Same)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":780.69,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2257,141.47109979083245,40.546926016675656,"[""LIGHTS"",""_extgn""]","[2029,2227]",[],"{""2029"":{""_cm93_relation20_raw"":2257},""2227"":{""_cm93_relation20_raw"":2257}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2258,141.52570164885506,40.53382127886439,"[""LIGHTS"",""_extgn""]","[1998,2229]","[{""object_class"":""LIGHTS"",""source_record_index"":1998,""field"":""OBJNAM"",""text"":""L2""}]","{""1998"":{""_cm93_relation20_raw"":2258},""2229"":{""_cm93_relation20_raw"":2258}}",[],Kawaragi No 1 Wharf [Port Island],438.58,5,5,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":438.58,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":699.99,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":716.51,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":723.25,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":796.38,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2259,141.49831170889684,40.55619131837828,"[""LIGHTS"",""_extgn""]","[2033,2237]",[],"{""2033"":{""_cm93_relation20_raw"":2259},""2237"":{""_cm93_relation20_raw"":2259}}",[],Hamana-Yachi,710.77,1,1,"[{""feature_id"":606692,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2192,""native_scale"":20000,""lon"":141.4941968599783,""lat"":40.550616027137096,""text"":""Hamana-Yachi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":710.77,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2260,141.5075434156794,40.549081088805,"[""LIGHTS"",""_extgn""]","[2015,2220]",[],"{""2015"":{""_cm93_relation20_raw"":2260},""2220"":{""_cm93_relation20_raw"":2260}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2261,141.52826516412694,40.54623983528677,"[""LIGHTS"",""_extgn""]","[2024,2233]",[],"{""2024"":{""_cm93_relation20_raw"":2261},""2233"":{""_cm93_relation20_raw"":2261}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2262,141.51800601669967,40.54032821853955,"[""LIGHTS"",""_extgn""]","[2016,2216]",[],"{""2016"":{""_cm93_relation20_raw"":2262},""2216"":{""_cm93_relation20_raw"":2262}}",[],Pier for Tohoku Port,313.54,4,4,"[{""feature_id"":606660,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2160,""native_scale"":20000,""lon"":141.51662761860706,""lat"":40.5377102680129,""text"":""Pier for Tohoku Port"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":313.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606663,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2163,""native_scale"":20000,""lon"":141.51672934540358,""lat"":40.53728325278595,""text"":""Service Co., Inc."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":355.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606713,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2213,""native_scale"":20000,""lon"":141.51138360224738,""lat"":40.53952505236351,""text"":""Toyosu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":566.7,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":786.16,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2263,141.52535069140714,40.53333831674283,"[""LIGHTS"",""_extgn""]","[1995,2228]","[{""object_class"":""LIGHTS"",""source_record_index"":1995,""field"":""OBJNAM"",""text"":""R1""}]","{""1995"":{""_cm93_relation20_raw"":2263},""2228"":{""_cm93_relation20_raw"":2263}}",[],Kawaragi No 1 Wharf [Port Island],497.15,7,7,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":497.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":674.28,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":689.19,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":710.52,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":735.56,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":768.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":781.17,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2264,141.56030401868534,40.544648883984316,"[""LIGHTS"",""_extgn""]","[2018,2217]",[],"{""2018"":{""_cm93_relation20_raw"":2264},""2217"":{""_cm93_relation20_raw"":2264}}",[],Hachinohe Fishing Harbour,496.5,7,7,"[{""feature_id"":606672,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2172,""native_scale"":20000,""lon"":141.5649122425669,""lat"":40.541878607023406,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":496.5,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606659,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2159,""native_scale"":20000,""lon"":141.56571079791942,""lat"":40.54243775472137,""text"":""O Saki"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":518.82,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606668,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2168,""native_scale"":20000,""lon"":141.5648969835474,""lat"":40.54151261691194,""text"":""(Ebisuhama)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":521.77,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606666,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2166,""native_scale"":20000,""lon"":141.56636184941704,""lat"":40.546072100989115,""text"":""Hinode Iwa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":535.77,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606682,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2182,""native_scale"":20000,""lon"":141.5536409135144,""lat"":40.54388643386297,""text"":""Ko Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":569.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606656,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2156,""native_scale"":20000,""lon"":141.55759299955852,""lat"":40.5390929653105,""text"":""Kabu Shima"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":658.9,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606686,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2186,""native_scale"":20000,""lon"":141.56839129900726,""lat"":40.547607108287096,""text"":""Ogomune"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":758.39,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2265,141.52588984342862,40.53368910010344,"[""LIGHTS"",""_extgn""]","[1997,2235]","[{""object_class"":""LIGHTS"",""source_record_index"":1997,""field"":""OBJNAM"",""text"":""L1""}]","{""1997"":{""_cm93_relation20_raw"":2265},""2235"":{""_cm93_relation20_raw"":2265}}",[],Kawaragi No 1 Wharf [Port Island],450.52,6,6,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":450.52,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":678.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":701.59,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":727.86,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":794.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":798.81,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2266,141.52561518107802,40.53350099910942,"[""LIGHTS"",""_extgn""]","[1993,2226]","[{""object_class"":""LIGHTS"",""source_record_index"":1993,""field"":""OBJNAM"",""text"":""C1""}]","{""1993"":{""_cm93_relation20_raw"":2266},""2226"":{""_cm93_relation20_raw"":2266}}",[],Kawaragi No 1 Wharf [Port Island],474.92,6,6,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":474.92,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":682.58,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":700.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":704.84,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":763.46,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":782.05,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2267,141.52294485266987,40.53044047091052,"[""LIGHTS"",""_extgn""]","[2000,2230]","[{""object_class"":""LIGHTS"",""source_record_index"":2000,""field"":""OBJNAM"",""text"":""C1""}]","{""2000"":{""_cm93_relation20_raw"":2267},""2230"":{""_cm93_relation20_raw"":2267}}",[],Tate Hana,356.94,10,10,"[{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":356.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":433.07,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":486.39,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606674,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2174,""native_scale"":20000,""lon"":141.51944036453034,""lat"":40.52694255323407,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":488.89,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606669,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2169,""native_scale"":20000,""lon"":141.51948105524897,""lat"":40.52654597546327,""text"":""(Konakano)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":522.72,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":565.4,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606685,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2185,""native_scale"":20000,""lon"":141.52122058346913,""lat"":40.52476643093591,""text"":""Niida Kawa"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":647.54,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606714,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2214,""native_scale"":20000,""lon"":141.525121806115,""lat"":40.52382579545554,""text"":""Uenoyama"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":758.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":762.13,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":768.99,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2268,141.52094592111857,40.55528669920913,"[""LIGHTS"",""_extgn""]","[2021,2232]",[],"{""2021"":{""_cm93_relation20_raw"":2268},""2232"":{""_cm93_relation20_raw"":2268}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2269,141.50160257076368,40.552715074589145,"[""LIGHTS"",""_extgn""]","[2022,2222]",[],"{""2022"":{""_cm93_relation20_raw"":2269},""2222"":{""_cm93_relation20_raw"":2269}}",[],Hamana-Yachi,667.81,1,1,"[{""feature_id"":606692,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2192,""native_scale"":20000,""lon"":141.4941968599783,""lat"":40.550616027137096,""text"":""Hamana-Yachi"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":667.81,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2270,141.5254269865045,40.53363317824145,"[""LIGHTS"",""_extgn""]","[1994,2219]","[{""object_class"":""LIGHTS"",""source_record_index"":1994,""field"":""OBJNAM"",""text"":""C2""}]","{""1994"":{""_cm93_relation20_raw"":2270},""2219"":{""_cm93_relation20_raw"":2270}}",[],Kawaragi No 1 Wharf [Port Island],463.74,6,6,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":463.74,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":688.47,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":704.19,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":726.48,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":765.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":799.52,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2271,141.53291407872706,40.54241742215959,"[""LIGHTS"",""_extgn""]","[2013,2231]",[],"{""2013"":{""_cm93_relation20_raw"":2271},""2231"":{""_cm93_relation20_raw"":2271}}",[],Kawaragi No 1 Wharf [Port Island],745.65,1,1,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":745.65,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2272,141.52043728713608,40.53762384848427,"[""BCNLAT"",""LIGHTS""]","[1976,2003]",[],"{""1976"":{""_cm93_relation20_raw"":2272},""2003"":{""_cm93_relation20_raw"":2272}}",[],"Service Co., Inc.",315.62,5,5,"[{""feature_id"":606663,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2163,""native_scale"":20000,""lon"":141.51672934540358,""lat"":40.53728325278595,""text"":""Service Co., Inc."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":315.62,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606660,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2160,""native_scale"":20000,""lon"":141.51662761860706,""lat"":40.5377102680129,""text"":""Pier for Tohoku Port"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":322.08,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":524.46,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":670.56,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606713,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2213,""native_scale"":20000,""lon"":141.51138360224738,""lat"":40.53952505236351,""text"":""Toyosu"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":793.75,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2273,141.53323451813606,40.53630720776126,"[""BCNLAT"",""LIGHTS""]","[1975,2004]",[],"{""1975"":{""_cm93_relation20_raw"":2273},""2004"":{""_cm93_relation20_raw"":2273}}",[],Kawaragi No 1 Wharf [Port Island],578.19,3,3,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":578.19,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":749.06,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":780.0,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2274,141.52411979716945,40.545101266953736,"[""LIGHTS"",""_extgn""]","[2014,2223]",[],"{""2014"":{""_cm93_relation20_raw"":2274},""2223"":{""_cm93_relation20_raw"":2274}}",[],,,0,0,[]
|
||||
20000,693,03900420\F\03910424.F,2275,141.53280217925092,40.535966605369474,"[""LIGHTS"",""_extgn""]","[2012,2221]",[],"{""2012"":{""_cm93_relation20_raw"":2275},""2221"":{""_cm93_relation20_raw"":2275}}",[],Kawaragi No 1 Wharf [Port Island],555.07,3,3,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":555.07,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":706.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":738.0,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2276,141.5251777558531,40.5334501609123,"[""LIGHTS"",""_extgn""]","[1996,2225]","[{""object_class"":""LIGHTS"",""source_record_index"":1996,""field"":""OBJNAM"",""text"":""R2""}]","{""1996"":{""_cm93_relation20_raw"":2276},""2225"":{""_cm93_relation20_raw"":2276}}",[],Kawaragi No 1 Wharf [Port Island],488.52,7,7,"[{""feature_id"":606657,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2157,""native_scale"":20000,""lon"":141.52664262172271,""lat"":40.53770010101532,""text"":""Kawaragi No 1 Wharf [Port Island]"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":488.52,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606715,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2215,""native_scale"":20000,""lon"":141.5175685914747,""lat"":40.53200125607943,""text"":""Uheikawara"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":662.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606673,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2173,""native_scale"":20000,""lon"":141.5319018971019,""lat"":40.52964735441949,""text"":""Hachinohe Fishing Harbour"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":708.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606670,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2170,""native_scale"":20000,""lon"":141.53193241514083,""lat"":40.529362643645946,""text"":""(Tatehana)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":729.7,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606665,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2165,""native_scale"":20000,""lon"":141.52014736576604,""lat"":40.52803567212025,""text"":""Tate Hana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":737.04,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606708,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2208,""native_scale"":20000,""lon"":141.5273089322398,""lat"":40.52658665021444,""text"":""Shinminato"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":784.16,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":606711,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2211,""native_scale"":20000,""lon"":141.5229906297283,""lat"":40.52654597546327,""text"":""Tatehana"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":789.65,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2277,141.4824321559628,40.58365441116841,"[""LIGHTS"",""_extgn""]","[2023,2224]",[],"{""2023"":{""_cm93_relation20_raw"":2277},""2224"":{""_cm93_relation20_raw"":2277}}",[],Ichikawa Basin,671.1,1,1,"[{""feature_id"":606678,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2178,""native_scale"":20000,""lon"":141.47547404308204,""lat"":40.586570273697056,""text"":""Ichikawa Basin"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":671.1,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
20000,693,03900420\F\03910424.F,2278,141.54953623727556,40.549818066898325,"[""LIGHTS"",""_extgn""]","[2020,2234]",[],"{""2020"":{""_cm93_relation20_raw"":2278},""2234"":{""_cm93_relation20_raw"":2278}}",[],Ko Ne,745.2,1,1,"[{""feature_id"":606682,""cell_id"":693,""source_relative_path"":""03900420\\F\\03910424.F"",""source_record_index"":2182,""native_scale"":20000,""lon"":141.5536409135144,""lat"":40.54388643386297,""text"":""Ko Ne"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":745.2,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.48717605911006,40.55602965032755,"[""TOWERS""]",[847],[],{},[],HACHINOHE,533.7,5,5,"[{""feature_id"":513876,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":946,""native_scale"":50000,""lon"":141.48158617070516,""lat"":40.558265740394994,""text"":""HACHINOHE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":533.7,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513897,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":967,""native_scale"":50000,""lon"":141.48120469515436,""lat"":40.55764065910144,""text"":""STEEL JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":535.33,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513875,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":945,""native_scale"":50000,""lon"":141.48103684591197,""lat"":40.55301589260543,""text"":""H A C H I T A R O"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":617.51,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513885,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":955,""native_scale"":50000,""lon"":141.48523307697113,""lat"":40.561558755232554,""text"":""MITSUBUSHI JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":636.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513889,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":959,""native_scale"":50000,""lon"":141.4954515353928,""lat"":40.55533848010609,""text"":""No 1 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":703.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.48734390835241,40.556837700583436,"[""TOWERS""]",[843],[],{},[],HACHINOHE,511.68,5,5,"[{""feature_id"":513876,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":946,""native_scale"":50000,""lon"":141.48158617070516,""lat"":40.558265740394994,""text"":""HACHINOHE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":511.68,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513897,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":967,""native_scale"":50000,""lon"":141.48120469515436,""lat"":40.55764065910144,""text"":""STEEL JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":526.28,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513885,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":955,""native_scale"":50000,""lon"":141.48523307697113,""lat"":40.561558755232554,""text"":""MITSUBUSHI JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":554.42,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513875,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":945,""native_scale"":50000,""lon"":141.48103684591197,""lat"":40.55301589260543,""text"":""H A C H I T A R O"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":681.56,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513889,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":959,""native_scale"":50000,""lon"":141.4954515353928,""lat"":40.55533848010609,""text"":""No 1 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":704.95,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.48806616872866,40.55652769503456,"[""TOWERS""]",[836],[],{},[],HACHINOHE,580.55,5,5,"[{""feature_id"":513876,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":946,""native_scale"":50000,""lon"":141.48158617070516,""lat"":40.558265740394994,""text"":""HACHINOHE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":580.55,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513897,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":967,""native_scale"":50000,""lon"":141.48120469515436,""lat"":40.55764065910144,""text"":""STEEL JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":592.73,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513885,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":955,""native_scale"":50000,""lon"":141.48523307697113,""lat"":40.561558755232554,""text"":""MITSUBUSHI JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":608.48,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513889,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":959,""native_scale"":50000,""lon"":141.4954515353928,""lat"":40.55533848010609,""text"":""No 1 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":637.8,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513875,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":945,""native_scale"":50000,""lon"":141.48103684591197,""lat"":40.55301589260543,""text"":""H A C H I T A R O"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":710.75,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.48813737749816,40.55581111933769,"[""TOWERS""]",[835],[],{},[],HACHINOHE,617.1,5,5,"[{""feature_id"":513876,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":946,""native_scale"":50000,""lon"":141.48158617070516,""lat"":40.558265740394994,""text"":""HACHINOHE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":617.1,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513897,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":967,""native_scale"":50000,""lon"":141.48120469515436,""lat"":40.55764065910144,""text"":""STEEL JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":620.01,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513889,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":959,""native_scale"":50000,""lon"":141.4954515353928,""lat"":40.55533848010609,""text"":""No 1 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":620.16,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513875,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":945,""native_scale"":50000,""lon"":141.48103684591197,""lat"":40.55301589260543,""text"":""H A C H I T A R O"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":675.63,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513885,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":955,""native_scale"":50000,""lon"":141.48523307697113,""lat"":40.561558755232554,""text"":""MITSUBUSHI JETTY"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":684.59,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.4973487404656,40.52984659582941,"[""TOWERS""]",[837],[],{},[],MABECHI KAWA,724.41,2,2,"[{""feature_id"":513884,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":954,""native_scale"":50000,""lon"":141.49523790908432,""lat"":40.536160743936016,""text"":""MABECHI KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":724.41,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513880,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":950,""native_scale"":50000,""lon"":141.5020485192519,""lat"":40.53586589358092,""text"":""K A W A R A G I"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":778.29,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.49998855127737,40.535169431555296,"[""TOWERS""]",[838],[],{},[],K A W A R A G I,190.53,2,2,"[{""feature_id"":513880,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":950,""native_scale"":50000,""lon"":141.5020485192519,""lat"":40.53586589358092,""text"":""K A W A R A G I"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":190.53,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513884,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":954,""native_scale"":50000,""lon"":141.49523790908432,""lat"":40.536160743936016,""text"":""MABECHI KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":416.33,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.5003496814655,40.5374977215057,"[""TOWERS""]",[840],[],{},[],K A W A R A G I,231.38,2,2,"[{""feature_id"":513880,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":950,""native_scale"":50000,""lon"":141.5020485192519,""lat"":40.53586589358092,""text"":""K A W A R A G I"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":231.38,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513884,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":954,""native_scale"":50000,""lon"":141.49523790908432,""lat"":40.536160743936016,""text"":""MABECHI KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":456.85,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.51056813988717,40.53031941496734,"[""BCNSPP""]",[857],[],{},[],TANKS,620.33,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":620.33,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.510807197899,40.53193104223212,"[""BCNSPP""]",[858],[],{},[],TANKS,580.3,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":580.3,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.52138678650883,40.52817899202388,"[""SISTAT""]",[914],[],{},[],TATE HANA,164.96,3,3,"[{""feature_id"":513899,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":969,""native_scale"":50000,""lon"":141.52025761887836,""lat"":40.526968936454345,""text"":""TATE HANA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":164.96,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513888,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":958,""native_scale"":50000,""lon"":141.52083237537494,""lat"":40.52605375386633,""text"":""NIIDA KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":240.92,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":504.88,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.52366546713245,40.529897436757,"[""SISTAT""]",[915],[],{},[],TATE HANA,434.74,3,3,"[{""feature_id"":513899,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":969,""native_scale"":50000,""lon"":141.52025761887836,""lat"":40.526968936454345,""text"":""TATE HANA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":434.74,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513888,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":958,""native_scale"":50000,""lon"":141.52083237537494,""lat"":40.52605375386633,""text"":""NIIDA KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":489.9,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":546.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.5467930581943,40.52788410654553,"[""TOWERS""]",[846],[],{},[],SHIROGANE WHARF,102.45,3,3,"[{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":102.45,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":497.0,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":508.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.54746445516378,40.527868853813075,"[""TOWERS""]",[844],[],{},[],SHIROGANE WHARF,146.94,3,3,"[{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":146.94,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":460.82,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":470.32,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.54755600929602,40.52753837709095,"[""TOWERS""]",[850],[],{},[],SHIROGANE WHARF,175.32,3,3,"[{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":175.32,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":426.6,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":493.43,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.5533900420534,40.526968936454345,"[""TOWERS""]",[845],[],{},[],HACHINOHE,362.95,3,3,"[{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":362.95,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":487.15,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":649.83,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55384272637372,40.52673505764836,"[""TOWERS""]",[849],[],{},[],HACHINOHE,370.79,3,3,"[{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":370.79,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":526.44,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":693.93,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55386815807714,40.527284163118864,"[""TOWERS""]",[851],[],{},[],HACHINOHE,415.91,3,3,"[{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":415.91,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":472.97,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":680.48,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55415807949575,40.52702486387398,"[""TOWERS""]",[848],[],{},[],HACHINOHE,412.25,3,3,"[{""feature_id"":513877,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":947,""native_scale"":50000,""lon"":141.55060781370267,""lat"":40.524482661283564,""text"":""HACHINOHE"",""prefix"":[16,12,0],""same_cell"":true,""distance_m"":412.25,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":510.09,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513895,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":965,""native_scale"":50000,""lon"":141.5459995890486,""lat"":40.52858064429507,""text"":""SHIROGANE WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":710.91,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55434627410082,40.5319869655108,"[""TOWERS""]",[841],[],{},[],SILOS,288.35,1,1,"[{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":288.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55470740428896,40.53283089295858,"[""TOWERS""]",[839],[],{},[],SILOS,359.82,1,1,"[{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":359.82,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.55557208220415,40.533908664364674,"[""TOWERS""]",[842],[],{},[],SILOS,491.0,2,2,"[{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":491.0,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513882,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":952,""native_scale"":50000,""lon"":141.55808982083965,""lat"":40.54033426236749,""text"":""KABU SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":745.5,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.57267744590357,40.5397649304665,"[""RTPBCN""]",[913],[],{},[],SAME KADO,92.49,4,4,"[{""feature_id"":513894,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":964,""native_scale"":50000,""lon"":141.5729622809815,""lat"":40.540568093710775,""text"":""SAME KADO"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":92.49,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513886,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":956,""native_scale"":50000,""lon"":141.57202639429678,""lat"":40.5385550841112,""text"":""MONOMIWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":145.34,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513900,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":970,""native_scale"":50000,""lon"":141.57416265738146,""lat"":40.5442127071797,""text"":""TODO SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":510.25,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513892,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":962,""native_scale"":50000,""lon"":141.5659329581648,""lat"":40.54184906832527,""text"":""O SAKI"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":615.24,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,,141.57687367696272,40.54005976366212,"[""BCNSPP""]",[859],[],{},[],SAME KADO,335.32,3,3,"[{""feature_id"":513894,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":964,""native_scale"":50000,""lon"":141.5729622809815,""lat"":40.540568093710775,""text"":""SAME KADO"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":335.32,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513886,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":956,""native_scale"":50000,""lon"":141.57202639429678,""lat"":40.5385550841112,""text"":""MONOMIWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":442.47,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513900,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":970,""native_scale"":50000,""lon"":141.57416265738146,""lat"":40.5442127071797,""text"":""TODO SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":515.49,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,992,141.51457109000057,40.552446668497204,"[""TOWERS"",""LIGHTS""]","[831,864]",[],"{""831"":{""_cm93_relation20_raw"":992},""864"":{""_cm93_relation20_raw"":992}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,993,141.55525672908215,40.53632341943859,"[""TOWERS"",""LIGHTS""]","[833,870]",[],"{""833"":{""_cm93_relation20_raw"":993},""870"":{""_cm93_relation20_raw"":993}}",[],KABU SH.,506.18,3,3,"[{""feature_id"":513882,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":952,""native_scale"":50000,""lon"":141.55808982083965,""lat"":40.54033426236749,""text"":""KABU SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":506.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513887,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":957,""native_scale"":50000,""lon"":141.54777472194513,""lat"":40.538041655314935,""text"":""N. BREAKWATER"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":660.51,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":683.26,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,994,141.54818162919935,40.53947009597325,"[""TOWERS"",""LIGHTS""]","[830,871]",[],"{""830"":{""_cm93_relation20_raw"":994},""871"":{""_cm93_relation20_raw"":994}}",[],N. BREAKWATER,162.51,2,2,"[{""feature_id"":513887,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":957,""native_scale"":50000,""lon"":141.54777472194513,""lat"":40.538041655314935,""text"":""N. BREAKWATER"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":162.51,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513883,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":953,""native_scale"":50000,""lon"":141.55228630612632,""lat"":40.54426862020725,""text"":""KO NE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":636.4,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,995,141.53501309318457,40.562163473376586,"[""TOWERS"",""LIGHTS""]","[834,873]",[],"{""834"":{""_cm93_relation20_raw"":995},""873"":{""_cm93_relation20_raw"":995}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,996,141.57615650292712,40.539856430562644,"[""TOWERS"",""LIGHTS""]","[832,865]",[],"{""832"":{""_cm93_relation20_raw"":996},""865"":{""_cm93_relation20_raw"":996}}",[],SAME KADO,281.28,3,3,"[{""feature_id"":513894,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":964,""native_scale"":50000,""lon"":141.5729622809815,""lat"":40.540568093710775,""text"":""SAME KADO"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":281.28,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513886,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":956,""native_scale"":50000,""lon"":141.57202639429678,""lat"":40.5385550841112,""text"":""MONOMIWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":377.82,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513900,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":970,""native_scale"":50000,""lon"":141.57416265738146,""lat"":40.5442127071797,""text"":""TODO SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":512.86,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,997,141.5340263430931,40.538229743548484,"[""TOWERS"",""LIGHTS""]","[828,872]",[],"{""828"":{""_cm93_relation20_raw"":997},""872"":{""_cm93_relation20_raw"":997}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,998,141.56775895446813,40.5424742970387,"[""TOWERS"",""LIGHTS"",""LIGHTS""]","[829,874,883]",[],"{""829"":{""_cm93_relation20_raw"":998},""874"":{""_cm93_relation20_raw"":998},""883"":{""_cm93_relation20_raw"":998}}",[],O SAKI,169.24,7,7,"[{""feature_id"":513892,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":962,""native_scale"":50000,""lon"":141.5659329581648,""lat"":40.54184906832527,""text"":""O SAKI"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":169.24,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513878,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":948,""native_scale"":50000,""lon"":141.56686884484952,""lat"":40.54589516057982,""text"":""HINODE IWA(ILLUM)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":387.75,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513894,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":964,""native_scale"":50000,""lon"":141.5729622809815,""lat"":40.540568093710775,""text"":""SAME KADO"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":488.11,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513893,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":963,""native_scale"":50000,""lon"":141.5689796762308,""lat"":40.54747083389779,""text"":""OGOMUNE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":565.08,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513886,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":956,""native_scale"":50000,""lon"":141.57202639429678,""lat"":40.5385550841112,""text"":""MONOMIWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":565.65,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513900,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":970,""native_scale"":50000,""lon"":141.57416265738146,""lat"":40.5442127071797,""text"":""TODO SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":574.6,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513881,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":951,""native_scale"":50000,""lon"":141.57125835685446,""lat"":40.54915320545376,""text"":""KABAYAMA NE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":799.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,999,141.5684761285037,40.56065929040829,"[""BOYSPP"",""LIGHTS""]","[860,896]",[],"{""860"":{""_cm93_relation20_raw"":999},""896"":{""_cm93_relation20_raw"":999}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1000,141.51750082223097,40.5455495240557,"[""BOYSPP"",""LIGHTS""]","[861,897]",[],"{""861"":{""_cm93_relation20_raw"":1000},""897"":{""_cm93_relation20_raw"":1000}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1001,141.52584750728323,40.53372564780069,"[""LIGHTS"",""_extgn""]","[879,977]",[],"{""879"":{""_cm93_relation20_raw"":1001},""977"":{""_cm93_relation20_raw"":1001}}",[],TANKS,725.86,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":725.86,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1002,141.52560844927135,40.533562965990825,"[""LIGHTS"",""_extgn""]","[875,975]",[],"{""875"":{""_cm93_relation20_raw"":1002},""975"":{""_cm93_relation20_raw"":1002}}",[],TANKS,701.19,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":701.19,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1003,141.52294320675622,40.530431264167966,"[""LIGHTS"",""_extgn""]","[881,986]",[],"{""881"":{""_cm93_relation20_raw"":1003},""986"":{""_cm93_relation20_raw"":1003}}",[],TATE HANA,446.92,3,3,"[{""feature_id"":513899,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":969,""native_scale"":50000,""lon"":141.52025761887836,""lat"":40.526968936454345,""text"":""TATE HANA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":446.92,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":468.68,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513888,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":958,""native_scale"":50000,""lon"":141.52083237537494,""lat"":40.52605375386633,""text"":""NIIDA KAWA"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":518.42,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1004,141.54681340355705,40.537767147215504,"[""BCNLAT"",""LIGHTS""]","[852,869]",[],"{""852"":{""_cm93_relation20_raw"":1004},""869"":{""_cm93_relation20_raw"":1004}}",[],N. BREAKWATER,86.78,1,1,"[{""feature_id"":513887,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":957,""native_scale"":50000,""lon"":141.54777472194513,""lat"":40.538041655314935,""text"":""N. BREAKWATER"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":86.78,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1005,141.5349622297778,40.56547154065089,"[""LIGHTS"",""_extgn""]","[895,989]",[],"{""895"":{""_cm93_relation20_raw"":1005},""989"":{""_cm93_relation20_raw"":1005}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1006,141.53273441256093,40.53599298441033,"[""LIGHTS"",""_extgn""]","[885,982]",[],"{""885"":{""_cm93_relation20_raw"":1006},""982"":{""_cm93_relation20_raw"":1006}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1007,141.5524745007314,40.53454921840199,"[""BCNLAT"",""LIGHTS""]","[856,866]",[],"{""856"":{""_cm93_relation20_raw"":1007},""866"":{""_cm93_relation20_raw"":1007}}",[],SILOS,407.77,3,3,"[{""feature_id"":513896,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":966,""native_scale"":50000,""lon"":141.55118257019924,""lat"":40.531015927405434,""text"":""SILOS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":407.77,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513887,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":957,""native_scale"":50000,""lon"":141.54777472194513,""lat"":40.538041655314935,""text"":""N. BREAKWATER"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":555.47,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513882,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":952,""native_scale"":50000,""lon"":141.55808982083965,""lat"":40.54033426236749,""text"":""KABU SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":799.36,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1008,141.52035425935122,40.53766039376199,"[""BCNLAT"",""LIGHTS""]","[855,867]",[],"{""855"":{""_cm93_relation20_raw"":1008},""867"":{""_cm93_relation20_raw"":1008}}",[],TANKS,697.1,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":697.1,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1009,141.52412323779345,40.545107310019546,"[""LIGHTS"",""_extgn""]","[886,974]",[],"{""886"":{""_cm93_relation20_raw"":1009},""974"":{""_cm93_relation20_raw"":1009}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1010,141.5310508337966,40.54428386920667,"[""LIGHTS"",""_extgn""]","[888,978]",[],"{""888"":{""_cm93_relation20_raw"":1010},""978"":{""_cm93_relation20_raw"":1010}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1011,141.5495244231383,40.54752166145216,"[""LIGHTS"",""_extgn""]","[892,972]",[],"{""892"":{""_cm93_relation20_raw"":1011},""972"":{""_cm93_relation20_raw"":1011}}",[],KO NE,430.47,1,1,"[{""feature_id"":513883,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":953,""native_scale"":50000,""lon"":141.55228630612632,""lat"":40.54426862020725,""text"":""KO NE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":430.47,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1012,141.51802980166147,40.54034951226258,"[""LIGHTS"",""_extgn""]","[894,976]",[],"{""894"":{""_cm93_relation20_raw"":1012},""976"":{""_cm93_relation20_raw"":1012}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1013,141.53316675151854,40.53632341943859,"[""BCNLAT"",""LIGHTS""]","[853,868]",[],"{""853"":{""_cm93_relation20_raw"":1013},""868"":{""_cm93_relation20_raw"":1013}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1014,141.52822282837974,40.54622554676639,"[""LIGHTS"",""_extgn""]","[891,983]",[],"{""891"":{""_cm93_relation20_raw"":1014},""983"":{""_cm93_relation20_raw"":1014}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1015,141.52565422633748,40.53388832921558,"[""LIGHTS"",""_extgn""]","[880,987]",[],"{""880"":{""_cm93_relation20_raw"":1015},""987"":{""_cm93_relation20_raw"":1015}}",[],TANKS,716.18,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":716.18,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1016,141.52510490154427,40.53350704402745,"[""LIGHTS"",""_extgn""]","[878,990]",[],"{""878"":{""_cm93_relation20_raw"":1016},""990"":{""_cm93_relation20_raw"":1016}}",[],TANKS,658.69,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":658.69,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1017,141.54959563190778,40.54994100842045,"[""LIGHTS"",""_extgn""]","[889,981]",[],"{""889"":{""_cm93_relation20_raw"":1017},""981"":{""_cm93_relation20_raw"":1017}}",[],KO NE,670.46,1,1,"[{""feature_id"":513883,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":953,""native_scale"":50000,""lon"":141.55228630612632,""lat"":40.54426862020725,""text"":""KO NE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":670.46,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1018,141.5280092020713,40.558667212294104,"[""BCNLAT"",""LIGHTS""]","[854,863]",[],"{""854"":{""_cm93_relation20_raw"":1018},""863"":{""_cm93_relation20_raw"":1018}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1019,141.54412781567916,40.549463245146605,"[""LIGHTS"",""_extgn""]","[890,979]",[],"{""890"":{""_cm93_relation20_raw"":1019},""979"":{""_cm93_relation20_raw"":1019}}",[],,,0,0,[]
|
||||
50000,351,03900420\E\03910424.E,1020,141.55782533112443,40.545163222300296,"[""LIGHTS"",""_extgn""]","[893,988]",[],"{""893"":{""_cm93_relation20_raw"":1020},""988"":{""_cm93_relation20_raw"":1020}}",[],KO NE,478.49,4,4,"[{""feature_id"":513883,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":953,""native_scale"":50000,""lon"":141.55228630612632,""lat"":40.54426862020725,""text"":""KO NE"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":478.49,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513882,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":952,""native_scale"":50000,""lon"":141.55808982083965,""lat"":40.54033426236749,""text"":""KABU SH."",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":537.42,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513878,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":948,""native_scale"":50000,""lon"":141.56686884484952,""lat"":40.54589516057982,""text"":""HINODE IWA(ILLUM)"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":768.46,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513892,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":962,""native_scale"":50000,""lon"":141.5659329581648,""lat"":40.54184906832527,""text"":""O SAKI"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":777.91,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1021,141.52536939125952,40.533395199960694,"[""LIGHTS"",""_extgn""]","[877,980]",[],"{""877"":{""_cm93_relation20_raw"":1021},""980"":{""_cm93_relation20_raw"":1021}}",[],TANKS,676.55,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":676.55,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1022,141.5254151683256,40.53372564780069,"[""LIGHTS"",""_extgn""]","[876,985]",[],"{""876"":{""_cm93_relation20_raw"":1022},""985"":{""_cm93_relation20_raw"":1022}}",[],TANKS,691.16,1,1,"[{""feature_id"":513898,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":968,""native_scale"":50000,""lon"":141.51766867147336,""lat"":40.53173276841354,""text"":""TANKS"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":691.16,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1023,141.49825919544693,40.55623293432891,"[""LIGHTS"",""_extgn""]","[884,984]",[],"{""884"":{""_cm93_relation20_raw"":1023},""984"":{""_cm93_relation20_raw"":1023}}",[],No 1 WHARF,257.21,2,2,"[{""feature_id"":513889,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":959,""native_scale"":50000,""lon"":141.4954515353928,""lat"":40.55533848010609,""text"":""No 1 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":257.21,""explicit_relation_overlap"":[],""text_relation_fields"":{}},{""feature_id"":513890,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":960,""native_scale"":50000,""lon"":141.49809134620457,""lat"":40.55028662228105,""text"":""No 2 WHARF"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":661.35,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1024,141.50759263059066,40.53502708806053,"[""LIGHTS"",""_extgn""]","[882,971]",[],"{""882"":{""_cm93_relation20_raw"":1024},""971"":{""_cm93_relation20_raw"":1024}}",[],K A W A R A G I,477.72,1,1,"[{""feature_id"":513880,""cell_id"":351,""source_relative_path"":""03900420\\E\\03910424.E"",""source_record_index"":950,""native_scale"":50000,""lon"":141.5020485192519,""lat"":40.53586589358092,""text"":""K A W A R A G I"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":477.72,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
50000,351,03900420\E\03910424.E,1025,141.52097987925458,40.555318151462146,"[""LIGHTS"",""_extgn""]","[887,973]",[],"{""887"":{""_cm93_relation20_raw"":1025},""973"":{""_cm93_relation20_raw"":1025}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,,141.65804316559033,40.467367860055134,"[""LIGHTS""]",[4877],[],{},[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6486,141.53481130881366,40.56513638820441,"[""TOWERS"",""LIGHTS""]","[4300,4741]",[],"{""4300"":{""_cm93_relation20_raw"":6486},""4741"":{""_cm93_relation20_raw"":6486}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6501,141.43965605140164,40.68046315791786,"[""TOWERS"",""LIGHTS""]","[4325,4781]",[],"{""4325"":{""_cm93_relation20_raw"":6501},""4781"":{""_cm93_relation20_raw"":6501}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6510,141.6269147619469,40.49949414054503,"[""TOWERS"",""LIGHTS""]","[4291,4747]",[],"{""4291"":{""_cm93_relation20_raw"":6510},""4747"":{""_cm93_relation20_raw"":6510}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6521,141.5676487228532,40.541909757522724,"[""TOWERS"",""LIGHTS""]","[4246,4842]",[],"{""4246"":{""_cm93_relation20_raw"":6521},""4842"":{""_cm93_relation20_raw"":6521}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6528,141.67305804264188,40.454613089799984,"[""TOWERS"",""LIGHTS""]","[4304,4777]",[],"{""4304"":{""_cm93_relation20_raw"":6528},""4777"":{""_cm93_relation20_raw"":6528}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6548,141.53481130881366,40.56201499793302,"[""TOWERS"",""LIGHTS""]","[4364,4830]",[],"{""4364"":{""_cm93_relation20_raw"":6548},""4830"":{""_cm93_relation20_raw"":6548}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6558,141.51424214797476,40.55215044794532,"[""TOWERS"",""LIGHTS""]","[4259,4598]",[],"{""4259"":{""_cm93_relation20_raw"":6558},""4598"":{""_cm93_relation20_raw"":6558}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6567,141.5765599913472,40.53922443934611,"[""TOWERS"",""LIGHTS""]","[4274,4619]",[],"{""4274"":{""_cm93_relation20_raw"":6567},""4619"":{""_cm93_relation20_raw"":6567}}",[],Same Kado,528.84,1,1,"[{""feature_id"":361674,""cell_id"":40,""source_relative_path"":""03900420\\C\\03900420.C"",""source_record_index"":6002,""native_scale"":200000,""lon"":141.58071044516635,""lat"":40.54278402393275,""text"":""Same Kado"",""prefix"":[0,12,0],""same_cell"":true,""distance_m"":528.84,""explicit_relation_overlap"":[],""text_relation_fields"":{}}]"
|
||||
200000,40,03900420\C\03900420.C,6602,141.52785319505807,40.55864373294613,"[""BCNLAT"",""LIGHTS""]","[4439,4737]",[],"{""4439"":{""_cm93_relation20_raw"":6602},""4737"":{""_cm93_relation20_raw"":6602}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6620,141.3592715266989,40.68775404209214,"[""BCNSPP"",""LIGHTS""]","[4540,4584]",[],"{""4540"":{""_cm93_relation20_raw"":6620},""4584"":{""_cm93_relation20_raw"":6620}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6632,141.54707956201432,40.53735089780069,"[""BCNLAT"",""LIGHTS""]","[4422,4714]",[],"{""4422"":{""_cm93_relation20_raw"":6632},""4714"":{""_cm93_relation20_raw"":6632}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6640,141.6516343766049,40.472369069669675,"[""BCNLAT"",""LIGHTS""]","[4460,4646]",[],"{""4460"":{""_cm93_relation20_raw"":6640},""4646"":{""_cm93_relation20_raw"":6640}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6657,141.5203457565323,40.53735089780069,"[""BCNLAT"",""LIGHTS""]","[4492,4673]",[],"{""4492"":{""_cm93_relation20_raw"":6657},""4673"":{""_cm93_relation20_raw"":6657}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6663,141.53426198404347,40.53797541747083,"[""BCNSPP"",""LIGHTS""]","[4538,4784]",[],"{""4538"":{""_cm93_relation20_raw"":6663},""4784"":{""_cm93_relation20_raw"":6663}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6691,141.55232866537378,40.533978390984394,"[""BCNLAT"",""LIGHTS""]","[4500,4670]",[],"{""4500"":{""_cm93_relation20_raw"":6691},""4670"":{""_cm93_relation20_raw"":6691}}",[],,,0,0,[]
|
||||
200000,40,03900420\C\03900420.C,6720,141.47084549113066,40.54653075073066,"[""BCNSPP"",""LIGHTS""]","[4539,4839]",[],"{""4539"":{""_cm93_relation20_raw"":6720},""4839"":{""_cm93_relation20_raw"":6720}}",[],,,0,0,[]
|
||||
|
1
cm95_nav_text_relation_fields_v2.csv
Normal file
1
cm95_nav_text_relation_fields_v2.csv
Normal file
@@ -0,0 +1 @@
|
||||
native_scale,field_name,occurrence_count
|
||||
|
1008
cm95_navsea_selected_aoi_mapping_audit_v2.py
Normal file
1008
cm95_navsea_selected_aoi_mapping_audit_v2.py
Normal file
File diff suppressed because it is too large
Load Diff
41
cm95_pbf_aoi_candidates_v1.csv
Normal file
41
cm95_pbf_aoi_candidates_v1.csv
Normal file
@@ -0,0 +1,41 @@
|
||||
rank,score,z,x,y,tile_path,center_lon,center_lat,min_lon,min_lat,max_lon,max_lat,feature_count,detail_feature_count_le_50000,required_groups_present,land_count,depth_count,contour_count,navmark_light_count,hazard_count,point_count,line_count,area_count,top_classes,native_scales
|
||||
1,6121875,10,887,375,10/887/375.pbf,132.01171875,43.19703272708128,131.8359375,43.06888777416962,132.1875,43.32517767999295,4475,3674,5,818,366,390,191,856,1373,2039,1050,"[{""class"": ""COALNE"", ""count"": 457}, {""class"": ""UWTROC"", ""count"": 440}, {""class"": ""DEPCNT"", ""count"": 390}, {""class"": ""DEPARE"", ""count"": 366}, {""class"": ""SLCONS"", ""count"": 284}, {""class"": ""RIVERS"", ""count"": 229}, {""class"": ""_texto"", ""count"": 169}, {""class"": ""SBDARE"", ""count"": 164}, {""class"": ""OBSTRN"", ""count"": 158}, {""class"": ""LNDELV"", ""count"": 132}, {""class"": ""SLOTOP"", ""count"": 132}, {""class"": ""ROADPT"", ""count"": 130}, {""class"": ""RIVBNK"", ""count"": 103}, {""class"": ""BRTFAC"", ""count"": 94}, {""class"": ""LNDARE"", ""count"": 77}]","[{""scale"": 7500, ""count"": 536}, {""scale"": 20000, ""count"": 1418}, {""scale"": 50000, ""count"": 1720}, {""scale"": 100000, ""count"": 650}, {""scale"": 200000, ""count"": 130}, {""scale"": 1000000, ""count"": 20}, {""scale"": 3000000, ""count"": 1}]"
|
||||
2,6104723,10,890,377,10/890/377.pbf,133.06640625,42.682301017026845,132.890625,42.553080288955805,133.2421875,42.811521745097885,4323,3504,5,529,401,378,283,1493,2018,1251,1043,"[{""class"": ""UWTROC"", ""count"": 1140}, {""class"": ""DEPARE"", ""count"": 401}, {""class"": ""DEPCNT"", ""count"": 378}, {""class"": ""COALNE"", ""count"": 350}, {""class"": ""SBDARE"", ""count"": 203}, {""class"": ""SLOTOP"", ""count"": 137}, {""class"": ""LIGHTS"", ""count"": 132}, {""class"": ""SLCONS"", ""count"": 109}, {""class"": ""_texto"", ""count"": 104}, {""class"": ""SLOGRD"", ""count"": 98}, {""class"": ""OBSTRN"", ""count"": 81}, {""class"": ""BUISGL"", ""count"": 72}, {""class"": ""LNDARE"", ""count"": 70}, {""class"": ""ROADPT"", ""count"": 62}, {""class"": ""TOPMAR"", ""count"": 60}]","[{""scale"": 7500, ""count"": 881}, {""scale"": 20000, ""count"": 1443}, {""scale"": 50000, ""count"": 1180}, {""scale"": 100000, ""count"": 668}, {""scale"": 200000, ""count"": 112}, {""scale"": 1000000, ""count"": 39}]"
|
||||
3,6076644,10,914,385,10/914/385.pbf,141.50390625,40.580451442943264,141.328125,40.44694705960049,141.6796875,40.71395582628604,3544,3231,5,647,401,441,132,1062,1632,952,956,"[{""class"": ""WRECKS"", ""count"": 481}, {""class"": ""DEPCNT"", ""count"": 441}, {""class"": ""DEPARE"", ""count"": 401}, {""class"": ""SLCONS"", ""count"": 328}, {""class"": ""SBDARE"", ""count"": 296}, {""class"": ""UWTROC"", ""count"": 176}, {""class"": ""COALNE"", ""count"": 165}, {""class"": ""LNDARE"", ""count"": 154}, {""class"": ""_texto"", ""count"": 113}, {""class"": ""LIGHTS"", ""count"": 96}, {""class"": ""BRTFAC"", ""count"": 89}, {""class"": ""ZEMCNT"", ""count"": 83}, {""class"": ""OBSTRN"", ""count"": 76}, {""class"": ""ITDARE"", ""count"": 68}, {""class"": ""TNKCON"", ""count"": 57}]","[{""scale"": 20000, ""count"": 2239}, {""scale"": 50000, ""count"": 992}, {""scale"": 100000, ""count"": 1}, {""scale"": 200000, ""count"": 278}, {""scale"": 1000000, ""count"": 33}, {""scale"": 3000000, ""count"": 1}]"
|
||||
4,6023900,10,884,377,10/884/377.pbf,130.95703125,42.682301017026845,130.78125,42.553080288955805,131.1328125,42.811521745097885,3900,2700,5,588,244,227,85,1252,1616,1359,912,"[{""class"": ""UWTROC"", ""count"": 953}, {""class"": ""COALNE"", ""count"": 497}, {""class"": ""DEPARE"", ""count"": 244}, {""class"": ""DEPCNT"", ""count"": 227}, {""class"": ""SBDARE"", ""count"": 197}, {""class"": ""SLOTOP"", ""count"": 183}, {""class"": ""RIVERS"", ""count"": 147}, {""class"": ""LNDRGN"", ""count"": 138}, {""class"": ""_texto"", ""count"": 123}, {""class"": ""SLOGRD"", ""count"": 114}, {""class"": ""WEDKLP"", ""count"": 111}, {""class"": ""RIVBNK"", ""count"": 107}, {""class"": ""ROADPT"", ""count"": 76}, {""class"": ""LNDELV"", ""count"": 75}, {""class"": ""LNDARE"", ""count"": 57}]","[{""scale"": 7500, ""count"": 380}, {""scale"": 20000, ""count"": 2320}, {""scale"": 100000, ""count"": 1051}, {""scale"": 200000, ""count"": 125}, {""scale"": 1000000, ""count"": 24}]"
|
||||
5,5997990,10,911,351,10/911/351.pbf,140.44921875,49.03773445996431,140.2734375,48.92249926375824,140.625,49.15296965617039,3190,2448,5,425,194,182,171,1106,1506,944,730,"[{""class"": ""UWTROC"", ""count"": 871}, {""class"": ""COALNE"", ""count"": 343}, {""class"": ""DEPARE"", ""count"": 194}, {""class"": ""DEPCNT"", ""count"": 182}, {""class"": ""SLOTOP"", ""count"": 148}, {""class"": ""_texto"", ""count"": 146}, {""class"": ""SBDARE"", ""count"": 116}, {""class"": ""SLOGRD"", ""count"": 85}, {""class"": ""BUAARE"", ""count"": 76}, {""class"": ""BCNSPP"", ""count"": 70}, {""class"": ""OBSTRN"", ""count"": 57}, {""class"": ""LNDELV"", ""count"": 55}, {""class"": ""RIVERS"", ""count"": 55}, {""class"": ""SEAARE"", ""count"": 52}, {""class"": ""LIGHTS"", ""count"": 51}]","[{""scale"": 20000, ""count"": 1220}, {""scale"": 50000, ""count"": 1228}, {""scale"": 100000, ""count"": 534}, {""scale"": 200000, ""count"": 176}, {""scale"": 1000000, ""count"": 31}, {""scale"": 3000000, ""count"": 1}]"
|
||||
6,5954428,10,912,381,10/912/381.pbf,140.80078125,41.6399444886017,140.625,41.50857729743934,140.9765625,41.77131167976407,2228,2022,5,408,160,190,78,622,907,732,581,"[{""class"": ""UWTROC"", ""count"": 326}, {""class"": ""SBDARE"", ""count"": 216}, {""class"": ""SLCONS"", ""count"": 204}, {""class"": ""ZEMCNT"", ""count"": 198}, {""class"": ""ITDARE"", ""count"": 195}, {""class"": ""DEPCNT"", ""count"": 190}, {""class"": ""DEPARE"", ""count"": 160}, {""class"": ""COALNE"", ""count"": 112}, {""class"": ""LNDARE"", ""count"": 92}, {""class"": ""_texto"", ""count"": 79}, {""class"": ""TOWERS"", ""count"": 46}, {""class"": ""OBSTRN"", ""count"": 40}, {""class"": ""LIGHTS"", ""count"": 38}, {""class"": ""BUISGL"", ""count"": 35}, {""class"": ""BUAARE"", ""count"": 32}]","[{""scale"": 20000, ""count"": 903}, {""scale"": 50000, ""count"": 1119}, {""scale"": 200000, ""count"": 189}, {""scale"": 1000000, ""count"": 17}]"
|
||||
7,5951203,10,856,384,10/856/384.pbf,121.11328125,40.84692694795308,120.9375,40.71395582628604,121.2890625,40.97989806962013,2303,1989,5,454,294,299,354,348,746,711,840,"[{""class"": ""SLCONS"", ""count"": 347}, {""class"": ""DEPCNT"", ""count"": 299}, {""class"": ""DEPARE"", ""count"": 294}, {""class"": ""SBDARE"", ""count"": 239}, {""class"": ""LIGHTS"", ""count"": 134}, {""class"": ""TOPMAR"", ""count"": 102}, {""class"": ""ITDARE"", ""count"": 92}, {""class"": ""ZEMCNT"", ""count"": 73}, {""class"": ""BOYLAT"", ""count"": 67}, {""class"": ""UWTROC"", ""count"": 63}, {""class"": ""$LINES"", ""count"": 60}, {""class"": ""COALNE"", ""count"": 58}, {""class"": ""_texto"", ""count"": 50}, {""class"": ""LNDARE"", ""count"": 49}, {""class"": ""LAKSHR"", ""count"": 41}]","[{""scale"": 20000, ""count"": 1042}, {""scale"": 50000, ""count"": 947}, {""scale"": 100000, ""count"": 206}, {""scale"": 200000, ""count"": 93}, {""scale"": 1000000, ""count"": 14}, {""scale"": 3000000, ""count"": 1}]"
|
||||
8,5926940,10,887,376,10/887/376.pbf,132.01171875,42.94020475963375,131.8359375,42.811521745097885,132.1875,43.06888777416962,2340,1746,5,501,134,209,133,767,1089,714,534,"[{""class"": ""UWTROC"", ""count"": 544}, {""class"": ""COALNE"", ""count"": 303}, {""class"": ""DEPCNT"", ""count"": 209}, {""class"": ""LNDARE"", ""count"": 160}, {""class"": ""DEPARE"", ""count"": 134}, {""class"": ""SBDARE"", ""count"": 128}, {""class"": ""_texto"", ""count"": 102}, {""class"": ""OBSTRN"", ""count"": 59}, {""class"": ""LIGHTS"", ""count"": 49}, {""class"": ""SLOTOP"", ""count"": 40}, {""class"": ""SLCONS"", ""count"": 38}, {""class"": ""RESARE"", ""count"": 35}, {""class"": ""BCNSPP"", ""count"": 31}, {""class"": ""SLOGRD"", ""count"": 30}, {""class"": ""SEAARE"", ""count"": 28}]","[{""scale"": 7500, ""count"": 1}, {""scale"": 20000, ""count"": 718}, {""scale"": 50000, ""count"": 1027}, {""scale"": 100000, ""count"": 474}, {""scale"": 200000, ""count"": 78}, {""scale"": 1000000, ""count"": 38}, {""scale"": 3000000, ""count"": 2}, {""scale"": 20000000, ""count"": 2}]"
|
||||
9,5925129,10,892,376,10/892/376.pbf,133.76953125,42.94020475963375,133.59375,42.811521745097885,133.9453125,43.06888777416962,2329,1728,5,393,73,67,31,734,865,936,522,"[{""class"": ""UWTROC"", ""count"": 566}, {""class"": ""COALNE"", ""count"": 326}, {""class"": ""RIVERS"", ""count"": 207}, {""class"": ""RIVBNK"", ""count"": 120}, {""class"": ""SBDARE"", ""count"": 119}, {""class"": ""SLOTOP"", ""count"": 93}, {""class"": ""LNDRGN"", ""count"": 88}, {""class"": ""ZEMCNT"", ""count"": 81}, {""class"": ""DEPARE"", ""count"": 73}, {""class"": ""SLOGRD"", ""count"": 72}, {""class"": ""ITDARE"", ""count"": 69}, {""class"": ""DEPCNT"", ""count"": 67}, {""class"": ""LNDELV"", ""count"": 60}, {""class"": ""LNDARE"", ""count"": 55}, {""class"": ""_texto"", ""count"": 54}]","[{""scale"": 20000, ""count"": 1728}, {""scale"": 100000, ""count"": 466}, {""scale"": 200000, ""count"": 114}, {""scale"": 1000000, ""count"": 21}]"
|
||||
10,5913497,10,885,376,10/885/376.pbf,131.30859375,42.94020475963375,131.1328125,42.811521745097885,131.484375,43.06888777416962,2397,1611,5,357,88,91,50,678,887,1039,471,"[{""class"": ""UWTROC"", ""count"": 559}, {""class"": ""COALNE"", ""count"": 278}, {""class"": ""RIVERS"", ""count"": 240}, {""class"": ""SLOTOP"", ""count"": 119}, {""class"": ""DEPCNT"", ""count"": 91}, {""class"": ""DEPARE"", ""count"": 88}, {""class"": ""RIVBNK"", ""count"": 84}, {""class"": ""SLOGRD"", ""count"": 77}, {""class"": ""SBDARE"", ""count"": 74}, {""class"": ""ROADPT"", ""count"": 73}, {""class"": ""LAKSHR"", ""count"": 64}, {""class"": ""LNDELV"", ""count"": 60}, {""class"": ""VEGARE"", ""count"": 60}, {""class"": ""_texto"", ""count"": 59}, {""class"": ""LNDARE"", ""count"": 50}]","[{""scale"": 20000, ""count"": 1}, {""scale"": 50000, ""count"": 1610}, {""scale"": 100000, ""count"": 643}, {""scale"": 200000, ""count"": 110}, {""scale"": 1000000, ""count"": 33}]"
|
||||
11,5913112,10,914,377,10/914/377.pbf,141.50390625,42.682301017026845,141.328125,42.553080288955805,141.6796875,42.811521745097885,1712,1614,5,430,162,181,101,232,713,485,510,"[{""class"": ""SLCONS"", ""count"": 277}, {""class"": ""SBDARE"", ""count"": 188}, {""class"": ""DEPCNT"", ""count"": 181}, {""class"": ""DEPARE"", ""count"": 162}, {""class"": ""_texto"", ""count"": 108}, {""class"": ""LNDARE"", ""count"": 95}, {""class"": ""BRTFAC"", ""count"": 79}, {""class"": ""PRDINS"", ""count"": 59}, {""class"": ""COALNE"", ""count"": 58}, {""class"": ""LIGHTS"", ""count"": 57}, {""class"": ""ITDARE"", ""count"": 41}, {""class"": ""TNKCON"", ""count"": 35}, {""class"": ""BUAARE"", ""count"": 33}, {""class"": ""ZEMCNT"", ""count"": 32}, {""class"": ""CHIMNY"", ""count"": 24}]","[{""scale"": 20000, ""count"": 971}, {""scale"": 50000, ""count"": 643}, {""scale"": 200000, ""count"": 84}, {""scale"": 1000000, ""count"": 14}]"
|
||||
12,5909693,10,912,384,10/912/384.pbf,140.80078125,40.84692694795308,140.625,40.71395582628604,140.9765625,40.97989806962013,1893,1578,5,490,154,166,115,282,656,590,643,"[{""class"": ""SLCONS"", ""count"": 400}, {""class"": ""SBDARE"", ""count"": 229}, {""class"": ""DEPCNT"", ""count"": 166}, {""class"": ""DEPARE"", ""count"": 154}, {""class"": ""RIVBNK"", ""count"": 92}, {""class"": ""_texto"", ""count"": 92}, {""class"": ""ITDARE"", ""count"": 65}, {""class"": ""LIGHTS"", ""count"": 63}, {""class"": ""ZEMCNT"", ""count"": 63}, {""class"": ""BUISGL"", ""count"": 58}, {""class"": ""LNDARE"", ""count"": 57}, {""class"": ""BRIDGE"", ""count"": 56}, {""class"": ""BUAARE"", ""count"": 40}, {""class"": ""COALNE"", ""count"": 33}, {""class"": ""TOWERS"", ""count"": 26}]","[{""scale"": 20000, ""count"": 646}, {""scale"": 50000, ""count"": 932}, {""scale"": 100000, ""count"": 98}, {""scale"": 200000, ""count"": 197}, {""scale"": 1000000, ""count"": 15}, {""scale"": 3000000, ""count"": 3}, {""scale"": 20000000, ""count"": 2}]"
|
||||
13,5907373,10,896,373,10/896/373.pbf,135.17578125,43.70745881892233,135.0,43.580390855607845,135.3515625,43.83452678223683,2073,1553,5,322,98,81,46,473,653,874,542,"[{""class"": ""UWTROC"", ""count"": 334}, {""class"": ""COALNE"", ""count"": 254}, {""class"": ""RIVERS"", ""count"": 222}, {""class"": ""LNDRGN"", ""count"": 174}, {""class"": ""RIVBNK"", ""count"": 171}, {""class"": ""SBDARE"", ""count"": 100}, {""class"": ""DEPARE"", ""count"": 98}, {""class"": ""DEPCNT"", ""count"": 81}, {""class"": ""LNDELV"", ""count"": 65}, {""class"": ""LNDARE"", ""count"": 64}, {""class"": ""SLOTOP"", ""count"": 63}, {""class"": ""SLOGRD"", ""count"": 52}, {""class"": ""VEGARE"", ""count"": 46}, {""class"": ""LAKSHR"", ""count"": 42}, {""class"": ""_texto"", ""count"": 38}]","[{""scale"": 20000, ""count"": 1553}, {""scale"": 100000, ""count"": 430}, {""scale"": 200000, ""count"": 65}, {""scale"": 1000000, ""count"": 24}, {""scale"": 3000000, ""count"": 1}]"
|
||||
14,5906071,10,859,385,10/859/385.pbf,122.16796875,40.580451442943264,121.9921875,40.44694705960049,122.34375,40.71395582628604,2171,1539,5,471,224,226,417,112,625,791,747,"[{""class"": ""SLCONS"", ""count"": 342}, {""class"": ""DEPCNT"", ""count"": 226}, {""class"": ""DEPARE"", ""count"": 224}, {""class"": ""LIGHTS"", ""count"": 146}, {""class"": ""TOPMAR"", ""count"": 133}, {""class"": ""ZEMCNT"", ""count"": 127}, {""class"": ""ITDARE"", ""count"": 103}, {""class"": ""SBDARE"", ""count"": 77}, {""class"": ""BOYLAT"", ""count"": 75}, {""class"": ""COALNE"", ""count"": 67}, {""class"": ""LNDARE"", ""count"": 62}, {""class"": ""_texto"", ""count"": 56}, {""class"": ""BCNSPP"", ""count"": 42}, {""class"": ""LAKSHR"", ""count"": 40}, {""class"": ""LAKARE"", ""count"": 38}]","[{""scale"": 20000, ""count"": 936}, {""scale"": 50000, ""count"": 603}, {""scale"": 100000, ""count"": 554}, {""scale"": 200000, ""count"": 71}, {""scale"": 1000000, ""count"": 6}, {""scale"": 3000000, ""count"": 1}]"
|
||||
15,5905467,10,922,376,10/922/376.pbf,144.31640625,42.94020475963375,144.140625,42.811521745097885,144.4921875,43.06888777416962,2067,1534,5,316,181,188,84,570,930,494,636,"[{""class"": ""SBDARE"", ""count"": 293}, {""class"": ""SLCONS"", ""count"": 228}, {""class"": ""DEPCNT"", ""count"": 188}, {""class"": ""DEPARE"", ""count"": 181}, {""class"": ""UWTROC"", ""count"": 174}, {""class"": ""_texto"", ""count"": 77}, {""class"": ""ITDARE"", ""count"": 74}, {""class"": ""WRECKS"", ""count"": 68}, {""class"": ""ZEMCNT"", ""count"": 60}, {""class"": ""LIGHTS"", ""count"": 57}, {""class"": ""LNDARE"", ""count"": 51}, {""class"": ""BRTFAC"", ""count"": 49}, {""class"": ""BUISGL"", ""count"": 49}, {""class"": ""PRDINS"", ""count"": 47}, {""class"": ""RIVBNK"", ""count"": 39}]","[{""scale"": 20000, ""count"": 1534}, {""scale"": 100000, ""count"": 445}, {""scale"": 200000, ""count"": 84}, {""scale"": 1000000, ""count"": 3}, {""scale"": 3000000, ""count"": 1}]"
|
||||
16,5899347,10,888,376,10/888/376.pbf,132.36328125,42.94020475963375,132.1875,42.811521745097885,132.5390625,43.06888777416962,2747,1466,5,466,125,153,126,973,1295,940,504,"[{""class"": ""UWTROC"", ""count"": 793}, {""class"": ""COALNE"", ""count"": 393}, {""class"": ""DEPCNT"", ""count"": 153}, {""class"": ""SLOTOP"", ""count"": 143}, {""class"": ""DEPARE"", ""count"": 125}, {""class"": ""RIVERS"", ""count"": 125}, {""class"": ""SLOGRD"", ""count"": 116}, {""class"": ""_texto"", ""count"": 116}, {""class"": ""SBDARE"", ""count"": 81}, {""class"": ""LNDELV"", ""count"": 73}, {""class"": ""OBSTRN"", ""count"": 61}, {""class"": ""LIGHTS"", ""count"": 52}, {""class"": ""LNDARE"", ""count"": 49}, {""class"": ""SEAARE"", ""count"": 43}, {""class"": ""BCNSPP"", ""count"": 41}]","[{""scale"": 7500, ""count"": 374}, {""scale"": 50000, ""count"": 1092}, {""scale"": 100000, ""count"": 1056}, {""scale"": 200000, ""count"": 169}, {""scale"": 1000000, ""count"": 54}, {""scale"": 3000000, ""count"": 2}]"
|
||||
17,5898662,10,926,374,10/926/374.pbf,145.72265625,43.452784267800396,145.546875,43.32517767999295,145.8984375,43.580390855607845,2562,1461,5,402,270,313,65,684,837,862,852,"[{""class"": ""UWTROC"", ""count"": 353}, {""class"": ""DEPCNT"", ""count"": 313}, {""class"": ""DEPARE"", ""count"": 270}, {""class"": ""ZEMCNT"", ""count"": 261}, {""class"": ""SBDARE"", ""count"": 228}, {""class"": ""ITDARE"", ""count"": 218}, {""class"": ""COALNE"", ""count"": 168}, {""class"": ""LNDARE"", ""count"": 129}, {""class"": ""_texto"", ""count"": 111}, {""class"": ""SLCONS"", ""count"": 105}, {""class"": ""OBSTRN"", ""count"": 77}, {""class"": ""LIGHTS"", ""count"": 60}, {""class"": ""TOWERS"", ""count"": 31}, {""class"": ""BUAARE"", ""count"": 30}, {""class"": ""$LINES"", ""count"": 24}]","[{""scale"": 20000, ""count"": 522}, {""scale"": 50000, ""count"": 939}, {""scale"": 100000, ""count"": 954}, {""scale"": 200000, ""count"": 133}, {""scale"": 1000000, ""count"": 13}, {""scale"": 3000000, ""count"": 1}]"
|
||||
18,5894691,10,888,375,10/888/375.pbf,132.36328125,43.19703272708128,132.1875,43.06888777416962,132.5390625,43.32517767999295,2091,1426,5,281,61,66,49,695,885,880,321,"[{""class"": ""UWTROC"", ""count"": 565}, {""class"": ""COALNE"", ""count"": 243}, {""class"": ""RIVERS"", ""count"": 209}, {""class"": ""RIVBNK"", ""count"": 113}, {""class"": ""SBDARE"", ""count"": 95}, {""class"": ""SLOTOP"", ""count"": 86}, {""class"": ""LNDELV"", ""count"": 78}, {""class"": ""DEPCNT"", ""count"": 66}, {""class"": ""SLOGRD"", ""count"": 64}, {""class"": ""_texto"", ""count"": 62}, {""class"": ""DEPARE"", ""count"": 61}, {""class"": ""ROADPT"", ""count"": 53}, {""class"": ""RAILWY"", ""count"": 30}, {""class"": ""ZEMCNT"", ""count"": 27}, {""class"": ""LNDRGN"", ""count"": 26}]","[{""scale"": 7500, ""count"": 89}, {""scale"": 50000, ""count"": 1337}, {""scale"": 100000, ""count"": 538}, {""scale"": 200000, ""count"": 101}, {""scale"": 1000000, ""count"": 26}]"
|
||||
19,5886280,10,889,377,10/889/377.pbf,132.71484375,42.682301017026845,132.5390625,42.553080288955805,132.890625,42.811521745097885,1680,1346,5,252,171,169,33,543,653,610,411,"[{""class"": ""UWTROC"", ""count"": 390}, {""class"": ""DEPARE"", ""count"": 171}, {""class"": ""DEPCNT"", ""count"": 169}, {""class"": ""SLCONS"", ""count"": 137}, {""class"": ""COALNE"", ""count"": 102}, {""class"": ""BRTFAC"", ""count"": 95}, {""class"": ""SBDARE"", ""count"": 88}, {""class"": ""_texto"", ""count"": 46}, {""class"": ""OBSTRN"", ""count"": 37}, {""class"": ""SLOGRD"", ""count"": 35}, {""class"": ""SLOTOP"", ""count"": 34}, {""class"": ""ROADPT"", ""count"": 33}, {""class"": ""BUAARE"", ""count"": 27}, {""class"": ""CBLSUB"", ""count"": 25}, {""class"": ""SEAARE"", ""count"": 22}]","[{""scale"": 7500, ""count"": 396}, {""scale"": 20000, ""count"": 425}, {""scale"": 50000, ""count"": 525}, {""scale"": 100000, ""count"": 284}, {""scale"": 200000, ""count"": 32}, {""scale"": 1000000, ""count"": 18}]"
|
||||
20,5884667,10,911,350,10/911/350.pbf,140.44921875,49.26767122158997,140.2734375,49.15296965617039,140.625,49.38237278700955,1867,1328,5,231,75,70,48,509,638,813,410,"[{""class"": ""UWTROC"", ""count"": 367}, {""class"": ""RIVBNK"", ""count"": 258}, {""class"": ""COALNE"", ""count"": 193}, {""class"": ""SBDARE"", ""count"": 119}, {""class"": ""SLOTOP"", ""count"": 119}, {""class"": ""VEGARE"", ""count"": 92}, {""class"": ""DEPARE"", ""count"": 75}, {""class"": ""DEPCNT"", ""count"": 70}, {""class"": ""RIVERS"", ""count"": 65}, {""class"": ""LNDRGN"", ""count"": 61}, {""class"": ""_texto"", ""count"": 53}, {""class"": ""LNDARE"", ""count"": 37}, {""class"": ""ZEMCNT"", ""count"": 37}, {""class"": ""LAKSHR"", ""count"": 33}, {""class"": ""ITDARE"", ""count"": 30}]","[{""scale"": 20000, ""count"": 706}, {""scale"": 50000, ""count"": 622}, {""scale"": 100000, ""count"": 366}, {""scale"": 200000, ""count"": 149}, {""scale"": 1000000, ""count"": 24}]"
|
||||
21,5883660,10,914,372,10/914/372.pbf,141.50390625,43.961055905241,141.328125,43.83452678223683,141.6796875,44.087585028245165,1560,1321,5,362,230,253,54,280,479,559,517,"[{""class"": ""DEPCNT"", ""count"": 253}, {""class"": ""DEPARE"", ""count"": 230}, {""class"": ""SLCONS"", ""count"": 191}, {""class"": ""SBDARE"", ""count"": 188}, {""class"": ""COALNE"", ""count"": 107}, {""class"": ""LNDARE"", ""count"": 64}, {""class"": ""UWTROC"", ""count"": 60}, {""class"": ""_texto"", ""count"": 54}, {""class"": ""ZEMCNT"", ""count"": 52}, {""class"": ""ITDARE"", ""count"": 44}, {""class"": ""LIGHTS"", ""count"": 43}, {""class"": ""TOWERS"", ""count"": 29}, {""class"": ""BUAARE"", ""count"": 23}, {""class"": ""BRTFAC"", ""count"": 22}, {""class"": ""BUISGL"", ""count"": 21}]","[{""scale"": 7500, ""count"": 616}, {""scale"": 20000, ""count"": 705}, {""scale"": 100000, ""count"": 107}, {""scale"": 200000, ""count"": 123}, {""scale"": 1000000, ""count"": 8}, {""scale"": 3000000, ""count"": 1}]"
|
||||
22,5881827,10,910,351,10/910/351.pbf,140.09765625,49.03773445996431,139.921875,48.92249926375824,140.2734375,49.15296965617039,1627,1302,5,280,42,40,37,207,415,737,471,"[{""class"": ""COALNE"", ""count"": 209}, {""class"": ""RIVBNK"", ""count"": 138}, {""class"": ""BUAARE"", ""count"": 111}, {""class"": ""UWTROC"", ""count"": 98}, {""class"": ""SLOTOP"", ""count"": 78}, {""class"": ""RAILWY"", ""count"": 76}, {""class"": ""VEGARE"", ""count"": 70}, {""class"": ""_texto"", ""count"": 60}, {""class"": ""ROADPT"", ""count"": 56}, {""class"": ""LNDELV"", ""count"": 55}, {""class"": ""RIVERS"", ""count"": 55}, {""class"": ""LNDARE"", ""count"": 54}, {""class"": ""SBDARE"", ""count"": 51}, {""class"": ""WEDKLP"", ""count"": 51}, {""class"": ""DEPARE"", ""count"": 42}]","[{""scale"": 20000, ""count"": 730}, {""scale"": 50000, ""count"": 572}, {""scale"": 100000, ""count"": 244}, {""scale"": 200000, ""count"": 78}, {""scale"": 1000000, ""count"": 3}]"
|
||||
23,5875328,10,912,380,10/912/380.pbf,140.80078125,41.90214300610273,140.625,41.77131167976407,140.9765625,42.03297433244139,1528,1238,5,268,119,125,160,334,751,402,372,"[{""class"": ""SLCONS"", ""count"": 220}, {""class"": ""SBDARE"", ""count"": 166}, {""class"": ""DEPCNT"", ""count"": 125}, {""class"": ""DEPARE"", ""count"": 119}, {""class"": ""WRECKS"", ""count"": 99}, {""class"": ""LIGHTS"", ""count"": 91}, {""class"": ""_texto"", ""count"": 77}, {""class"": ""BUAARE"", ""count"": 43}, {""class"": ""BRIDGE"", ""count"": 41}, {""class"": ""BUISGL"", ""count"": 41}, {""class"": ""RIVBNK"", ""count"": 34}, {""class"": ""UWTROC"", ""count"": 32}, {""class"": ""COALNE"", ""count"": 29}, {""class"": ""BOYSPP"", ""count"": 25}, {""class"": ""OBSTRN"", ""count"": 23}]","[{""scale"": 20000, ""count"": 922}, {""scale"": 50000, ""count"": 316}, {""scale"": 100000, ""count"": 126}, {""scale"": 200000, ""count"": 150}, {""scale"": 1000000, ""count"": 13}, {""scale"": 3000000, ""count"": 1}]"
|
||||
24,5866952,10,915,377,10/915/377.pbf,141.85546875,42.682301017026845,141.6796875,42.553080288955805,142.03125,42.811521745097885,1252,1157,5,219,158,168,154,207,501,379,366,"[{""class"": ""DEPCNT"", ""count"": 168}, {""class"": ""DEPARE"", ""count"": 158}, {""class"": ""SBDARE"", ""count"": 139}, {""class"": ""SLCONS"", ""count"": 135}, {""class"": ""LIGHTS"", ""count"": 80}, {""class"": ""WRECKS"", ""count"": 45}, {""class"": ""LNDARE"", ""count"": 43}, {""class"": ""COALNE"", ""count"": 41}, {""class"": ""ZEMCNT"", ""count"": 37}, {""class"": ""ITDARE"", ""count"": 32}, {""class"": ""RIVBNK"", ""count"": 27}, {""class"": ""_texto"", ""count"": 27}, {""class"": ""BRTFAC"", ""count"": 25}, {""class"": ""BOYSPP"", ""count"": 23}, {""class"": ""_extgn"", ""count"": 18}]","[{""scale"": 20000, ""count"": 781}, {""scale"": 50000, ""count"": 376}, {""scale"": 200000, ""count"": 88}, {""scale"": 1000000, ""count"": 7}]"
|
||||
25,5866237,10,886,376,10/886/376.pbf,131.66015625,42.94020475963375,131.484375,42.811521745097885,131.8359375,43.06888777416962,2537,1137,5,521,145,228,69,798,1064,906,558,"[{""class"": ""UWTROC"", ""count"": 561}, {""class"": ""COALNE"", ""count"": 356}, {""class"": ""DEPCNT"", ""count"": 228}, {""class"": ""SBDARE"", ""count"": 179}, {""class"": ""LNDARE"", ""count"": 146}, {""class"": ""DEPARE"", ""count"": 145}, {""class"": ""_texto"", ""count"": 142}, {""class"": ""SLOTOP"", ""count"": 104}, {""class"": ""SLOGRD"", ""count"": 85}, {""class"": ""RIVERS"", ""count"": 54}, {""class"": ""ZEMCNT"", ""count"": 45}, {""class"": ""ITDARE"", ""count"": 43}, {""class"": ""LNDELV"", ""count"": 43}, {""class"": ""OBSTRN"", ""count"": 43}, {""class"": ""SEAARE"", ""count"": 27}]","[{""scale"": 20000, ""count"": 7}, {""scale"": 50000, ""count"": 1130}, {""scale"": 100000, ""count"": 1107}, {""scale"": 200000, ""count"": 179}, {""scale"": 1000000, ""count"": 106}, {""scale"": 3000000, ""count"": 8}]"
|
||||
26,5859715,10,859,386,10/859/386.pbf,122.16796875,40.312910186973724,121.9921875,40.17887331434696,122.34375,40.44694705960049,1715,1080,5,293,243,268,283,160,584,628,495,"[{""class"": ""DEPCNT"", ""count"": 268}, {""class"": ""SLCONS"", ""count"": 247}, {""class"": ""DEPARE"", ""count"": 243}, {""class"": ""LIGHTS"", ""count"": 120}, {""class"": ""SBDARE"", ""count"": 109}, {""class"": ""_texto"", ""count"": 75}, {""class"": ""TOPMAR"", ""count"": 67}, {""class"": ""ITDARE"", ""count"": 45}, {""class"": ""ZEMCNT"", ""count"": 45}, {""class"": ""BOYLAT"", ""count"": 41}, {""class"": ""$LINES"", ""count"": 36}, {""class"": ""BCNSPP"", ""count"": 35}, {""class"": ""BRTFAC"", ""count"": 29}, {""class"": ""BUAARE"", ""count"": 29}, {""class"": ""COALNE"", ""count"": 29}]","[{""scale"": 20000, ""count"": 418}, {""scale"": 50000, ""count"": 662}, {""scale"": 100000, ""count"": 498}, {""scale"": 200000, ""count"": 114}, {""scale"": 1000000, ""count"": 23}]"
|
||||
27,5857080,10,910,377,10/910/377.pbf,140.09765625,42.682301017026845,139.921875,42.553080288955805,140.2734375,42.811521745097885,1280,1058,5,317,75,86,29,214,342,452,480,"[{""class"": ""COALNE"", ""count"": 157}, {""class"": ""UWTROC"", ""count"": 141}, {""class"": ""BUISGL"", ""count"": 118}, {""class"": ""DEPCNT"", ""count"": 86}, {""class"": ""LNDARE"", ""count"": 83}, {""class"": ""BUAARE"", ""count"": 82}, {""class"": ""SLCONS"", ""count"": 77}, {""class"": ""DEPARE"", ""count"": 75}, {""class"": ""ZEMCNT"", ""count"": 75}, {""class"": ""ITDARE"", ""count"": 51}, {""class"": ""SBDARE"", ""count"": 51}, {""class"": ""ROADPT"", ""count"": 46}, {""class"": ""_texto"", ""count"": 40}, {""class"": ""RIVERS"", ""count"": 27}, {""class"": ""LNDELV"", ""count"": 20}]","[{""scale"": 7500, ""count"": 442}, {""scale"": 20000, ""count"": 334}, {""scale"": 50000, ""count"": 282}, {""scale"": 100000, ""count"": 52}, {""scale"": 200000, ""count"": 165}, {""scale"": 1000000, ""count"": 5}]"
|
||||
28,5855856,10,886,375,10/886/375.pbf,131.66015625,43.19703272708128,131.484375,43.06888777416962,131.8359375,43.32517767999295,1656,1042,5,227,27,27,19,244,375,904,372,"[{""class"": ""RIVERS"", ""count"": 308}, {""class"": ""COALNE"", ""count"": 170}, {""class"": ""UWTROC"", ""count"": 132}, {""class"": ""RIVBNK"", ""count"": 118}, {""class"": ""LAKSHR"", ""count"": 78}, {""class"": ""LNDELV"", ""count"": 62}, {""class"": ""LAKARE"", ""count"": 57}, {""class"": ""LNDRGN"", ""count"": 55}, {""class"": ""LNDARE"", ""count"": 53}, {""class"": ""ZEMCNT"", ""count"": 53}, {""class"": ""OBSTRN"", ""count"": 51}, {""class"": ""_texto"", ""count"": 46}, {""class"": ""SLOTOP"", ""count"": 45}, {""class"": ""SBDARE"", ""count"": 41}, {""class"": ""ITDARE"", ""count"": 40}]","[{""scale"": 7500, ""count"": 1}, {""scale"": 20000, ""count"": 4}, {""scale"": 50000, ""count"": 1037}, {""scale"": 100000, ""count"": 514}, {""scale"": 200000, ""count"": 89}, {""scale"": 1000000, ""count"": 11}]"
|
||||
29,5848607,10,910,353,10/910/353.pbf,140.09765625,48.57465613686708,139.921875,48.45835188280865,140.2734375,48.6909603909255,1607,970,5,253,31,29,12,482,569,770,262,"[{""class"": ""UWTROC"", ""count"": 371}, {""class"": ""RIVERS"", ""count"": 255}, {""class"": ""RIVBNK"", ""count"": 245}, {""class"": ""COALNE"", ""count"": 195}, {""class"": ""SBDARE"", ""count"": 82}, {""class"": ""SLOTOP"", ""count"": 60}, {""class"": ""LNDRGN"", ""count"": 54}, {""class"": ""LNDARE"", ""count"": 52}, {""class"": ""_texto"", ""count"": 33}, {""class"": ""DEPARE"", ""count"": 31}, {""class"": ""DEPCNT"", ""count"": 29}, {""class"": ""SLOGRD"", ""count"": 29}, {""class"": ""WEDKLP"", ""count"": 23}, {""class"": ""CTNARE"", ""count"": 20}, {""class"": ""LNDELV"", ""count"": 18}]","[{""scale"": 7500, ""count"": 39}, {""scale"": 20000, ""count"": 683}, {""scale"": 50000, ""count"": 248}, {""scale"": 100000, ""count"": 524}, {""scale"": 200000, ""count"": 103}, {""scale"": 1000000, ""count"": 10}]"
|
||||
30,5843249,10,914,366,10/914/366.pbf,141.50390625,45.45999583298721,141.328125,45.33670190996811,141.6796875,45.58328975600631,949,923,5,333,56,63,18,140,304,211,432,"[{""class"": ""SLCONS"", ""count"": 185}, {""class"": ""LNDARE"", ""count"": 116}, {""class"": ""SBDARE"", ""count"": 70}, {""class"": ""UWTROC"", ""count"": 66}, {""class"": ""DEPCNT"", ""count"": 63}, {""class"": ""DEPARE"", ""count"": 56}, {""class"": ""_texto"", ""count"": 50}, {""class"": ""BUAARE"", ""count"": 49}, {""class"": ""BUISGL"", ""count"": 39}, {""class"": ""COALNE"", ""count"": 32}, {""class"": ""ITDARE"", ""count"": 25}, {""class"": ""ZEMCNT"", ""count"": 25}, {""class"": ""TNKCON"", ""count"": 20}, {""class"": ""LIGHTS"", ""count"": 17}, {""class"": ""TOWERS"", ""count"": 13}]","[{""scale"": 7500, ""count"": 307}, {""scale"": 50000, ""count"": 616}, {""scale"": 100000, ""count"": 1}, {""scale"": 200000, ""count"": 22}, {""scale"": 1000000, ""count"": 2}, {""scale"": 3000000, ""count"": 1}]"
|
||||
31,5841185,10,915,366,10/915/366.pbf,141.85546875,45.45999583298721,141.6796875,45.33670190996811,142.03125,45.58328975600631,985,902,5,282,60,63,39,199,340,226,415,"[{""class"": ""SLCONS"", ""count"": 164}, {""class"": ""SBDARE"", ""count"": 148}, {""class"": ""LNDARE"", ""count"": 88}, {""class"": ""DEPCNT"", ""count"": 63}, {""class"": ""DEPARE"", ""count"": 60}, {""class"": ""BUISGL"", ""count"": 58}, {""class"": ""UWTROC"", ""count"": 31}, {""class"": ""COALNE"", ""count"": 30}, {""class"": ""_texto"", ""count"": 30}, {""class"": ""LIGHTS"", ""count"": 27}, {""class"": ""RIVBNK"", ""count"": 25}, {""class"": ""TOWERS"", ""count"": 20}, {""class"": ""BRIDGE"", ""count"": 18}, {""class"": ""BUAARE"", ""count"": 17}, {""class"": ""ITDARE"", ""count"": 17}]","[{""scale"": 7500, ""count"": 432}, {""scale"": 50000, ""count"": 470}, {""scale"": 200000, ""count"": 75}, {""scale"": 1000000, ""count"": 8}]"
|
||||
32,5839618,10,911,381,10/911/381.pbf,140.44921875,41.6399444886017,140.2734375,41.50857729743934,140.625,41.77131167976407,1018,886,5,212,64,72,84,235,498,315,201,"[{""class"": ""SBDARE"", ""count"": 102}, {""class"": ""UWTROC"", ""count"": 102}, {""class"": ""COALNE"", ""count"": 85}, {""class"": ""SLCONS"", ""count"": 75}, {""class"": ""DEPCNT"", ""count"": 72}, {""class"": ""DEPARE"", ""count"": 64}, {""class"": ""_texto"", ""count"": 53}, {""class"": ""LNDARE"", ""count"": 52}, {""class"": ""ITDARE"", ""count"": 46}, {""class"": ""ZEMCNT"", ""count"": 46}, {""class"": ""LIGHTS"", ""count"": 38}, {""class"": ""BUISGL"", ""count"": 28}, {""class"": ""BUIREL"", ""count"": 23}, {""class"": ""$LINES"", ""count"": 21}, {""class"": ""BUAARE"", ""count"": 21}]","[{""scale"": 50000, ""count"": 886}, {""scale"": 200000, ""count"": 123}, {""scale"": 1000000, ""count"": 9}]"
|
||||
33,5838565,10,889,376,10/889/376.pbf,132.71484375,42.94020475963375,132.5390625,42.811521745097885,132.890625,43.06888777416962,1465,871,5,221,38,43,12,343,480,675,308,"[{""class"": ""UWTROC"", ""count"": 264}, {""class"": ""RIVERS"", ""count"": 245}, {""class"": ""COALNE"", ""count"": 175}, {""class"": ""BUAARE"", ""count"": 75}, {""class"": ""_texto"", ""count"": 64}, {""class"": ""RIVBNK"", ""count"": 56}, {""class"": ""LNDELV"", ""count"": 55}, {""class"": ""SLOTOP"", ""count"": 55}, {""class"": ""ROADPT"", ""count"": 51}, {""class"": ""SLOGRD"", ""count"": 48}, {""class"": ""DEPCNT"", ""count"": 43}, {""class"": ""DEPARE"", ""count"": 38}, {""class"": ""SBDARE"", ""count"": 36}, {""class"": ""SLCONS"", ""count"": 26}, {""class"": ""LAKSHR"", ""count"": 22}]","[{""scale"": 7500, ""count"": 10}, {""scale"": 20000, ""count"": 4}, {""scale"": 50000, ""count"": 857}, {""scale"": 100000, ""count"": 494}, {""scale"": 200000, ""count"": 86}, {""scale"": 1000000, ""count"": 14}]"
|
||||
34,5834997,10,912,378,10/912/378.pbf,140.80078125,42.42332224056294,140.625,42.29356419217008,140.9765625,42.553080288955805,1297,837,5,450,98,117,113,194,454,477,362,"[{""class"": ""SLCONS"", ""count"": 239}, {""class"": ""DEPCNT"", ""count"": 117}, {""class"": ""LNDARE"", ""count"": 108}, {""class"": ""COALNE"", ""count"": 103}, {""class"": ""DEPARE"", ""count"": 98}, {""class"": ""UWTROC"", ""count"": 84}, {""class"": ""LIGHTS"", ""count"": 78}, {""class"": ""_texto"", ""count"": 63}, {""class"": ""SBDARE"", ""count"": 61}, {""class"": ""_extgn"", ""count"": 34}, {""class"": ""ZEMCNT"", ""count"": 33}, {""class"": ""ITDARE"", ""count"": 32}, {""class"": ""WRECKS"", ""count"": 26}, {""class"": ""TOWERS"", ""count"": 25}, {""class"": ""BUAARE"", ""count"": 22}]","[{""scale"": 50000, ""count"": 837}, {""scale"": 100000, ""count"": 330}, {""scale"": 200000, ""count"": 115}, {""scale"": 1000000, ""count"": 15}]"
|
||||
35,5834080,10,915,361,10/915/361.pbf,141.85546875,46.679459874952244,141.6796875,46.55886030311718,142.03125,46.8000594467873,880,832,5,92,35,55,30,451,543,195,132,"[{""class"": ""UWTROC"", ""count"": 318}, {""class"": ""SBDARE"", ""count"": 113}, {""class"": ""DEPCNT"", ""count"": 55}, {""class"": ""_texto"", ""count"": 42}, {""class"": ""DEPARE"", ""count"": 35}, {""class"": ""COALNE"", ""count"": 34}, {""class"": ""LNDARE"", ""count"": 29}, {""class"": ""SLCONS"", ""count"": 29}, {""class"": ""$LINES"", ""count"": 28}, {""class"": ""ZEMCNT"", ""count"": 23}, {""class"": ""ITDARE"", ""count"": 20}, {""class"": ""BRTFAC"", ""count"": 16}, {""class"": ""LIGHTS"", ""count"": 15}, {""class"": ""RIVERS"", ""count"": 13}, {""class"": ""OBSTRN"", ""count"": 12}]","[{""scale"": 7500, ""count"": 459}, {""scale"": 20000, ""count"": 198}, {""scale"": 50000, ""count"": 175}, {""scale"": 200000, ""count"": 42}, {""scale"": 1000000, ""count"": 6}]"
|
||||
36,5828506,10,926,375,10/926/375.pbf,145.72265625,43.19703272708128,145.546875,43.06888777416962,145.8984375,43.32517767999295,1406,771,5,299,213,228,56,306,437,488,477,"[{""class"": ""DEPCNT"", ""count"": 228}, {""class"": ""DEPARE"", ""count"": 213}, {""class"": ""COALNE"", ""count"": 134}, {""class"": ""SBDARE"", ""count"": 130}, {""class"": ""UWTROC"", ""count"": 107}, {""class"": ""LNDARE"", ""count"": 104}, {""class"": ""ZEMCNT"", ""count"": 64}, {""class"": ""_texto"", ""count"": 63}, {""class"": ""SLCONS"", ""count"": 61}, {""class"": ""ITDARE"", ""count"": 57}, {""class"": ""LIGHTS"", ""count"": 51}, {""class"": ""WRECKS"", ""count"": 40}, {""class"": ""OBSTRN"", ""count"": 25}, {""class"": ""TOWERS"", ""count"": 13}, {""class"": ""_extgn"", ""count"": 10}]","[{""scale"": 20000, ""count"": 445}, {""scale"": 50000, ""count"": 326}, {""scale"": 100000, ""count"": 504}, {""scale"": 200000, ""count"": 109}, {""scale"": 1000000, ""count"": 20}, {""scale"": 3000000, ""count"": 2}]"
|
||||
37,5828459,10,931,368,10/931/368.pbf,147.48046875,44.96466310811451,147.3046875,44.84029065139799,147.65625,45.089035564831015,1359,771,5,203,95,91,23,394,479,604,271,"[{""class"": ""UWTROC"", ""count"": 306}, {""class"": ""COALNE"", ""count"": 179}, {""class"": ""RIVERS"", ""count"": 177}, {""class"": ""DEPARE"", ""count"": 95}, {""class"": ""SLOTOP"", ""count"": 94}, {""class"": ""DEPCNT"", ""count"": 91}, {""class"": ""SLOGRD"", ""count"": 65}, {""class"": ""SBDARE"", ""count"": 57}, {""class"": ""LNDELV"", ""count"": 30}, {""class"": ""RIVBNK"", ""count"": 30}, {""class"": ""_texto"", ""count"": 30}, {""class"": ""ROADPT"", ""count"": 24}, {""class"": ""LNDARE"", ""count"": 21}, {""class"": ""LNDRGN"", ""count"": 19}, {""class"": ""CTNARE"", ""count"": 15}]","[{""scale"": 20000, ""count"": 231}, {""scale"": 50000, ""count"": 540}, {""scale"": 100000, ""count"": 489}, {""scale"": 200000, ""count"": 91}, {""scale"": 1000000, ""count"": 6}, {""scale"": 3000000, ""count"": 2}]"
|
||||
38,5828120,10,916,359,10/916/359.pbf,142.20703125,47.15970557368874,142.03125,47.04018214480666,142.3828125,47.27922900257082,820,773,5,108,15,30,99,144,300,312,206,"[{""class"": ""RIVERS"", ""count"": 123}, {""class"": ""UWTROC"", ""count"": 95}, {""class"": ""BUAARE"", ""count"": 82}, {""class"": ""SLCONS"", ""count"": 54}, {""class"": ""LIGHTS"", ""count"": 52}, {""class"": ""COALNE"", ""count"": 44}, {""class"": ""DEPCNT"", ""count"": 30}, {""class"": ""SLOTOP"", ""count"": 24}, {""class"": ""LNDELV"", ""count"": 23}, {""class"": ""SBDARE"", ""count"": 23}, {""class"": ""SLOGRD"", ""count"": 23}, {""class"": ""WATTUR"", ""count"": 22}, {""class"": ""BRTFAC"", ""count"": 18}, {""class"": ""DEPARE"", ""count"": 15}, {""class"": ""BCNSPP"", ""count"": 14}]","[{""scale"": 7500, ""count"": 195}, {""scale"": 20000, ""count"": 127}, {""scale"": 50000, ""count"": 451}, {""scale"": 200000, ""count"": 43}, {""scale"": 1000000, ""count"": 3}, {""scale"": 3000000, ""count"": 1}]"
|
||||
39,5828023,10,932,368,10/932/368.pbf,147.83203125,44.96466310811451,147.65625,44.84029065139799,148.0078125,45.089035564831015,1223,768,5,193,81,55,12,303,373,542,301,"[{""class"": ""COALNE"", ""count"": 153}, {""class"": ""UWTROC"", ""count"": 146}, {""class"": ""RIVERS"", ""count"": 134}, {""class"": ""SBDARE"", ""count"": 122}, {""class"": ""DEPARE"", ""count"": 81}, {""class"": ""SLOTOP"", ""count"": 77}, {""class"": ""RIVBNK"", ""count"": 70}, {""class"": ""DEPCNT"", ""count"": 55}, {""class"": ""LAKSHR"", ""count"": 47}, {""class"": ""SLOGRD"", ""count"": 45}, {""class"": ""_texto"", ""count"": 42}, {""class"": ""LNDARE"", ""count"": 40}, {""class"": ""CTNARE"", ""count"": 34}, {""class"": ""LNDELV"", ""count"": 34}, {""class"": ""LAKARE"", ""count"": 31}]","[{""scale"": 20000, ""count"": 414}, {""scale"": 50000, ""count"": 354}, {""scale"": 100000, ""count"": 331}, {""scale"": 200000, ""count"": 114}, {""scale"": 1000000, ""count"": 2}, {""scale"": 3000000, ""count"": 4}, {""scale"": 20000000, ""count"": 4}]"
|
||||
40,5823820,10,898,370,10/898/370.pbf,135.87890625,44.465016214702985,135.703125,44.33956524809713,136.0546875,44.590467181308846,1320,725,5,99,13,17,33,346,541,556,221,"[{""class"": ""UWTROC"", ""count"": 307}, {""class"": ""RIVERS"", ""count"": 219}, {""class"": ""RIVBNK"", ""count"": 170}, {""class"": ""_texto"", ""count"": 94}, {""class"": ""COALNE"", ""count"": 83}, {""class"": ""BUAARE"", ""count"": 74}, {""class"": ""LNDELV"", ""count"": 54}, {""class"": ""SLOTOP"", ""count"": 27}, {""class"": ""VEGARE"", ""count"": 23}, {""class"": ""SBDARE"", ""count"": 22}, {""class"": ""LIGHTS"", ""count"": 20}, {""class"": ""LNDRGN"", ""count"": 20}, {""class"": ""ROADPT"", ""count"": 20}, {""class"": ""SLOGRD"", ""count"": 18}, {""class"": ""DEPCNT"", ""count"": 17}]","[{""scale"": 50000, ""count"": 725}, {""scale"": 100000, ""count"": 534}, {""scale"": 200000, ""count"": 49}, {""scale"": 1000000, ""count"": 12}]"
|
||||
|
4411
cm95_pbf_aoi_candidates_v1.json
Normal file
4411
cm95_pbf_aoi_candidates_v1.json
Normal file
File diff suppressed because it is too large
Load Diff
38
cm95_pbf_aoi_candidates_v1.txt
Normal file
38
cm95_pbf_aoi_candidates_v1.txt
Normal file
@@ -0,0 +1,38 @@
|
||||
CM95 → NavSea PBF 第一测试 AOI 候选 v1
|
||||
======================================================================================
|
||||
Dataset ID: 1
|
||||
扫描范围: lon 120.0..160.0, lat 40.0..50.0
|
||||
|
||||
#01 z10/887/375 center=(132.01172,43.19703) features=4475 detail=3674 groups=5/5
|
||||
land=818 depth=366 contour=390 nav=191 hazard=856
|
||||
#02 z10/890/377 center=(133.06641,42.68230) features=4323 detail=3504 groups=5/5
|
||||
land=529 depth=401 contour=378 nav=283 hazard=1493
|
||||
#03 z10/914/385 center=(141.50391,40.58045) features=3544 detail=3231 groups=5/5
|
||||
land=647 depth=401 contour=441 nav=132 hazard=1062
|
||||
#04 z10/884/377 center=(130.95703,42.68230) features=3900 detail=2700 groups=5/5
|
||||
land=588 depth=244 contour=227 nav=85 hazard=1252
|
||||
#05 z10/911/351 center=(140.44922,49.03773) features=3190 detail=2448 groups=5/5
|
||||
land=425 depth=194 contour=182 nav=171 hazard=1106
|
||||
#06 z10/912/381 center=(140.80078,41.63994) features=2228 detail=2022 groups=5/5
|
||||
land=408 depth=160 contour=190 nav=78 hazard=622
|
||||
#07 z10/856/384 center=(121.11328,40.84693) features=2303 detail=1989 groups=5/5
|
||||
land=454 depth=294 contour=299 nav=354 hazard=348
|
||||
#08 z10/887/376 center=(132.01172,42.94020) features=2340 detail=1746 groups=5/5
|
||||
land=501 depth=134 contour=209 nav=133 hazard=767
|
||||
#09 z10/892/376 center=(133.76953,42.94020) features=2329 detail=1728 groups=5/5
|
||||
land=393 depth=73 contour=67 nav=31 hazard=734
|
||||
#10 z10/885/376 center=(131.30859,42.94020) features=2397 detail=1611 groups=5/5
|
||||
land=357 depth=88 contour=91 nav=50 hazard=678
|
||||
#11 z10/914/377 center=(141.50391,42.68230) features=1712 detail=1614 groups=5/5
|
||||
land=430 depth=162 contour=181 nav=101 hazard=232
|
||||
#12 z10/912/384 center=(140.80078,40.84693) features=1893 detail=1578 groups=5/5
|
||||
land=490 depth=154 contour=166 nav=115 hazard=282
|
||||
#13 z10/896/373 center=(135.17578,43.70746) features=2073 detail=1553 groups=5/5
|
||||
land=322 depth=98 contour=81 nav=46 hazard=473
|
||||
#14 z10/859/385 center=(122.16797,40.58045) features=2171 detail=1539 groups=5/5
|
||||
land=471 depth=224 contour=226 nav=417 hazard=112
|
||||
#15 z10/922/376 center=(144.31641,42.94020) features=2067 detail=1534 groups=5/5
|
||||
land=316 depth=181 contour=188 nav=84 hazard=570
|
||||
|
||||
下一步:把 JSON 或 CSV 上传给 ChatGPT。
|
||||
ChatGPT 会选一个最适合的 tile,并告诉你需要提供的现有 NavSea PBF z10/z11/z12 路径。
|
||||
415
cm95_select_pbf_test_aoi_v1.py
Normal file
415
cm95_select_pbf_test_aoi_v1.py
Normal file
@@ -0,0 +1,415 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 / CM93 MySQL → PBF 测试 AOI 自动候选选择器 v1
|
||||
|
||||
目标:
|
||||
从已导入 MySQL 的 CM93 Dataset 中,自动寻找适合做
|
||||
CM95→NavSea PBF 第一轮对照测试的 z10 XYZ tile。
|
||||
|
||||
优先选择同时包含:
|
||||
- 陆地/岸线
|
||||
- 水深区
|
||||
- 等深线
|
||||
- 灯标/航标
|
||||
- 危险物
|
||||
- 较细比例尺数据
|
||||
|
||||
脚本只读数据库,不修改任何内容。
|
||||
|
||||
执行:
|
||||
python .\cm95_select_pbf_test_aoi_v1.py `
|
||||
--host 127.0.0.1 `
|
||||
--port 3306 `
|
||||
--user root `
|
||||
--database cm93_chart `
|
||||
--dataset-id 1
|
||||
|
||||
输出:
|
||||
- cm95_pbf_aoi_candidates_v1.csv
|
||||
- cm95_pbf_aoi_candidates_v1.json
|
||||
- cm95_pbf_aoi_candidates_v1.txt
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from collections import Counter, defaultdict
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import SSDictCursor
|
||||
|
||||
|
||||
Z = 10
|
||||
|
||||
LAND = {"LNDARE", "COALNE", "SLCONS"}
|
||||
DEPTH = {"DEPARE"}
|
||||
CONTOUR = {"DEPCNT"}
|
||||
|
||||
LIGHT_NAV_EXACT = {
|
||||
"LIGHTS", "LITFLT", "LITVES", "LNDMRK",
|
||||
"FOGSIG", "RTPBCN", "TOPMAR", "DAYMAR",
|
||||
}
|
||||
LIGHT_NAV_PREFIX = ("BOY", "BCN")
|
||||
|
||||
HAZARD = {
|
||||
"OBSTRN", "UWTROC", "WRECKS", "SBDARE",
|
||||
"CTNARE", "MORFAC",
|
||||
}
|
||||
|
||||
# native_scale 数值越小,通常越详细。
|
||||
DETAIL_SCALE_LIMIT = 50000
|
||||
|
||||
|
||||
def args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password", default=None)
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument("--min-lon", type=float, default=120.0)
|
||||
p.add_argument("--max-lon", type=float, default=160.0)
|
||||
p.add_argument("--min-lat", type=float, default=40.0)
|
||||
p.add_argument("--max-lat", type=float, default=50.0)
|
||||
p.add_argument("--top", type=int, default=40)
|
||||
p.add_argument("--output-dir", default=".")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def lonlat_to_tile(lon, lat, z):
|
||||
lat = max(min(lat, 85.05112878), -85.05112878)
|
||||
n = 2 ** z
|
||||
x = int((lon + 180.0) / 360.0 * n)
|
||||
lat_rad = math.radians(lat)
|
||||
y = int(
|
||||
(1.0 - math.asinh(math.tan(lat_rad)) / math.pi)
|
||||
/ 2.0 * n
|
||||
)
|
||||
x = max(0, min(n - 1, x))
|
||||
y = max(0, min(n - 1, y))
|
||||
return x, y
|
||||
|
||||
|
||||
def tile_bounds(z, x, y):
|
||||
n = 2 ** z
|
||||
min_lon = x / n * 360.0 - 180.0
|
||||
max_lon = (x + 1) / n * 360.0 - 180.0
|
||||
|
||||
def lat(ty):
|
||||
return math.degrees(
|
||||
math.atan(math.sinh(math.pi * (1 - 2 * ty / n)))
|
||||
)
|
||||
|
||||
max_lat = lat(y)
|
||||
min_lat = lat(y + 1)
|
||||
return min_lon, min_lat, max_lon, max_lat
|
||||
|
||||
|
||||
def is_navmark(cls):
|
||||
return cls in LIGHT_NAV_EXACT or cls.startswith(LIGHT_NAV_PREFIX)
|
||||
|
||||
|
||||
def classify(cls):
|
||||
flags = set()
|
||||
if cls in LAND:
|
||||
flags.add("land")
|
||||
if cls in DEPTH:
|
||||
flags.add("depth")
|
||||
if cls in CONTOUR:
|
||||
flags.add("contour")
|
||||
if is_navmark(cls):
|
||||
flags.add("nav")
|
||||
if cls in HAZARD:
|
||||
flags.add("hazard")
|
||||
return flags
|
||||
|
||||
|
||||
def main():
|
||||
a = args()
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
outdir = Path(a.output_dir).resolve()
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host,
|
||||
port=a.port,
|
||||
user=a.user,
|
||||
password=a.password,
|
||||
database=a.database,
|
||||
charset="utf8mb4",
|
||||
cursorclass=SSDictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
)
|
||||
|
||||
tiles = {}
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
object_class,
|
||||
geometry_type,
|
||||
native_scale,
|
||||
bbox_min_lon,
|
||||
bbox_min_lat,
|
||||
bbox_max_lon,
|
||||
bbox_max_lat
|
||||
FROM chart_feature
|
||||
WHERE dataset_id=%s
|
||||
AND bbox_min_lon IS NOT NULL
|
||||
AND bbox_min_lat IS NOT NULL
|
||||
AND bbox_max_lon IS NOT NULL
|
||||
AND bbox_max_lat IS NOT NULL
|
||||
AND bbox_max_lon >= %s
|
||||
AND bbox_min_lon <= %s
|
||||
AND bbox_max_lat >= %s
|
||||
AND bbox_min_lat <= %s
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
a.min_lon,
|
||||
a.max_lon,
|
||||
a.min_lat,
|
||||
a.max_lat,
|
||||
),
|
||||
)
|
||||
|
||||
scanned = 0
|
||||
|
||||
for row in cur:
|
||||
scanned += 1
|
||||
|
||||
lon = (
|
||||
float(row["bbox_min_lon"])
|
||||
+ float(row["bbox_max_lon"])
|
||||
) / 2.0
|
||||
lat = (
|
||||
float(row["bbox_min_lat"])
|
||||
+ float(row["bbox_max_lat"])
|
||||
) / 2.0
|
||||
|
||||
if not (
|
||||
a.min_lon <= lon <= a.max_lon
|
||||
and a.min_lat <= lat <= a.max_lat
|
||||
):
|
||||
continue
|
||||
|
||||
x, y = lonlat_to_tile(lon, lat, Z)
|
||||
key = (x, y)
|
||||
|
||||
if key not in tiles:
|
||||
tiles[key] = {
|
||||
"feature_count": 0,
|
||||
"detail_feature_count": 0,
|
||||
"classes": Counter(),
|
||||
"geometry": Counter(),
|
||||
"flags": Counter(),
|
||||
"native_scales": Counter(),
|
||||
}
|
||||
|
||||
t = tiles[key]
|
||||
cls = str(row["object_class"] or "")
|
||||
geom = str(row["geometry_type"] or "")
|
||||
scale = int(row["native_scale"] or 999999999)
|
||||
|
||||
t["feature_count"] += 1
|
||||
t["classes"][cls] += 1
|
||||
t["geometry"][geom] += 1
|
||||
t["native_scales"][scale] += 1
|
||||
|
||||
if scale <= DETAIL_SCALE_LIMIT:
|
||||
t["detail_feature_count"] += 1
|
||||
|
||||
for flag in classify(cls):
|
||||
t["flags"][flag] += 1
|
||||
|
||||
conn.rollback()
|
||||
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
rows = []
|
||||
|
||||
for (x, y), t in tiles.items():
|
||||
flags = t["flags"]
|
||||
|
||||
required_present = sum(
|
||||
1
|
||||
for name in ("land", "depth", "contour", "nav", "hazard")
|
||||
if flags[name] > 0
|
||||
)
|
||||
|
||||
hard_gate_present = (
|
||||
int(flags["nav"] > 0)
|
||||
+ int(flags["hazard"] > 0)
|
||||
+ int(flags["depth"] > 0)
|
||||
)
|
||||
|
||||
# 先奖励类别闭环,再奖励细尺度和总要素。
|
||||
score = (
|
||||
required_present * 1_000_000
|
||||
+ hard_gate_present * 250_000
|
||||
+ min(t["detail_feature_count"], 10000) * 100
|
||||
+ min(t["feature_count"], 100000)
|
||||
)
|
||||
|
||||
min_lon, min_lat, max_lon, max_lat = tile_bounds(Z, x, y)
|
||||
|
||||
rows.append({
|
||||
"score": score,
|
||||
"z": Z,
|
||||
"x": x,
|
||||
"y": y,
|
||||
"tile_path": f"{Z}/{x}/{y}.pbf",
|
||||
"center_lon": (min_lon + max_lon) / 2,
|
||||
"center_lat": (min_lat + max_lat) / 2,
|
||||
"min_lon": min_lon,
|
||||
"min_lat": min_lat,
|
||||
"max_lon": max_lon,
|
||||
"max_lat": max_lat,
|
||||
"feature_count": t["feature_count"],
|
||||
"detail_feature_count_le_50000": t["detail_feature_count"],
|
||||
"required_groups_present": required_present,
|
||||
"land_count": flags["land"],
|
||||
"depth_count": flags["depth"],
|
||||
"contour_count": flags["contour"],
|
||||
"navmark_light_count": flags["nav"],
|
||||
"hazard_count": flags["hazard"],
|
||||
"point_count": t["geometry"]["POINT"],
|
||||
"line_count": t["geometry"]["LINE"],
|
||||
"area_count": t["geometry"]["AREA"],
|
||||
"top_classes": [
|
||||
{"class": k, "count": v}
|
||||
for k, v in t["classes"].most_common(15)
|
||||
],
|
||||
"native_scales": [
|
||||
{"scale": k, "count": v}
|
||||
for k, v in sorted(t["native_scales"].items())
|
||||
],
|
||||
})
|
||||
|
||||
rows.sort(
|
||||
key=lambda r: (
|
||||
r["score"],
|
||||
r["detail_feature_count_le_50000"],
|
||||
r["feature_count"],
|
||||
),
|
||||
reverse=True,
|
||||
)
|
||||
|
||||
top = rows[: a.top]
|
||||
|
||||
csv_path = outdir / "cm95_pbf_aoi_candidates_v1.csv"
|
||||
json_path = outdir / "cm95_pbf_aoi_candidates_v1.json"
|
||||
txt_path = outdir / "cm95_pbf_aoi_candidates_v1.txt"
|
||||
|
||||
csv_fields = [
|
||||
"rank", "score", "z", "x", "y", "tile_path",
|
||||
"center_lon", "center_lat",
|
||||
"min_lon", "min_lat", "max_lon", "max_lat",
|
||||
"feature_count", "detail_feature_count_le_50000",
|
||||
"required_groups_present",
|
||||
"land_count", "depth_count", "contour_count",
|
||||
"navmark_light_count", "hazard_count",
|
||||
"point_count", "line_count", "area_count",
|
||||
"top_classes", "native_scales",
|
||||
]
|
||||
|
||||
with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
w = csv.DictWriter(f, fieldnames=csv_fields)
|
||||
w.writeheader()
|
||||
for i, row in enumerate(top, 1):
|
||||
r = dict(row)
|
||||
r["rank"] = i
|
||||
r["top_classes"] = json.dumps(
|
||||
r["top_classes"], ensure_ascii=False
|
||||
)
|
||||
r["native_scales"] = json.dumps(
|
||||
r["native_scales"], ensure_ascii=False
|
||||
)
|
||||
w.writerow(r)
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"version": "v1",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"search_bbox": [
|
||||
a.min_lon, a.min_lat, a.max_lon, a.max_lat
|
||||
],
|
||||
"z": Z,
|
||||
"candidate_count": len(rows),
|
||||
"top": top,
|
||||
},
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
lines = [
|
||||
"CM95 → NavSea PBF 第一测试 AOI 候选 v1",
|
||||
"=" * 86,
|
||||
f"Dataset ID: {a.dataset_id}",
|
||||
f"扫描范围: lon {a.min_lon}..{a.max_lon}, lat {a.min_lat}..{a.max_lat}",
|
||||
"",
|
||||
]
|
||||
|
||||
for i, r in enumerate(top[:15], 1):
|
||||
lines += [
|
||||
(
|
||||
f"#{i:02d} z{r['z']}/{r['x']}/{r['y']} "
|
||||
f"center=({r['center_lon']:.5f},{r['center_lat']:.5f}) "
|
||||
f"features={r['feature_count']} "
|
||||
f"detail={r['detail_feature_count_le_50000']} "
|
||||
f"groups={r['required_groups_present']}/5"
|
||||
),
|
||||
(
|
||||
f" land={r['land_count']} depth={r['depth_count']} "
|
||||
f"contour={r['contour_count']} "
|
||||
f"nav={r['navmark_light_count']} "
|
||||
f"hazard={r['hazard_count']}"
|
||||
),
|
||||
]
|
||||
|
||||
lines += [
|
||||
"",
|
||||
"下一步:把 JSON 或 CSV 上传给 ChatGPT。",
|
||||
"ChatGPT 会选一个最适合的 tile,并告诉你需要提供的现有 NavSea PBF z10/z11/z12 路径。",
|
||||
]
|
||||
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
print("")
|
||||
print("输出:")
|
||||
print(csv_path)
|
||||
print(json_path)
|
||||
print(txt_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,8 @@
|
||||
cell_id,source_relative_path,source_file_name,scale_code,native_scale,cell_name,feature_count,attribute_count,bbox_min_lon,bbox_min_lat,bbox_max_lon,bbox_max_lat
|
||||
693,03900420\F\03910424.F,03910424.F,F,20000,03910424,2279,3432,141.3333299246928,40.333332355444654,141.66666320214676,40.66666571671767
|
||||
351,03900420\E\03910424.E,03910424.E,E,50000,03910424,1026,1207,141.33333333333331,40.333333333333314,141.66666666666666,40.66666666666665
|
||||
113,03900420\D\03900423.D,03900423.D,D,100000,03900423,125,202,141.0,40.0,142.0,41.0
|
||||
40,03900420\C\03900420.C,03900420.C,C,200000,03900420,6725,9241,139.99999664723882,39.99999899417164,143.99999647960075,43.999998910352616
|
||||
12,03900420\B\03900420.B,03900420.B,B,1000000,03900420,2047,3738,139.99999664723882,39.99999899417164,149.99999639578172,49.999998826533584
|
||||
4,03900420\A\03900420.A,03900420.A,A,3000000,03900420,414,280,140.0,40.0,160.0,60.0
|
||||
784,03900360\Z\03900360.Z,03900360.Z,Z,20000000,03900360,195,102,120.0,40.0,160.0,80.0
|
||||
|
@@ -0,0 +1,600 @@
|
||||
{"feature_id": 604514, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 14, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48240163792386, "bbox_min_lat": 40.526190070337684, "bbox_max_lon": 141.50641424823823, "bbox_max_lat": 40.54307822725843, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:14:area"}
|
||||
{"feature_id": 604519, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 19, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.50556991582724, "bbox_min_lat": 40.55430583427656, "bbox_max_lon": 141.52833637288447, "bbox_max_lat": 40.558930511994106, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:19:area"}
|
||||
{"feature_id": 604550, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 50, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.52219207437574, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.52462843115197, "bbox_max_lat": 40.52362749764253, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:50:area"}
|
||||
{"feature_id": 512947, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 17, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.5240011656172, "bbox_min_lat": 40.54009534689111, "bbox_max_lon": 141.53088298455424, "bbox_max_lat": 40.54618996679383, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:17:area"}
|
||||
{"feature_id": 512948, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 18, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48626560412873, "bbox_min_lat": 40.53205814052522, "bbox_max_lon": 141.50629561371784, "bbox_max_lat": 40.54309443682702, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:18:area"}
|
||||
{"feature_id": 513001, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 71, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.5644019696208, "bbox_min_lat": 40.54113741878584, "bbox_max_lon": 141.56583631769195, "bbox_max_lat": 40.542530211517395, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:71:area"}
|
||||
{"feature_id": 513042, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 112, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.4848973784864, "bbox_min_lat": 40.560496674008796, "bbox_max_lon": 141.48612318658974, "bbox_max_lat": 40.561665470596104, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:112:area"}
|
||||
{"feature_id": 513113, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 183, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.50382365214844, "bbox_min_lat": 40.53037533959098, "bbox_max_lon": 141.5042356457433, "bbox_max_lat": 40.53107185144783, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:183:area"}
|
||||
{"feature_id": 513120, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 190, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48924111342524, "bbox_min_lat": 40.52480806859645, "bbox_max_lon": 141.52280078921723, "bbox_max_lat": 40.524813153073175, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:190:area"}
|
||||
{"feature_id": 513147, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 217, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.47966862026965, "bbox_min_lat": 40.53205305659812, "bbox_max_lon": 141.48926145878795, "bbox_max_lat": 40.53205814052522, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:217:area"}
|
||||
{"feature_id": 355899, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 227, "object_class_id": 194, "object_class": "$AREAS", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.48360203301593, "bbox_min_lat": 40.54546919941691, "bbox_max_lon": 141.52089508130248, "bbox_max_lat": 40.56594792583181, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "II25"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:227:area"}
|
||||
{"feature_id": 606645, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2145, "object_class_id": 191, "object_class": "$COMPS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5797389231571, "bbox_min_lat": 40.57465202664078, "bbox_max_lon": 141.5797389231571, "bbox_max_lat": 40.57465202664078, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$ANNCH": "00.00 E", "$CYEAR": 2012, "$VARIA": "08.25 W"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2145:point"}
|
||||
{"feature_id": 606646, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2146, "object_class_id": 191, "object_class": "$COMPS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56779619724773, "bbox_min_lat": 40.530232024536936, "bbox_max_lon": 141.56779619724773, "bbox_max_lat": 40.530232024536936, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$ANNCH": "00.00 E", "$CYEAR": 2012, "$VARIA": "08.25 W"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2146:point"}
|
||||
{"feature_id": 606647, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2147, "object_class_id": 191, "object_class": "$COMPS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48432936071757, "bbox_min_lat": 40.541060209705, "bbox_max_lon": 141.48432936071757, "bbox_max_lat": 40.541060209705, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$ANNCH": "00.00 E", "$CYEAR": 2012, "$VARIA": "08.25 W"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2147:point"}
|
||||
{"feature_id": 606648, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2148, "object_class_id": 191, "object_class": "$COMPS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51307735340913, "bbox_min_lat": 40.57465202664078, "bbox_max_lon": 141.51307735340913, "bbox_max_lat": 40.57465202664078, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$ANNCH": "00.00 E", "$CYEAR": 2012, "$VARIA": "08.25 W"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2148:point"}
|
||||
{"feature_id": 513873, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 943, "object_class_id": 191, "object_class": "$COMPS", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52882301657974, "bbox_min_lat": 40.54675416127495, "bbox_max_lon": 141.52882301657974, "bbox_max_lat": 40.54675416127495, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$ANNCH": "01.00 W", "$CYEAR": 2002, "$VARIA": "08.25 W"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:943:point"}
|
||||
{"feature_id": 605626, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1126, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55866621726165, "bbox_min_lat": 40.562812961762916, "bbox_max_lon": 141.5593884775168, "bbox_max_lat": 40.56311785665859, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1126:line"}
|
||||
{"feature_id": 605627, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1127, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55866621726165, "bbox_min_lat": 40.56294508305488, "bbox_max_lon": 141.55873233967938, "bbox_max_lat": 40.56311785665859, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1127:line"}
|
||||
{"feature_id": 605628, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1128, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55866621726165, "bbox_min_lat": 40.56311785665859, "bbox_max_lon": 141.55889510255378, "bbox_max_lat": 40.56316867233952, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1128:line"}
|
||||
{"feature_id": 605629, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1129, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.56042609084113, "bbox_min_lat": 40.56204563679645, "bbox_max_lon": 141.56066514881292, "bbox_max_lat": 40.562055800098534, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH41"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1129:line"}
|
||||
{"feature_id": 605630, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1130, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.56065497613326, "bbox_min_lat": 40.562055800098534, "bbox_max_lon": 141.56066514881292, "bbox_max_lat": 40.56223365763497, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH41"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1130:line"}
|
||||
{"feature_id": 605631, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1131, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.5600598743737, "bbox_min_lat": 40.562055800098534, "bbox_max_lon": 141.56066514881292, "bbox_max_lat": 40.56248265739202, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH41"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1131:line"}
|
||||
{"feature_id": 513535, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 605, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.514311686626, "bbox_min_lat": 40.543114769181905, "bbox_max_lon": 141.51596474734632, "bbox_max_lat": 40.54461426334148, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IK1"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:605:line"}
|
||||
{"feature_id": 513536, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 606, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.5171142603395, "bbox_min_lat": 40.54540211970138, "bbox_max_lon": 141.51750082223097, "bbox_max_lat": 40.545676596514554, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IK1"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:606:line"}
|
||||
{"feature_id": 513537, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 607, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.51596474734632, "bbox_min_lat": 40.54461426334148, "bbox_max_lon": 141.5171142603395, "bbox_max_lat": 40.54540211970138, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IK1"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:607:line"}
|
||||
{"feature_id": 513538, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 608, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.56166551833616, "bbox_min_lat": 40.564191017875025, "bbox_max_lon": 141.56253019625137, "bbox_max_lat": 40.56450098793721, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:608:line"}
|
||||
{"feature_id": 513539, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 609, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.56166551833616, "bbox_min_lat": 40.56331191464415, "bbox_max_lon": 141.56478344517163, "bbox_max_lat": 40.564191017875025, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:609:line"}
|
||||
{"feature_id": 513540, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 610, "object_class_id": 193, "object_class": "$LINES", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.56166551833616, "bbox_min_lat": 40.56353042114975, "bbox_max_lon": 141.56207242559037, "bbox_max_lat": 40.564191017875025, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"$SCODE": "IH40"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:610:line"}
|
||||
{"feature_id": 604950, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 450, "object_class_id": 4, "object_class": "ACHARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5441192853618, "bbox_min_lat": 40.558930511994106, "bbox_max_lon": 141.55827456909512, "bbox_max_lat": 40.56973373383364, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATACH": [5]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:450:area"}
|
||||
{"feature_id": 513194, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 264, "object_class_id": 4, "object_class": "ACHARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.54422445615202, "bbox_min_lat": 40.55892130718866, "bbox_max_lon": 141.55849672809387, "bbox_max_lat": 40.56979058361586, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATACH": [5]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:264:area"}
|
||||
{"feature_id": 606117, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1617, "object_class_id": 1, "object_class": "AIRARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.46890757836783, "bbox_min_lat": 40.55140889540878, "bbox_max_lon": 141.46890757836783, "bbox_max_lat": 40.55140889540878, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hachinohe Airfield"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1617:point"}
|
||||
{"feature_id": 359255, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3583, "object_class_id": 1, "object_class": "AIRARE", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 1, "coverage_id": 1255, "bbox_min_lon": 141.3656803156843, "bbox_min_lat": 40.70594661568029, "bbox_max_lon": 141.3656803156843, "bbox_max_lat": 40.70594661568029, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3583:point"}
|
||||
{"feature_id": 359256, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3584, "object_class_id": 1, "object_class": "AIRARE", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 1, "coverage_id": 1255, "bbox_min_lon": 141.46889233639226, "bbox_min_lat": 40.551963132302625, "bbox_max_lon": 141.46889233639226, "bbox_max_lat": 40.551963132302625, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3584:point"}
|
||||
{"feature_id": 606473, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1973, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.54682521814877, "bbox_min_lat": 40.5377458524923, "bbox_max_lon": 141.54682521814877, "bbox_max_lat": 40.5377458524923, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6623", "VERLEN": 10, "_cm93_relation20_raw": 2256}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1973:point"}
|
||||
{"feature_id": 606474, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1974, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5279752427569, "bbox_min_lat": 40.55872215426594, "bbox_max_lon": 141.5279752427569, "bbox_max_lat": 40.55872215426594, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "INFORM": "Concrete", "SORIND": "GB,UKHO,graph,LL M-6624.8", "VERLEN": 16, "_cm93_relation20_raw": 2251}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1974:point"}
|
||||
{"feature_id": 606475, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1975, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.53323451813606, "bbox_min_lat": 40.53630720776126, "bbox_max_lon": 141.53323451813606, "bbox_max_lat": 40.53630720776126, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "SORIND": "GB,UKHO,graph,LL M-6623.6", "VERLEN": 9, "_cm93_relation20_raw": 2273}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1975:point"}
|
||||
{"feature_id": 606476, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1976, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52043728713608, "bbox_min_lat": 40.53762384848427, "bbox_max_lon": 141.52043728713608, "bbox_max_lat": 40.53762384848427, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "SORIND": "GB,UKHO,graph,LL M-6624.7", "VERLEN": 9, "_cm93_relation20_raw": 2272}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1976:point"}
|
||||
{"feature_id": 606477, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1977, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.55245070999536, "bbox_min_lat": 40.53446183378157, "bbox_max_lon": 141.55245070999536, "bbox_max_lat": 40.53446183378157, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "SORIND": "GB,UKHO,graph,LL M-6624", "VERLEN": 10, "_cm93_relation20_raw": 2254}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1977:point"}
|
||||
{"feature_id": 513782, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 852, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.54681340355705, "bbox_min_lat": 40.537767147215504, "bbox_max_lon": 141.54681340355705, "bbox_max_lat": 40.537767147215504, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BCNSHP": 3, "CATLAM": 2, "COLMAR": 3, "INFORM": "Metal|Framework tower", "SORIND": "GB,MDHS,graph,LL F-6623", "VERLEN": 10, "_cm93_relation20_raw": 1004}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:852:point"}
|
||||
{"feature_id": 513783, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 853, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.53316675151854, "bbox_min_lat": 40.53632341943859, "bbox_max_lon": 141.53316675151854, "bbox_max_lat": 40.53632341943859, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BCNSHP": 3, "CATLAM": 2, "COLMAR": 3, "SORIND": "GB,MDHS,graph,LL F-6623.6", "VERLEN": 9, "_cm93_relation20_raw": 1013}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:853:point"}
|
||||
{"feature_id": 513784, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 854, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.5280092020713, "bbox_min_lat": 40.558667212294104, "bbox_max_lon": 141.5280092020713, "bbox_max_lat": 40.558667212294104, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "INFORM": "Concrete", "SORIND": "GB,MDHS,graph,LL F-6624.8", "VERLEN": 16, "_cm93_relation20_raw": 1018}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:854:point"}
|
||||
{"feature_id": 513785, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 855, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.52035425935122, "bbox_min_lat": 40.53766039376199, "bbox_max_lon": 141.52035425935122, "bbox_max_lat": 40.53766039376199, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BCNSHP": 3, "CATLAM": 2, "COLMAR": 3, "SORIND": "GB,MDHS,graph,LL F-6624.7", "VERLEN": 9, "_cm93_relation20_raw": 1008}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:855:point"}
|
||||
{"feature_id": 513786, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 856, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.5524745007314, "bbox_min_lat": 40.53454921840199, "bbox_max_lon": 141.5524745007314, "bbox_max_lat": 40.53454921840199, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BCNSHP": 3, "CATLAM": 2, "COLMAR": 3, "SORIND": "GB,MDHS,graph,LL F-6624", "VERLEN": 10, "_cm93_relation20_raw": 1007}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:856:point"}
|
||||
{"feature_id": 360094, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 4422, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 161, "coverage_id": 1255, "bbox_min_lon": 141.54707956201432, "bbox_min_lat": 40.53735089780069, "bbox_max_lon": 141.54707956201432, "bbox_max_lat": 40.53735089780069, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6623", "VERLEN": 10, "_cm93_relation20_raw": 6632}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:4422:point"}
|
||||
{"feature_id": 360111, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 4439, "object_class_id": 7, "object_class": "BCNLAT", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 161, "coverage_id": 1255, "bbox_min_lon": 141.52785319505807, "bbox_min_lat": 40.55864373294613, "bbox_max_lon": 141.52785319505807, "bbox_max_lat": 40.55864373294613, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATLAM": 2, "COLMAR": 3, "INFORM": "Concrete", "SORIND": "GB,UKHO,graph,LL M-6624.8", "VERLEN": 16, "_cm93_relation20_raw": 6602}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:4439:point"}
|
||||
{"feature_id": 606478, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1978, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.53411954126562, "bbox_min_lat": 40.53822878284375, "bbox_max_lon": 141.53411954126562, "bbox_max_lat": 40.53822878284375, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLMAR": 5, "SORIND": "GB,UKHO,graph,LL M-6623.2", "VERLEN": 9, "_cm93_relation20_raw": 2255}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1978:point"}
|
||||
{"feature_id": 606479, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1979, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5108444502259, "bbox_min_lat": 40.531909745248655, "bbox_max_lon": 141.5108444502259, "bbox_max_lat": 40.531909745248655, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSPM": 6}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1979:point"}
|
||||
{"feature_id": 606480, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1980, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51061556493377, "bbox_min_lat": 40.53027778111349, "bbox_max_lon": 141.51061556493377, "bbox_max_lat": 40.53027778111349, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSPM": 6}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1980:point"}
|
||||
{"feature_id": 606481, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1981, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.57670746462134, "bbox_min_lat": 40.53993171998525, "bbox_max_lon": 141.57670746462134, "bbox_max_lat": 40.53993171998525, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1981:point"}
|
||||
{"feature_id": 513787, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 857, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51056813988717, "bbox_min_lat": 40.53031941496734, "bbox_max_lon": 141.51056813988717, "bbox_max_lat": 40.53031941496734, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSPM": 6}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:857:point"}
|
||||
{"feature_id": 513788, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 858, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.510807197899, "bbox_min_lat": 40.53193104223212, "bbox_max_lon": 141.510807197899, "bbox_max_lat": 40.53193104223212, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSPM": 6}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:858:point"}
|
||||
{"feature_id": 513789, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 859, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.57687367696272, "bbox_min_lat": 40.54005976366212, "bbox_max_lon": 141.57687367696272, "bbox_max_lat": 40.54005976366212, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:859:point"}
|
||||
{"feature_id": 360210, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 4538, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 161, "coverage_id": 1255, "bbox_min_lon": 141.53426198404347, "bbox_min_lat": 40.53797541747083, "bbox_max_lon": 141.53426198404347, "bbox_max_lat": 40.53797541747083, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLMAR": 5, "SORIND": "GB,UKHO,graph,LL M-6623.2", "VERLEN": 9, "_cm93_relation20_raw": 6663}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:4538:point"}
|
||||
{"feature_id": 360211, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 4539, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 161, "coverage_id": 1255, "bbox_min_lon": 141.47084549113066, "bbox_min_lat": 40.54653075073066, "bbox_max_lon": 141.47084549113066, "bbox_max_lat": 40.54653075073066, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6625", "VERLEN": 43, "_cm93_relation20_raw": 6720}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:4539:point"}
|
||||
{"feature_id": 360212, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 4540, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 161, "coverage_id": 1255, "bbox_min_lon": 141.3592715266989, "bbox_min_lat": 40.68775404209214, "bbox_max_lon": 141.3592715266989, "bbox_max_lat": 40.68775404209214, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6626", "_cm93_relation20_raw": 6620}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:4540:point"}
|
||||
{"feature_id": 329077, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 1254, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 161, "coverage_id": 1184, "bbox_min_lon": 141.47157794882685, "bbox_min_lat": 40.54722276035132, "bbox_max_lon": 141.47157794882685, "bbox_max_lat": 40.54722276035132, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSPM": 27, "INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6625", "VERLEN": 43, "_cm93_relation20_raw": 2039}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:1254:point"}
|
||||
{"feature_id": 329081, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 1258, "object_class_id": 9, "object_class": "BCNSPP", "geometry_type": "POINT", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 161, "coverage_id": 1184, "bbox_min_lon": 141.35805082775352, "bbox_min_lat": 40.68748385272822, "bbox_max_lon": 141.35805082775352, "bbox_max_lat": 40.68748385272822, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Metal", "SORIND": "GB,UKHO,graph,LL M-6626", "_cm93_relation20_raw": 2041}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:1258:point"}
|
||||
{"feature_id": 606482, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1982, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.51602234416788, "bbox_min_lat": 40.54453705850963, "bbox_max_lon": 141.51602234416788, "bbox_max_lat": 40.54453705850963, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 1, "CATSPM": 27, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2248}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1982:point"}
|
||||
{"feature_id": 606483, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1983, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5144252334628, "bbox_min_lat": 40.54336796282291, "bbox_max_lon": 141.5144252334628, "bbox_max_lat": 40.54336796282291, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 1, "CATSPM": 27, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2249}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1983:point"}
|
||||
{"feature_id": 606484, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1984, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.51764488657207, "bbox_min_lat": 40.545787460007524, "bbox_max_lon": 141.51764488657207, "bbox_max_lat": 40.545787460007524, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 1, "CATSPM": 27, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2246}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1984:point"}
|
||||
{"feature_id": 606485, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1985, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.55372738129145, "bbox_min_lat": 40.53761368147356, "bbox_max_lon": 141.55372738129145, "bbox_max_lat": 40.53761368147356, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 4, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2247}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1985:point"}
|
||||
{"feature_id": 606486, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1986, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.54760851448182, "bbox_min_lat": 40.55077866754792, "bbox_max_lon": 141.54760851448182, "bbox_max_lat": 40.55077866754792, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 4, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2250}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1986:point"}
|
||||
{"feature_id": 606487, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1987, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.54756782376322, "bbox_min_lat": 40.54819670438723, "bbox_max_lon": 141.54756782376322, "bbox_max_lat": 40.54819670438723, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 4, "COLMAR": 4, "STATUS": [8], "_cm93_relation20_raw": 2245}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1987:point"}
|
||||
{"feature_id": 513790, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 860, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.5684761285037, "bbox_min_lat": 40.56065929040829, "bbox_max_lon": 141.5684761285037, "bbox_max_lat": 40.56065929040829, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 1, "CATSPM": 10, "COLMAR": 4, "INFORM": "Private mark|Wave recorder", "_cm93_relation20_raw": 999}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:860:point"}
|
||||
{"feature_id": 513791, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 861, "object_class_id": 20, "object_class": "BOYSPP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 161, "coverage_id": 1759, "bbox_min_lon": 141.51750082223097, "bbox_min_lat": 40.5455495240557, "bbox_max_lon": 141.51750082223097, "bbox_max_lat": 40.5455495240557, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BOYSHP": 1, "CATSPM": 13, "COLMAR": 4, "_cm93_relation20_raw": 1000}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:861:point"}
|
||||
{"feature_id": 605092, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 592, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.52348400469134, "bbox_min_lat": 40.52173601209488, "bbox_max_lon": 141.52437920050053, "bbox_max_lat": 40.52204617870608, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:592:line"}
|
||||
{"feature_id": 356988, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1316, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.52370274123894, "bbox_min_lat": 40.52167354722334, "bbox_max_lon": 141.5250455351216, "bbox_max_lat": 40.522110813885774, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1316:line"}
|
||||
{"feature_id": 356990, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1318, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.47835292965644, "bbox_min_lat": 40.52104887561479, "bbox_max_lon": 141.4791463987689, "bbox_max_lat": 40.521486146352, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1318:line"}
|
||||
{"feature_id": 356995, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1323, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.402668183543, "bbox_min_lat": 40.59603029763058, "bbox_max_lon": 141.4032175083132, "bbox_max_lat": 40.59665426997741, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1323:line"}
|
||||
{"feature_id": 604954, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 454, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51496438548423, "bbox_min_lat": 40.52731879151409, "bbox_max_lon": 141.5275683355709, "bbox_max_lat": 40.53483802984688, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Vertical Datum: Nearly highest high water", "OBJNAM": "Hachinohe Bridge", "VERCLR": 31}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:454:area"}
|
||||
{"feature_id": 604955, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 455, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.50174498827877, "bbox_min_lat": 40.53866087547059, "bbox_max_lon": 141.5089777635101, "bbox_max_lat": 40.54449639465438, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hattaro Bridge"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:455:area"}
|
||||
{"feature_id": 604959, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 459, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.482833976809, "bbox_min_lat": 40.52831022010887, "bbox_max_lon": 141.48914103819214, "bbox_max_lat": 40.529779541153175, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "The Numadate Bridge"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:459:area"}
|
||||
{"feature_id": 604972, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 472, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4898785574668, "bbox_min_lat": 40.53319596934804, "bbox_max_lon": 141.49215215136863, "bbox_max_lat": 40.53527014434237, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "The Shin-O-Hashi Bridge"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:472:area"}
|
||||
{"feature_id": 604977, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 477, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5257881166321, "bbox_min_lat": 40.533745021918726, "bbox_max_lon": 141.5267596075387, "bbox_max_lat": 40.53444149879896, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Vertical Datum: Nearly highest high water|Vertical clearance 4.5m - 5.5m", "VERCLR": 4.5}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:477:area"}
|
||||
{"feature_id": 604979, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 479, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.52516249683362, "bbox_min_lat": 40.53330272992247, "bbox_max_lon": 141.52600174290475, "bbox_max_lat": 40.53390261951076, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Vertical Datum: Nearly highest high water|Vertical clearance 4.5m - 5.5m", "OBJNAM": "Seagull Bridge", "VERCLR": 5.300000190734863}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:479:area"}
|
||||
{"feature_id": 604983, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 483, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5234992637108, "bbox_min_lat": 40.52097838597756, "bbox_max_lon": 141.52466912187057, "bbox_max_lat": 40.521497030284365, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:483:area"}
|
||||
{"feature_id": 604984, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 484, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.52300588874778, "bbox_min_lat": 40.52218854978475, "bbox_max_lon": 141.52404858841192, "bbox_max_lat": 40.52259023798374, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:484:area"}
|
||||
{"feature_id": 604985, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 485, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.52215138365713, "bbox_min_lat": 40.52317496966713, "bbox_max_lon": 141.5231330472434, "bbox_max_lat": 40.52363766677541, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Minato Bridge"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:485:area"}
|
||||
{"feature_id": 604991, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 491, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4613289320284, "bbox_min_lat": 40.58684966151635, "bbox_max_lon": 141.46190877476846, "bbox_max_lat": 40.586946177037234, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Ichikawa Bridge"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:491:area"}
|
||||
{"feature_id": 604996, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 496, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.5893793380977, "bbox_max_lon": 141.46821583615161, "bbox_max_lat": 40.589475849967826, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:496:area"}
|
||||
{"feature_id": 604997, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 497, "object_class_id": 11, "object_class": "BRIDGE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.46707140969096, "bbox_min_lat": 40.5916193934965, "bbox_max_lon": 141.46731555400257, "bbox_max_lat": 40.59173114032683, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:497:area"}
|
||||
{"feature_id": 606118, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1618, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55108757092222, "bbox_min_lat": 40.53333831674283, "bbox_max_lon": 141.55108757092222, "bbox_max_lat": 40.53333831674283, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "1"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1618:point"}
|
||||
{"feature_id": 606119, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1619, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5020349096488, "bbox_min_lat": 40.53115223412844, "bbox_max_lon": 141.5020349096488, "bbox_max_lat": 40.53115223412844, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "1"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1619:point"}
|
||||
{"feature_id": 606120, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1620, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48699460278593, "bbox_min_lat": 40.557111171404564, "bbox_max_lon": 141.48699460278593, "bbox_max_lat": 40.557111171404564, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "1"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1620:point"}
|
||||
{"feature_id": 606121, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1621, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54962270505257, "bbox_min_lat": 40.53038963039137, "bbox_max_lon": 141.54962270505257, "bbox_max_lat": 40.53038963039137, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "2"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1621:point"}
|
||||
{"feature_id": 606122, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1622, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48800678441114, "bbox_min_lat": 40.556755428638965, "bbox_max_lon": 141.48800678441114, "bbox_max_lat": 40.556755428638965, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "2"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1622:point"}
|
||||
{"feature_id": 606123, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1623, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49382047083125, "bbox_min_lat": 40.53163521200654, "bbox_max_lon": 141.49382047083125, "bbox_max_lat": 40.53163521200654, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "2"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1623:point"}
|
||||
{"feature_id": 606124, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1624, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52261424058122, "bbox_min_lat": 40.53258590565955, "bbox_max_lon": 141.52261424058122, "bbox_max_lat": 40.53258590565955, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "2"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1624:point"}
|
||||
{"feature_id": 606125, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1625, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4971113326981, "bbox_min_lat": 40.55358415245652, "bbox_max_lon": 141.4971113326981, "bbox_max_lat": 40.55358415245652, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "3"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1625:point"}
|
||||
{"feature_id": 606126, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1626, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54800016264838, "bbox_min_lat": 40.529616849751626, "bbox_max_lon": 141.54800016264838, "bbox_max_lat": 40.529616849751626, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "3"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1626:point"}
|
||||
{"feature_id": 606127, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1627, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52164274967464, "bbox_min_lat": 40.53336881971666, "bbox_max_lon": 141.52164274967464, "bbox_max_lat": 40.53336881971666, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "3"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1627:point"}
|
||||
{"feature_id": 606128, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1628, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52041185543695, "bbox_min_lat": 40.53429915374781, "bbox_max_lon": 141.52041185543695, "bbox_max_lat": 40.53429915374781, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "4"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1628:point"}
|
||||
{"feature_id": 606129, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1629, "object_class_id": 10, "object_class": "BRTFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5460012310971, "bbox_min_lat": 40.52946941032777, "bbox_max_lon": 141.5460012310971, "bbox_max_lat": 40.52946941032777, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "4"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1629:point"}
|
||||
{"feature_id": 606176, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1676, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5023960397764, "bbox_min_lat": 40.538406703674674, "bbox_max_lon": 141.5023960397764, "bbox_max_lat": 40.538406703674674, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Tate"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1676:point"}
|
||||
{"feature_id": 606177, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1677, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5323088042879, "bbox_min_lat": 40.52455288241755, "bbox_max_lon": 141.5323088042879, "bbox_max_lat": 40.52455288241755, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Osawa"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1677:point"}
|
||||
{"feature_id": 606178, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1678, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55584329865871, "bbox_min_lat": 40.532311375187646, "bbox_max_lon": 141.55584329865871, "bbox_max_lat": 40.532311375187646, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hinode"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1678:point"}
|
||||
{"feature_id": 606179, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1679, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51138360224738, "bbox_min_lat": 40.53952505236351, "bbox_max_lon": 141.51138360224738, "bbox_max_lat": 40.53952505236351, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Toyosu"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1679:point"}
|
||||
{"feature_id": 606180, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1680, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49386116154983, "bbox_min_lat": 40.54159903142414, "bbox_max_lon": 141.49386116154983, "bbox_max_lat": 40.54159903142414, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hattaro"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1680:point"}
|
||||
{"feature_id": 606181, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1681, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49041262314842, "bbox_min_lat": 40.546936182273, "bbox_max_lon": 141.49041262314842, "bbox_max_lat": 40.546936182273, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hasunuma"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1681:point"}
|
||||
{"feature_id": 606182, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1682, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50835214371162, "bbox_min_lat": 40.53415680839427, "bbox_max_lon": 141.50835214371162, "bbox_max_lat": 40.53415680839427, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Kawaragi"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1682:point"}
|
||||
{"feature_id": 606183, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1683, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4815623918527, "bbox_min_lat": 40.56097339975906, "bbox_max_lon": 141.4815623918527, "bbox_max_lat": 40.56097339975906, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Kitanuma"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1683:point"}
|
||||
{"feature_id": 606184, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1684, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49126712823906, "bbox_min_lat": 40.529042342579885, "bbox_max_lon": 141.49126712823906, "bbox_max_lat": 40.529042342579885, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Numadate"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1684:point"}
|
||||
{"feature_id": 606185, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1685, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55269485430696, "bbox_min_lat": 40.525503676544034, "bbox_max_lon": 141.55269485430696, "bbox_max_lat": 40.525503676544034, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Sunamori"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1685:point"}
|
||||
{"feature_id": 606186, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1686, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5229906297283, "bbox_min_lat": 40.52654597546327, "bbox_max_lon": 141.5229906297283, "bbox_max_lat": 40.52654597546327, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Tatehana"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1686:point"}
|
||||
{"feature_id": 606187, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1687, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.525121806115, "bbox_min_lat": 40.52382579545554, "bbox_max_lon": 141.525121806115, "bbox_max_lat": 40.52382579545554, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Uenoyama"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1687:point"}
|
||||
{"feature_id": 356932, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1260, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.48195405870538, "bbox_min_lat": 40.50205608050168, "bbox_max_lon": 141.52370274123894, "bbox_max_lat": 40.53104292280326, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hachinohe"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1260:area"}
|
||||
{"feature_id": 356939, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1267, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 4, "coverage_id": 1255, "bbox_min_lon": 141.5200405761044, "bbox_min_lat": 40.52354752712211, "bbox_max_lon": 141.56233858340812, "bbox_max_lat": 40.536476560482114, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1267:area"}
|
||||
{"feature_id": 356940, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1268, "object_class_id": 14, "object_class": "BUAARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.35310688205578, "bbox_min_lat": 40.67017978633022, "bbox_max_lon": 141.37538505329078, "bbox_max_lat": 40.68794097735286, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Misawa"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1268:area"}
|
||||
{"feature_id": 606163, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1663, "object_class_id": 12, "object_class": "BUIREL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55765403563643, "bbox_min_lat": 40.538671042322356, "bbox_max_lon": 141.55765403563643, "bbox_max_lat": 40.538671042322356, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATREB": 6}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1663:point"}
|
||||
{"feature_id": 606164, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1664, "object_class_id": 12, "object_class": "BUIREL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54299011792065, "bbox_min_lat": 40.521868214432516, "bbox_max_lon": 141.54299011792065, "bbox_max_lat": 40.521868214432516, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATREB": 6}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1664:point"}
|
||||
{"feature_id": 606165, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1665, "object_class_id": 12, "object_class": "BUIREL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5470744488002, "bbox_min_lat": 40.52239193651546, "bbox_max_lon": 141.5470744488002, "bbox_max_lat": 40.52239193651546, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATREB": 7}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1665:point"}
|
||||
{"feature_id": 606166, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1666, "object_class_id": 12, "object_class": "BUIREL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55871199432005, "bbox_min_lat": 40.534716020543605, "bbox_max_lon": 141.55871199432005, "bbox_max_lat": 40.534716020543605, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATREB": 7}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1666:point"}
|
||||
{"feature_id": 513612, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 682, "object_class_id": 12, "object_class": "BUIREL", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5575354097058, "bbox_min_lat": 40.5387584211606, "bbox_max_lon": 141.5575354097058, "bbox_max_lat": 40.5387584211606, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATREB": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:682:point"}
|
||||
{"feature_id": 606167, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1667, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50884551867463, "bbox_min_lat": 40.532540150658996, "bbox_max_lon": 141.50884551867463, "bbox_max_lat": 40.532540150658996, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [17], "OBJNAM": "Tohoku Electric Power Thermal Power Plants", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1667:point"}
|
||||
{"feature_id": 606168, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1668, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.47135919416354, "bbox_min_lat": 40.54817129086928, "bbox_max_lon": 141.47135919416354, "bbox_max_lat": 40.54817129086928, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Japan Maritime Self Defense Force Air Base", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1668:point"}
|
||||
{"feature_id": 606169, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1669, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5349587873368, "bbox_min_lat": 40.56216759631946, "bbox_max_lon": 141.5349587873368, "bbox_max_lat": 40.56216759631946, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2, "INFORM": "Light support|Not in use"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1669:point"}
|
||||
{"feature_id": 606170, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1670, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48396823059, "bbox_min_lat": 40.55183073816308, "bbox_max_lon": 141.48396823059, "bbox_max_lat": 40.55183073816308, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [5]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1670:point"}
|
||||
{"feature_id": 606171, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1671, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52620519649776, "bbox_min_lat": 40.52337326881893, "bbox_max_lon": 141.52620519649776, "bbox_max_lat": 40.52337326881893, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [6]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1671:point"}
|
||||
{"feature_id": 606172, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1672, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.46028623236427, "bbox_min_lat": 40.58774369469495, "bbox_max_lon": 141.46028623236427, "bbox_max_lat": 40.58774369469495, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [6]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1672:point"}
|
||||
{"feature_id": 606173, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1673, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5438293639918, "bbox_min_lat": 40.52141567458002, "bbox_max_lon": 141.5438293639918, "bbox_max_lat": 40.52141567458002, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [6]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1673:point"}
|
||||
{"feature_id": 606174, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1674, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55499896624775, "bbox_min_lat": 40.52998798893422, "bbox_max_lon": 141.55499896624775, "bbox_max_lat": 40.52998798893422, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [6]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1674:point"}
|
||||
{"feature_id": 606175, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1675, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51179050943338, "bbox_min_lat": 40.52511725916765, "bbox_max_lon": 141.51179050943338, "bbox_max_lat": 40.52511725916765, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [6]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1675:point"}
|
||||
{"feature_id": 513613, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 683, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.54623864706045, "bbox_min_lat": 40.52743160734014, "bbox_max_lon": 141.54623864706045, "bbox_max_lat": 40.52743160734014, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [2]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:683:point"}
|
||||
{"feature_id": 513614, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 684, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.54700668450278, "bbox_min_lat": 40.527446860172084, "bbox_max_lon": 141.54700668450278, "bbox_max_lat": 40.527446860172084, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [3]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:684:point"}
|
||||
{"feature_id": 359260, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3588, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.59181901274104, "bbox_min_lat": 40.50055642020571, "bbox_max_lon": 141.59181901274104, "bbox_max_lat": 40.50055642020571, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"BUISHP": 4, "CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3588:point"}
|
||||
{"feature_id": 604957, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 457, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4970096059016, "bbox_min_lat": 40.533658597275405, "bbox_max_lon": 141.49857111222792, "bbox_max_lat": 40.535371817936316, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [13], "OBJNAM": "Tohoku Electric Power Electric Substation"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:457:area"}
|
||||
{"feature_id": 604958, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 458, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55372738129145, "bbox_min_lat": 40.530831941615936, "bbox_max_lon": 141.55581278061976, "bbox_max_lat": 40.534751606613355, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No.1 Fish Market"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:458:area"}
|
||||
{"feature_id": 604961, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 461, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51506102594092, "bbox_min_lat": 40.52768994342353, "bbox_max_lon": 141.51729392912415, "bbox_max_lat": 40.528884733556836, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No.2 Fish Market"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:461:area"}
|
||||
{"feature_id": 604964, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 464, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53618968157446, "bbox_min_lat": 40.5271408412395, "bbox_max_lon": 141.53678478333399, "bbox_max_lat": 40.529855802611685, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No.3 Fish Market"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:464:area"}
|
||||
{"feature_id": 604967, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 467, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.56627538164003, "bbox_min_lat": 40.53100479808267, "bbox_max_lon": 141.5673028222847, "bbox_max_lat": 40.531767394819084, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:467:area"}
|
||||
{"feature_id": 604968, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 468, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.56943399867143, "bbox_min_lat": 40.53479736010381, "bbox_max_lon": 141.57069541094805, "bbox_max_lat": 40.53575817618616, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:468:area"}
|
||||
{"feature_id": 604969, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 469, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4846599728062, "bbox_min_lat": 40.55606934796726, "bbox_max_lon": 141.48570267247035, "bbox_max_lat": 40.55687739780013, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Port Management Office"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:469:area"}
|
||||
{"feature_id": 604971, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 471, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55004487125805, "bbox_min_lat": 40.52108516601581, "bbox_max_lon": 141.55107231190274, "bbox_max_lat": 40.52168516497249, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:471:area"}
|
||||
{"feature_id": 604974, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 474, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55127576549575, "bbox_min_lat": 40.52684086684987, "bbox_max_lon": 141.55255243679184, "bbox_max_lat": 40.52762384802846, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19], "INFORM": "Fisheries High School"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:474:area"}
|
||||
{"feature_id": 604978, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 478, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48570267247035, "bbox_min_lat": 40.545787460007524, "bbox_max_lon": 141.4868064082124, "bbox_max_lat": 40.54645839752919, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:478:area"}
|
||||
{"feature_id": 604980, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 480, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53568613393176, "bbox_min_lat": 40.52661207192136, "bbox_max_lon": 141.53639313516746, "bbox_max_lat": 40.527084913912766, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Fishery Hall"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:480:area"}
|
||||
{"feature_id": 604981, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 481, "object_class_id": 13, "object_class": "BUISGL", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.46143065882492, "bbox_min_lat": 40.58446212797802, "bbox_max_lon": 141.46238689071203, "bbox_max_lat": 40.584893922271476, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATBUI": [19]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:481:area"}
|
||||
{"feature_id": 605093, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 593, "object_class_id": 21, "object_class": "CBLOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.48957337707728, "bbox_min_lat": 40.53383653024312, "bbox_max_lon": 141.49799126948784, "bbox_max_lat": 40.535102382575076, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:593:line"}
|
||||
{"feature_id": 605094, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 594, "object_class_id": 21, "object_class": "CBLOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.49748772184518, "bbox_min_lat": 40.53474143916679, "bbox_max_lon": 141.49922725006533, "bbox_max_lat": 40.54026213561014, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:594:line"}
|
||||
{"feature_id": 605095, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 595, "object_class_id": 21, "object_class": "CBLOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.49142989111343, "bbox_min_lat": 40.53482786241341, "bbox_max_lon": 141.49712150537775, "bbox_max_lat": 40.53634279298588, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:595:line"}
|
||||
{"feature_id": 605096, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 596, "object_class_id": 21, "object_class": "CBLOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.49642976316153, "bbox_min_lat": 40.535193889045665, "bbox_max_lon": 141.49718254145566, "bbox_max_lat": 40.53960130273064, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:596:line"}
|
||||
{"feature_id": 513239, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 309, "object_class_id": 21, "object_class": "CBLOHD", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.55523638371943, "bbox_min_lat": 40.5385550841112, "bbox_max_lon": 141.55672159519733, "bbox_max_lat": 40.538595751570455, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1, "QUAVEM": 1, "VERCLR": 12}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:309:line"}
|
||||
{"feature_id": 605097, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 597, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55528888761776, "bbox_min_lat": 40.53959113602004, "bbox_max_lon": 141.55550760023024, "bbox_max_lat": 40.5453909937673, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"STATUS": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:597:line"}
|
||||
{"feature_id": 605098, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 598, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.51061556493377, "bbox_min_lat": 40.53039979849827, "bbox_max_lon": 141.51085970924538, "bbox_max_lat": 40.531833486127546, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:598:line"}
|
||||
{"feature_id": 605099, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 599, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55552285924972, "bbox_min_lat": 40.54564513906312, "bbox_max_lon": 141.56850828482325, "bbox_max_lat": 40.560744721391565, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"STATUS": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:599:line"}
|
||||
{"feature_id": 605100, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 600, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.55511595206372, "bbox_min_lat": 40.53803052764702, "bbox_max_lon": 141.55866621726165, "bbox_max_lat": 40.544882700282585, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:600:line"}
|
||||
{"feature_id": 605101, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 601, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.55882389379622, "bbox_min_lat": 40.54509110107785, "bbox_max_lon": 141.56853371652238, "bbox_max_lat": 40.560734557890434, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:601:line"}
|
||||
{"feature_id": 513240, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 310, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.51056813988717, "bbox_min_lat": 40.530395675806176, "bbox_max_lon": 141.51087840666852, "bbox_max_lat": 40.53183953131183, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCBL": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:310:line"}
|
||||
{"feature_id": 513241, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 311, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.55523638371943, "bbox_min_lat": 40.53998351382215, "bbox_max_lon": 141.5684303514376, "bbox_max_lat": 40.56062371810466, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"STATUS": [4]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:311:line"}
|
||||
{"feature_id": 513242, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 312, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 2, "coverage_id": 1759, "bbox_min_lon": 141.55518552031265, "bbox_min_lat": 40.53802640489446, "bbox_max_lon": 141.55679280396683, "bbox_max_lat": 40.53998351382215, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:312:line"}
|
||||
{"feature_id": 513243, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 313, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 2, "coverage_id": 1759, "bbox_min_lon": 141.55523638371943, "bbox_min_lat": 40.53998351382215, "bbox_max_lon": 141.56826250219524, "bbox_max_lat": 40.5603696296718, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:313:line"}
|
||||
{"feature_id": 357026, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1354, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.55592979442275, "bbox_min_lat": 40.53903708754933, "bbox_max_lon": 141.56905255282143, "bbox_max_lat": 40.55801940598371, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1354:line"}
|
||||
{"feature_id": 357028, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1356, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.440754700942, "bbox_min_lat": 40.48555797336778, "bbox_max_lon": 141.89883052318518, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1356:line"}
|
||||
{"feature_id": 357031, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1359, "object_class_id": 22, "object_class": "CBLSUB", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.55397663968432, "bbox_min_lat": 40.53753825431301, "bbox_max_lon": 141.56679421765514, "bbox_max_lat": 40.559705075420034, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1359:line"}
|
||||
{"feature_id": 606204, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1704, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5084538705081, "bbox_min_lat": 40.52984563442224, "bbox_max_lon": 141.5084538705081, "bbox_max_lat": 40.52984563442224, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2, "HEIGHT": 30}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1704:point"}
|
||||
{"feature_id": 606205, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1705, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50834197103194, "bbox_min_lat": 40.529937148071795, "bbox_max_lon": 141.50834197103194, "bbox_max_lat": 40.529937148071795, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2, "HEIGHT": 30}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1705:point"}
|
||||
{"feature_id": 606206, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1706, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48877482172475, "bbox_min_lat": 40.55533243867397, "bbox_max_lon": 141.48877482172475, "bbox_max_lat": 40.55533243867397, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1706:point"}
|
||||
{"feature_id": 606207, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1707, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.511627746559, "bbox_min_lat": 40.52949483094124, "bbox_max_lon": 141.511627746559, "bbox_max_lat": 40.52949483094124, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 27}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1707:point"}
|
||||
{"feature_id": 606208, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1708, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4817607591059, "bbox_min_lat": 40.568676863401265, "bbox_max_lon": 141.4817607591059, "bbox_max_lat": 40.568676863401265, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 81}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1708:point"}
|
||||
{"feature_id": 606209, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1709, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4907890122955, "bbox_min_lat": 40.55222716628113, "bbox_max_lon": 141.4907890122955, "bbox_max_lat": 40.55222716628113, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1709:point"}
|
||||
{"feature_id": 606210, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1710, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4907178035379, "bbox_min_lat": 40.552328814138484, "bbox_max_lon": 141.4907178035379, "bbox_max_lat": 40.552328814138484, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1710:point"}
|
||||
{"feature_id": 606211, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1711, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49086530739285, "bbox_min_lat": 40.55339610732457, "bbox_max_lon": 141.49086530739285, "bbox_max_lat": 40.55339610732457, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 40}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1711:point"}
|
||||
{"feature_id": 606212, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1712, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55584329865871, "bbox_min_lat": 40.53195550067965, "bbox_max_lon": 141.55584329865871, "bbox_max_lat": 40.53195550067965, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1712:point"}
|
||||
{"feature_id": 606213, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1713, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.47853093331693, "bbox_min_lat": 40.567955336499885, "bbox_max_lon": 141.47853093331693, "bbox_max_lat": 40.567955336499885, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 71}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1713:point"}
|
||||
{"feature_id": 606214, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1714, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4800364899052, "bbox_min_lat": 40.56812301598066, "bbox_max_lon": 141.4800364899052, "bbox_max_lat": 40.56812301598066, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 82}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1714:point"}
|
||||
{"feature_id": 606215, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1715, "object_class_id": 33, "object_class": "CHIMNY", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.507701092214, "bbox_min_lat": 40.53496003892795, "bbox_max_lon": 141.507701092214, "bbox_max_lat": 40.53496003892795, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"HEIGHT": 123}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1715:point"}
|
||||
{"feature_id": 605102, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 602, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55769472635504, "bbox_min_lat": 40.539565719236776, "bbox_max_lon": 141.55789817994807, "bbox_max_lat": 40.53977921991639, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:602:line"}
|
||||
{"feature_id": 605103, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 603, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55833560517303, "bbox_min_lat": 40.5392149666431, "bbox_max_lon": 141.55843733196951, "bbox_max_lat": 40.53943355180842, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:603:line"}
|
||||
{"feature_id": 605104, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 604, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.58220071163242, "bbox_min_lat": 40.53133525773399, "bbox_max_lon": 141.58275003633358, "bbox_max_lat": 40.53198092035005, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:604:line"}
|
||||
{"feature_id": 605105, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 605, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.58185484052436, "bbox_min_lat": 40.53245372446163, "bbox_max_lon": 141.58341634685064, "bbox_max_lat": 40.53425339991716, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:605:line"}
|
||||
{"feature_id": 605106, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 606, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.58073584576283, "bbox_min_lat": 40.53929121736317, "bbox_max_lon": 141.58107154419127, "bbox_max_lat": 40.5394793021016, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:606:line"}
|
||||
{"feature_id": 605107, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 607, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.5812597387648, "bbox_min_lat": 40.53814236398398, "bbox_max_lon": 141.58260761881846, "bbox_max_lat": 40.53865070861728, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:607:line"}
|
||||
{"feature_id": 605108, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 608, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.57895562682404, "bbox_min_lat": 40.541436368720355, "bbox_max_lon": 141.57974909583675, "bbox_max_lat": 40.54199552010982, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:608:line"}
|
||||
{"feature_id": 605109, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 609, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.58141741529937, "bbox_min_lat": 40.53762384848427, "bbox_max_lon": 141.5826330505176, "bbox_max_lat": 40.53796444245105, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCOA": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:609:line"}
|
||||
{"feature_id": 605110, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 610, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.58137163824097, "bbox_min_lat": 40.539697886404404, "bbox_max_lon": 141.58144793333835, "bbox_max_lat": 40.53978938659846, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:610:line"}
|
||||
{"feature_id": 605111, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 611, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5812597387648, "bbox_min_lat": 40.53426356743778, "bbox_max_lon": 141.58143267431888, "bbox_max_lat": 40.53439574506549, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:611:line"}
|
||||
{"feature_id": 605112, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 612, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5634321176778, "bbox_min_lat": 40.54065863220875, "bbox_max_lon": 141.56352367179463, "bbox_max_lat": 40.540729798016514, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:612:line"}
|
||||
{"feature_id": 605113, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 613, "object_class_id": 35, "object_class": "COALNE", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5603599684234, "bbox_min_lat": 40.53870662629144, "bbox_max_lon": 141.56043626352078, "bbox_max_lat": 40.53875237708104, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:613:line"}
|
||||
{"feature_id": 356834, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1162, "object_class_id": 36, "object_class": "CONZNE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.65029158272228, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 142.48599766642022, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP", "SORIND": "CM,PAD,graph,B3900420"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1162:area"}
|
||||
{"feature_id": 328186, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 363, "object_class_id": 36, "object_class": "CONZNE", "geometry_type": "AREA", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1184, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 40.65462374281519, "bbox_max_lon": 141.82085695438715, "bbox_max_lat": 42.413189699068205, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:363:area"}
|
||||
{"feature_id": 606221, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1721, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.504298330871, "bbox_min_lat": 40.552633756784694, "bbox_max_lon": 141.504298330871, "bbox_max_lat": 40.552633756784694, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1721:point"}
|
||||
{"feature_id": 606222, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1722, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50241129879586, "bbox_min_lat": 40.552633756784694, "bbox_max_lon": 141.50241129879586, "bbox_max_lat": 40.552633756784694, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1722:point"}
|
||||
{"feature_id": 606223, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1723, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4969485698237, "bbox_min_lat": 40.557309370125466, "bbox_max_lon": 141.4969485698237, "bbox_max_lat": 40.557309370125466, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1723:point"}
|
||||
{"feature_id": 606224, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1724, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55016185707404, "bbox_min_lat": 40.53230120737078, "bbox_max_lon": 141.55016185707404, "bbox_max_lat": 40.53230120737078, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1724:point"}
|
||||
{"feature_id": 606225, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1725, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50749763862098, "bbox_min_lat": 40.53064383260135, "bbox_max_lon": 141.50749763862098, "bbox_max_lat": 40.53064383260135, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1725:point"}
|
||||
{"feature_id": 606226, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1726, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50274699722434, "bbox_min_lat": 40.53117257010931, "bbox_max_lon": 141.50274699722434, "bbox_max_lat": 40.53117257010931, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1726:point"}
|
||||
{"feature_id": 606227, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1727, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50241129879586, "bbox_min_lat": 40.53120307406901, "bbox_max_lon": 141.50241129879586, "bbox_max_lat": 40.53120307406901, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1727:point"}
|
||||
{"feature_id": 513642, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 712, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.50327432735523, "bbox_min_lat": 40.55255339838609, "bbox_max_lon": 141.50327432735523, "bbox_max_lat": 40.55255339838609, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:712:point"}
|
||||
{"feature_id": 513643, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 713, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.4910365916845, "bbox_min_lat": 40.55806246256592, "bbox_max_lon": 141.4910365916845, "bbox_max_lat": 40.55806246256592, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:713:point"}
|
||||
{"feature_id": 513644, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 714, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5070178740941, "bbox_min_lat": 40.53227674902543, "bbox_max_lon": 141.5070178740941, "bbox_max_lat": 40.53227674902543, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:714:point"}
|
||||
{"feature_id": 513645, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 715, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.55027211521792, "bbox_min_lat": 40.53240893056331, "bbox_max_lon": 141.55027211521792, "bbox_max_lat": 40.53240893056331, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:715:point"}
|
||||
{"feature_id": 513646, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 716, "object_class_id": 39, "object_class": "CRANES", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.49833040421643, "bbox_min_lat": 40.55698507976717, "bbox_max_lon": 141.49833040421643, "bbox_max_lat": 40.55698507976717, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCRN": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:716:point"}
|
||||
{"feature_id": 606201, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1701, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55814741059947, "bbox_min_lat": 40.537379839801666, "bbox_max_lon": 141.55814741059947, "bbox_max_lat": 40.537379839801666, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Slipway"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1701:point"}
|
||||
{"feature_id": 606202, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1702, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5603599684234, "bbox_min_lat": 40.562269229085544, "bbox_max_lon": 141.5603599684234, "bbox_max_lat": 40.562269229085544, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Ebb stream|Orientation: 133 Deg|Current velocity: 0.3kn"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1702:point"}
|
||||
{"feature_id": 606203, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1703, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55902734738925, "bbox_min_lat": 40.56296540938435, "bbox_max_lon": 141.55902734738925, "bbox_max_lat": 40.56296540938435, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Flood stream|Orientation: 299 Deg|Current velocity: 0.3kn"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1703:point"}
|
||||
{"feature_id": 513615, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 685, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.49002949623028, "bbox_min_lat": 40.55958194940096, "bbox_max_lon": 141.49002949623028, "bbox_max_lat": 40.55958194940096, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "FOUL"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:685:point"}
|
||||
{"feature_id": 513616, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 686, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51584267517003, "bbox_min_lat": 40.54395347344211, "bbox_max_lon": 141.51584267517003, "bbox_max_lat": 40.54395347344211, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Marked by buoys"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:686:point"}
|
||||
{"feature_id": 513617, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 687, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52292286139348, "bbox_min_lat": 40.534788153657274, "bbox_max_lon": 141.52292286139348, "bbox_max_lat": 40.534788153657274, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "(liable to shoal)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:687:point"}
|
||||
{"feature_id": 513618, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 688, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.53515551072357, "bbox_min_lat": 40.56668090077736, "bbox_max_lon": 141.53515551072357, "bbox_max_lat": 40.56668090077736, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "WORKS IN PROGRESS (1998)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:688:point"}
|
||||
{"feature_id": 513619, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 689, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5528152855568, "bbox_min_lat": 40.548711015211666, "bbox_max_lon": 141.5528152855568, "bbox_max_lat": 40.548711015211666, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Works in progress|Source date: 2000"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:689:point"}
|
||||
{"feature_id": 513620, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 690, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52889422534923, "bbox_min_lat": 40.54540211970138, "bbox_max_lon": 141.52889422534923, "bbox_max_lat": 40.54540211970138, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Works in progress|Source date: 2002"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:690:point"}
|
||||
{"feature_id": 513621, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 691, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5449924935944, "bbox_min_lat": 40.54999183410007, "bbox_max_lon": 141.5449924935944, "bbox_max_lat": 40.54999183410007, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Works in progress|Source date: 2005"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:691:point"}
|
||||
{"feature_id": 513622, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 692, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.55518552031265, "bbox_min_lat": 40.54620521535582, "bbox_max_lon": 141.55518552031265, "bbox_max_lat": 40.54620521535582, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Works in progress|Source date: 2005"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:692:point"}
|
||||
{"feature_id": 513623, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 693, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.56564812308685, "bbox_min_lat": 40.562691962071, "bbox_max_lon": 141.56564812308685, "bbox_max_lat": 40.562691962071, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Ebb stream|Orientation: 130 Deg|Current velocity: 0.2kn"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:693:point"}
|
||||
{"feature_id": 604946, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 446, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Caution|Undiscovered shoals may exist around charted shoals. Mariners are advised to exercise caution. |Caution|Depths are very changeable at the entrance to river mouths. Mariners are advised to exercise caution."}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:446:area"}
|
||||
{"feature_id": 604947, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 447, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Unassessed. Surveys before the earthquake (11th Mar. 2011)"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:447:area"}
|
||||
{"feature_id": 604948, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 448, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.526190070337684, "bbox_max_lon": 141.5663771084365, "bbox_max_lat": 40.59233558585386, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Section 3"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:448:area"}
|
||||
{"feature_id": 604949, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 449, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5223802689493, "bbox_min_lat": 40.5271408412395, "bbox_max_lon": 141.54366660111737, "bbox_max_lat": 40.53812203011843, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Section 2"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:449:area"}
|
||||
{"feature_id": 604951, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 451, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54241027518057, "bbox_min_lat": 40.52946941032777, "bbox_max_lon": 141.55844750464917, "bbox_max_lat": 40.53889471267114, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Section 1"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:451:area"}
|
||||
{"feature_id": 604965, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 465, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5131943392251, "bbox_min_lat": 40.55059061453722, "bbox_max_lon": 141.5141658301317, "bbox_max_lat": 40.551896809679086, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Caisson Temporary Storage Area"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:465:area"}
|
||||
{"feature_id": 604970, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 470, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.52520827389202, "bbox_min_lat": 40.541156791275355, "bbox_max_lon": 141.52667313976167, "bbox_max_lat": 40.54224967828935, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Caisson Temporary Storage Area"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:470:area"}
|
||||
{"feature_id": 604976, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 476, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55397152560306, "bbox_min_lat": 40.53499562486809, "bbox_max_lon": 141.5549277574902, "bbox_max_lat": 40.53549382604538, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Caisson Temporary Storage Area"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:476:area"}
|
||||
{"feature_id": 604986, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 486, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5003564175065, "bbox_min_lat": 40.54661596521501, "bbox_max_lon": 141.5018314560558, "bbox_max_lat": 40.54858298867289, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Unassessed. Surveys before the earthquake (11th Mar. 2011)"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:486:area"}
|
||||
{"feature_id": 513193, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 263, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48062993865776, "bbox_min_lat": 40.524813153073175, "bbox_max_lon": 141.5780028445932, "bbox_max_lat": 40.572168478876776, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "CABLES|1. Submarine and overhead cables may conduct high voltages; contact with or proximity to these poses an extreme danger and mariners may risk prosecution if damage is caused.|2. Anchoring or trawling in the vicinity of submarine cables should be avoided. Seabed mobility may leave a cable spanning undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. If a cable is snagged, care must be taken not to sever it.|3. Sufficient clearance must be allowed under overhead cables.|4. Some cables, particularly those installed since this edition was published, may not be charted.|5. For further information, see The Mariner's Handbook."}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:263:area"}
|
||||
{"feature_id": 513207, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 277, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.51666157601915, "bbox_min_lat": 40.539780180491206, "bbox_max_lon": 141.5175465992971, "bbox_max_lat": 40.54040542851488, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Dredged to 7.5m|Source date: 1994"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:277:area"}
|
||||
{"feature_id": 356914, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1242, "object_class_id": 29, "object_class": "CTNARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.30000548760523, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 143.08335783594634, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "CAUTION|As undiscovered shoals may exist around charted shoals, mariners are warned to excercise cautions.|NOTE|The straight baselines and the limits of the territorial sea shown on this chart are based on the provisions of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone and the Enforcement Order No.210 of 1977 of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone.|NOTE|Of all the base points of the straight baselines given in the Enforcement Order, only major points are shown on this chart due to its small scale."}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1242:area"}
|
||||
{"feature_id": 606488, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1988, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57150413898023, "bbox_min_lat": 40.53792377460575, "bbox_max_lon": 141.57150413898023, "bbox_max_lat": 40.53792377460575, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 1, "OBJNAM": "Monomiiwa"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1988:point"}
|
||||
{"feature_id": 606489, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1989, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52191741202518, "bbox_min_lat": 40.52766960638582, "bbox_max_lon": 141.52191741202518, "bbox_max_lat": 40.52766960638582, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1989:point"}
|
||||
{"feature_id": 606490, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1990, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56324392310424, "bbox_min_lat": 40.52365800503656, "bbox_max_lon": 141.56324392310424, "bbox_max_lat": 40.52365800503656, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 1}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1990:point"}
|
||||
{"feature_id": 606491, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1991, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5553753553948, "bbox_min_lat": 40.53513796843959, "bbox_max_lon": 141.5553753553948, "bbox_max_lat": 40.53513796843959, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1991:point"}
|
||||
{"feature_id": 606492, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1992, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52139351902318, "bbox_min_lat": 40.52867628234413, "bbox_max_lon": 141.52139351902318, "bbox_max_lat": 40.52867628234413, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1992:point"}
|
||||
{"feature_id": 513792, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 862, "object_class_id": 38, "object_class": "CTRPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5219157659393, "bbox_min_lat": 40.5277061577843, "bbox_max_lon": 141.5219157659393, "bbox_max_lat": 40.5277061577843, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATCTR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:862:point"}
|
||||
{"feature_id": 604502, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48576370854826, "bbox_min_lat": 40.52299700839042, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 10, "DRVAL2": 20}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2:area"}
|
||||
{"feature_id": 604503, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 3, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51688702193815, "bbox_min_lat": 40.534319488773654, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 20, "DRVAL2": 50}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:3:area"}
|
||||
{"feature_id": 604507, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 7, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.47257482938176, "bbox_min_lat": 40.55943869885535, "bbox_max_lon": 141.50387616466548, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:7:area"}
|
||||
{"feature_id": 604508, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 8, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4939934063853, "bbox_min_lat": 40.5271408412395, "bbox_max_lon": 141.549668482111, "bbox_max_lat": 40.538406703674674, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:8:area"}
|
||||
{"feature_id": 604509, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 9, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5479849036289, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5487151380486, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:9:area"}
|
||||
{"feature_id": 604511, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 11, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51570190475888, "bbox_min_lat": 40.53258590565955, "bbox_max_lon": 141.5315814576929, "bbox_max_lat": 40.54706833489824, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:11:area"}
|
||||
{"feature_id": 604512, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 12, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51287389981613, "bbox_min_lat": 40.54557906137898, "bbox_max_lon": 141.52104764791508, "bbox_max_lat": 40.552369473238194, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:12:area"}
|
||||
{"feature_id": 604513, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 13, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.5815207726836, "bbox_max_lon": 141.48037218833363, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 0, "DRVAL2": 5}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:13:area"}
|
||||
{"feature_id": 604516, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 16, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5007328066536, "bbox_min_lat": 40.54609751530363, "bbox_max_lon": 141.51451170123983, "bbox_max_lat": 40.55281163935367, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:16:area"}
|
||||
{"feature_id": 604517, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 17, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4772847800598, "bbox_min_lat": 40.56972357169742, "bbox_max_lon": 141.48750323676845, "bbox_max_lat": 40.57913812927698, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 0, "DRVAL2": 5}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:17:area"}
|
||||
{"feature_id": 604518, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 18, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.58144793333835, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59405188342498, "bbox_max_lat": 40.53718158209264, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 2, "DRVAL2": 5}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:18:area"}
|
||||
{"feature_id": 604521, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 21, "object_class_id": 44, "object_class": "DEPARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48479221764165, "bbox_min_lat": 40.55707559721309, "bbox_max_lon": 141.49351529044174, "bbox_max_lat": 40.56221333108327, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 5, "DRVAL2": 10}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:21:area"}
|
||||
{"feature_id": 605210, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 710, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.52458265409354, "bbox_min_lat": 40.53508204778686, "bbox_max_lon": 141.5254269865045, "bbox_max_lat": 40.53578867805837, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:710:line"}
|
||||
{"feature_id": 605211, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 711, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.53477059276324, "bbox_min_lat": 40.53615469944172, "bbox_max_lon": 141.53681530137294, "bbox_max_lat": 40.53760351446132, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:711:line"}
|
||||
{"feature_id": 605212, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 712, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.5195980410649, "bbox_min_lat": 40.53461942968764, "bbox_max_lon": 141.52048306419448, "bbox_max_lat": 40.535371817936316, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:712:line"}
|
||||
{"feature_id": 605213, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 713, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.51949631426845, "bbox_min_lat": 40.52729337007523, "bbox_max_lon": 141.52280243515474, "bbox_max_lat": 40.52946941032777, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:713:line"}
|
||||
{"feature_id": 605214, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 714, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.54307658569766, "bbox_min_lat": 40.52757300537249, "bbox_max_lon": 141.54339193876683, "bbox_max_lat": 40.528330556952184, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:714:line"}
|
||||
{"feature_id": 605215, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 715, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55552285924972, "bbox_min_lat": 40.535422654675436, "bbox_max_lon": 141.55603149323224, "bbox_max_lat": 40.5360326925361, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:715:line"}
|
||||
{"feature_id": 605216, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 716, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.59525734596352, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59589313844168, "bbox_max_lat": 40.52121736963704, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:716:line"}
|
||||
{"feature_id": 605217, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 717, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.50291993277838, "bbox_min_lat": 40.53093870595688, "bbox_max_lon": 141.50567164262378, "bbox_max_lat": 40.531381013557265, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:717:line"}
|
||||
{"feature_id": 605218, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 718, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55608744297032, "bbox_min_lat": 40.53584459812132, "bbox_max_lon": 141.55759299955852, "bbox_max_lat": 40.53620045197403, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:718:line"}
|
||||
{"feature_id": 605219, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 719, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.47612509457966, "bbox_min_lat": 40.58484820300763, "bbox_max_lon": 141.47816980318936, "bbox_max_lat": 40.58632644337369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:719:line"}
|
||||
{"feature_id": 605220, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 720, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.55607218395082, "bbox_min_lat": 40.53633262578077, "bbox_max_lon": 141.55801516576403, "bbox_max_lat": 40.53697315668907, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:720:line"}
|
||||
{"feature_id": 605221, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 721, "object_class_id": 45, "object_class": "DEPCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.54961253237295, "bbox_min_lat": 40.53841687056501, "bbox_max_lon": 141.55126050647627, "bbox_max_lat": 40.53875237708104, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALDCO": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:721:line"}
|
||||
{"feature_id": 512940, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 10, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.4920691188421, "bbox_min_lat": 40.55270078700058, "bbox_max_lon": 141.5073993496449, "bbox_max_lat": 40.562580166733625, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 13, "INFORM": "(1981-2000)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:10:area"}
|
||||
{"feature_id": 512943, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 13, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.52371124419855, "bbox_min_lat": 40.55013922835277, "bbox_max_lon": 141.53126954644574, "bbox_max_lat": 40.560735516709556, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 14, "INFORM": "(1995-2000)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:13:area"}
|
||||
{"feature_id": 512944, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 14, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.51267897126843, "bbox_min_lat": 40.55118114399031, "bbox_max_lon": 141.52546603173238, "bbox_max_lat": 40.55552143762379, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 13, "INFORM": "(1981-2000)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:14:area"}
|
||||
{"feature_id": 512945, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 15, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48609775488637, "bbox_min_lat": 40.559378675568496, "bbox_max_lon": 141.49588387435043, "bbox_max_lat": 40.564739816350254, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 12, "INFORM": "Source date: 1991"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:15:area"}
|
||||
{"feature_id": 512949, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 19, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.5190826741818, "bbox_min_lat": 40.5324801051295, "bbox_max_lon": 141.52580173021713, "bbox_max_lat": 40.54025801283995, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 7.5, "INFORM": "1980"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:19:area"}
|
||||
{"feature_id": 512953, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 23, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48605197782027, "bbox_min_lat": 40.55707655633874, "bbox_max_lon": 141.490965382915, "bbox_max_lat": 40.560039313267254, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 7.5}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:23:area"}
|
||||
{"feature_id": 512954, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 24, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.51567482592765, "bbox_min_lat": 40.53742146874959, "bbox_max_lon": 141.52047633152748, "bbox_max_lat": 40.54040542851488, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 7.5, "INFORM": "1994"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:24:area"}
|
||||
{"feature_id": 512955, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 25, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48532971744402, "bbox_min_lat": 40.55824541263988, "bbox_max_lon": 141.4933915674183, "bbox_max_lat": 40.56201610559284, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 9.59999942779541, "INFORM": "Source date: 1990"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:25:area"}
|
||||
{"feature_id": 512957, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 27, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.4975420214114, "bbox_min_lat": 40.55209598337879, "bbox_max_lon": 141.50161618029426, "bbox_max_lat": 40.55544520538552, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 10, "INFORM": "Source date: 1977"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:27:area"}
|
||||
{"feature_id": 512958, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 28, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.508960856233, "bbox_min_lat": 40.5480553484439, "bbox_max_lon": 141.51253655372946, "bbox_max_lat": 40.55231960888387, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 13, "INFORM": "(1981-2000)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:28:area"}
|
||||
{"feature_id": 512962, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 32, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.5074502130517, "bbox_min_lat": 40.54907696596515, "bbox_max_lon": 141.50984587951092, "bbox_max_lat": 40.55211631300102, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 13, "INFORM": "(1981-2000)"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:32:area"}
|
||||
{"feature_id": 512977, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 47, "object_class_id": 50, "object_class": "DRGARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.50061417118076, "bbox_min_lat": 40.54801976944343, "bbox_max_lon": 141.50392029262133, "bbox_max_lat": 40.549808861472954, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"DRVAL1": 7.5, "INFORM": "Source date: 1990"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:47:area"}
|
||||
{"feature_id": 356822, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1150, "object_class_id": 56, "object_class": "EXEZNE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.65029158272228, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 143.08335783594634, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP", "SORIND": "CM,PAD,graph,B3900420"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1150:area"}
|
||||
{"feature_id": 328185, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 362, "object_class_id": 56, "object_class": "EXEZNE", "geometry_type": "AREA", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1184, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 40.65462374281519, "bbox_max_lon": 141.82085695438715, "bbox_max_lat": 42.413189699068205, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:362:area"}
|
||||
{"feature_id": 604944, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 444, "object_class_id": 57, "object_class": "FAIRWY", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54393109078828, "bbox_min_lat": 40.536571554692834, "bbox_max_lon": 141.549058121332, "bbox_max_lat": 40.54073996455429, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "East Passage"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:444:area"}
|
||||
{"feature_id": 604945, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 445, "object_class_id": 57, "object_class": "FAIRWY", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53155602599378, "bbox_min_lat": 40.53539215263657, "bbox_max_lon": 141.53591501922392, "bbox_max_lat": 40.53888454585329, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "West Passage"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:445:area"}
|
||||
{"feature_id": 513190, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 260, "object_class_id": 57, "object_class": "FAIRWY", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.54408203861306, "bbox_min_lat": 40.536674187146915, "bbox_max_lon": 141.54907173881796, "bbox_max_lat": 40.540842590333156, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "East Fairway"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:260:area"}
|
||||
{"feature_id": 513191, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 261, "object_class_id": 57, "object_class": "FAIRWY", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.5315086044576, "bbox_min_lat": 40.53535244417567, "bbox_max_lon": 141.53585233939643, "bbox_max_lat": 40.53892109035575, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "West Fairway"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:261:area"}
|
||||
{"feature_id": 513192, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 262, "object_class_id": 57, "object_class": "FAIRWY", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.53477403517275, "bbox_min_lat": 40.536252248954824, "bbox_max_lon": 141.53616260617775, "bbox_max_lat": 40.53732996532771, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:262:area"}
|
||||
{"feature_id": 605632, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1132, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57221622655575, "bbox_min_lat": 40.553507918007234, "bbox_max_lon": 141.57221622655575, "bbox_max_lat": 40.553507918007234, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1132:point"}
|
||||
{"feature_id": 605633, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1133, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57583770051122, "bbox_min_lat": 40.55280147464817, "bbox_max_lon": 141.57583770051122, "bbox_max_lat": 40.55280147464817, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1133:point"}
|
||||
{"feature_id": 605634, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1134, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57033428082045, "bbox_min_lat": 40.553782361618545, "bbox_max_lon": 141.57033428082045, "bbox_max_lat": 40.553782361618545, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1134:point"}
|
||||
{"feature_id": 605635, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1135, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5664330581746, "bbox_min_lat": 40.554194024926325, "bbox_max_lon": 141.5664330581746, "bbox_max_lat": 40.554194024926325, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1135:point"}
|
||||
{"feature_id": 513544, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 614, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.57238752448492, "bbox_min_lat": 40.5535800295812, "bbox_max_lon": 141.57238752448492, "bbox_max_lat": 40.5535800295812, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:614:point"}
|
||||
{"feature_id": 513545, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 615, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5664161605292, "bbox_min_lat": 40.55418481979861, "bbox_max_lon": 141.5664161605292, "bbox_max_lat": 40.55418481979861, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:615:point"}
|
||||
{"feature_id": 513546, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 616, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5703987652799, "bbox_min_lat": 40.55391037785596, "bbox_max_lon": 141.5703987652799, "bbox_max_lat": 40.55391037785596, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:616:point"}
|
||||
{"feature_id": 513547, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 617, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.57605986245426, "bbox_min_lat": 40.55277702236356, "bbox_max_lon": 141.57605986245426, "bbox_max_lat": 40.55277702236356, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:617:point"}
|
||||
{"feature_id": 359102, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3430, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.52870770025612, "bbox_min_lat": 40.64823662602053, "bbox_max_lon": 141.52870770025612, "bbox_max_lat": 40.64823662602053, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3430:point"}
|
||||
{"feature_id": 359111, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3439, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.60573524025224, "bbox_min_lat": 40.5500899470562, "bbox_max_lon": 141.60573524025224, "bbox_max_lat": 40.5500899470562, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3439:point"}
|
||||
{"feature_id": 359122, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3450, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.613242678778, "bbox_min_lat": 40.54215954908995, "bbox_max_lon": 141.613242678778, "bbox_max_lat": 40.54215954908995, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3450:point"}
|
||||
{"feature_id": 359131, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3459, "object_class_id": 60, "object_class": "FSHHAV", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.44942182509374, "bbox_min_lat": 40.69653943249045, "bbox_max_lon": 141.44942182509374, "bbox_max_lat": 40.69653943249045, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always under water/submerged"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3459:point"}
|
||||
{"feature_id": 604943, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 443, "object_class_id": 72, "object_class": "HRBARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.5663771084365, "bbox_max_lat": 40.59233558585386, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:443:area"}
|
||||
{"feature_id": 513187, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 257, "object_class_id": 72, "object_class": "HRBARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48062993865776, "bbox_min_lat": 40.53205814052522, "bbox_max_lon": 141.5664619375953, "bbox_max_lat": 40.572168478876776, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No 3 Area"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:257:area"}
|
||||
{"feature_id": 513188, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 258, "object_class_id": 72, "object_class": "HRBARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.49353398495728, "bbox_min_lat": 40.524813153073175, "bbox_max_lon": 141.5435021957758, "bbox_max_lat": 40.537878983984385, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No 2 Area"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:258:area"}
|
||||
{"feature_id": 513189, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 259, "object_class_id": 72, "object_class": "HRBARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.54247475495887, "bbox_min_lat": 40.52951612885991, "bbox_max_lon": 141.5584763827312, "bbox_max_lat": 40.53939892883223, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "No1 Area"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:259:area"}
|
||||
{"feature_id": 606228, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1728, "object_class_id": 73, "object_class": "HRBFAC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50843861148863, "bbox_min_lat": 40.54650414302457, "bbox_max_lon": 141.50843861148863, "bbox_max_lat": 40.54650414302457, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Tohoku Grain Terminal"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1728:point"}
|
||||
{"feature_id": 604990, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 490, "object_class_id": 73, "object_class": "HRBFAC", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49581940238252, "bbox_min_lat": 40.530806521509675, "bbox_max_lon": 141.4959770789171, "bbox_max_lat": 40.5312844178937, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATHAF": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:490:area"}
|
||||
{"feature_id": 604515, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 15, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5033115809449, "bbox_min_lat": 40.54073996455429, "bbox_max_lon": 141.51403358529626, "bbox_max_lat": 40.54647364603113, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [1]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:15:area"}
|
||||
{"feature_id": 604520, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 20, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.58185484052436, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59028799195437, "bbox_max_lat": 40.53412122200863, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:20:area"}
|
||||
{"feature_id": 604537, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 37, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5762140896583, "bbox_min_lat": 40.53413138954932, "bbox_max_lon": 141.58281107241146, "bbox_max_lat": 40.542453004138665, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:37:area"}
|
||||
{"feature_id": 604552, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 52, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5604210045013, "bbox_min_lat": 40.538320285044385, "bbox_max_lon": 141.56481051577038, "bbox_max_lat": 40.54126862239338, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:52:area"}
|
||||
{"feature_id": 604558, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 58, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.47721357130226, "bbox_min_lat": 40.56706103884022, "bbox_max_lon": 141.4916892944445, "bbox_max_lat": 40.57847259964477, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:58:area"}
|
||||
{"feature_id": 604565, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 65, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.56779619724773, "bbox_min_lat": 40.542453004138665, "bbox_max_lon": 141.57153465701919, "bbox_max_lat": 40.544074505699285, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:65:area"}
|
||||
{"feature_id": 604574, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 74, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4936475352772, "bbox_min_lat": 40.53006933423387, "bbox_max_lon": 141.49676037525015, "bbox_max_lat": 40.531813150347276, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [1]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:74:area"}
|
||||
{"feature_id": 604585, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 85, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.47098280501646, "bbox_min_lat": 40.58631628375762, "bbox_max_lon": 141.47838851580184, "bbox_max_lat": 40.587997679213444, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:85:area"}
|
||||
{"feature_id": 604605, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 105, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5564485730979, "bbox_min_lat": 40.53888454585329, "bbox_max_lon": 141.55866621726165, "bbox_max_lat": 40.54026213561014, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:105:area"}
|
||||
{"feature_id": 604609, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 109, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5787063961726, "bbox_min_lat": 40.540684048577326, "bbox_max_lon": 141.58001358550766, "bbox_max_lat": 40.54231575925809, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:109:area"}
|
||||
{"feature_id": 604614, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 114, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.56554803504503, "bbox_min_lat": 40.54272749305622, "bbox_max_lon": 141.56778093822825, "bbox_max_lat": 40.543464541065894, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:114:area"}
|
||||
{"feature_id": 604624, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 124, "object_class_id": 78, "object_class": "ITDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49136885503552, "bbox_min_lat": 40.56525208204149, "bbox_max_lon": 141.49305243351765, "bbox_max_lat": 40.56609050910872, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:124:area"}
|
||||
{"feature_id": 604931, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 431, "object_class_id": 79, "object_class": "LAKARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.520177883805, "bbox_min_lat": 40.53003374567741, "bbox_max_lon": 141.5202389198829, "bbox_max_lat": 40.53007950238938, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:431:area"}
|
||||
{"feature_id": 355948, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 276, "object_class_id": 79, "object_class": "LAKARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.3203305041018, "bbox_min_lat": 40.70214652281388, "bbox_max_lon": 141.3434021444493, "bbox_max_lat": 40.720771134201065, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Ane Lake"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:276:area"}
|
||||
{"feature_id": 356579, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 907, "object_class_id": 79, "object_class": "LAKARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 4, "coverage_id": 1255, "bbox_min_lon": 141.3862494765232, "bbox_min_lat": 40.710930015390346, "bbox_max_lon": 141.39430623981914, "bbox_max_lat": 40.713670726268816, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:907:area"}
|
||||
{"feature_id": 605467, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 967, "object_class_id": 80, "object_class": "LAKSHR", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.520177883805, "bbox_min_lat": 40.53003374567741, "bbox_max_lon": 141.5202389198829, "bbox_max_lat": 40.53007950238938, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:967:line"}
|
||||
{"feature_id": 357855, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 2183, "object_class_id": 80, "object_class": "LAKSHR", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.3862494765232, "bbox_min_lat": 40.710930015390346, "bbox_max_lon": 141.39430623981914, "bbox_max_lat": 40.713670726268816, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:2183:line"}
|
||||
{"feature_id": 357868, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 2196, "object_class_id": 80, "object_class": "LAKSHR", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.3203305041018, "bbox_min_lat": 40.70214652281388, "bbox_max_lon": 141.3434021444493, "bbox_max_lat": 40.720771134201065, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:2196:line"}
|
||||
{"feature_id": 606493, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1993, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52561518107802, "bbox_min_lat": 40.53350099910942, "bbox_max_lon": 141.52561518107802, "bbox_max_lat": 40.53350099910942, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [1], "HEIGHT": 5, "LITCHR": 7, "OBJNAM": "C1", "SECTR1": 228, "SECTR2": 48, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.62", "VALNMR": 6, "_cm93_relation20_raw": 2266}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1993:point"}
|
||||
{"feature_id": 606494, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1994, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5254269865045, "bbox_min_lat": 40.53363317824145, "bbox_max_lon": 141.5254269865045, "bbox_max_lat": 40.53363317824145, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [1], "HEIGHT": 5, "LITCHR": 7, "OBJNAM": "C2", "SECTR1": 48, "SECTR2": 228, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.621", "VALNMR": 6, "_cm93_relation20_raw": 2270}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1994:point"}
|
||||
{"feature_id": 606495, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1995, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52535069140714, "bbox_min_lat": 40.53333831674283, "bbox_max_lon": 141.52535069140714, "bbox_max_lat": 40.53333831674283, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [3], "HEIGHT": 5, "LITCHR": 7, "OBJNAM": "R1", "SECTR1": 228, "SECTR2": 48, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.64", "VALNMR": 4, "_cm93_relation20_raw": 2263}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1995:point"}
|
||||
{"feature_id": 606496, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1996, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5251777558531, "bbox_min_lat": 40.5334501609123, "bbox_max_lon": 141.5251777558531, "bbox_max_lat": 40.5334501609123, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [3], "HEIGHT": 5, "LITCHR": 7, "OBJNAM": "R2", "SECTR1": 48, "SECTR2": 228, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.641", "VALNMR": 4, "_cm93_relation20_raw": 2276}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1996:point"}
|
||||
{"feature_id": 606497, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1997, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52588984342862, "bbox_min_lat": 40.53368910010344, "bbox_max_lon": 141.52588984342862, "bbox_max_lat": 40.53368910010344, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [4], "HEIGHT": 4, "LITCHR": 7, "OBJNAM": "L1", "SECTR1": 228, "SECTR2": 48, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.63", "VALNMR": 4, "_cm93_relation20_raw": 2265}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1997:point"}
|
||||
{"feature_id": 606498, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1998, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52570164885506, "bbox_min_lat": 40.53382127886439, "bbox_max_lon": 141.52570164885506, "bbox_max_lat": 40.53382127886439, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [4], "HEIGHT": 4, "LITCHR": 7, "OBJNAM": "L2", "SECTR1": 48, "SECTR2": 228, "SIGGRP": "(1)", "SIGPER": 4, "SORIND": "GB,UKHO,graph,LL M-6624.631", "VALNMR": 4, "_cm93_relation20_raw": 2258}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1998:point"}
|
||||
{"feature_id": 606499, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1999, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.51452696025927, "bbox_min_lat": 40.55241521469589, "bbox_max_lon": 141.51452696025927, "bbox_max_lat": 40.55241521469589, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [4], "HEIGHT": 14, "INFORM": "2 fl in 3s", "LITCHR": 2, "SIGGRP": "(2)", "SIGPER": 9, "VALNMR": 4, "_cm93_relation20_raw": 2239}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1999:point"}
|
||||
{"feature_id": 606500, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2000, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52294485266987, "bbox_min_lat": 40.53044047091052, "bbox_max_lon": 141.52294485266987, "bbox_max_lat": 40.53044047091052, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [1], "HEIGHT": 31, "LITCHR": 1, "OBJNAM": "C1", "SORIND": "GB,UKHO,graph,LL M-6624.5", "VALNMR": 6, "_cm93_relation20_raw": 2267}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2000:point"}
|
||||
{"feature_id": 606501, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2001, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5759546863272, "bbox_min_lat": 40.53986563666468, "bbox_max_lon": 141.5759546863272, "bbox_max_lat": 40.53986563666468, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [1], "HEIGHT": 57, "LITCHR": 2, "SIGGRP": "(1)", "SIGPER": 8, "VALNMR": 19, "_cm93_relation20_raw": 2241}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2001:point"}
|
||||
{"feature_id": 606502, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2002, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.55245070999536, "bbox_min_lat": 40.53446183378157, "bbox_max_lon": 141.55245070999536, "bbox_max_lat": 40.53446183378157, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [3], "HEIGHT": 11, "LITCHR": 2, "SIGGRP": "(2)", "SIGPER": 6, "VALNMR": 3, "_cm93_relation20_raw": 2254}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2002:point"}
|
||||
{"feature_id": 606503, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2003, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.52043728713608, "bbox_min_lat": 40.53762384848427, "bbox_max_lon": 141.52043728713608, "bbox_max_lat": 40.53762384848427, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [3], "HEIGHT": 12, "LITCHR": 2, "SIGGRP": "(1)", "SIGPER": 3, "VALNMR": 3, "_cm93_relation20_raw": 2272}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2003:point"}
|
||||
{"feature_id": 606504, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2004, "object_class_id": 86, "object_class": "LIGHTS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.53323451813606, "bbox_min_lat": 40.53630720776126, "bbox_max_lon": 141.53323451813606, "bbox_max_lat": 40.53630720776126, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"COLOUR": [3], "HEIGHT": 12, "LITCHR": 2, "SIGGRP": "(1)", "SIGPER": 5, "VALNMR": 7, "_cm93_relation20_raw": 2273}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2004:point"}
|
||||
{"feature_id": 604504, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 4, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.52691713165249, "bbox_max_lon": 141.52820921438885, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:4:area"}
|
||||
{"feature_id": 604505, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 5, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.51986253073585, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.5886654495502, "bbox_max_lat": 40.54317988900274, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:5:area"}
|
||||
{"feature_id": 604506, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 6, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.4840089213086, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.5255236269612, "bbox_max_lat": 40.54304772870506, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:6:area"}
|
||||
{"feature_id": 604510, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 10, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.52075772654507, "bbox_min_lat": 40.53392295465693, "bbox_max_lon": 141.53333624493257, "bbox_max_lat": 40.54631607801049, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:10:area"}
|
||||
{"feature_id": 604530, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 30, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.53481636982167, "bbox_min_lat": 40.54910141934393, "bbox_max_lon": 141.54553837417302, "bbox_max_lat": 40.56592282453552, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:30:area"}
|
||||
{"feature_id": 604541, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 41, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.54934804270204, "bbox_min_lat": 40.54460313722178, "bbox_max_lon": 141.5603599684234, "bbox_max_lat": 40.549960378975165, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:41:area"}
|
||||
{"feature_id": 604546, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 46, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5338296198956, "bbox_min_lat": 40.535986939889206, "bbox_max_lon": 141.54704393076125, "bbox_max_lat": 40.538432120897646, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:46:area"}
|
||||
{"feature_id": 604596, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 96, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.4790955170375, "bbox_min_lat": 40.583542650841665, "bbox_max_lon": 141.4825898324974, "bbox_max_lat": 40.587718296190026, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:96:area"}
|
||||
{"feature_id": 604620, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 120, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5480866304254, "bbox_min_lat": 40.53846262155252, "bbox_max_lon": 141.55539061441428, "bbox_max_lat": 40.539443718542934, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:120:area"}
|
||||
{"feature_id": 604668, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 168, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.57110231813405, "bbox_min_lat": 40.54319005516867, "bbox_max_lon": 141.57197208224414, "bbox_max_lat": 40.543866101740925, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:168:area"}
|
||||
{"feature_id": 604676, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 176, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.57895562682404, "bbox_min_lat": 40.541436368720355, "bbox_max_lon": 141.57974909583675, "bbox_max_lat": 40.54199552010982, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:176:area"}
|
||||
{"feature_id": 604684, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 184, "object_class_id": 81, "object_class": "LNDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5099746861158, "bbox_min_lat": 40.54823736599592, "bbox_max_lon": 141.5116124875395, "bbox_max_lat": 40.549452120169185, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:184:area"}
|
||||
{"feature_id": 606534, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2034, "object_class_id": 95, "object_class": "MONUMT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55748110008238, "bbox_min_lat": 40.53846262155252, "bbox_max_lon": 141.55748110008238, "bbox_max_lat": 40.53846262155252, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2034:point"}
|
||||
{"feature_id": 606535, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2035, "object_class_id": 95, "object_class": "MONUMT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55767946733556, "bbox_min_lat": 40.538452454669105, "bbox_max_lon": 141.55767946733556, "bbox_max_lat": 40.538452454669105, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2035:point"}
|
||||
{"feature_id": 513828, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 898, "object_class_id": 95, "object_class": "MONUMT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.5574896326397, "bbox_min_lat": 40.53853983380762, "bbox_max_lon": 141.5574896326397, "bbox_max_lat": 40.53853983380762, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:898:point"}
|
||||
{"feature_id": 513829, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 899, "object_class_id": 95, "object_class": "MONUMT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.55777955405833, "bbox_min_lat": 40.53853983380762, "bbox_max_lon": 141.55777955405833, "bbox_max_lat": 40.53853983380762, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:899:point"}
|
||||
{"feature_id": 513548, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 618, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51970829408515, "bbox_min_lat": 40.536872446343644, "bbox_max_lon": 141.51970829408515, "bbox_max_lat": 40.536872446343644, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1, "INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:618:point"}
|
||||
{"feature_id": 513549, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 619, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51929630049025, "bbox_min_lat": 40.536542014023155, "bbox_max_lon": 141.51929630049025, "bbox_max_lat": 40.536542014023155, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:619:point"}
|
||||
{"feature_id": 513550, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 620, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52032882764783, "bbox_min_lat": 40.537350299432255, "bbox_max_lon": 141.52032882764783, "bbox_max_lat": 40.537350299432255, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:620:point"}
|
||||
{"feature_id": 513551, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 621, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52196154300538, "bbox_min_lat": 40.53369006118854, "bbox_max_lon": 141.52196154300538, "bbox_max_lat": 40.53369006118854, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:621:point"}
|
||||
{"feature_id": 513552, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 622, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52292286139348, "bbox_min_lat": 40.53288173162202, "bbox_max_lon": 141.52292286139348, "bbox_max_lat": 40.53288173162202, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:622:point"}
|
||||
{"feature_id": 513553, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 623, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51968286238176, "bbox_min_lat": 40.535520205305204, "bbox_max_lon": 141.51968286238176, "bbox_max_lat": 40.535520205305204, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:623:point"}
|
||||
{"feature_id": 513554, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 624, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52076116660544, "bbox_min_lat": 40.5347118978173, "bbox_max_lon": 141.52076116660544, "bbox_max_lat": 40.5347118978173, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:624:point"}
|
||||
{"feature_id": 604857, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 357, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.511917667929, "bbox_min_lat": 40.54966558933754, "bbox_max_lon": 141.51206517178392, "bbox_max_lat": 40.54977232366654, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1, "INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:357:area"}
|
||||
{"feature_id": 604858, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 358, "object_class_id": 96, "object_class": "MORFAC", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.50930837559875, "bbox_min_lat": 40.54781041787348, "bbox_max_lon": 141.50945587945367, "bbox_max_lat": 40.54791715515927, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATMOR": 1, "INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:358:area"}
|
||||
{"feature_id": 604500, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.33333119032937, "bbox_min_lat": 40.33333271662867, "bbox_max_lon": 141.66666447076832, "bbox_max_lat": 40.666666080886685, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20140505"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:0:area"}
|
||||
{"feature_id": 512930, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.3333345989699, "bbox_min_lat": 40.33333369451736, "bbox_max_lon": 141.66666793528825, "bbox_max_lat": 40.66666703083567, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20060322"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:0:area"}
|
||||
{"feature_id": 418056, "cell_id": 113, "source_relative_path": "03900420\\D\\03900423.D", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "D", "native_scale": 100000, "raw_geotype": 132, "coverage_id": 1425, "bbox_min_lon": 141.0000012626516, "bbox_min_lat": 40.00000035819904, "bbox_max_lon": 142.0000012716066, "bbox_max_lat": 41.000000367154016, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20060322"}, "suggested_source_id": "cm95:1:03900420/D/03900423.D:0:area"}
|
||||
{"feature_id": 355672, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1253, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 143.99999776911724, "bbox_max_lat": 43.999999304371535, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20140602"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:0:area"}
|
||||
{"feature_id": 327823, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1180, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 149.99999773902806, "bbox_max_lat": 49.999999274282374, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20141006"}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:0:area"}
|
||||
{"feature_id": 322990, "cell_id": 4, "source_relative_path": "03900420\\A\\03900420.A", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "A", "native_scale": 3000000, "raw_geotype": 132, "coverage_id": 1160, "bbox_min_lon": 140.00000125369664, "bbox_min_lat": 40.00000035819904, "bbox_max_lon": 160.00000143279615, "bbox_max_lat": 60.00000053729857, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20080102"}, "suggested_source_id": "cm95:1:03900420/A/03900420.A:0:area"}
|
||||
{"feature_id": 644516, "cell_id": 784, "source_relative_path": "03900360\\Z\\03900360.Z", "source_record_index": 0, "object_class_id": 210, "object_class": "M_PROD", "geometry_type": "AREA", "scale_code": "Z", "native_scale": 20000000, "raw_geotype": 132, "coverage_id": 2311, "bbox_min_lon": 120.00000107459711, "bbox_min_lat": 40.00000035819904, "bbox_max_lon": 160.00000143279615, "bbox_max_lat": 80.00000071639808, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CPDATE": "20080102"}, "suggested_source_id": "cm95:1:03900360/Z/03900360.Z:0:area"}
|
||||
{"feature_id": 604941, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 441, "object_class_id": 97, "object_class": "NATARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:441:area"}
|
||||
{"feature_id": 356830, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1158, "object_class_id": 97, "object_class": "NATARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.30000548760523, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 142.22018551373947, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1158:area"}
|
||||
{"feature_id": 328179, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 356, "object_class_id": 97, "object_class": "NATARE", "geometry_type": "AREA", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1184, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 141.7972054708302, "bbox_max_lat": 41.606003535658594, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:356:area"}
|
||||
{"feature_id": 605636, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1136, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5641289462338, "bbox_min_lat": 40.54285965398574, "bbox_max_lon": 141.5641289462338, "bbox_max_lat": 40.54285965398574, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"EXPSOU": 2, "VALSOU": 1.5, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1136:point"}
|
||||
{"feature_id": 605637, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1137, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56853371652238, "bbox_min_lat": 40.560744721391565, "bbox_max_lon": 141.56853371652238, "bbox_max_lat": 40.560744721391565, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Wave Meter", "VALSOU": 25, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1137:point"}
|
||||
{"feature_id": 513555, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 625, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.57370488672046, "bbox_min_lat": 40.54443127602201, "bbox_max_lon": 141.57370488672046, "bbox_max_lat": 40.54443127602201, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 1.2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:625:point"}
|
||||
{"feature_id": 513556, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 626, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.56420868867505, "bbox_min_lat": 40.542896196043614, "bbox_max_lon": 141.56420868867505, "bbox_max_lat": 40.542896196043614, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 1.5, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:626:point"}
|
||||
{"feature_id": 513557, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 627, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.52719030122216, "bbox_min_lat": 40.53315625973812, "bbox_max_lon": 141.52719030122216, "bbox_max_lat": 40.53315625973812, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 4.9, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:627:point"}
|
||||
{"feature_id": 359184, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3512, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "POINT", "scale_code": "C", "native_scale": 200000, "raw_geotype": 129, "coverage_id": 1255, "bbox_min_lon": 141.56905255282143, "bbox_min_lat": 40.56070397061267, "bbox_max_lon": 141.56905255282143, "bbox_max_lat": 40.56070397061267, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Wave Meter", "VALSOU": 25, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3512:point"}
|
||||
{"feature_id": 604548, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 48, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54769498225886, "bbox_min_lat": 40.53520405642359, "bbox_max_lon": 141.5508434266106, "bbox_max_lat": 40.538360952649, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:48:area"}
|
||||
{"feature_id": 604555, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 55, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.553391682863, "bbox_min_lat": 40.53572259065104, "bbox_max_lon": 141.55575174454185, "bbox_max_lat": 40.53822878284375, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:55:area"}
|
||||
{"feature_id": 604570, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 70, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5710107640172, "bbox_min_lat": 40.54270716058238, "bbox_max_lon": 141.57322840818094, "bbox_max_lat": 40.544074505699285, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:70:area"}
|
||||
{"feature_id": 604572, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 72, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5454925971146, "bbox_min_lat": 40.53838636988935, "bbox_max_lon": 141.5491598481285, "bbox_max_lat": 40.53993171998525, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:72:area"}
|
||||
{"feature_id": 604587, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 87, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53480111080222, "bbox_min_lat": 40.535127801051665, "bbox_max_lon": 141.53659658876046, "bbox_max_lat": 40.53642921416697, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:87:area"}
|
||||
{"feature_id": 604602, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 102, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55605692493137, "bbox_min_lat": 40.53851853938367, "bbox_max_lon": 141.55791343896752, "bbox_max_lat": 40.540460384202795, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:102:area"}
|
||||
{"feature_id": 604611, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 111, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.566392367456, "bbox_min_lat": 40.54250383550453, "bbox_max_lon": 141.56866596135782, "bbox_max_lat": 40.54390676597883, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:111:area"}
|
||||
{"feature_id": 604627, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 127, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.578869159047, "bbox_min_lat": 40.540770464158435, "bbox_max_lon": 141.58046118341227, "bbox_max_lat": 40.54254958370087, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:127:area"}
|
||||
{"feature_id": 604628, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 128, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49703503760074, "bbox_min_lat": 40.55919985151106, "bbox_max_lon": 141.49803704654624, "bbox_max_lat": 40.560399161487446, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:128:area"}
|
||||
{"feature_id": 604632, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 132, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48980734870923, "bbox_min_lat": 40.56300606202476, "bbox_max_lon": 141.4910382429469, "bbox_max_lat": 40.563747968375345, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:132:area"}
|
||||
{"feature_id": 604638, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 138, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.57782645938286, "bbox_min_lat": 40.54214293197139, "bbox_max_lon": 141.57859449669644, "bbox_max_lat": 40.543444208815785, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:138:area"}
|
||||
{"feature_id": 604647, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 147, "object_class_id": 99, "object_class": "OBSTRN", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54282735504623, "bbox_min_lat": 40.52757300537249, "bbox_max_lon": 141.54366660111737, "bbox_max_lat": 40.52858476697277, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:147:area"}
|
||||
{"feature_id": 606543, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2043, "object_class_id": 104, "object_class": "PILBOP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.55123507477714, "bbox_min_lat": 40.56489638253686, "bbox_max_lon": 141.55123507477714, "bbox_max_lat": 40.56489638253686, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2043:point"}
|
||||
{"feature_id": 606544, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2044, "object_class_id": 104, "object_class": "PILBOP", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.55165215464282, "bbox_min_lat": 40.5816680975283, "bbox_max_lon": 141.55165215464282, "bbox_max_lat": 40.5816680975283, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2044:point"}
|
||||
{"feature_id": 513842, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 912, "object_class_id": 104, "object_class": "PILBOP", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.55242872366532, "bbox_min_lat": 40.564373951200075, "bbox_max_lon": 141.55242872366532, "bbox_max_lat": 40.564373951200075, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:912:point"}
|
||||
{"feature_id": 606536, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2036, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54550785613407, "bbox_min_lat": 40.549177658809995, "bbox_max_lon": 141.54550785613407, "bbox_max_lat": 40.549177658809995, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Private"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2036:point"}
|
||||
{"feature_id": 606537, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2037, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49653148995804, "bbox_min_lat": 40.56304163306486, "bbox_max_lon": 141.49653148995804, "bbox_max_lat": 40.56304163306486, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2037:point"}
|
||||
{"feature_id": 606538, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2038, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50991873637773, "bbox_min_lat": 40.54829327566755, "bbox_max_lon": 141.50991873637773, "bbox_max_lat": 40.54829327566755, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2038:point"}
|
||||
{"feature_id": 606539, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2039, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50976105984319, "bbox_min_lat": 40.54817129086928, "bbox_max_lon": 141.50976105984319, "bbox_max_lat": 40.54817129086928, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2039:point"}
|
||||
{"feature_id": 606540, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2040, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49636872708362, "bbox_min_lat": 40.56310769351778, "bbox_max_lon": 141.49636872708362, "bbox_max_lat": 40.56310769351778, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2040:point"}
|
||||
{"feature_id": 606541, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2041, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50988821833877, "bbox_min_lat": 40.54808488483609, "bbox_max_lon": 141.50988821833877, "bbox_max_lat": 40.54808488483609, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2041:point"}
|
||||
{"feature_id": 606542, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2042, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5100357221937, "bbox_min_lat": 40.54820686979171, "bbox_max_lon": 141.5100357221937, "bbox_max_lat": 40.54820686979171, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2042:point"}
|
||||
{"feature_id": 513830, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 900, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.51965743067836, "bbox_min_lat": 40.536725022894316, "bbox_max_lon": 141.51965743067836, "bbox_max_lat": 40.536725022894316, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:900:point"}
|
||||
{"feature_id": 513831, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 901, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.519804934558, "bbox_min_lat": 40.53542869928663, "bbox_max_lon": 141.519804934558, "bbox_max_lat": 40.53542869928663, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Always dry"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:901:point"}
|
||||
{"feature_id": 513832, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 902, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.52064418076986, "bbox_min_lat": 40.534767818775094, "bbox_max_lon": 141.52064418076986, "bbox_max_lat": 40.534767818775094, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:902:point"}
|
||||
{"feature_id": 513833, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 903, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.5198761433275, "bbox_min_lat": 40.53690803126555, "bbox_max_lon": 141.5198761433275, "bbox_max_lat": 40.53690803126555, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:903:point"}
|
||||
{"feature_id": 513834, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 904, "object_class_id": 103, "object_class": "PILPNT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.52208361518166, "bbox_min_lat": 40.533613804098835, "bbox_max_lon": 141.52208361518166, "bbox_max_lat": 40.533613804098835, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:904:point"}
|
||||
{"feature_id": 605468, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 968, "object_class_id": 106, "object_class": "PIPOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.50971528278473, "bbox_min_lat": 40.54804930584882, "bbox_max_lon": 141.51005098121317, "bbox_max_lat": 40.54829327566755, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:968:line"}
|
||||
{"feature_id": 605469, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 969, "object_class_id": 106, "object_class": "PIPOHD", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.50970002376528, "bbox_min_lat": 40.54807471941306, "bbox_max_lon": 141.51002046317427, "bbox_max_lat": 40.54830344105737, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:969:line"}
|
||||
{"feature_id": 605470, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 970, "object_class_id": 107, "object_class": "PIPSOL", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.5039321144036, "bbox_min_lat": 40.53110647814896, "bbox_max_lon": 141.504181345055, "bbox_max_lat": 40.53250964730796, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATPIP": 1, "PRODCT": [2]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:970:line"}
|
||||
{"feature_id": 513457, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 527, "object_class_id": 107, "object_class": "PIPSOL", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 130, "coverage_id": 1759, "bbox_min_lon": 141.50387451555522, "bbox_min_lat": 40.531092187451655, "bbox_max_lon": 141.50411357356705, "bbox_max_lat": 40.53251569238428, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATPIP": 1, "INFORM": "PIPELINES|Mariners are advised not to anchor or trawl in the vicinity of pipelines. Gas from a damaged oil or gas pipeline could cause an explosion, loss of a vessels buoyancy or other serious hazard. Pipelines are not always buried and may effectively reduce the charted depth by up to 2 metres. They may also span seabed undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. See Annual Notice to Mariners No 24 and The Mariners Handbook.", "PRODCT": [1]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:527:line"}
|
||||
{"feature_id": 605638, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1138, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5151525800578, "bbox_min_lat": 40.53628687333873, "bbox_max_lon": 141.5151525800578, "bbox_max_lat": 40.53628687333873, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Tozai Oilterminal Co.,Ltd.", "PRODCT": [1], "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1138:point"}
|
||||
{"feature_id": 605639, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1139, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48837300087854, "bbox_min_lat": 40.54867955939618, "bbox_max_lon": 141.48837300087854, "bbox_max_lat": 40.54867955939618, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Tohoku Satetsu", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1139:point"}
|
||||
{"feature_id": 605640, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1140, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50824024423545, "bbox_min_lat": 40.52898641683994, "bbox_max_lon": 141.50824024423545, "bbox_max_lat": 40.52898641683994, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "MRC Unitec Co., Ltd.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1140:point"}
|
||||
{"feature_id": 605641, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1141, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4876761723225, "bbox_min_lat": 40.55089048260121, "bbox_max_lon": 141.4876761723225, "bbox_max_lat": 40.55089048260121, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Toshin Steel Industry", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1141:point"}
|
||||
{"feature_id": 605642, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1142, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49213689234915, "bbox_min_lat": 40.531909745248655, "bbox_max_lon": 141.49213689234915, "bbox_max_lat": 40.531909745248655, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Hachinohe Gas Co., Ltd.", "PRODCT": [2]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1142:point"}
|
||||
{"feature_id": 605643, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1143, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50676011934632, "bbox_min_lat": 40.53814236398398, "bbox_max_lon": 141.50676011934632, "bbox_max_lat": 40.53814236398398, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Pacific Metals CO., LTD.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1143:point"}
|
||||
{"feature_id": 605644, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1144, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5025994933694, "bbox_min_lat": 40.5343093212615, "bbox_max_lon": 141.5025994933694, "bbox_max_lat": 40.5343093212615, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Pacific Metals CO., LTD.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1144:point"}
|
||||
{"feature_id": 605645, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1145, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49952734411502, "bbox_min_lat": 40.52800008248382, "bbox_max_lon": 141.49952734411502, "bbox_max_lat": 40.52800008248382, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Koshuha Foundry Co., Ltd.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1145:point"}
|
||||
{"feature_id": 605646, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1146, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55052298720165, "bbox_min_lat": 40.532885854333834, "bbox_max_lon": 141.55052298720165, "bbox_max_lat": 40.532885854333834, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Sumimetal Mining Co., Ltd.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1146:point"}
|
||||
{"feature_id": 605647, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1147, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.49177576222155, "bbox_min_lat": 40.55442272567037, "bbox_max_lon": 141.49177576222155, "bbox_max_lat": 40.55442272567037, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Hachinohe Smelting Co., Ltd.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1147:point"}
|
||||
{"feature_id": 605648, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1148, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.50546818903078, "bbox_min_lat": 40.53062858049595, "bbox_max_lon": 141.50546818903078, "bbox_max_lat": 40.53062858049595, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Kitanihon Shipbuilding Co., Ltd.", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1148:point"}
|
||||
{"feature_id": 605649, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1149, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51997443021202, "bbox_min_lat": 40.53397887627707, "bbox_max_lon": 141.51997443021202, "bbox_max_lat": 40.53397887627707, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "JX Nippon Oil & Energy Corporation", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1149:point"}
|
||||
{"feature_id": 604522, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 22, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.47556051085908, "bbox_min_lat": 40.56808744764105, "bbox_max_lon": 141.48006700794411, "bbox_max_lat": 40.57377814151934, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Mitsubishi Paper Mills Limited"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:22:area"}
|
||||
{"feature_id": 604533, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 33, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51657166886898, "bbox_min_lat": 40.5301455953626, "bbox_max_lon": 141.5218156852287, "bbox_max_lat": 40.5327638414758, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:33:area"}
|
||||
{"feature_id": 604534, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 34, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5151525800578, "bbox_min_lat": 40.53412122200863, "bbox_max_lon": 141.51980149465794, "bbox_max_lat": 40.53723750099305, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:34:area"}
|
||||
{"feature_id": 604559, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 59, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51973028590038, "bbox_min_lat": 40.53194533280882, "bbox_max_lon": 141.5224667367263, "bbox_max_lat": 40.53397887627707, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:59:area"}
|
||||
{"feature_id": 604560, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 60, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5130926124286, "bbox_min_lat": 40.53118273809742, "bbox_max_lon": 141.5149745581639, "bbox_max_lat": 40.53331289758738, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm|Oil Tank Yard", "PRODCT": [1]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:60:area"}
|
||||
{"feature_id": 604563, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 63, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49270147606973, "bbox_min_lat": 40.547246232251226, "bbox_max_lon": 141.49581940238252, "bbox_max_lat": 40.54980790173839, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Tokyotekko Co., Ltd."}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:63:area"}
|
||||
{"feature_id": 604582, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 82, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.51023917578672, "bbox_min_lat": 40.5325198150932, "bbox_max_lon": 141.51196344498743, "bbox_max_lat": 40.53362301062516, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:82:area"}
|
||||
{"feature_id": 604591, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 91, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49783359295327, "bbox_min_lat": 40.54635165791852, "bbox_max_lon": 141.49958838019293, "bbox_max_lat": 40.54775450779876, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area", "OBJNAM": "Yoshida Sangyo Corporation"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:91:area"}
|
||||
{"feature_id": 604654, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 154, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48168955034834, "bbox_min_lat": 40.562335290300744, "bbox_max_lon": 141.48241689694333, "bbox_max_lat": 40.56347356561492, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:154:area"}
|
||||
{"feature_id": 604658, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 158, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.55021780681213, "bbox_min_lat": 40.531416601398206, "bbox_max_lon": 141.55095532608678, "bbox_max_lat": 40.532753673727576, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area|Silo farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:158:area"}
|
||||
{"feature_id": 604702, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 202, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4880830795085, "bbox_min_lat": 40.55522063103808, "bbox_max_lon": 141.4891105201532, "bbox_max_lat": 40.55577458522323, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Tank farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:202:area"}
|
||||
{"feature_id": 604737, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 237, "object_class_id": 111, "object_class": "PRDINS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54511620796754, "bbox_min_lat": 40.52835597799762, "bbox_max_lon": 141.54565535998898, "bbox_max_lat": 40.528828807685365, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Production area|Silo farm"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:237:area"}
|
||||
{"feature_id": 513650, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 720, "object_class_id": 112, "object_class": "PYLONS", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.55533302419232, "bbox_min_lat": 40.53861100186131, "bbox_max_lon": 141.55533302419232, "bbox_max_lat": 40.53861100186131, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Power transmission pylon/pole"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:720:point"}
|
||||
{"feature_id": 513651, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 721, "object_class_id": 112, "object_class": "PYLONS", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.55657917765836, "bbox_min_lat": 40.53857541784393, "bbox_max_lon": 141.55657917765836, "bbox_max_lat": 40.53857541784393, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Power transmission pylon/pole"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:721:point"}
|
||||
{"feature_id": 605471, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 971, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.46667976152443, "bbox_min_lat": 40.58934378105781, "bbox_max_lon": 141.46818531811266, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:971:line"}
|
||||
{"feature_id": 605472, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 972, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.58533587354387, "bbox_max_lon": 141.46794117380105, "bbox_max_lat": 40.589389497248476, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:972:line"}
|
||||
{"feature_id": 605473, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 973, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.46657803472792, "bbox_min_lat": 40.58933362190007, "bbox_max_lon": 141.4680123825586, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:973:line"}
|
||||
{"feature_id": 605474, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 974, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.58575242264449, "bbox_max_lon": 141.4680123825586, "bbox_max_lat": 40.58959775949944, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:974:line"}
|
||||
{"feature_id": 357930, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 2258, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.42604500431835, "bbox_min_lat": 40.47736990683258, "bbox_max_lon": 141.50307254431448, "bbox_max_lat": 40.54153506842535, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:2258:line"}
|
||||
{"feature_id": 357943, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 2271, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.49361195105027, "bbox_min_lat": 40.50205608050168, "bbox_max_lon": 141.5250455351216, "bbox_max_lat": 40.53297909710472, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:2271:line"}
|
||||
{"feature_id": 357950, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 2278, "object_class_id": 130, "object_class": "RIVBNK", "geometry_type": "LINE", "scale_code": "C", "native_scale": 200000, "raw_geotype": 2, "coverage_id": 1255, "bbox_min_lon": 141.38484564655496, "bbox_min_lat": 40.59166232814556, "bbox_max_lon": 141.46498602691543, "bbox_max_lat": 40.60688658555062, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:2278:line"}
|
||||
{"feature_id": 604551, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 51, "object_class_id": 129, "object_class": "RIVERS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.58533587354387, "bbox_max_lon": 141.4680123825586, "bbox_max_lat": 40.58959775949944, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Gonohe Kawa"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:51:area"}
|
||||
{"feature_id": 604644, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 144, "object_class_id": 129, "object_class": "RIVERS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.46657803472792, "bbox_min_lat": 40.58933362190007, "bbox_max_lon": 141.46818531811266, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:144:area"}
|
||||
{"feature_id": 355983, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 311, "object_class_id": 129, "object_class": "RIVERS", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.42604500431835, "bbox_min_lat": 40.47736990683258, "bbox_max_lon": 141.50307254431448, "bbox_max_lat": 40.54153506842535, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Mabechi River"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:311:area"}
|
||||
{"feature_id": 356044, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 372, "object_class_id": 129, "object_class": "RIVERS", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.38484564655496, "bbox_min_lat": 40.59166232814556, "bbox_max_lon": 141.46498602691543, "bbox_max_lat": 40.60688658555062, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Oirase River"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:372:area"}
|
||||
{"feature_id": 356056, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 384, "object_class_id": 129, "object_class": "RIVERS", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 4, "coverage_id": 1255, "bbox_min_lon": 141.49361195105027, "bbox_min_lat": 40.50205608050168, "bbox_max_lon": 141.5250455351216, "bbox_max_lat": 40.53297909710472, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:384:area"}
|
||||
{"feature_id": 606545, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2045, "object_class_id": 127, "object_class": "RSCSTA", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.55643331407842, "bbox_min_lat": 40.53463976461626, "bbox_max_lon": 141.55643331407842, "bbox_max_lat": 40.53463976461626, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2045:point"}
|
||||
{"feature_id": 513843, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 913, "object_class_id": 118, "object_class": "RTPBCN", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.57267744590357, "bbox_min_lat": 40.5397649304665, "bbox_max_lon": 141.57267744590357, "bbox_max_lat": 40.5397649304665, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATRTB": 1, "SORIND": "GB,MDHS,graph,LL F-6620.A"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:913:point"}
|
||||
{"feature_id": 606229, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1729, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5384073257382, "bbox_min_lat": 40.579620761128076, "bbox_max_lon": 141.5384073257382, "bbox_max_lat": 40.579620761128076, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1729:point"}
|
||||
{"feature_id": 606230, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1730, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58481000396276, "bbox_min_lat": 40.550524541732436, "bbox_max_lon": 141.58481000396276, "bbox_max_lat": 40.550524541732436, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1730:point"}
|
||||
{"feature_id": 606231, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1731, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.59467750322347, "bbox_min_lat": 40.58652455557915, "bbox_max_lon": 141.59467750322347, "bbox_max_lat": 40.58652455557915, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1731:point"}
|
||||
{"feature_id": 606232, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1732, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5693475308944, "bbox_min_lat": 40.55354349409437, "bbox_max_lon": 141.5693475308944, "bbox_max_lat": 40.55354349409437, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1732:point"}
|
||||
{"feature_id": 606233, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1733, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56588373347347, "bbox_min_lat": 40.54730214275028, "bbox_max_lon": 141.56588373347347, "bbox_max_lat": 40.54730214275028, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1733:point"}
|
||||
{"feature_id": 606234, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1734, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.59106620194763, "bbox_min_lat": 40.527084913912766, "bbox_max_lon": 141.59106620194763, "bbox_max_lat": 40.527084913912766, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1734:point"}
|
||||
{"feature_id": 606235, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1735, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58846199595715, "bbox_min_lat": 40.55680116710043, "bbox_max_lon": 141.58846199595715, "bbox_max_lat": 40.55680116710043, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1735:point"}
|
||||
{"feature_id": 606236, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1736, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57148887996075, "bbox_min_lat": 40.54992988355559, "bbox_max_lon": 141.57148887996075, "bbox_max_lat": 40.54992988355559, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1736:point"}
|
||||
{"feature_id": 606237, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1737, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57569528299612, "bbox_min_lat": 40.551861232717016, "bbox_max_lon": 141.57569528299612, "bbox_max_lat": 40.551861232717016, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1737:point"}
|
||||
{"feature_id": 606238, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1738, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55759299955852, "bbox_min_lat": 40.54935555055996, "bbox_max_lon": 141.55759299955852, "bbox_max_lat": 40.54935555055996, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1738:point"}
|
||||
{"feature_id": 606239, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1739, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51468463679387, "bbox_min_lat": 40.57942262847366, "bbox_max_lon": 141.51468463679387, "bbox_max_lat": 40.57942262847366, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1739:point"}
|
||||
{"feature_id": 606240, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1740, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51186171819094, "bbox_min_lat": 40.56033309836147, "bbox_max_lon": 141.51186171819094, "bbox_max_lat": 40.56033309836147, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATQUA": [1], "NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1740:point"}
|
||||
{"feature_id": 604952, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 452, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.58220071163242, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59028799195437, "bbox_max_lat": 40.531360677639675, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:452:area"}
|
||||
{"feature_id": 604953, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 453, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5762140896583, "bbox_min_lat": 40.537105328971435, "bbox_max_lon": 141.58281107241146, "bbox_max_lat": 40.542453004138665, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:453:area"}
|
||||
{"feature_id": 604956, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 456, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5799830674687, "bbox_min_lat": 40.53413138954932, "bbox_max_lon": 141.58195148098105, "bbox_max_lat": 40.53714599731356, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:456:area"}
|
||||
{"feature_id": 604960, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 460, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.58185484052436, "bbox_min_lat": 40.53263166062886, "bbox_max_lon": 141.58383851305615, "bbox_max_lat": 40.53412122200863, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:460:area"}
|
||||
{"feature_id": 604962, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 462, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.47098280501646, "bbox_min_lat": 40.58631628375762, "bbox_max_lon": 141.47273759225612, "bbox_max_lat": 40.587997679213444, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [4]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:462:area"}
|
||||
{"feature_id": 604963, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 463, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5822312296714, "bbox_min_lat": 40.53122849402484, "bbox_max_lon": 141.5833909151515, "bbox_max_lat": 40.53234187862896, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:463:area"}
|
||||
{"feature_id": 604973, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 473, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5819667400005, "bbox_min_lat": 40.53194533280882, "bbox_max_lon": 141.58253132372107, "bbox_max_lat": 40.532926525237144, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [5]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:473:area"}
|
||||
{"feature_id": 513200, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 270, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.56559725968006, "bbox_min_lat": 40.542804700099516, "bbox_max_lon": 141.5678759403037, "bbox_max_lat": 40.54351633192592, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:270:area"}
|
||||
{"feature_id": 356970, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1298, "object_class_id": 138, "object_class": "SBDARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.60323276074365, "bbox_min_lat": 40.50786694748101, "bbox_max_lon": 141.61269335400783, "bbox_max_lat": 40.51605129318746, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATSUR": [9]}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1298:area"}
|
||||
{"feature_id": 356820, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1148, "object_class_id": 136, "object_class": "SEAARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.37538505329078, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 143.08335783594634, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "North Pacific Ocean"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1148:area"}
|
||||
{"feature_id": 356905, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1233, "object_class_id": 136, "object_class": "SEAARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.5926735179391, "bbox_min_lat": 40.533603657525966, "bbox_max_lon": 141.59932645126682, "bbox_max_lat": 40.53859993131931, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Hamanaka"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1233:area"}
|
||||
{"feature_id": 606440, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1940, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.54422101215832, "bbox_min_lat": 40.527369634362906, "bbox_max_lon": 141.54422101215832, "bbox_max_lat": 40.527369634362906, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1940:point"}
|
||||
{"feature_id": 606441, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1941, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.54400229954584, "bbox_min_lat": 40.527339128658255, "bbox_max_lon": 141.54400229954584, "bbox_max_lat": 40.527339128658255, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1941:point"}
|
||||
{"feature_id": 513719, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 789, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.54410238397577, "bbox_min_lat": 40.5283416869048, "bbox_max_lon": 141.54410238397577, "bbox_max_lat": 40.5283416869048, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "More than one", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:789:point"}
|
||||
{"feature_id": 513720, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 790, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.5090066332991, "bbox_min_lat": 40.54605781244458, "bbox_max_lon": 141.5090066332991, "bbox_max_lat": 40.54605781244458, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "more than one", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:790:point"}
|
||||
{"feature_id": 513721, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 791, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 129, "coverage_id": 1759, "bbox_min_lon": 141.54427023321813, "bbox_min_lat": 40.52743160734014, "bbox_max_lon": 141.54427023321813, "bbox_max_lat": 40.52743160734014, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "SILOS"}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:791:point"}
|
||||
{"feature_id": 604966, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 466, "object_class_id": 142, "object_class": "SILBUI", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 4, "coverage_id": 2200, "bbox_min_lon": 141.5076451424759, "bbox_min_lat": 40.54524358905386, "bbox_max_lon": 141.50872853285864, "bbox_max_lat": 40.5461839239009, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:466:area"}
|
||||
{"feature_id": 606546, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2046, "object_class_id": 140, "object_class": "SISTAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5214392960816, "bbox_min_lat": 40.52813227246671, "bbox_max_lon": 141.5214392960816, "bbox_max_lat": 40.52813227246671, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSIT": [2]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2046:point"}
|
||||
{"feature_id": 606547, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2047, "object_class_id": 140, "object_class": "SISTAT", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52367219926484, "bbox_min_lat": 40.52990155944516, "bbox_max_lon": 141.52367219926484, "bbox_max_lat": 40.52990155944516, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSIT": [2]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2047:point"}
|
||||
{"feature_id": 513844, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 914, "object_class_id": 140, "object_class": "SISTAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.52138678650883, "bbox_min_lat": 40.52817899202388, "bbox_max_lon": 141.52138678650883, "bbox_max_lat": 40.52817899202388, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:914:point"}
|
||||
{"feature_id": 513845, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 915, "object_class_id": 140, "object_class": "SISTAT", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.52366546713245, "bbox_min_lat": 40.529897436757, "bbox_max_lon": 141.52366546713245, "bbox_max_lat": 40.529897436757, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:915:point"}
|
||||
{"feature_id": 606548, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2048, "object_class_id": 141, "object_class": "SISTAW", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55547708219132, "bbox_min_lat": 40.535127801051665, "bbox_max_lon": 141.55547708219132, "bbox_max_lat": 40.535127801051665, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSIW": [10]}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2048:point"}
|
||||
{"feature_id": 605475, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 975, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.51969976786143, "bbox_min_lat": 40.535381985287216, "bbox_max_lon": 141.51973028590038, "bbox_max_lat": 40.53540231998442, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:975:line"}
|
||||
{"feature_id": 605476, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 976, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.52770058040633, "bbox_min_lat": 40.5314572731933, "bbox_max_lon": 141.52799050177637, "bbox_max_lat": 40.53179281456082, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:976:line"}
|
||||
{"feature_id": 605477, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 977, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.48515334776926, "bbox_min_lat": 40.558874611203855, "bbox_max_lon": 141.48675045847435, "bbox_max_lat": 40.559870654654276, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:977:line"}
|
||||
{"feature_id": 605478, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 978, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.52725298250175, "bbox_min_lat": 40.5271408412395, "bbox_max_lon": 141.53649486196397, "bbox_max_lat": 40.5315386167094, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:978:line"}
|
||||
{"feature_id": 605479, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 979, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.48589086704388, "bbox_min_lat": 40.53130475383445, "bbox_max_lon": 141.48606888893775, "bbox_max_lat": 40.53144710524684, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:979:line"}
|
||||
{"feature_id": 605480, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 980, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.5424967429576, "bbox_min_lat": 40.52762384802846, "bbox_max_lon": 141.54268493753113, "bbox_max_lat": 40.52763910081771, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:980:line"}
|
||||
{"feature_id": 605481, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 981, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.54248148393813, "bbox_min_lat": 40.52790348194681, "bbox_max_lon": 141.54266967851163, "bbox_max_lat": 40.52791365043095, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:981:line"}
|
||||
{"feature_id": 605482, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 982, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.50949657017225, "bbox_min_lat": 40.547896824260796, "bbox_max_lon": 141.5098322686007, "bbox_max_lat": 40.54815096004797, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:982:line"}
|
||||
{"feature_id": 605483, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 983, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.51555440090397, "bbox_min_lat": 40.53871679313628, "bbox_max_lon": 141.5158290632545, "bbox_max_lat": 40.538915046302165, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:983:line"}
|
||||
{"feature_id": 605484, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 984, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.4957634526444, "bbox_min_lat": 40.53131492180248, "bbox_max_lon": 141.49584992042145, "bbox_max_lat": 40.531767394819084, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:984:line"}
|
||||
{"feature_id": 605485, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 985, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.51920639289838, "bbox_min_lat": 40.5301455953626, "bbox_max_lon": 141.5192674289763, "bbox_max_lat": 40.530155763506556, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:985:line"}
|
||||
{"feature_id": 605486, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 986, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 130, "coverage_id": 2200, "bbox_min_lon": 141.48506687999222, "bbox_min_lat": 40.53057774011952, "bbox_max_lon": 141.48525507456577, "bbox_max_lat": 40.530730261133066, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:986:line"}
|
||||
{"feature_id": 604998, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 498, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.48233042916632, "bbox_min_lat": 40.563702234660056, "bbox_max_lon": 141.49193343875612, "bbox_max_lat": 40.571181822467274, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 6, "OBJNAM": "No 4 Wharf", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:498:area"}
|
||||
{"feature_id": 604999, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 499, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.50182128337616, "bbox_min_lat": 40.54334763054349, "bbox_max_lon": 141.5100357221937, "bbox_max_lat": 40.54897943601769, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 6, "OBJNAM": "No 3 Wharf", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:499:area"}
|
||||
{"feature_id": 605000, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 500, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49338304560627, "bbox_min_lat": 40.55327413182146, "bbox_max_lon": 141.50128213135469, "bbox_max_lat": 40.558183470304584, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 6, "OBJNAM": "No 1 Wharf", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:500:area"}
|
||||
{"feature_id": 605001, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 501, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49832696791628, "bbox_min_lat": 40.54858298867289, "bbox_max_lon": 141.50594630497434, "bbox_max_lat": 40.55272523930777, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 6, "OBJNAM": "No 2 Wharf", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:501:area"}
|
||||
{"feature_id": 605002, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 502, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5107579824489, "bbox_min_lat": 40.53889471267114, "bbox_max_lon": 141.5174261739596, "bbox_max_lat": 40.54304772870506, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 6, "OBJNAM": "Kawaragi No 2 Wharf", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:502:area"}
|
||||
{"feature_id": 605003, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 503, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.47699485868978, "bbox_min_lat": 40.55540867104595, "bbox_max_lon": 141.52820921438885, "bbox_max_lat": 40.57845227802509, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATCON": [3], "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:503:area"}
|
||||
{"feature_id": 605004, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 504, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53498930537572, "bbox_min_lat": 40.54922340244798, "bbox_max_lon": 141.5454925971146, "bbox_max_lat": 40.56592282453552, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 1, "NATCON": [3], "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:504:area"}
|
||||
{"feature_id": 605005, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 505, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.53481636982167, "bbox_min_lat": 40.54910141934393, "bbox_max_lon": 141.54553837417302, "bbox_max_lat": 40.56589233638616, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 1, "OBJNAM": "Middle Breakwater", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:505:area"}
|
||||
{"feature_id": 605006, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 506, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.47721357130226, "bbox_min_lat": 40.56706103884022, "bbox_max_lon": 141.4916892944445, "bbox_max_lat": 40.57847259964477, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"NATCON": [3], "WATLEV": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:506:area"}
|
||||
{"feature_id": 605007, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 507, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.54939381976047, "bbox_min_lat": 40.54470479665162, "bbox_max_lon": 141.5603192777048, "bbox_max_lat": 40.549960378975165, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 1, "NATCON": [3], "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:507:area"}
|
||||
{"feature_id": 605008, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 508, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.49187748901807, "bbox_min_lat": 40.55859002463888, "bbox_max_lon": 141.5066431335304, "bbox_max_lat": 40.56627851858513, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 1, "OBJNAM": "Hattaro North Breakwater", "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:508:area"}
|
||||
{"feature_id": 605009, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 509, "object_class_id": 139, "object_class": "SLCONS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5338296198956, "bbox_min_lat": 40.536088612395424, "bbox_max_lon": 141.54678452743016, "bbox_max_lat": 40.538432120897646, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATSLC": 1, "NATCON": [3], "WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:509:area"}
|
||||
{"feature_id": 604975, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 475, "object_class_id": 143, "object_class": "SLIPWY", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.4736175290459, "bbox_min_lat": 40.58537651259471, "bbox_max_lon": 141.4746347970109, "bbox_max_lat": 40.58675822563124, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"OBJNAM": "Ichikawa Slipway", "WATLEV": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:475:area"}
|
||||
{"feature_id": 513212, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 282, "object_class_id": 143, "object_class": "SLIPWY", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48513643649827, "bbox_min_lat": 40.55965309509652, "bbox_max_lon": 141.48580783346776, "bbox_max_lat": 40.55996308617321, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 4}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:282:area"}
|
||||
{"feature_id": 513213, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 283, "object_class_id": 143, "object_class": "SLIPWY", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.48477530631015, "bbox_min_lat": 40.559505721786124, "bbox_max_lon": 141.48520764526776, "bbox_max_lat": 40.55974456802254, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"WATLEV": 2}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:283:area"}
|
||||
{"feature_id": 606738, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2238, "object_class_id": 147, "object_class": "SOUNDG", "geometry_type": "SOUNDING", "scale_code": "F", "native_scale": 20000, "raw_geotype": 8, "coverage_id": null, "bbox_min_lon": 141.47073357436506, "bbox_min_lat": 40.52099872504556, "bbox_max_lon": 141.59583718870357, "bbox_max_lat": 40.5929095500782, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2238:sounding"}
|
||||
{"feature_id": 513921, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 991, "object_class_id": 147, "object_class": "SOUNDG", "geometry_type": "SOUNDING", "scale_code": "E", "native_scale": 50000, "raw_geotype": 8, "coverage_id": null, "bbox_min_lon": 141.48180488335433, "bbox_min_lat": 40.52569276174202, "bbox_max_lon": 141.57742300175593, "bbox_max_lat": 40.57195000057247, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:991:sounding"}
|
||||
{"feature_id": 362107, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 6435, "object_class_id": 147, "object_class": "SOUNDG", "geometry_type": "SOUNDING", "scale_code": "C", "native_scale": 200000, "raw_geotype": 8, "coverage_id": null, "bbox_min_lon": 140.00018100919212, "bbox_min_lat": 40.00088065242476, "bbox_max_lon": 143.984799783809, "bbox_max_lat": 43.997398301187744, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:6435:sounding"}
|
||||
{"feature_id": 329756, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 1933, "object_class_id": 147, "object_class": "SOUNDG", "geometry_type": "SOUNDING", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 8, "coverage_id": null, "bbox_min_lon": 140.06225470926594, "bbox_min_lat": 40.00962335193312, "bbox_max_lon": 149.9995399683786, "bbox_max_lat": 49.99972078852007, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:1933:sounding"}
|
||||
{"feature_id": 605582, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1082, "object_class_id": 154, "object_class": "TELPHC", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.50892181377202, "bbox_min_lat": 40.547246232251226, "bbox_max_lon": 141.50962881500772, "bbox_max_lat": 40.547896824260796, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1082:line"}
|
||||
{"feature_id": 605583, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1083, "object_class_id": 154, "object_class": "TELPHC", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.50817920815757, "bbox_min_lat": 40.54612801246834, "bbox_max_lon": 141.50892181377202, "bbox_max_lat": 40.547246232251226, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1083:line"}
|
||||
{"feature_id": 513504, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 574, "object_class_id": 154, "object_class": "TELPHC", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 2, "coverage_id": 1759, "bbox_min_lon": 141.5093931951906, "bbox_min_lat": 40.54792828049828, "bbox_max_lon": 141.50956104443296, "bbox_max_lat": 40.54801976944343, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:574:line"}
|
||||
{"feature_id": 513505, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 575, "object_class_id": 154, "object_class": "TELPHC", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 2, "coverage_id": 1759, "bbox_min_lon": 141.50799953784488, "bbox_min_lat": 40.54614930394491, "bbox_max_lon": 141.5089354245296, "bbox_max_lat": 40.54745050286525, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:575:line"}
|
||||
{"feature_id": 513506, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 576, "object_class_id": 154, "object_class": "TELPHC", "geometry_type": "LINE", "scale_code": "E", "native_scale": 50000, "raw_geotype": 2, "coverage_id": 1759, "bbox_min_lon": 141.5090524103652, "bbox_min_lat": 40.54759790271135, "bbox_max_lon": 141.50924569131095, "bbox_max_lat": 40.54778088137933, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:576:line"}
|
||||
{"feature_id": 604942, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 442, "object_class_id": 155, "object_class": "TESARE", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.46794117380105, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:442:area"}
|
||||
{"feature_id": 356833, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 1161, "object_class_id": 155, "object_class": "TESARE", "geometry_type": "AREA", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.30000548760523, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 142.22018551373947, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:1161:area"}
|
||||
{"feature_id": 328188, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 365, "object_class_id": 155, "object_class": "TESARE", "geometry_type": "AREA", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1184, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 40.29440769058278, "bbox_max_lon": 141.7972054708302, "bbox_max_lat": 41.606003535658594, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"INFORM": "Jeppesen adopts \"International Boundaries and National Limits\" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.", "NATION": "JP"}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:365:area"}
|
||||
{"feature_id": 606442, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1942, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.49212671966947, "bbox_min_lat": 40.53255540232935, "bbox_max_lon": 141.49212671966947, "bbox_max_lat": 40.53255540232935, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1942:point"}
|
||||
{"feature_id": 606443, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1943, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50403384120006, "bbox_min_lat": 40.52984563442224, "bbox_max_lon": 141.50403384120006, "bbox_max_lat": 40.52984563442224, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1943:point"}
|
||||
{"feature_id": 606444, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1944, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.49338304560627, "bbox_min_lat": 40.5522373310738, "bbox_max_lon": 141.49338304560627, "bbox_max_lat": 40.5522373310738, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1944:point"}
|
||||
{"feature_id": 606445, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1945, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50641424823823, "bbox_min_lat": 40.53310446014887, "bbox_max_lon": 141.50641424823823, "bbox_max_lat": 40.53310446014887, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1945:point"}
|
||||
{"feature_id": 606446, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1946, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50633795314087, "bbox_min_lat": 40.52989139126262, "bbox_max_lon": 141.50633795314087, "bbox_max_lat": 40.52989139126262, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1946:point"}
|
||||
{"feature_id": 606447, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1947, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.49321011005222, "bbox_min_lat": 40.552471120879524, "bbox_max_lon": 141.49321011005222, "bbox_max_lat": 40.552471120879524, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1947:point"}
|
||||
{"feature_id": 606448, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1948, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50628200340276, "bbox_min_lat": 40.529459242079696, "bbox_max_lon": 141.50628200340276, "bbox_max_lat": 40.529459242079696, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1948:point"}
|
||||
{"feature_id": 606449, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1949, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.5448873226754, "bbox_min_lat": 40.529042342579885, "bbox_max_lon": 141.5448873226754, "bbox_max_lat": 40.529042342579885, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1949:point"}
|
||||
{"feature_id": 606450, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1950, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50394737342305, "bbox_min_lat": 40.52946941032777, "bbox_max_lon": 141.50394737342305, "bbox_max_lat": 40.52946941032777, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1950:point"}
|
||||
{"feature_id": 606451, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1951, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 1, "coverage_id": 2200, "bbox_min_lon": 141.50741117084394, "bbox_min_lat": 40.532951944539185, "bbox_max_lon": 141.50741117084394, "bbox_max_lat": 40.532951944539185, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1951:point"}
|
||||
{"feature_id": 513722, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 792, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.49175885206074, "bbox_min_lat": 40.53238859495904, "bbox_max_lon": 141.49175885206074, "bbox_max_lat": 40.53238859495904, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:792:point"}
|
||||
{"feature_id": 513723, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 793, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "POINT", "scale_code": "E", "native_scale": 50000, "raw_geotype": 1, "coverage_id": 1759, "bbox_min_lon": 141.51709391497675, "bbox_min_lat": 40.534935581368444, "bbox_max_lon": 141.51709391497675, "bbox_max_lat": 40.534935581368444, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:793:point"}
|
||||
{"feature_id": 513195, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 265, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.5195607902055, "bbox_min_lat": 40.53207847622974, "bbox_max_lon": 141.52256173120537, "bbox_max_lat": 40.53418318827337, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:265:area"}
|
||||
{"feature_id": 513196, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 266, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.5129638063464, "bbox_min_lat": 40.53195137797524, "bbox_max_lon": 141.51426082321922, "bbox_max_lat": 40.533359613173054, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:266:area"}
|
||||
{"feature_id": 513197, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 267, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.51565448056496, "bbox_min_lat": 40.53507792505766, "bbox_max_lon": 141.51788229778182, "bbox_max_lat": 40.53626749977913, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:267:area"}
|
||||
{"feature_id": 513199, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 269, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.5174296134615, "bbox_min_lat": 40.53449329726174, "bbox_max_lon": 141.51903689711568, "bbox_max_lat": 40.53570321696747, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:269:area"}
|
||||
{"feature_id": 513201, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 271, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.5164937267768, "bbox_min_lat": 40.531015927405434, "bbox_max_lon": 141.51713969204286, "bbox_max_lat": 40.53275463489108, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:271:area"}
|
||||
{"feature_id": 513202, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 272, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.55022125181117, "bbox_min_lat": 40.53134638697893, "bbox_max_lon": 141.5511062750891, "bbox_max_lat": 40.53286648002703, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:272:area"}
|
||||
{"feature_id": 513205, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 275, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.51548663132257, "bbox_min_lat": 40.53575405345159, "bbox_max_lon": 141.5169972745039, "bbox_max_lat": 40.53680127644309, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:275:area"}
|
||||
{"feature_id": 513206, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 276, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.553507027889, "bbox_min_lat": 40.529699156921296, "bbox_max_lon": 141.5544683462771, "bbox_max_lat": 40.530395675806176, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:276:area"}
|
||||
{"feature_id": 513208, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 278, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.54991098502978, "bbox_min_lat": 40.52829084479693, "bbox_max_lon": 141.55055695029588, "bbox_max_lat": 40.52878401161566, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:278:area"}
|
||||
{"feature_id": 513209, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 279, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.5169464110971, "bbox_min_lat": 40.530629541837506, "bbox_max_lon": 141.51764323976997, "bbox_max_lat": 40.5309600033164, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:279:area"}
|
||||
{"feature_id": 513211, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 281, "object_class_id": 153, "object_class": "TNKCON", "geometry_type": "AREA", "scale_code": "E", "native_scale": 50000, "raw_geotype": 4, "coverage_id": 1759, "bbox_min_lon": 141.4954057583267, "bbox_min_lat": 40.52982625944759, "bbox_max_lon": 141.49569567974532, "bbox_max_lat": 40.53028382654616, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:281:area"}
|
||||
{"feature_id": 606452, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1952, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.54813240748382, "bbox_min_lat": 40.53939288485493, "bbox_max_lon": 141.54813240748382, "bbox_max_lat": 40.53939288485493, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "NATCON": [2], "SORIND": "GB,UKHO,graph,LL M-6622", "VERLEN": 8, "_cm93_relation20_raw": 2243}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1952:point"}
|
||||
{"feature_id": 606453, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1953, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.56767921143177, "bbox_min_lat": 40.54238692330532, "bbox_max_lon": 141.56767921143177, "bbox_max_lat": 40.54238692330532, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "NATCON": [2], "SORIND": "GB,UKHO,graph,LL M-6621", "VERLEN": 9, "_cm93_relation20_raw": 2240}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1953:point"}
|
||||
{"feature_id": 606454, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1954, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.51452696025927, "bbox_min_lat": 40.55241521469589, "bbox_max_lon": 141.51452696025927, "bbox_max_lat": 40.55241521469589, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "NATCON": [2], "SORIND": "GB,UKHO,graph,LL M-6625.5", "VERLEN": 10, "_cm93_relation20_raw": 2239}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1954:point"}
|
||||
{"feature_id": 606455, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1955, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5759546863272, "bbox_min_lat": 40.53986563666468, "bbox_max_lon": 141.5759546863272, "bbox_max_lat": 40.53986563666468, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "NATCON": [2], "SORIND": "GB,UKHO,graph,LL M-6620", "VERLEN": 23, "_cm93_relation20_raw": 2241}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1955:point"}
|
||||
{"feature_id": 606456, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1956, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.5350198234147, "bbox_min_lat": 40.56587201094555, "bbox_max_lon": 141.5350198234147, "bbox_max_lat": 40.56587201094555, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "SORIND": "GB,UKHO,graph,LL M-6624.86", "VERLEN": 5, "_cm93_relation20_raw": 2242}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1956:point"}
|
||||
{"feature_id": 606457, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1957, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 161, "coverage_id": 2200, "bbox_min_lon": 141.55521767886023, "bbox_min_lat": 40.536297040550764, "bbox_max_lon": 141.55521767886023, "bbox_max_lat": 40.536297040550764, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 1, "COLOUR": [1], "CONVIS": 1, "SORIND": "GB,UKHO,graph,LL M-6624.4", "VERLEN": 9, "_cm93_relation20_raw": 2244}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1957:point"}
|
||||
{"feature_id": 606458, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1958, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48809833852798, "bbox_min_lat": 40.556491161360874, "bbox_max_lon": 141.48809833852798, "bbox_max_lat": 40.556491161360874, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 3, "CONVIS": 2, "INFORM": "Radio", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1958:point"}
|
||||
{"feature_id": 606459, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1959, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.487254006117, "bbox_min_lat": 40.55602869111419, "bbox_max_lon": 141.487254006117, "bbox_max_lat": 40.55602869111419, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 3, "CONVIS": 2, "INFORM": "Radio", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1959:point"}
|
||||
{"feature_id": 606460, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1960, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.487370991933, "bbox_min_lat": 40.55682149529551, "bbox_max_lon": 141.487370991933, "bbox_max_lat": 40.55682149529551, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 3, "CONVIS": 2, "INFORM": "Radio", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1960:point"}
|
||||
{"feature_id": 606461, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1961, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.48819497898467, "bbox_min_lat": 40.55577458522323, "bbox_max_lon": 141.48819497898467, "bbox_max_lat": 40.55577458522323, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 3, "CONVIS": 2, "INFORM": "Radio", "QUAPOS": 4}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1961:point"}
|
||||
{"feature_id": 606462, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1962, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5214392960816, "bbox_min_lat": 40.52781196552014, "bbox_max_lon": 141.5214392960816, "bbox_max_lat": 40.52781196552014, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CONVIS": 1, "HEIGHT": 51}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1962:point"}
|
||||
{"feature_id": 606463, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1963, "object_class_id": 158, "object_class": "TOWERS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.553798590049, "bbox_min_lat": 40.526698505652824, "bbox_max_lon": 141.553798590049, "bbox_max_lat": 40.526698505652824, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATTOW": 3, "HEIGHT": 53}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1963:point"}
|
||||
{"feature_id": 606549, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2049, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57399644549454, "bbox_min_lat": 40.54368819540977, "bbox_max_lon": 141.57399644549454, "bbox_max_lat": 40.54368819540977, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 0.3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2049:point"}
|
||||
{"feature_id": 606550, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2050, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5783045753264, "bbox_min_lat": 40.54233100870312, "bbox_max_lon": 141.5783045753264, "bbox_max_lat": 40.54233100870312, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 0.5, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2050:point"}
|
||||
{"feature_id": 606551, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2051, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.59056265430493, "bbox_min_lat": 40.52279870812551, "bbox_max_lon": 141.59056265430493, "bbox_max_lat": 40.52279870812551, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 0.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2051:point"}
|
||||
{"feature_id": 606552, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2052, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5803899746547, "bbox_min_lat": 40.541166957748345, "bbox_max_lon": 141.5803899746547, "bbox_max_lat": 40.541166957748345, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 0.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2052:point"}
|
||||
{"feature_id": 606553, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2053, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57795361787848, "bbox_min_lat": 40.54323580289634, "bbox_max_lon": 141.57795361787848, "bbox_max_lat": 40.54323580289634, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 0.8, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2053:point"}
|
||||
{"feature_id": 606554, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2054, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.57343186177394, "bbox_min_lat": 40.54388643386297, "bbox_max_lon": 141.57343186177394, "bbox_max_lat": 40.54388643386297, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 1.4, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2054:point"}
|
||||
{"feature_id": 606555, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2055, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55662150865197, "bbox_min_lat": 40.53705957705704, "bbox_max_lon": 141.55662150865197, "bbox_max_lat": 40.53705957705704, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 1.6, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2055:point"}
|
||||
{"feature_id": 606556, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2056, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56846250776482, "bbox_min_lat": 40.547566446295754, "bbox_max_lon": 141.56846250776482, "bbox_max_lat": 40.547566446295754, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 1.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2056:point"}
|
||||
{"feature_id": 606557, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2057, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58233295646792, "bbox_min_lat": 40.53549382604538, "bbox_max_lon": 141.58233295646792, "bbox_max_lat": 40.53549382604538, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2057:point"}
|
||||
{"feature_id": 606558, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2058, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58351807364716, "bbox_min_lat": 40.538264367047745, "bbox_max_lon": 141.58351807364716, "bbox_max_lat": 40.538264367047745, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2058:point"}
|
||||
{"feature_id": 606559, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2059, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58104102615232, "bbox_min_lat": 40.53694773891256, "bbox_max_lon": 141.58104102615232, "bbox_max_lat": 40.53694773891256, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2059:point"}
|
||||
{"feature_id": 606560, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2060, "object_class_id": 168, "object_class": "UWTROC", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58472353618572, "bbox_min_lat": 40.53782210488448, "bbox_max_lon": 141.58472353618572, "bbox_max_lat": 40.53782210488448, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"VALSOU": 2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2060:point"}
|
||||
{"feature_id": 605650, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1150, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.58328918835502, "bbox_min_lat": 40.54721065281842, "bbox_max_lon": 141.58328918835502, "bbox_max_lat": 40.54721065281842, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 2, "VALSOU": 23.5, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1150:point"}
|
||||
{"feature_id": 605651, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1151, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54923105688604, "bbox_min_lat": 40.530267612988084, "bbox_max_lon": 141.54923105688604, "bbox_max_lat": 40.530267612988084, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1151:point"}
|
||||
{"feature_id": 605652, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1152, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52744117707525, "bbox_min_lat": 40.53349083147308, "bbox_max_lon": 141.52744117707525, "bbox_max_lat": 40.53349083147308, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1152:point"}
|
||||
{"feature_id": 605653, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1153, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52830585484554, "bbox_min_lat": 40.53366876488627, "bbox_max_lon": 141.52830585484554, "bbox_max_lat": 40.53366876488627, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3.2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1153:point"}
|
||||
{"feature_id": 605654, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1154, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5516267229437, "bbox_min_lat": 40.53403479785053, "bbox_max_lon": 141.5516267229437, "bbox_max_lat": 40.53403479785053, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3.3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1154:point"}
|
||||
{"feature_id": 605655, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1155, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54553837417302, "bbox_min_lat": 40.52969311139527, "bbox_max_lon": 141.54553837417302, "bbox_max_lat": 40.52969311139527, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1155:point"}
|
||||
{"feature_id": 605656, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1156, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.4865012278229, "bbox_min_lat": 40.55870182664797, "bbox_max_lon": 141.4865012278229, "bbox_max_lat": 40.55870182664797, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 3.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1156:point"}
|
||||
{"feature_id": 605657, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1157, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5523184651599, "bbox_min_lat": 40.53377044091027, "bbox_max_lon": 141.5523184651599, "bbox_max_lat": 40.53377044091027, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 4.2, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1157:point"}
|
||||
{"feature_id": 605658, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1158, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5341500593046, "bbox_min_lat": 40.5340093789593, "bbox_max_lon": 141.5341500593046, "bbox_max_lat": 40.5340093789593, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 4.3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1158:point"}
|
||||
{"feature_id": 605659, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1159, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.53132205436182, "bbox_min_lat": 40.532311375187646, "bbox_max_lon": 141.53132205436182, "bbox_max_lat": 40.532311375187646, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 4.3, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1159:point"}
|
||||
{"feature_id": 605660, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1160, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52803119249498, "bbox_min_lat": 40.533180717823534, "bbox_max_lon": 141.52803119249498, "bbox_max_lat": 40.533180717823534, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 4.7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1160:point"}
|
||||
{"feature_id": 605661, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1161, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5324969988614, "bbox_min_lat": 40.5331705501386, "bbox_max_lon": 141.5324969988614, "bbox_max_lat": 40.5331705501386, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 3, "VALSOU": 4.9, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1161:point"}
|
||||
{"feature_id": 604833, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 333, "object_class_id": 176, "object_class": "WRECKS", "geometry_type": "AREA", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.5422932893646, "bbox_min_lat": 40.53198092035005, "bbox_max_lon": 141.5425526926957, "bbox_max_lat": 40.53225545217583, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CATWRK": 2, "VALSOU": 7, "WATLEV": 3}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:333:area"}
|
||||
{"feature_id": 605584, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1084, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.58070532772385, "bbox_min_lat": 40.5343093212615, "bbox_max_lon": 141.58281107241146, "bbox_max_lat": 40.538737126821324, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1084:line"}
|
||||
{"feature_id": 605585, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1085, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.58311116646112, "bbox_min_lat": 40.53356708870802, "bbox_max_lon": 141.58351807364716, "bbox_max_lat": 40.53412122200863, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1085:line"}
|
||||
{"feature_id": 605586, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1086, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5604210045013, "bbox_min_lat": 40.538915046302165, "bbox_max_lon": 141.5646528392358, "bbox_max_lat": 40.54126862239338, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1086:line"}
|
||||
{"feature_id": 605587, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1087, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5817632864075, "bbox_min_lat": 40.53728325278595, "bbox_max_lon": 141.58183958150488, "bbox_max_lat": 40.53735950570467, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1087:line"}
|
||||
{"feature_id": 605588, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1088, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5819667400005, "bbox_min_lat": 40.53936746799647, "bbox_max_lon": 141.58213967555454, "bbox_max_lat": 40.539413218334765, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1088:line"}
|
||||
{"feature_id": 605589, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1089, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.58143267431888, "bbox_min_lat": 40.53975380320449, "bbox_max_lon": 141.58175311372784, "bbox_max_lat": 40.539809719957944, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1089:line"}
|
||||
{"feature_id": 605590, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1090, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.57656504710624, "bbox_min_lat": 40.543434042688425, "bbox_max_lon": 141.57663625586378, "bbox_max_lat": 40.54348995636987, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1090:line"}
|
||||
{"feature_id": 605591, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1091, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.56779619724773, "bbox_min_lat": 40.542839321551995, "bbox_max_lon": 141.5713159444067, "bbox_max_lat": 40.544074505699285, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1091:line"}
|
||||
{"feature_id": 605592, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1092, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.590211696857, "bbox_min_lat": 40.52260040727397, "bbox_max_lon": 141.59034394169245, "bbox_max_lat": 40.52266650762302, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1092:line"}
|
||||
{"feature_id": 605593, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1093, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5803035068777, "bbox_min_lat": 40.54241742215959, "bbox_max_lon": 141.58037471563523, "bbox_max_lat": 40.54247333668963, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1093:line"}
|
||||
{"feature_id": 605594, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1094, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.5674503261396, "bbox_min_lat": 40.544130418846095, "bbox_max_lon": 141.56753679391664, "bbox_max_lat": 40.5441964979594, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1094:line"}
|
||||
{"feature_id": 605595, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1095, "object_class_id": 177, "object_class": "ZEMCNT", "geometry_type": "LINE", "scale_code": "F", "native_scale": 20000, "raw_geotype": 2, "coverage_id": 2200, "bbox_min_lon": 141.51177525041393, "bbox_min_lat": 40.542981648458436, "bbox_max_lon": 141.51403358529626, "bbox_max_lat": 40.54647364603113, "geometry_repaired": 0, "geometry_issue": null, "attributes": {}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1095:line"}
|
||||
{"feature_id": 606716, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2216, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.51800601669967, "bbox_min_lat": 40.54032821853955, "bbox_max_lon": 141.51800601669967, "bbox_max_lat": 40.54032821853955, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2262}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2216:point"}
|
||||
{"feature_id": 606717, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2217, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.56030401868534, "bbox_min_lat": 40.544648883984316, "bbox_max_lon": 141.56030401868534, "bbox_max_lat": 40.544648883984316, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2264}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2217:point"}
|
||||
{"feature_id": 606718, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2218, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.47915655311542, "bbox_min_lat": 40.58768781797142, "bbox_max_lon": 141.47915655311542, "bbox_max_lat": 40.58768781797142, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2252}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2218:point"}
|
||||
{"feature_id": 606719, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2219, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.5254269865045, "bbox_min_lat": 40.53363317824145, "bbox_max_lon": 141.5254269865045, "bbox_max_lat": 40.53363317824145, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2270}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2219:point"}
|
||||
{"feature_id": 606720, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2220, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.5075434156794, "bbox_min_lat": 40.549081088805, "bbox_max_lon": 141.5075434156794, "bbox_max_lat": 40.549081088805, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2260}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2220:point"}
|
||||
{"feature_id": 606721, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2221, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.53280217925092, "bbox_min_lat": 40.535966605369474, "bbox_max_lon": 141.53280217925092, "bbox_max_lat": 40.535966605369474, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2275}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2221:point"}
|
||||
{"feature_id": 606722, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2222, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.50160257076368, "bbox_min_lat": 40.552715074589145, "bbox_max_lon": 141.50160257076368, "bbox_max_lat": 40.552715074589145, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2269}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2222:point"}
|
||||
{"feature_id": 606723, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2223, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.52411979716945, "bbox_min_lat": 40.545101266953736, "bbox_max_lon": 141.52411979716945, "bbox_max_lat": 40.545101266953736, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2274}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2223:point"}
|
||||
{"feature_id": 606724, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2224, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.4824321559628, "bbox_min_lat": 40.58365441116841, "bbox_max_lon": 141.4824321559628, "bbox_max_lat": 40.58365441116841, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2277}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2224:point"}
|
||||
{"feature_id": 606725, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2225, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.5251777558531, "bbox_min_lat": 40.5334501609123, "bbox_max_lon": 141.5251777558531, "bbox_max_lat": 40.5334501609123, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2276}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2225:point"}
|
||||
{"feature_id": 606726, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2226, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.52561518107802, "bbox_min_lat": 40.53350099910942, "bbox_max_lon": 141.52561518107802, "bbox_max_lat": 40.53350099910942, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2266}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2226:point"}
|
||||
{"feature_id": 606727, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2227, "object_class_id": 201, "object_class": "_extgn", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 33, "coverage_id": 2200, "bbox_min_lon": 141.47109979083245, "bbox_min_lat": 40.546926016675656, "bbox_max_lon": 141.47109979083245, "bbox_max_lat": 40.546926016675656, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_cm93_relation20_raw": 2257}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2227:point"}
|
||||
{"feature_id": 604501, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 1, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "F", "native_scale": 20000, "raw_geotype": 132, "coverage_id": 2200, "bbox_min_lon": 141.45999631099423, "bbox_min_lat": 40.520830927549845, "bbox_max_lon": 141.59638651340472, "bbox_max_lat": 40.5930568498369, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 12000, "HORDAT": 2, "MARSYS": 2, "NMDATE": "20140328", "RECDAT": "20140505", "SORIND": "JP,JHOD,graph,W65", "VERDAT": 11, "_chcod": "31-0F700", "_dgdat": "20120313", "_hvdat": 3, "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:1:meta"}
|
||||
{"feature_id": 512931, "cell_id": 351, "source_relative_path": "03900420\\E\\03910424.E", "source_record_index": 1, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "E", "native_scale": 50000, "raw_geotype": 132, "coverage_id": 1759, "bbox_min_lon": 141.47966862026965, "bbox_min_lat": 40.52133528089739, "bbox_max_lon": 141.5780028445932, "bbox_max_lat": 40.572168478876776, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 20000, "HORDAT": 2, "MARSYS": 2, "NMDATE": "20060323", "RECDAT": "20060322", "SORIND": "GB,MDHS,graph,2959B", "VERDAT": 10, "_chcod": "31-0684B", "_dgdat": "20030320", "_hvdat": 21, "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900420/E/03910424.E:1:meta"}
|
||||
{"feature_id": 355675, "cell_id": 40, "source_relative_path": "03900420\\C\\03900420.C", "source_record_index": 3, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "C", "native_scale": 200000, "raw_geotype": 132, "coverage_id": 1255, "bbox_min_lon": 141.30000548760523, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 143.08335783594634, "bbox_max_lat": 41.33307476146743, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 250000, "HORDAT": 2, "MARSYS": 2, "NMDATE": "20140523", "RECDAT": "20140602", "SORIND": "JP,JHOD,graph,W53", "VERDAT": 11, "_chcod": "31-0F710", "_dgdat": "20070914", "_hvdat": 3, "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900420/C/03900420.C:3:meta"}
|
||||
{"feature_id": 327828, "cell_id": 12, "source_relative_path": "03900420\\B\\03900420.B", "source_record_index": 5, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "B", "native_scale": 1000000, "raw_geotype": 132, "coverage_id": 1184, "bbox_min_lon": 139.9999979009354, "bbox_min_lat": 39.99999935237068, "bbox_max_lon": 141.8321486304079, "bbox_max_lat": 45.254135718959375, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 1200000, "HORDAT": 2, "MARSYS": 2, "NMDATE": "20140926", "RECDAT": "20141006", "SORIND": "JP,JHOD,graph,W1154", "VERDAT": 11, "_chcod": "31-0F270", "_dgdat": "20081003", "_hvdat": 3, "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900420/B/03900420.B:5:meta"}
|
||||
{"feature_id": 322991, "cell_id": 4, "source_relative_path": "03900420\\A\\03900420.A", "source_record_index": 1, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "A", "native_scale": 3000000, "raw_geotype": 132, "coverage_id": 1160, "bbox_min_lon": 140.00000125369664, "bbox_min_lat": 40.00000035819904, "bbox_max_lon": 160.00000143279615, "bbox_max_lat": 60.00000053729857, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 3000000, "HORDAT": 2, "MARSYS": 1, "NMDATE": "20021101", "RECDAT": "20080102", "SORIND": "IT,CMAP,graph,W-135", "_chcod": "90-01520", "_dgdat": "20000101", "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900420/A/03900420.A:1:meta"}
|
||||
{"feature_id": 644517, "cell_id": 784, "source_relative_path": "03900360\\Z\\03900360.Z", "source_record_index": 1, "object_class_id": 217, "object_class": "_m_sor", "geometry_type": "META", "scale_code": "Z", "native_scale": 20000000, "raw_geotype": 132, "coverage_id": 2311, "bbox_min_lon": 120.00000107459711, "bbox_min_lat": 40.00000035819904, "bbox_max_lon": 160.00000143279615, "bbox_max_lat": 80.00000071639808, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"CSCALE": 20000000, "HORDAT": 2, "MARSYS": 1, "NMDATE": "20021101", "RECDAT": "20080102", "SORIND": "IT,CMAP,graph,W-14", "_chcod": "90-00310", "_dgdat": "20000101", "_quart": 4, "_sorhd": 2, "_wgsox": 0, "_wgsoy": 0}, "suggested_source_id": "cm95:1:03900360/Z/03900360.Z:1:meta"}
|
||||
{"feature_id": 606649, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2149, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5033268399644, "bbox_min_lat": 40.52367325872837, "bbox_max_lon": 141.5033268399644, "bbox_max_lat": 40.52367325872837, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Aomori", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2149:point"}
|
||||
{"feature_id": 606650, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2150, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54125058970044, "bbox_min_lat": 40.526820529554534, "bbox_max_lon": 141.54125058970044, "bbox_max_lat": 40.526820529554534, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Area 1 Chikkogai", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2150:point"}
|
||||
{"feature_id": 606651, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2151, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54794421291032, "bbox_min_lat": 40.52869661907635, "bbox_max_lon": 141.54794421291032, "bbox_max_lat": 40.52869661907635, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Area 2 Chikkogai", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2151:point"}
|
||||
{"feature_id": 606652, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2152, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.5038354739469, "bbox_min_lat": 40.5271713470344, "bbox_max_lon": 141.5038354739469, "bbox_max_lat": 40.5271713470344, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Area 3 Koyo", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2152:point"}
|
||||
{"feature_id": 606653, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2153, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51512206201883, "bbox_min_lat": 40.52610363595054, "bbox_max_lon": 141.51512206201883, "bbox_max_lat": 40.52610363595054, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Area 4 Koyo", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2153:point"}
|
||||
{"feature_id": 606654, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2154, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.54897165355496, "bbox_min_lat": 40.52447661492469, "bbox_max_lon": 141.54897165355496, "bbox_max_lat": 40.52447661492469, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Area 5 Shirogane", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2154:point"}
|
||||
{"feature_id": 606655, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2155, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55846276366864, "bbox_min_lat": 40.53757809692398, "bbox_max_lon": 141.55846276366864, "bbox_max_lat": 40.53757809692398, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Kabu Island Marine Park", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2155:point"}
|
||||
{"feature_id": 606656, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2156, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.55759299955852, "bbox_min_lat": 40.5390929653105, "bbox_max_lon": 141.55759299955852, "bbox_max_lat": 40.5390929653105, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Kabu Shima", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2156:point"}
|
||||
{"feature_id": 606657, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2157, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.52664262172271, "bbox_min_lat": 40.53770010101532, "bbox_max_lon": 141.52664262172271, "bbox_max_lat": 40.53770010101532, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Kawaragi No 1 Wharf [Port Island]", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2157:point"}
|
||||
{"feature_id": 606658, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2158, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.46334312259916, "bbox_min_lat": 40.5742963770966, "bbox_max_lon": 141.46334312259916, "bbox_max_lat": 40.5742963770966, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Kikyono Industrial Park", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2158:point"}
|
||||
{"feature_id": 606659, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2159, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.56571079791942, "bbox_min_lat": 40.54243775472137, "bbox_max_lon": 141.56571079791942, "bbox_max_lat": 40.54243775472137, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "O Saki", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2159:point"}
|
||||
{"feature_id": 606660, "cell_id": 693, "source_relative_path": "03900420\\F\\03910424.F", "source_record_index": 2160, "object_class_id": 198, "object_class": "_texto", "geometry_type": "POINT", "scale_code": "F", "native_scale": 20000, "raw_geotype": 129, "coverage_id": 2200, "bbox_min_lon": 141.51662761860706, "bbox_min_lat": 40.5377102680129, "bbox_max_lon": 141.51662761860706, "bbox_max_lat": 40.5377102680129, "geometry_repaired": 0, "geometry_issue": null, "attributes": {"_texta": {"text": "Pier for Tohoku Port", "prefix": [0, 12, 0]}}, "suggested_source_id": "cm95:1:03900420/F/03910424.F:2160:point"}
|
||||
@@ -0,0 +1,81 @@
|
||||
cm95_object_class_id,cm95_object_class,cm95_description,geometry_type,aoi_feature_count,aoi_cell_count,min_native_scale,max_native_scale,available_attributes,target_source_layer,canonical_family,canonical_object_type,chart_render_type,safety_class,mapping_status,notes
|
||||
176,WRECKS,Wreck,POINT,480,3,20000,200000,"[""CATWRK"", ""VALSOU"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
45,DEPCNT,Depth contour,LINE,451,6,20000,20000000,"[""QUAPOS"", ""VALDCO""]",,,,,,UNMAPPED,
|
||||
44,DEPARE,Depth area,AREA,414,6,20000,20000000,"[""DRVAL1"", ""DRVAL2""]",,,,,,UNMAPPED,
|
||||
138,SBDARE,Seabed area,POINT,287,3,20000,200000,"[""NATQUA"", ""NATSUR""]",,,,,,UNMAPPED,
|
||||
139,SLCONS,Shoreline construction,LINE,209,4,20000,1000000,"[""CATSLC"", ""CONDTN"", ""INFORM"", ""OBJNAM"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
168,UWTROC,Underwater rock,POINT,176,4,20000,1000000,"[""EXPSOU"", ""VALSOU"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
35,COALNE,Coastline,LINE,171,6,20000,20000000,"[""CATCOA""]",,,,,,UNMAPPED,
|
||||
81,LNDARE,Land area,AREA,159,6,20000,20000000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
139,SLCONS,Shoreline construction,AREA,119,2,20000,50000,"[""CATSLC"", ""CONDTN"", ""INFORM"", ""NATCON"", ""OBJNAM"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
198,_texto,Text,POINT,113,5,20000,3000000,"[""_texta""]",,,,,,UNMAPPED,
|
||||
86,LIGHTS,Light,POINT,96,4,20000,1000000,"[""CATLIT"", ""COLOUR"", ""HEIGHT"", ""INFORM"", ""LITCHR"", ""OBJNAM"", ""QUAVEM"", ""SECTR1"", ""SECTR2"", ""SIGGRP"", ""SIGPER"", ""SORIND"", ""STATUS"", ""VALNMR""]",,,,,,UNMAPPED,
|
||||
10,BRTFAC,Berthing facility,POINT,89,2,20000,50000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
177,ZEMCNT,Zero meter contour,LINE,84,3,20000,200000,[],,,,,,UNMAPPED,
|
||||
99,OBSTRN,Obstruction,AREA,70,4,20000,1000000,"[""INFORM"", ""VALSOU"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
78,ITDARE,Intertidal area,AREA,69,3,20000,200000,"[""NATSUR""]",,,,,,UNMAPPED,
|
||||
158,TOWERS,Tower,POINT,54,4,20000,1000000,"[""CATTOW"", ""COLOUR"", ""CONVIS"", ""HEIGHT"", ""INFORM"", ""NATCON"", ""QUAPOS"", ""SORIND"", ""VERLEN""]",,,,,,UNMAPPED,
|
||||
153,TNKCON,Tank,POINT,46,2,20000,50000,[],,,,,,UNMAPPED,
|
||||
201,_extgn,"Extended navigational aid, generic",POINT,42,2,20000,50000,"[""COLMAR"", ""INFORM""]",,,,,,UNMAPPED,
|
||||
14,BUAARE,Built-up area,POINT,35,3,20000,1000000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
33,CHIMNY,Chimney,POINT,35,3,20000,200000,"[""COLOUR"", ""CONVIS"", ""HEIGHT"", ""INFORM""]",,,,,,UNMAPPED,
|
||||
13,BUISGL,"Building, single",AREA,20,1,20000,20000,"[""CATBUI"", ""INFORM"", ""OBJNAM""]",,,,,,UNMAPPED,
|
||||
103,PILPNT,Pile,POINT,20,3,20000,200000,"[""INFORM""]",,,,,,UNMAPPED,
|
||||
60,FSHHAV,Fish haven,POINT,18,3,20000,200000,"[""INFORM""]",,,,,,UNMAPPED,
|
||||
11,BRIDGE,Bridge,AREA,17,3,20000,200000,"[""CATBRG"", ""INFORM"", ""OBJNAM"", ""VERCLR""]",,,,,,UNMAPPED,
|
||||
29,CTNARE,Caution area,AREA,16,4,20000,1000000,"[""INFORM""]",,,,,,UNMAPPED,
|
||||
193,$LINES,Cartographic line,LINE,15,2,20000,50000,"[""$SCODE""]",,,,,,UNMAPPED,
|
||||
7,BCNLAT,"Beacon, lateral",POINT,15,3,20000,200000,"[""BCNSHP"", ""CATLAM"", ""COLMAR"", ""INFORM"", ""SORIND"", ""VERLEN""]",,,,,,UNMAPPED,
|
||||
39,CRANES,Crane,POINT,15,2,20000,50000,"[""CATCRN""]",,,,,,UNMAPPED,
|
||||
111,PRDINS,Production installation,AREA,15,1,20000,20000,"[""INFORM"", ""OBJNAM"", ""PRODCT""]",,,,,,UNMAPPED,
|
||||
50,DRGARE,Dredged area,AREA,14,1,50000,50000,"[""DRVAL1"", ""INFORM""]",,,,,,UNMAPPED,
|
||||
29,CTNARE,Caution area,POINT,13,2,20000,50000,"[""INFORM""]",,,,,,UNMAPPED,
|
||||
9,BCNSPP,"Beacon, special purpose",POINT,12,4,20000,1000000,"[""CATSPM"", ""COLMAR"", ""INFORM"", ""SORIND"", ""VERLEN""]",,,,,,UNMAPPED,
|
||||
13,BUISGL,"Building, single",POINT,12,3,20000,200000,"[""BUISHP"", ""CATBUI"", ""CONVIS"", ""INFORM"", ""OBJNAM"", ""QUAPOS""]",,,,,,UNMAPPED,
|
||||
22,CBLSUB,"Cable, submarine",LINE,12,3,20000,200000,"[""CATCBL"", ""STATUS""]",,,,,,UNMAPPED,
|
||||
111,PRDINS,Production installation,POINT,12,1,20000,20000,"[""INFORM"", ""OBJNAM"", ""PRODCT"", ""QUAPOS""]",,,,,,UNMAPPED,
|
||||
194,$AREAS,Cartographic area,AREA,11,3,20000,200000,"[""$SCODE""]",,,,,,UNMAPPED,
|
||||
153,TNKCON,Tank,AREA,11,1,50000,50000,[],,,,,,UNMAPPED,
|
||||
138,SBDARE,Seabed area,AREA,9,3,20000,200000,"[""NATSUR""]",,,,,,UNMAPPED,
|
||||
20,BOYSPP,"Buoy, special purpose",POINT,8,2,20000,50000,"[""BOYSHP"", ""CATSPM"", ""COLMAR"", ""INFORM"", ""STATUS""]",,,,,,UNMAPPED,
|
||||
96,MORFAC,Mooring/Warping facility,POINT,7,1,50000,50000,"[""CATMOR"", ""INFORM""]",,,,,,UNMAPPED,
|
||||
210,M_PROD,Production information,AREA,7,7,20000,20000000,"[""CPDATE""]",,,,,,UNMAPPED,
|
||||
130,RIVBNK,River bank,LINE,7,2,20000,200000,[],,,,,,UNMAPPED,
|
||||
38,CTRPNT,Control point,POINT,6,2,20000,50000,"[""CATCTR"", ""OBJNAM""]",,,,,,UNMAPPED,
|
||||
99,OBSTRN,Obstruction,POINT,6,3,20000,200000,"[""EXPSOU"", ""INFORM"", ""VALSOU"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
217,_m_sor,Source of data,META,6,6,20000,20000000,"[""CSCALE"", ""HORDAT"", ""MARSYS"", ""NMDATE"", ""RECDAT"", ""SORIND"", ""VERDAT"", ""_chcod"", ""_dgdat"", ""_hvdat"", ""_quart"", ""_sorhd"", ""_wgsox"", ""_wgsoy""]",,,,,,UNMAPPED,
|
||||
191,$COMPS,Compass,POINT,5,2,20000,50000,"[""$ANNCH"", ""$CYEAR"", ""$VARIA""]",,,,,,UNMAPPED,
|
||||
12,BUIREL,"Building, religious",POINT,5,2,20000,50000,"[""CATREB""]",,,,,,UNMAPPED,
|
||||
21,CBLOHD,"Cable, overhead",LINE,5,2,20000,50000,"[""CATCBL"", ""QUAVEM"", ""VERCLR""]",,,,,,UNMAPPED,
|
||||
57,FAIRWY,Fairway,AREA,5,2,20000,50000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
129,RIVERS,River,AREA,5,2,20000,200000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
142,SILBUI,Silo,POINT,5,2,20000,50000,"[""INFORM"", ""QUAPOS""]",,,,,,UNMAPPED,
|
||||
154,TELPHC,Telepheric,LINE,5,2,20000,50000,[],,,,,,UNMAPPED,
|
||||
11,BRIDGE,Bridge,LINE,4,2,20000,200000,[],,,,,,UNMAPPED,
|
||||
72,HRBARE,Harbour area (administrative),AREA,4,2,20000,50000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
95,MONUMT,Monument,POINT,4,2,20000,50000,"[""CONVIS""]",,,,,,UNMAPPED,
|
||||
140,SISTAT,"Signal station, traffic",POINT,4,2,20000,50000,"[""CATSIT""]",,,,,,UNMAPPED,
|
||||
147,SOUNDG,Spot soundings,SOUNDING,4,4,20000,1000000,[],,,,,,UNMAPPED,
|
||||
1,AIRARE,Airport area,POINT,3,2,20000,200000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
14,BUAARE,Built-up area,AREA,3,1,200000,200000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
79,LAKARE,Lake,AREA,3,2,20000,200000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
80,LAKSHR,Lake shore,LINE,3,2,20000,200000,[],,,,,,UNMAPPED,
|
||||
97,NATARE,National territorial area,AREA,3,3,20000,1000000,"[""INFORM"", ""NATION""]",,,,,,UNMAPPED,
|
||||
104,PILBOP,Pilot boarding place,POINT,3,2,20000,50000,[],,,,,,UNMAPPED,
|
||||
143,SLIPWY,Slipway,AREA,3,2,20000,50000,"[""OBJNAM"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
155,TESARE,Territorial sea area,AREA,3,3,20000,1000000,"[""INFORM"", ""NATION""]",,,,,,UNMAPPED,
|
||||
4,ACHARE,Anchorage area,AREA,2,2,20000,50000,"[""CATACH""]",,,,,,UNMAPPED,
|
||||
36,CONZNE,Contiguous zone,AREA,2,2,200000,1000000,"[""INFORM"", ""NATION"", ""SORIND""]",,,,,,UNMAPPED,
|
||||
56,EXEZNE,Exclusive economic zone,AREA,2,2,200000,1000000,"[""INFORM"", ""NATION"", ""SORIND""]",,,,,,UNMAPPED,
|
||||
96,MORFAC,Mooring/Warping facility,AREA,2,1,20000,20000,"[""CATMOR"", ""INFORM""]",,,,,,UNMAPPED,
|
||||
106,PIPOHD,"Pipeline, overhead",LINE,2,1,20000,20000,[],,,,,,UNMAPPED,
|
||||
107,PIPSOL,"Pipeline, submarine/on land",LINE,2,2,20000,50000,"[""CATPIP"", ""INFORM"", ""PRODCT""]",,,,,,UNMAPPED,
|
||||
112,PYLONS,Pylon,POINT,2,1,50000,50000,"[""INFORM""]",,,,,,UNMAPPED,
|
||||
136,SEAARE,Sea area,AREA,2,1,200000,200000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
73,HRBFAC,Harbour facility,POINT,1,1,20000,20000,"[""OBJNAM""]",,,,,,UNMAPPED,
|
||||
73,HRBFAC,Harbour facility,AREA,1,1,20000,20000,"[""CATHAF""]",,,,,,UNMAPPED,
|
||||
127,RSCSTA,Rescue station,POINT,1,1,20000,20000,[],,,,,,UNMAPPED,
|
||||
118,RTPBCN,Radar transponder beacon,POINT,1,1,50000,50000,"[""CATRTB"", ""SORIND""]",,,,,,UNMAPPED,
|
||||
142,SILBUI,Silo,AREA,1,1,20000,20000,[],,,,,,UNMAPPED,
|
||||
141,SISTAW,"Signal station, warning",POINT,1,1,20000,20000,"[""CATSIW""]",,,,,,UNMAPPED,
|
||||
176,WRECKS,Wreck,AREA,1,1,20000,20000,"[""CATWRK"", ""VALSOU"", ""WATLEV""]",,,,,,UNMAPPED,
|
||||
|
@@ -0,0 +1,627 @@
|
||||
{
|
||||
"version": "v2.0",
|
||||
"generated_at": "2026-09-03T08:30:30",
|
||||
"database": "cm93_chart",
|
||||
"dataset_id": 1,
|
||||
"read_only": true,
|
||||
"aoi": {
|
||||
"tile": {
|
||||
"z": 10,
|
||||
"x": 914,
|
||||
"y": 385
|
||||
},
|
||||
"bbox_wgs84": {
|
||||
"min_lon": 141.328125,
|
||||
"min_lat": 40.44694705960049,
|
||||
"max_lon": 141.6796875,
|
||||
"max_lat": 40.71395582628604
|
||||
},
|
||||
"known_navsea_samples_inside": [
|
||||
"z10/914/385",
|
||||
"z11/1828-1829/770-771",
|
||||
"z12/3656-3659/1540-1543"
|
||||
]
|
||||
},
|
||||
"dataset": {
|
||||
"id": 1,
|
||||
"source_type": "CM93",
|
||||
"name": "CM93JAPAN",
|
||||
"source_root": "D:\\Ship\\CM93V2\\CM93JAPAN",
|
||||
"parser_version": "0.2.0",
|
||||
"normalized_srid": 4326
|
||||
},
|
||||
"warnings": [],
|
||||
"counts": {
|
||||
"aoi_cells": 7,
|
||||
"aoi_spatial_features": 3605,
|
||||
"object_class_geometry_groups": 80,
|
||||
"attribute_group_count": 177,
|
||||
"sample_feature_count": 600,
|
||||
"related_sample_count": 0
|
||||
},
|
||||
"geometry_counts": [
|
||||
{
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1632
|
||||
},
|
||||
{
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 970
|
||||
},
|
||||
{
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 993
|
||||
},
|
||||
{
|
||||
"geometry_type": "SOUNDING",
|
||||
"feature_count": 4
|
||||
},
|
||||
{
|
||||
"geometry_type": "META",
|
||||
"feature_count": 6
|
||||
}
|
||||
],
|
||||
"object_classes": [
|
||||
{
|
||||
"object_class_id": 176,
|
||||
"object_class": "WRECKS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 480,
|
||||
"description": "Wreck"
|
||||
},
|
||||
{
|
||||
"object_class_id": 45,
|
||||
"object_class": "DEPCNT",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 451,
|
||||
"description": "Depth contour"
|
||||
},
|
||||
{
|
||||
"object_class_id": 44,
|
||||
"object_class": "DEPARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 414,
|
||||
"description": "Depth area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 138,
|
||||
"object_class": "SBDARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 287,
|
||||
"description": "Seabed area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 139,
|
||||
"object_class": "SLCONS",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 209,
|
||||
"description": "Shoreline construction"
|
||||
},
|
||||
{
|
||||
"object_class_id": 168,
|
||||
"object_class": "UWTROC",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 176,
|
||||
"description": "Underwater rock"
|
||||
},
|
||||
{
|
||||
"object_class_id": 35,
|
||||
"object_class": "COALNE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 171,
|
||||
"description": "Coastline"
|
||||
},
|
||||
{
|
||||
"object_class_id": 81,
|
||||
"object_class": "LNDARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 159,
|
||||
"description": "Land area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 139,
|
||||
"object_class": "SLCONS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 119,
|
||||
"description": "Shoreline construction"
|
||||
},
|
||||
{
|
||||
"object_class_id": 198,
|
||||
"object_class": "_texto",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 113,
|
||||
"description": "Text"
|
||||
},
|
||||
{
|
||||
"object_class_id": 86,
|
||||
"object_class": "LIGHTS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 96,
|
||||
"description": "Light"
|
||||
},
|
||||
{
|
||||
"object_class_id": 10,
|
||||
"object_class": "BRTFAC",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 89,
|
||||
"description": "Berthing facility"
|
||||
},
|
||||
{
|
||||
"object_class_id": 177,
|
||||
"object_class": "ZEMCNT",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 84,
|
||||
"description": "Zero meter contour"
|
||||
},
|
||||
{
|
||||
"object_class_id": 99,
|
||||
"object_class": "OBSTRN",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 70,
|
||||
"description": "Obstruction"
|
||||
},
|
||||
{
|
||||
"object_class_id": 78,
|
||||
"object_class": "ITDARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 69,
|
||||
"description": "Intertidal area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 158,
|
||||
"object_class": "TOWERS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 54,
|
||||
"description": "Tower"
|
||||
},
|
||||
{
|
||||
"object_class_id": 153,
|
||||
"object_class": "TNKCON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 46,
|
||||
"description": "Tank"
|
||||
},
|
||||
{
|
||||
"object_class_id": 201,
|
||||
"object_class": "_extgn",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 42,
|
||||
"description": "Extended navigational aid, generic"
|
||||
},
|
||||
{
|
||||
"object_class_id": 14,
|
||||
"object_class": "BUAARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 35,
|
||||
"description": "Built-up area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 33,
|
||||
"object_class": "CHIMNY",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 35,
|
||||
"description": "Chimney"
|
||||
},
|
||||
{
|
||||
"object_class_id": 13,
|
||||
"object_class": "BUISGL",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 20,
|
||||
"description": "Building, single"
|
||||
},
|
||||
{
|
||||
"object_class_id": 103,
|
||||
"object_class": "PILPNT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 20,
|
||||
"description": "Pile"
|
||||
},
|
||||
{
|
||||
"object_class_id": 60,
|
||||
"object_class": "FSHHAV",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 18,
|
||||
"description": "Fish haven"
|
||||
},
|
||||
{
|
||||
"object_class_id": 11,
|
||||
"object_class": "BRIDGE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 17,
|
||||
"description": "Bridge"
|
||||
},
|
||||
{
|
||||
"object_class_id": 29,
|
||||
"object_class": "CTNARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 16,
|
||||
"description": "Caution area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 193,
|
||||
"object_class": "$LINES",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 15,
|
||||
"description": "Cartographic line"
|
||||
},
|
||||
{
|
||||
"object_class_id": 7,
|
||||
"object_class": "BCNLAT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 15,
|
||||
"description": "Beacon, lateral"
|
||||
},
|
||||
{
|
||||
"object_class_id": 39,
|
||||
"object_class": "CRANES",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 15,
|
||||
"description": "Crane"
|
||||
},
|
||||
{
|
||||
"object_class_id": 111,
|
||||
"object_class": "PRDINS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 15,
|
||||
"description": "Production installation"
|
||||
},
|
||||
{
|
||||
"object_class_id": 50,
|
||||
"object_class": "DRGARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 14,
|
||||
"description": "Dredged area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 29,
|
||||
"object_class": "CTNARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 13,
|
||||
"description": "Caution area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 9,
|
||||
"object_class": "BCNSPP",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 12,
|
||||
"description": "Beacon, special purpose"
|
||||
},
|
||||
{
|
||||
"object_class_id": 13,
|
||||
"object_class": "BUISGL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 12,
|
||||
"description": "Building, single"
|
||||
},
|
||||
{
|
||||
"object_class_id": 22,
|
||||
"object_class": "CBLSUB",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 12,
|
||||
"description": "Cable, submarine"
|
||||
},
|
||||
{
|
||||
"object_class_id": 111,
|
||||
"object_class": "PRDINS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 12,
|
||||
"description": "Production installation"
|
||||
},
|
||||
{
|
||||
"object_class_id": 194,
|
||||
"object_class": "$AREAS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 11,
|
||||
"description": "Cartographic area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 153,
|
||||
"object_class": "TNKCON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 11,
|
||||
"description": "Tank"
|
||||
},
|
||||
{
|
||||
"object_class_id": 138,
|
||||
"object_class": "SBDARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 9,
|
||||
"description": "Seabed area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 20,
|
||||
"object_class": "BOYSPP",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 8,
|
||||
"description": "Buoy, special purpose"
|
||||
},
|
||||
{
|
||||
"object_class_id": 96,
|
||||
"object_class": "MORFAC",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 7,
|
||||
"description": "Mooring/Warping facility"
|
||||
},
|
||||
{
|
||||
"object_class_id": 210,
|
||||
"object_class": "M_PROD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 7,
|
||||
"description": "Production information"
|
||||
},
|
||||
{
|
||||
"object_class_id": 130,
|
||||
"object_class": "RIVBNK",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 7,
|
||||
"description": "River bank"
|
||||
},
|
||||
{
|
||||
"object_class_id": 38,
|
||||
"object_class": "CTRPNT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 6,
|
||||
"description": "Control point"
|
||||
},
|
||||
{
|
||||
"object_class_id": 99,
|
||||
"object_class": "OBSTRN",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 6,
|
||||
"description": "Obstruction"
|
||||
},
|
||||
{
|
||||
"object_class_id": 217,
|
||||
"object_class": "_m_sor",
|
||||
"geometry_type": "META",
|
||||
"feature_count": 6,
|
||||
"description": "Source of data"
|
||||
},
|
||||
{
|
||||
"object_class_id": 191,
|
||||
"object_class": "$COMPS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 5,
|
||||
"description": "Compass"
|
||||
},
|
||||
{
|
||||
"object_class_id": 12,
|
||||
"object_class": "BUIREL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 5,
|
||||
"description": "Building, religious"
|
||||
},
|
||||
{
|
||||
"object_class_id": 21,
|
||||
"object_class": "CBLOHD",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 5,
|
||||
"description": "Cable, overhead"
|
||||
},
|
||||
{
|
||||
"object_class_id": 57,
|
||||
"object_class": "FAIRWY",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"description": "Fairway"
|
||||
},
|
||||
{
|
||||
"object_class_id": 129,
|
||||
"object_class": "RIVERS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"description": "River"
|
||||
},
|
||||
{
|
||||
"object_class_id": 142,
|
||||
"object_class": "SILBUI",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 5,
|
||||
"description": "Silo"
|
||||
},
|
||||
{
|
||||
"object_class_id": 154,
|
||||
"object_class": "TELPHC",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 5,
|
||||
"description": "Telepheric"
|
||||
},
|
||||
{
|
||||
"object_class_id": 11,
|
||||
"object_class": "BRIDGE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 4,
|
||||
"description": "Bridge"
|
||||
},
|
||||
{
|
||||
"object_class_id": 72,
|
||||
"object_class": "HRBARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 4,
|
||||
"description": "Harbour area (administrative)"
|
||||
},
|
||||
{
|
||||
"object_class_id": 95,
|
||||
"object_class": "MONUMT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 4,
|
||||
"description": "Monument"
|
||||
},
|
||||
{
|
||||
"object_class_id": 140,
|
||||
"object_class": "SISTAT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 4,
|
||||
"description": "Signal station, traffic"
|
||||
},
|
||||
{
|
||||
"object_class_id": 147,
|
||||
"object_class": "SOUNDG",
|
||||
"geometry_type": "SOUNDING",
|
||||
"feature_count": 4,
|
||||
"description": "Spot soundings"
|
||||
},
|
||||
{
|
||||
"object_class_id": 1,
|
||||
"object_class": "AIRARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 3,
|
||||
"description": "Airport area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 14,
|
||||
"object_class": "BUAARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"description": "Built-up area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 79,
|
||||
"object_class": "LAKARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"description": "Lake"
|
||||
},
|
||||
{
|
||||
"object_class_id": 80,
|
||||
"object_class": "LAKSHR",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 3,
|
||||
"description": "Lake shore"
|
||||
},
|
||||
{
|
||||
"object_class_id": 97,
|
||||
"object_class": "NATARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"description": "National territorial area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 104,
|
||||
"object_class": "PILBOP",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 3,
|
||||
"description": "Pilot boarding place"
|
||||
},
|
||||
{
|
||||
"object_class_id": 143,
|
||||
"object_class": "SLIPWY",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"description": "Slipway"
|
||||
},
|
||||
{
|
||||
"object_class_id": 155,
|
||||
"object_class": "TESARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"description": "Territorial sea area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 4,
|
||||
"object_class": "ACHARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"description": "Anchorage area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 36,
|
||||
"object_class": "CONZNE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"description": "Contiguous zone"
|
||||
},
|
||||
{
|
||||
"object_class_id": 56,
|
||||
"object_class": "EXEZNE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"description": "Exclusive economic zone"
|
||||
},
|
||||
{
|
||||
"object_class_id": 96,
|
||||
"object_class": "MORFAC",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"description": "Mooring/Warping facility"
|
||||
},
|
||||
{
|
||||
"object_class_id": 106,
|
||||
"object_class": "PIPOHD",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 2,
|
||||
"description": "Pipeline, overhead"
|
||||
},
|
||||
{
|
||||
"object_class_id": 107,
|
||||
"object_class": "PIPSOL",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 2,
|
||||
"description": "Pipeline, submarine/on land"
|
||||
},
|
||||
{
|
||||
"object_class_id": 112,
|
||||
"object_class": "PYLONS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 2,
|
||||
"description": "Pylon"
|
||||
},
|
||||
{
|
||||
"object_class_id": 136,
|
||||
"object_class": "SEAARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"description": "Sea area"
|
||||
},
|
||||
{
|
||||
"object_class_id": 73,
|
||||
"object_class": "HRBFAC",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"description": "Harbour facility"
|
||||
},
|
||||
{
|
||||
"object_class_id": 73,
|
||||
"object_class": "HRBFAC",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"description": "Harbour facility"
|
||||
},
|
||||
{
|
||||
"object_class_id": 127,
|
||||
"object_class": "RSCSTA",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"description": "Rescue station"
|
||||
},
|
||||
{
|
||||
"object_class_id": 118,
|
||||
"object_class": "RTPBCN",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"description": "Radar transponder beacon"
|
||||
},
|
||||
{
|
||||
"object_class_id": 142,
|
||||
"object_class": "SILBUI",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"description": "Silo"
|
||||
},
|
||||
{
|
||||
"object_class_id": 141,
|
||||
"object_class": "SISTAW",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"description": "Signal station, warning"
|
||||
},
|
||||
{
|
||||
"object_class_id": 176,
|
||||
"object_class": "WRECKS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"description": "Wreck"
|
||||
}
|
||||
],
|
||||
"next_step": "Use AOI_对象映射准备表_v1.csv + 属性值域汇总_v1.csv to author cm95_to_navsea_v1.yaml."
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
object_class_id,object_class,geometry_code,display_code,description,raw_line
|
||||
1,AIRARE,PA,6,Airport area,AIRARE|1|PA|6|Airport area|CATAIR|CONDTN|CONVIS|NATCON|NOBJNM|OBJNAM|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
4,ACHARE,PA,6,Anchorage area,ACHARE|4|PA|6|Anchorage area|CATACH|DATEND|DATSTA|NOBJNM|OBJNAM|PEREND|PERSTA|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
7,BCNLAT,P,8,"Beacon, lateral","BCNLAT|7|P|8|Beacon, lateral|BCNSHP|CATLAM|COLMAR|COLPAT|CONRAD|DATEND|DATSTA|MARSYS|NOBJNM|OBJNAM|PEREND|PERSTA|QUAVEM|STATUS|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
9,BCNSPP,P,8,"Beacon, special purpose","BCNSPP|9|P|8|Beacon, special purpose|BCNSHP|CATSPM|COLMAR|COLPAT|CONRAD|DATEND|DATSTA|MARSYS|NOBJNM|OBJNAM|PEREND|PERSTA|QUAVEM|STATUS|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
10,BRTFAC,PLA,6,Berthing facility,BRTFAC|10|PLA|6|Berthing facility|CONDTN|DATEND|DATSTA|NATCON|NOBJNM|OBJNAM|STATUS|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
11,BRIDGE,PLA,6,Bridge,BRIDGE|11|PLA|6|Bridge|CATBRG|COLOUR|CONDTN|CONRAD|CONVIS|DATEND|DATSTA|HORCLR|NATCON|NOBJNM|OBJNAM|QUAVEM|VERCCL|VERCLR|VERCOP|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
12,BUIREL,PA,6,"Building, religious","BUIREL|12|PA|6|Building, religious|BUISHP|CATREB|COLOUR|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND|"
|
||||
13,BUISGL,PA,6,"Building, single","BUISGL|13|PA|6|Building, single|BUISHP|CATBUI|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
14,BUAARE,PA,6,Built-up area,BUAARE|14|PA|6|Built-up area|CATBUA|CONDTN|CONRAD|CONVIS|HEIGHT|NOBJNM|OBJNAM|QUAVEM|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
20,BOYSPP,P,8,"Buoy, special purpose","BOYSPP|20|P|8|Buoy, special purpose|BOYSHP|CATSPM|COLMAR|COLPAT|CONRAD|DATEND|DATSTA|MARSYS|NOBJNM|OBJNAM|PEREND|PERSTA|QUAVEM|STATUS|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
21,CBLOHD,L,7,"Cable, overhead","CBLOHD|21|L|7|Cable, overhead|CATCBL|CONDTN|DATEND|DATSTA|NOBJNM|OBJNAM|QUAVEM|STATUS|VERCLR|VERCSA|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
22,CBLSUB,L,7,"Cable, submarine","CBLSUB|22|L|7|Cable, submarine|BURDEP|CATCBL|CONDTN|DATEND|DATSTA|NOBJNM|OBJNAM|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
29,CTNARE,PA,6,Caution area,CTNARE|29|PA|6|Caution area|DATEND|DATSTA|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
33,CHIMNY,PA,6,Chimney,CHIMNY|33|PA|6|Chimney|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
35,COALNE,L,7,Coastline,COALNE|35|L|7|Coastline|CATCOA|CONRAD|HEIGHT|NOBJNM|OBJNAM|QUAVEM|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
36,CONZNE,A,5,Contiguous zone,CONZNE|36|A|5|Contiguous zone|DATEND|DATSTA|NATION|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
38,CTRPNT,P,8,Control point,CTRPNT|38|P|8|Control point|CATCTR|DATEND|DATSTA|HEIGHT|NOBJNM|OBJNAM|QUAVEM|VERDAT|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
39,CRANES,PA,6,Crane,CRANES|39|PA|6|Crane|CATCRN|COLOUR|CONDTN|CONRAD|CONVIS|HEIGHT|LIFCAP|NOBJNM|OBJNAM|ORIENT|QUAVEM|RADIUS|STATUS|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
44,DEPARE,A,1,Depth area,DEPARE|44|A|1|Depth area|DRVAL1|DRVAL2|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
45,DEPCNT,L,7,Depth contour,DEPCNT|45|L|7|Depth contour|VALDCO|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
50,DRGARE,A,5,Dredged area,DRGARE|50|A|5|Dredged area|DRVAL1|DRVAL2|NOBJNM|OBJNAM|QUASOU|TECSOU|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
56,EXEZNE,A,5,Exclusive economic zone,EXEZNE|56|A|5|Exclusive economic zone|NATION|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
57,FAIRWY,A,5,Fairway,FAIRWY|57|A|5|Fairway|DATEND|DATSTA|DRVAL1|DRVAL2|NOBJNM|OBJNAM|QUASOU|STATUS|TECSOU|TRAFIC|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
60,FSHHAV,PA,6,Fish haven,FSHHAV|60|PA|6|Fish haven|EXPSOU|NOBJNM|OBJNAM|QUASOU|TECSOU|VALSOU|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
72,HRBARE,A,5,Harbour area (administrative),HRBARE|72|A|5|Harbour area (administrative)|NOBJNM|OBJNAM|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
73,HRBFAC,PA,6,Harbour facility,HRBFAC|73|PA|6|Harbour facility|CATHAF|CONDTN|DATEND|DATSTA|NATCON|NOBJNM|OBJNAM|PEREND|PERSTA|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
78,ITDARE,PLA,1,Intertidal area,ITDARE|78|PLA|1|Intertidal area|NATQUA|NATSUR|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
79,LAKARE,A,1,Lake,LAKARE|79|A|1|Lake|HEIGHT|NOBJNM|OBJNAM|QUAVEM|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
80,LAKSHR,L,7,Lake shore,LAKSHR|80|L|7|Lake shore|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
81,LNDARE,PA,1,Land area,LNDARE|81|PA|1|Land area|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
86,LIGHTS,P,8,Light,LIGHTS|86|P|8|Light|CATLIT|COLOUR|DATEND|DATSTA|EXCLIT|HEIGHT|LITCHR|LITVIS|MARSYS|NOBJNM|OBJNAM|ORIENT|PEREND|PERSTA|QUAVEM|SECTR1|SECTR2|SIGGRP|SIGPER|SIGSEQ|STATUS|SUPLIT|VALNMR|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
95,MONUMT,P,8,Monument,MONUMT|95|P|8|Monument|BUISHP|CATMNT|COLOUR|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
96,MORFAC,PA,6,Mooring/Warping facility,MORFAC|96|PA|6|Mooring/Warping facility|CATMOR|COLOUR|CONDTN|CONRAD|DATEND|DATSTA|NATCON|NOBJNM|OBJNAM|PEREND|PERSTA|STATUS|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
97,NATARE,A,5,National territorial area,NATARE|97|A|5|National territorial area|NATION|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
99,OBSTRN,PA,6,Obstruction,OBSTRN|99|PA|6|Obstruction|EXPSOU|NOBJNM|OBJNAM|QUASOU|TECSOU|VALSOU|VERDAT|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
103,PILPNT,P,8,Pile,PILPNT|103|P|8|Pile|CATPLE|CONDTN|DATEND|DATSTA|EXPSOU|HEIGHT|QUASOU|QUAVEM|TECSOU|VALSOU|VERDAT|VERLEN|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
104,PILBOP,PA,8,Pilot boarding place,PILBOP|104|PA|8|Pilot boarding place|CATPIL|COMCHA|DATEND|DATSTA|NOBJNM|NPLDST|OBJNAM|PILDST|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
106,PIPOHD,L,7,"Pipeline, overhead","PIPOHD|106|L|7|Pipeline, overhead|CATPIP|CONDTN|DATEND|DATSTA|NOBJNM|OBJNAM|PRODCT|QUAVEM|STATUS|VERCLR|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
107,PIPSOL,L,7,"Pipeline, submarine/on land","PIPSOL|107|L|7|Pipeline, submarine/on land|BURDEP|CATPIP|CONDTN|DATEND|DATSTA|NOBJNM|OBJNAM|PRODCT|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
111,PRDINS,PA,6,Production installation,PRDINS|111|PA|6|Production installation|CATPRI|CONDTN|CONRAD|CONVIS|DATEND|DATSTA|EXPSOU|HEIGHT|NOBJNM|OBJNAM|PRODCT|QUASOU|QUAVEM|STATUS|TECSOU|VALSOU|VERDAT|WATLEV|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
112,PYLONS,PA,6,Pylon,PYLONS|112|PA|6|Pylon|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
118,RTPBCN,P,8,Radar transponder beacon,RTPBCN|118|P|8|Radar transponder beacon|CATRTB|DATEND|DATSTA|NOBJNM|OBJNAM|RADWAL|SECTR1|SECTR2|SIGGRP|SIGSEQ|STATUS|VALMXR|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
127,RSCSTA,P,8,Rescue station,RSCSTA|127|P|8|Rescue station|CATRSC|DATEND|DATSTA|NOBJNM|OBJNAM|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
129,RIVERS,LA,1,River,RIVERS|129|LA|1|River|NOBJNM|OBJNAM|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
130,RIVBNK,L,7,River bank,RIVBNK|130|L|7|River bank|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
136,SEAARE,A,5,Sea area,SEAARE|136|A|5|Sea area|CATSEA|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
138,SBDARE,PA,6,Seabed area,SBDARE|138|PA|6|Seabed area|COLOUR|NATQUA|NATSUR|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
139,SLCONS,LA,7,Shoreline construction,SLCONS|139|LA|7|Shoreline construction|CATSLC|CONDTN|CONRAD|CONVIS|DATEND|DATSTA|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|STATUS|VERDAT|VERLEN|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
140,SISTAT,P,8,"Signal station, traffic","SISTAT|140|P|8|Signal station, traffic|CATSIT|COMCHA|DATEND|DATSTA|NOBJNM|OBJNAM|PEREND|PERSTA|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
141,SISTAW,P,8,"Signal station, warning","SISTAW|141|P|8|Signal station, warning|CATSIW|COMCHA|DATEND|DATSTA|NOBJNM|OBJNAM|PEREND|PERSTA|STATUS|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
142,SILBUI,PA,6,Silo,SILBUI|142|PA|6|Silo|BUISHP|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|PRODCT|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
143,SLIPWY,LA,6,Slipway,SLIPWY|143|LA|6|Slipway|CONDTN|HORCLR|HORLEN|HORWID|NATCON|NOBJNM|OBJNAM|STATUS|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
147,SOUNDG,S,7,Spot soundings,SOUNDG|147|S|7|Spot soundings|EXPSOU|NOBJNM|OBJNAM|QUASOU|TECSOU|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
153,TNKCON,PA,6,Tank,TNKCON|153|PA|6|Tank|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NOBJNM|OBJNAM|PRODCT|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
154,TELPHC,L,7,Telepheric,TELPHC|154|L|7|Telepheric|CONDTN|CONRAD|CONVIS|DATEND|DATSTA|LIFCAP|NOBJNM|OBJNAM|QUAVEM|STATUS|VERCLR|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
155,TESARE,A,5,Territorial sea area,TESARE|155|A|5|Territorial sea area|NATION|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
158,TOWERS,PA,6,Tower,TOWERS|158|PA|6|Tower|CATTOW|COLOUR|COLPAT|CONDTN|CONRAD|CONVIS|HEIGHT|NATCON|NOBJNM|OBJNAM|QUAVEM|VERDAT|VERLEN|INFORM|NINFOM|PICREP|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
168,UWTROC,P,8,Underwater rock,UWTROC|168|P|8|Underwater rock|EXPSOU|NOBJNM|OBJNAM|QUASOU|TECSOU|VALSOU|VERDAT|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
176,WRECKS,PA,8,Wreck,WRECKS|176|PA|8|Wreck|CATWRK|CONRAD|CONVIS|EXPSOU|HEIGHT|NOBJNM|OBJNAM|QUASOU|QUAVEM|TECSOU|VALSOU|VERDAT|WATLEV|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
177,ZEMCNT,L,7,Zero meter contour,ZEMCNT|177|L|7|Zero meter contour|VERDAT|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
191,$COMPS,P,8,Compass,$COMPS|191|P|8|Compass|$CSIZE|$VARIA|$CYEAR|$ANNCH|SCAMIN|SCAMAX
|
||||
193,$LINES,L,7,Cartographic line,$LINES|193|L|7|Cartographic line|$SCODE|SCAMIN|SCAMAX
|
||||
194,$AREAS,A,5,Cartographic area,$AREAS|194|A|5|Cartographic area|$SCODE|$ROTAT|SCAMIN|SCAMAX
|
||||
198,_texto,P,8,Text,_texto|198|P|8|Text|$JUSTH|$JUSTV|$SPACE|$CHARS|$COLOR|$ROTAT|_texta|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND
|
||||
201,_extgn,P,8,"Extended navigational aid, generic","_extgn|201|P|8|Extended navigational aid, generic|CATCAM|CATLAM|COLMAR|MARSYS|NOBJNM|OBJNAM|INFORM|NINFOM|SCAMAX|SCAMIN|RECDAT|RECIND|SORDAT|SORIND"
|
||||
210,M_PROD,A,0,Production information,M_PROD|210|A|0|Production information|AGENCY|CPDATE|NMDATE|PRCTRY|INFORM|NINFOM|RECDAT|RECIND|SORDAT|SORIND
|
||||
217,_m_sor,A,0,Source of data,_m_sor|217|A|0|Source of data|CSCALE|DUNITS|HUNITS|HORACC|NMDATE|HORDAT|_sorhd|_wgsox|_wgsoy|SORDAT|SORIND|VERACC|VERDAT|_hvdat|MARSYS|_chcod|_dgdat|_quart|INFORM|NINFOM|RECDAT|RECIND
|
||||
|
@@ -0,0 +1,204 @@
|
||||
object_class_id,object_class,geometry_type,scale_code,native_scale,feature_count
|
||||
194,$AREAS,AREA,F,20000,3
|
||||
194,$AREAS,AREA,E,50000,7
|
||||
194,$AREAS,AREA,C,200000,1
|
||||
191,$COMPS,POINT,F,20000,4
|
||||
191,$COMPS,POINT,E,50000,1
|
||||
193,$LINES,LINE,F,20000,6
|
||||
193,$LINES,LINE,E,50000,9
|
||||
4,ACHARE,AREA,F,20000,1
|
||||
4,ACHARE,AREA,E,50000,1
|
||||
1,AIRARE,POINT,F,20000,1
|
||||
1,AIRARE,POINT,C,200000,2
|
||||
7,BCNLAT,POINT,F,20000,5
|
||||
7,BCNLAT,POINT,E,50000,5
|
||||
7,BCNLAT,POINT,C,200000,5
|
||||
9,BCNSPP,POINT,F,20000,4
|
||||
9,BCNSPP,POINT,E,50000,3
|
||||
9,BCNSPP,POINT,C,200000,3
|
||||
9,BCNSPP,POINT,B,1000000,2
|
||||
20,BOYSPP,POINT,F,20000,6
|
||||
20,BOYSPP,POINT,E,50000,2
|
||||
11,BRIDGE,LINE,F,20000,1
|
||||
11,BRIDGE,LINE,C,200000,3
|
||||
11,BRIDGE,AREA,F,20000,12
|
||||
11,BRIDGE,AREA,E,50000,4
|
||||
11,BRIDGE,AREA,C,200000,1
|
||||
10,BRTFAC,POINT,F,20000,45
|
||||
10,BRTFAC,POINT,E,50000,44
|
||||
14,BUAARE,POINT,F,20000,25
|
||||
14,BUAARE,POINT,C,200000,8
|
||||
14,BUAARE,POINT,B,1000000,2
|
||||
14,BUAARE,AREA,C,200000,3
|
||||
12,BUIREL,POINT,F,20000,4
|
||||
12,BUIREL,POINT,E,50000,1
|
||||
13,BUISGL,POINT,F,20000,9
|
||||
13,BUISGL,POINT,E,50000,2
|
||||
13,BUISGL,POINT,C,200000,1
|
||||
13,BUISGL,AREA,F,20000,20
|
||||
21,CBLOHD,LINE,F,20000,4
|
||||
21,CBLOHD,LINE,E,50000,1
|
||||
22,CBLSUB,LINE,F,20000,5
|
||||
22,CBLSUB,LINE,E,50000,4
|
||||
22,CBLSUB,LINE,C,200000,3
|
||||
33,CHIMNY,POINT,F,20000,17
|
||||
33,CHIMNY,POINT,E,50000,17
|
||||
33,CHIMNY,POINT,C,200000,1
|
||||
35,COALNE,LINE,F,20000,108
|
||||
35,COALNE,LINE,E,50000,49
|
||||
35,COALNE,LINE,C,200000,9
|
||||
35,COALNE,LINE,B,1000000,2
|
||||
35,COALNE,LINE,A,3000000,1
|
||||
35,COALNE,LINE,Z,20000000,2
|
||||
36,CONZNE,AREA,C,200000,1
|
||||
36,CONZNE,AREA,B,1000000,1
|
||||
39,CRANES,POINT,F,20000,7
|
||||
39,CRANES,POINT,E,50000,8
|
||||
29,CTNARE,POINT,F,20000,3
|
||||
29,CTNARE,POINT,E,50000,10
|
||||
29,CTNARE,AREA,F,20000,9
|
||||
29,CTNARE,AREA,E,50000,2
|
||||
29,CTNARE,AREA,C,200000,2
|
||||
29,CTNARE,AREA,B,1000000,3
|
||||
38,CTRPNT,POINT,F,20000,5
|
||||
38,CTRPNT,POINT,E,50000,1
|
||||
44,DEPARE,AREA,F,20000,239
|
||||
44,DEPARE,AREA,E,50000,150
|
||||
44,DEPARE,AREA,C,200000,18
|
||||
44,DEPARE,AREA,B,1000000,2
|
||||
44,DEPARE,AREA,A,3000000,2
|
||||
44,DEPARE,AREA,Z,20000000,3
|
||||
45,DEPCNT,LINE,F,20000,257
|
||||
45,DEPCNT,LINE,E,50000,164
|
||||
45,DEPCNT,LINE,C,200000,26
|
||||
45,DEPCNT,LINE,B,1000000,1
|
||||
45,DEPCNT,LINE,A,3000000,1
|
||||
45,DEPCNT,LINE,Z,20000000,2
|
||||
50,DRGARE,AREA,E,50000,14
|
||||
56,EXEZNE,AREA,C,200000,1
|
||||
56,EXEZNE,AREA,B,1000000,1
|
||||
57,FAIRWY,AREA,F,20000,2
|
||||
57,FAIRWY,AREA,E,50000,3
|
||||
60,FSHHAV,POINT,F,20000,4
|
||||
60,FSHHAV,POINT,E,50000,4
|
||||
60,FSHHAV,POINT,C,200000,10
|
||||
72,HRBARE,AREA,F,20000,1
|
||||
72,HRBARE,AREA,E,50000,3
|
||||
73,HRBFAC,POINT,F,20000,1
|
||||
73,HRBFAC,AREA,F,20000,1
|
||||
78,ITDARE,AREA,F,20000,40
|
||||
78,ITDARE,AREA,E,50000,15
|
||||
78,ITDARE,AREA,C,200000,14
|
||||
79,LAKARE,AREA,F,20000,1
|
||||
79,LAKARE,AREA,C,200000,2
|
||||
80,LAKSHR,LINE,F,20000,1
|
||||
80,LAKSHR,LINE,C,200000,2
|
||||
86,LIGHTS,POINT,F,20000,41
|
||||
86,LIGHTS,POINT,E,50000,35
|
||||
86,LIGHTS,POINT,C,200000,17
|
||||
86,LIGHTS,POINT,B,1000000,3
|
||||
81,LNDARE,AREA,F,20000,95
|
||||
81,LNDARE,AREA,E,50000,53
|
||||
81,LNDARE,AREA,C,200000,6
|
||||
81,LNDARE,AREA,B,1000000,2
|
||||
81,LNDARE,AREA,A,3000000,1
|
||||
81,LNDARE,AREA,Z,20000000,2
|
||||
95,MONUMT,POINT,F,20000,2
|
||||
95,MONUMT,POINT,E,50000,2
|
||||
96,MORFAC,POINT,E,50000,7
|
||||
96,MORFAC,AREA,F,20000,2
|
||||
210,M_PROD,AREA,F,20000,1
|
||||
210,M_PROD,AREA,E,50000,1
|
||||
210,M_PROD,AREA,D,100000,1
|
||||
210,M_PROD,AREA,C,200000,1
|
||||
210,M_PROD,AREA,B,1000000,1
|
||||
210,M_PROD,AREA,A,3000000,1
|
||||
210,M_PROD,AREA,Z,20000000,1
|
||||
97,NATARE,AREA,F,20000,1
|
||||
97,NATARE,AREA,C,200000,1
|
||||
97,NATARE,AREA,B,1000000,1
|
||||
99,OBSTRN,POINT,F,20000,2
|
||||
99,OBSTRN,POINT,E,50000,3
|
||||
99,OBSTRN,POINT,C,200000,1
|
||||
99,OBSTRN,AREA,F,20000,41
|
||||
99,OBSTRN,AREA,E,50000,16
|
||||
99,OBSTRN,AREA,C,200000,11
|
||||
99,OBSTRN,AREA,B,1000000,2
|
||||
104,PILBOP,POINT,F,20000,2
|
||||
104,PILBOP,POINT,E,50000,1
|
||||
103,PILPNT,POINT,F,20000,7
|
||||
103,PILPNT,POINT,E,50000,12
|
||||
103,PILPNT,POINT,C,200000,1
|
||||
106,PIPOHD,LINE,F,20000,2
|
||||
107,PIPSOL,LINE,F,20000,1
|
||||
107,PIPSOL,LINE,E,50000,1
|
||||
111,PRDINS,POINT,F,20000,12
|
||||
111,PRDINS,AREA,F,20000,15
|
||||
112,PYLONS,POINT,E,50000,2
|
||||
130,RIVBNK,LINE,F,20000,4
|
||||
130,RIVBNK,LINE,C,200000,3
|
||||
129,RIVERS,AREA,F,20000,2
|
||||
129,RIVERS,AREA,C,200000,3
|
||||
127,RSCSTA,POINT,F,20000,1
|
||||
118,RTPBCN,POINT,E,50000,1
|
||||
138,SBDARE,POINT,F,20000,211
|
||||
138,SBDARE,POINT,E,50000,67
|
||||
138,SBDARE,POINT,C,200000,9
|
||||
138,SBDARE,AREA,F,20000,7
|
||||
138,SBDARE,AREA,E,50000,1
|
||||
138,SBDARE,AREA,C,200000,1
|
||||
136,SEAARE,AREA,C,200000,2
|
||||
142,SILBUI,POINT,F,20000,2
|
||||
142,SILBUI,POINT,E,50000,3
|
||||
142,SILBUI,AREA,F,20000,1
|
||||
140,SISTAT,POINT,F,20000,2
|
||||
140,SISTAT,POINT,E,50000,2
|
||||
141,SISTAW,POINT,F,20000,1
|
||||
139,SLCONS,LINE,F,20000,107
|
||||
139,SLCONS,LINE,E,50000,46
|
||||
139,SLCONS,LINE,C,200000,41
|
||||
139,SLCONS,LINE,B,1000000,15
|
||||
139,SLCONS,AREA,F,20000,94
|
||||
139,SLCONS,AREA,E,50000,25
|
||||
143,SLIPWY,AREA,F,20000,1
|
||||
143,SLIPWY,AREA,E,50000,2
|
||||
147,SOUNDG,SOUNDING,F,20000,1
|
||||
147,SOUNDG,SOUNDING,E,50000,1
|
||||
147,SOUNDG,SOUNDING,C,200000,1
|
||||
147,SOUNDG,SOUNDING,B,1000000,1
|
||||
154,TELPHC,LINE,F,20000,2
|
||||
154,TELPHC,LINE,E,50000,3
|
||||
155,TESARE,AREA,F,20000,1
|
||||
155,TESARE,AREA,C,200000,1
|
||||
155,TESARE,AREA,B,1000000,1
|
||||
153,TNKCON,POINT,F,20000,10
|
||||
153,TNKCON,POINT,E,50000,36
|
||||
153,TNKCON,AREA,E,50000,11
|
||||
158,TOWERS,POINT,F,20000,21
|
||||
158,TOWERS,POINT,E,50000,24
|
||||
158,TOWERS,POINT,C,200000,8
|
||||
158,TOWERS,POINT,B,1000000,1
|
||||
168,UWTROC,POINT,F,20000,96
|
||||
168,UWTROC,POINT,E,50000,27
|
||||
168,UWTROC,POINT,C,200000,50
|
||||
168,UWTROC,POINT,B,1000000,3
|
||||
176,WRECKS,POINT,F,20000,467
|
||||
176,WRECKS,POINT,E,50000,10
|
||||
176,WRECKS,POINT,C,200000,3
|
||||
176,WRECKS,AREA,F,20000,1
|
||||
177,ZEMCNT,LINE,F,20000,42
|
||||
177,ZEMCNT,LINE,E,50000,28
|
||||
177,ZEMCNT,LINE,C,200000,14
|
||||
201,_extgn,POINT,F,20000,22
|
||||
201,_extgn,POINT,E,50000,20
|
||||
217,_m_sor,META,F,20000,1
|
||||
217,_m_sor,META,E,50000,1
|
||||
217,_m_sor,META,C,200000,1
|
||||
217,_m_sor,META,B,1000000,1
|
||||
217,_m_sor,META,A,3000000,1
|
||||
217,_m_sor,META,Z,20000000,1
|
||||
198,_texto,POINT,F,20000,67
|
||||
198,_texto,POINT,E,50000,27
|
||||
198,_texto,POINT,C,200000,15
|
||||
198,_texto,POINT,B,1000000,3
|
||||
198,_texto,POINT,A,3000000,1
|
||||
|
@@ -0,0 +1,81 @@
|
||||
object_class_id,object_class,geometry_type,feature_count,cell_count,min_native_scale,max_native_scale,repaired_count,issue_count,dictionary_geometry_code,dictionary_display_code,description
|
||||
176,WRECKS,POINT,480,3,20000,200000,0,0,PA,8,Wreck
|
||||
45,DEPCNT,LINE,451,6,20000,20000000,0,0,L,7,Depth contour
|
||||
44,DEPARE,AREA,414,6,20000,20000000,1,0,A,1,Depth area
|
||||
138,SBDARE,POINT,287,3,20000,200000,0,0,PA,6,Seabed area
|
||||
139,SLCONS,LINE,209,4,20000,1000000,0,0,LA,7,Shoreline construction
|
||||
168,UWTROC,POINT,176,4,20000,1000000,0,0,P,8,Underwater rock
|
||||
35,COALNE,LINE,171,6,20000,20000000,0,0,L,7,Coastline
|
||||
81,LNDARE,AREA,159,6,20000,20000000,0,0,PA,1,Land area
|
||||
139,SLCONS,AREA,119,2,20000,50000,0,0,LA,7,Shoreline construction
|
||||
198,_texto,POINT,113,5,20000,3000000,0,0,P,8,Text
|
||||
86,LIGHTS,POINT,96,4,20000,1000000,0,0,P,8,Light
|
||||
10,BRTFAC,POINT,89,2,20000,50000,0,0,PLA,6,Berthing facility
|
||||
177,ZEMCNT,LINE,84,3,20000,200000,0,0,L,7,Zero meter contour
|
||||
99,OBSTRN,AREA,70,4,20000,1000000,0,0,PA,6,Obstruction
|
||||
78,ITDARE,AREA,69,3,20000,200000,0,0,PLA,1,Intertidal area
|
||||
158,TOWERS,POINT,54,4,20000,1000000,0,0,PA,6,Tower
|
||||
153,TNKCON,POINT,46,2,20000,50000,0,0,PA,6,Tank
|
||||
201,_extgn,POINT,42,2,20000,50000,0,0,P,8,"Extended navigational aid, generic"
|
||||
14,BUAARE,POINT,35,3,20000,1000000,0,0,PA,6,Built-up area
|
||||
33,CHIMNY,POINT,35,3,20000,200000,0,0,PA,6,Chimney
|
||||
13,BUISGL,AREA,20,1,20000,20000,0,0,PA,6,"Building, single"
|
||||
103,PILPNT,POINT,20,3,20000,200000,0,0,P,8,Pile
|
||||
60,FSHHAV,POINT,18,3,20000,200000,0,0,PA,6,Fish haven
|
||||
11,BRIDGE,AREA,17,3,20000,200000,0,0,PLA,6,Bridge
|
||||
29,CTNARE,AREA,16,4,20000,1000000,0,0,PA,6,Caution area
|
||||
193,$LINES,LINE,15,2,20000,50000,0,0,L,7,Cartographic line
|
||||
7,BCNLAT,POINT,15,3,20000,200000,0,0,P,8,"Beacon, lateral"
|
||||
39,CRANES,POINT,15,2,20000,50000,0,0,PA,6,Crane
|
||||
111,PRDINS,AREA,15,1,20000,20000,0,0,PA,6,Production installation
|
||||
50,DRGARE,AREA,14,1,50000,50000,0,0,A,5,Dredged area
|
||||
29,CTNARE,POINT,13,2,20000,50000,0,0,PA,6,Caution area
|
||||
9,BCNSPP,POINT,12,4,20000,1000000,0,0,P,8,"Beacon, special purpose"
|
||||
13,BUISGL,POINT,12,3,20000,200000,0,0,PA,6,"Building, single"
|
||||
22,CBLSUB,LINE,12,3,20000,200000,0,0,L,7,"Cable, submarine"
|
||||
111,PRDINS,POINT,12,1,20000,20000,0,0,PA,6,Production installation
|
||||
194,$AREAS,AREA,11,3,20000,200000,0,0,A,5,Cartographic area
|
||||
153,TNKCON,AREA,11,1,50000,50000,0,0,PA,6,Tank
|
||||
138,SBDARE,AREA,9,3,20000,200000,0,0,PA,6,Seabed area
|
||||
20,BOYSPP,POINT,8,2,20000,50000,0,0,P,8,"Buoy, special purpose"
|
||||
96,MORFAC,POINT,7,1,50000,50000,0,0,PA,6,Mooring/Warping facility
|
||||
210,M_PROD,AREA,7,7,20000,20000000,0,0,A,0,Production information
|
||||
130,RIVBNK,LINE,7,2,20000,200000,0,0,L,7,River bank
|
||||
38,CTRPNT,POINT,6,2,20000,50000,0,0,P,8,Control point
|
||||
99,OBSTRN,POINT,6,3,20000,200000,0,0,PA,6,Obstruction
|
||||
217,_m_sor,META,6,6,20000,20000000,0,0,A,0,Source of data
|
||||
191,$COMPS,POINT,5,2,20000,50000,0,0,P,8,Compass
|
||||
12,BUIREL,POINT,5,2,20000,50000,0,0,PA,6,"Building, religious"
|
||||
21,CBLOHD,LINE,5,2,20000,50000,0,0,L,7,"Cable, overhead"
|
||||
57,FAIRWY,AREA,5,2,20000,50000,0,0,A,5,Fairway
|
||||
129,RIVERS,AREA,5,2,20000,200000,0,0,LA,1,River
|
||||
142,SILBUI,POINT,5,2,20000,50000,0,0,PA,6,Silo
|
||||
154,TELPHC,LINE,5,2,20000,50000,0,0,L,7,Telepheric
|
||||
11,BRIDGE,LINE,4,2,20000,200000,0,0,PLA,6,Bridge
|
||||
72,HRBARE,AREA,4,2,20000,50000,0,0,A,5,Harbour area (administrative)
|
||||
95,MONUMT,POINT,4,2,20000,50000,0,0,P,8,Monument
|
||||
140,SISTAT,POINT,4,2,20000,50000,0,0,P,8,"Signal station, traffic"
|
||||
147,SOUNDG,SOUNDING,4,4,20000,1000000,0,0,S,7,Spot soundings
|
||||
1,AIRARE,POINT,3,2,20000,200000,0,0,PA,6,Airport area
|
||||
14,BUAARE,AREA,3,1,200000,200000,0,0,PA,6,Built-up area
|
||||
79,LAKARE,AREA,3,2,20000,200000,0,0,A,1,Lake
|
||||
80,LAKSHR,LINE,3,2,20000,200000,0,0,L,7,Lake shore
|
||||
97,NATARE,AREA,3,3,20000,1000000,0,0,A,5,National territorial area
|
||||
104,PILBOP,POINT,3,2,20000,50000,0,0,PA,8,Pilot boarding place
|
||||
143,SLIPWY,AREA,3,2,20000,50000,0,0,LA,6,Slipway
|
||||
155,TESARE,AREA,3,3,20000,1000000,0,0,A,5,Territorial sea area
|
||||
4,ACHARE,AREA,2,2,20000,50000,0,0,PA,6,Anchorage area
|
||||
36,CONZNE,AREA,2,2,200000,1000000,0,0,A,5,Contiguous zone
|
||||
56,EXEZNE,AREA,2,2,200000,1000000,0,0,A,5,Exclusive economic zone
|
||||
96,MORFAC,AREA,2,1,20000,20000,0,0,PA,6,Mooring/Warping facility
|
||||
106,PIPOHD,LINE,2,1,20000,20000,0,0,L,7,"Pipeline, overhead"
|
||||
107,PIPSOL,LINE,2,2,20000,50000,0,0,L,7,"Pipeline, submarine/on land"
|
||||
112,PYLONS,POINT,2,1,50000,50000,0,0,PA,6,Pylon
|
||||
136,SEAARE,AREA,2,1,200000,200000,0,0,A,5,Sea area
|
||||
73,HRBFAC,POINT,1,1,20000,20000,0,0,PA,6,Harbour facility
|
||||
73,HRBFAC,AREA,1,1,20000,20000,0,0,PA,6,Harbour facility
|
||||
127,RSCSTA,POINT,1,1,20000,20000,0,0,P,8,Rescue station
|
||||
118,RTPBCN,POINT,1,1,50000,50000,0,0,P,8,Radar transponder beacon
|
||||
142,SILBUI,AREA,1,1,20000,20000,0,0,PA,6,Silo
|
||||
141,SISTAW,POINT,1,1,20000,20000,0,0,P,8,"Signal station, warning"
|
||||
176,WRECKS,AREA,1,1,20000,20000,0,0,PA,8,Wreck
|
||||
|
@@ -0,0 +1,681 @@
|
||||
object_class_id,object_class,geometry_type,attribute_id,attribute_name,value_type,rank,value,count,total_distinct_values
|
||||
194,$AREAS,AREA,129,$SCODE,STRING,1,II25,11,1
|
||||
191,$COMPS,POINT,128,$ANNCH,STRING,1,00.00 E,4,2
|
||||
191,$COMPS,POINT,128,$ANNCH,STRING,2,01.00 W,1,2
|
||||
191,$COMPS,POINT,127,$CYEAR,REAL,1,2012,4,2
|
||||
191,$COMPS,POINT,127,$CYEAR,REAL,2,2002,1,2
|
||||
191,$COMPS,POINT,126,$VARIA,STRING,1,08.25 W,5,1
|
||||
193,$LINES,LINE,129,$SCODE,STRING,1,IH40,6,3
|
||||
193,$LINES,LINE,129,$SCODE,STRING,2,IH41,6,3
|
||||
193,$LINES,LINE,129,$SCODE,STRING,3,IK1,3,3
|
||||
4,ACHARE,AREA,3,CATACH,LIST,1,[5],2,1
|
||||
1,AIRARE,POINT,80,OBJNAM,STRING,1,Hachinohe Airfield,1,1
|
||||
7,BCNLAT,POINT,103,BCNSHP,BYTE,1,3,4,1
|
||||
7,BCNLAT,POINT,24,CATLAM,BYTE,1,2,15,1
|
||||
7,BCNLAT,POINT,60,COLMAR,BYTE,1,3,15,1
|
||||
7,BCNLAT,POINT,78,INFORM,STRING,1,Concrete,3,3
|
||||
7,BCNLAT,POINT,78,INFORM,STRING,2,Metal,2,3
|
||||
7,BCNLAT,POINT,78,INFORM,STRING,3,Metal|Framework tower,1,3
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,1,"GB,UKHO,graph,LL M-6623",2,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,2,"GB,UKHO,graph,LL M-6624.8",2,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,3,"GB,UKHO,graph,LL M-6624.7",2,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,4,"GB,UKHO,graph,LL M-6624",2,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,5,"GB,UKHO,graph,LL M-6619",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,6,"GB,MDHS,graph,LL F-6623",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,7,"GB,MDHS,graph,LL F-6623.6",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,8,"GB,MDHS,graph,LL F-6624.8",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,9,"GB,MDHS,graph,LL F-6624.7",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,10,"GB,MDHS,graph,LL F-6624",1,11
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,11,"GB,UKHO,graph,LL M-6623.6",1,11
|
||||
7,BCNLAT,POINT,122,VERLEN,REAL,1,10,6,4
|
||||
7,BCNLAT,POINT,122,VERLEN,REAL,2,9,5,4
|
||||
7,BCNLAT,POINT,122,VERLEN,REAL,3,16,3,4
|
||||
7,BCNLAT,POINT,122,VERLEN,REAL,4,6,1,4
|
||||
9,BCNSPP,POINT,51,CATSPM,BYTE,1,6,4,2
|
||||
9,BCNSPP,POINT,51,CATSPM,BYTE,2,27,1,2
|
||||
9,BCNSPP,POINT,60,COLMAR,BYTE,1,5,2,1
|
||||
9,BCNSPP,POINT,78,INFORM,STRING,1,Metal,4,1
|
||||
9,BCNSPP,POINT,108,SORIND,STRING,1,"GB,UKHO,graph,LL M-6625",2,3
|
||||
9,BCNSPP,POINT,108,SORIND,STRING,2,"GB,UKHO,graph,LL M-6626",2,3
|
||||
9,BCNSPP,POINT,108,SORIND,STRING,3,"GB,UKHO,graph,LL M-6623.2",2,3
|
||||
9,BCNSPP,POINT,122,VERLEN,REAL,1,43,2,2
|
||||
9,BCNSPP,POINT,122,VERLEN,REAL,2,9,2,2
|
||||
20,BOYSPP,POINT,105,BOYSHP,BYTE,1,1,5,2
|
||||
20,BOYSPP,POINT,105,BOYSHP,BYTE,2,4,3,2
|
||||
20,BOYSPP,POINT,51,CATSPM,BYTE,1,27,3,3
|
||||
20,BOYSPP,POINT,51,CATSPM,BYTE,2,10,1,3
|
||||
20,BOYSPP,POINT,51,CATSPM,BYTE,3,13,1,3
|
||||
20,BOYSPP,POINT,60,COLMAR,BYTE,1,4,8,1
|
||||
20,BOYSPP,POINT,78,INFORM,STRING,1,Private mark|Wave recorder,1,1
|
||||
20,BOYSPP,POINT,109,STATUS,LIST,1,[8],6,1
|
||||
11,BRIDGE,AREA,4,CATBRG,LIST,1,[1],2,1
|
||||
11,BRIDGE,AREA,78,INFORM,STRING,1,Vertical Datum: Nearly highest high water|Vertical clearance 4.5m - 5.5m,2,2
|
||||
11,BRIDGE,AREA,78,INFORM,STRING,2,Vertical Datum: Nearly highest high water,1,2
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,1,Hachinohe Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,2,Hattaro Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,3,The Numadate Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,4,The Shin-O-Hashi Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,5,Seagull Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,6,Minato Bridge,1,7
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,7,Ichikawa Bridge,1,7
|
||||
11,BRIDGE,AREA,117,VERCLR,REAL,1,4.5,2,3
|
||||
11,BRIDGE,AREA,117,VERCLR,REAL,2,31,2,3
|
||||
11,BRIDGE,AREA,117,VERCLR,REAL,3,5.30000019073486,1,3
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,1,2,8,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,2,1,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,3,3,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,4,4,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,5,A,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,6,B,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,7,C,6,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,8,5,4,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,9,6,4,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,10,D,4,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,11,F,4,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,12,G,4,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,13,7,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,14,8,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,15,9,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,16,E,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,17,H,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,18,I,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,19,J,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,20,L,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,21,M,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,22,N,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,23,O,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,24,10,2,25
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,25,P,1,25
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,1,Hachinohe,2,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,2,Hashimukai,2,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,3,Misawa,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,4,Same,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,5,Okuki,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,6,Minato,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,7,Mikawame,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,8,Shirahama,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,9,Hitokawame,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,10,Oirase Town,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,11,Tate,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,12,Osawa,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,13,Hinode,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,14,Toyosu,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,15,Hattaro,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,16,Hasunuma,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,17,Kawaragi,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,18,Kitanuma,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,19,Numadate,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,20,Sunamori,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,21,Tatehana,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,22,Uenoyama,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,23,Kami-Same,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,24,Hikagezawa,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,25,Shinminato,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,26,Uheikawara,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,27,Senzogakubo,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,28,Hamana-Yachi,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,29,Shimo-Oyachi,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,30,Minami-Oyachi,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,31,Toyama-Shinden,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,32,Shimo-Matsunaeba,1,33
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,33,Shimo-Mekurakubo,1,33
|
||||
14,BUAARE,AREA,80,OBJNAM,STRING,1,Hachinohe,1,2
|
||||
14,BUAARE,AREA,80,OBJNAM,STRING,2,Misawa,1,2
|
||||
12,BUIREL,POINT,41,CATREB,BYTE,1,6,2,3
|
||||
12,BUIREL,POINT,41,CATREB,BYTE,2,7,2,3
|
||||
12,BUIREL,POINT,41,CATREB,BYTE,3,4,1,3
|
||||
13,BUISGL,POINT,104,BUISHP,BYTE,1,4,1,1
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,1,[6],5,5
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,2,[2],1,5
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,3,[3],1,5
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,4,[17],1,5
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,5,[5],1,5
|
||||
13,BUISGL,POINT,65,CONVIS,BYTE,1,2,2,1
|
||||
13,BUISGL,POINT,78,INFORM,STRING,1,Light support|Not in use,1,1
|
||||
13,BUISGL,POINT,80,OBJNAM,STRING,1,Tohoku Electric Power Thermal Power Plants,1,2
|
||||
13,BUISGL,POINT,80,OBJNAM,STRING,2,Japan Maritime Self Defense Force Air Base,1,2
|
||||
13,BUISGL,POINT,91,QUAPOS,BYTE,1,4,2,1
|
||||
13,BUISGL,AREA,49,CATBUI,LIST,1,[19],7,4
|
||||
13,BUISGL,AREA,49,CATBUI,LIST,2,[13],1,4
|
||||
13,BUISGL,AREA,49,CATBUI,LIST,3,"[3,2]",1,4
|
||||
13,BUISGL,AREA,49,CATBUI,LIST,4,[10],1,4
|
||||
13,BUISGL,AREA,78,INFORM,STRING,1,Port Management Office,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,2,Fisheries High School,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,3,Fishery Hall,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,4,Fisheries Laboratory,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,5,Coast Guard Office|Marine Procedure Commission Agent Office,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,6,Fishing Harbor Development Office,1,7
|
||||
13,BUISGL,AREA,78,INFORM,STRING,7,"Regional Development Bureau,Port And Airport Office",1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,1,Tohoku Electric Power Electric Substation,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,2,No.1 Fish Market,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,3,No.2 Fish Market,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,4,No.3 Fish Market,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,5,Maritime Office,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,6,Construction Office,1,7
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,7,Fisherman's Union,1,7
|
||||
21,CBLOHD,LINE,6,CATCBL,BYTE,1,1,5,1
|
||||
21,CBLOHD,LINE,93,QUAVEM,BYTE,1,1,1,1
|
||||
21,CBLOHD,LINE,117,VERCLR,REAL,1,12,1,1
|
||||
22,CBLSUB,LINE,6,CATCBL,BYTE,1,1,2,1
|
||||
22,CBLSUB,LINE,109,STATUS,LIST,1,[4],3,1
|
||||
33,CHIMNY,POINT,59,COLOUR,LIST,1,"[3,1]",2,1
|
||||
33,CHIMNY,POINT,65,CONVIS,BYTE,1,2,8,2
|
||||
33,CHIMNY,POINT,65,CONVIS,BYTE,2,1,1,2
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,1,123,2,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,2,30,2,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,3,27,1,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,4,81,1,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,5,40,1,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,6,71,1,7
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,7,82,1,7
|
||||
33,CHIMNY,POINT,78,INFORM,STRING,1,3 CHYS,1,1
|
||||
35,COALNE,LINE,147,CATCOA,BYTE,1,1,8,1
|
||||
36,CONZNE,AREA,78,INFORM,STRING,1,"Jeppesen adopts ""International Boundaries and National Limits"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.",2,1
|
||||
36,CONZNE,AREA,81,NATION,STRING,1,JP,2,1
|
||||
36,CONZNE,AREA,108,SORIND,STRING,1,"CM,PAD,graph,B3900420",1,1
|
||||
39,CRANES,POINT,10,CATCRN,BYTE,1,4,9,2
|
||||
39,CRANES,POINT,10,CATCRN,BYTE,2,2,2,2
|
||||
29,CTNARE,POINT,78,INFORM,STRING,1,Works in progress|Source date: 2005,2,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,2,FOUL,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,3,Marked by buoys,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,4,(liable to shoal),1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,5,WORKS IN PROGRESS (1998),1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,6,Works in progress|Source date: 2000,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,7,Works in progress|Source date: 2002,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,8,Ebb stream|Orientation: 130 Deg|Current velocity: 0.2kn,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,9,Flood stream|Orientation: 290 Deg|Current velocity: 0.3kn,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,10,Slipway,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,11,Ebb stream|Orientation: 133 Deg|Current velocity: 0.3kn,1,12
|
||||
29,CTNARE,POINT,78,INFORM,STRING,12,Flood stream|Orientation: 299 Deg|Current velocity: 0.3kn,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,1,Caisson Temporary Storage Area,3,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,2,"The contents of the charts affected by earthquakes etc. occured offshore Pacific Ocean in Tohoku region in Japan.|By earthquakes and tsunami occured offshore Pacific Ocean in Tohoku region in Japan on 11th March 2011, damages of breakwaters, quays, etc. and existance of foul bottoms (i.e. houses and vehicles) on the seafloor which were pushed and flowed from land area in the east coast of Honshu and each ports and harbours. Users are aware that contents of the charts may be different from existing situations. Notices to Mariners about these matters will be issued as soon as survey results are received.Notices to Mariners address http://www1.kaiho.mlit.go.jp/TUHO/tuho_db/tuhoserch.html",2,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,3,Unassessed. Surveys before the earthquake (11th Mar. 2011),2,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,4,"Caution|Undiscovered shoals may exist around charted shoals. Mariners are advised to exercise caution.|Caution|Only the principal lights are shown on this chart. For the details of these and other lights, the larger scale charts and the List of Lights should be consulted.|Note|The straight baselines and the limits of the territorial sea shown on this chart are based on the provisions of Japanese Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone and the Enforcement Order No.210 of 1977 of Japanese Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone.|Note|Owing to scale, only major points of the straight baselines given in the Enforcement Order are shown.|Caution|As submarine cables are not shown on this chart, take care with regard to the fishing industry, submarine exploration etc. For submarine cable information, refer to JP charts with scales of larger than 1:750,000 or the JP chart with scale 1:3,500,000.",1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,5,Jeppesen digital nautical charts do not reflect all soundings present on the official paper charts published by Japan Hydrographic and Oceanographic Department. This product is not an Electronic Navigational Chart. Mariners are required to use official paper charts for navigational judgements.,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,6,"CAUTION|As undiscovered shoals may exist around charted shoals, mariners are warned to excercise cautions.|NOTE|The straight baselines and the limits of the territorial sea shown on this chart are based on the provisions of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone and the Enforcement Order No.210 of 1977 of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone.|NOTE|Of all the base points of the straight baselines given in the Enforcement Order, only major points are shown on this chart due to its small scale.",1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,7,"CABLES|1. Submarine and overhead cables may conduct high voltages; contact with or proximity to these poses an extreme danger and mariners may risk prosecution if damage is caused.|2. Anchoring or trawling in the vicinity of submarine cables should be avoided. Seabed mobility may leave a cable spanning undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. If a cable is snagged, care must be taken not to sever it.|3. Sufficient clearance must be allowed under overhead cables.|4. Some cables, particularly those installed since this edition was published, may not be charted.|5. For further information, see The Mariner's Handbook.",1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,8,Dredged to 7.5m|Source date: 1994,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,9,Caution|Undiscovered shoals may exist around charted shoals. Mariners are advised to exercise caution. |Caution|Depths are very changeable at the entrance to river mouths. Mariners are advised to exercise caution.,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,10,Section 3,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,11,Section 2,1,12
|
||||
29,CTNARE,AREA,78,INFORM,STRING,12,Section 1,1,12
|
||||
38,CTRPNT,POINT,9,CATCTR,BYTE,1,1,4,2
|
||||
38,CTRPNT,POINT,9,CATCTR,BYTE,2,4,2,2
|
||||
38,CTRPNT,POINT,80,OBJNAM,STRING,1,Monomiiwa,1,1
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,1,2,188,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,2,0,117,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,3,5,81,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,4,10,18,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,5,20,5,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,6,200,4,7
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,7,30,1,7
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,1,5,203,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,2,2,96,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,3,10,84,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,4,20,18,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,5,200,4,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,6,50,4,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,7,30,1,8
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,8,2000,1,8
|
||||
45,DEPCNT,LINE,91,QUAPOS,BYTE,1,4,1,1
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,1,5,230,6
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,2,2,102,6
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,3,10,100,6
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,4,20,14,6
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,5,200,4,6
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,6,30,1,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,1,7.5,5,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,2,13,4,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,3,14,1,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,4,12,1,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,5,9.59999942779541,1,6
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,6,10,1,6
|
||||
50,DRGARE,AREA,78,INFORM,STRING,1,(1981-2000),4,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,2,Source date: 1990,2,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,3,(1995-2000),1,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,4,Source date: 1991,1,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,5,1980,1,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,6,1994,1,7
|
||||
50,DRGARE,AREA,78,INFORM,STRING,7,Source date: 1977,1,7
|
||||
56,EXEZNE,AREA,78,INFORM,STRING,1,"Jeppesen adopts ""International Boundaries and National Limits"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.",2,1
|
||||
56,EXEZNE,AREA,81,NATION,STRING,1,JP,2,1
|
||||
56,EXEZNE,AREA,108,SORIND,STRING,1,"CM,PAD,graph,B3900420",1,1
|
||||
57,FAIRWY,AREA,80,OBJNAM,STRING,1,East Fairway,1,4
|
||||
57,FAIRWY,AREA,80,OBJNAM,STRING,2,West Fairway,1,4
|
||||
57,FAIRWY,AREA,80,OBJNAM,STRING,3,East Passage,1,4
|
||||
57,FAIRWY,AREA,80,OBJNAM,STRING,4,West Passage,1,4
|
||||
60,FSHHAV,POINT,78,INFORM,STRING,1,Always under water/submerged,18,1
|
||||
72,HRBARE,AREA,80,OBJNAM,STRING,1,No 3 Area,1,3
|
||||
72,HRBARE,AREA,80,OBJNAM,STRING,2,No 2 Area,1,3
|
||||
72,HRBARE,AREA,80,OBJNAM,STRING,3,No1 Area,1,3
|
||||
73,HRBFAC,POINT,80,OBJNAM,STRING,1,Tohoku Grain Terminal,1,1
|
||||
73,HRBFAC,AREA,20,CATHAF,LIST,1,[9],1,1
|
||||
78,ITDARE,AREA,82,NATSUR,LIST,1,[9],25,4
|
||||
78,ITDARE,AREA,82,NATSUR,LIST,2,[56],5,4
|
||||
78,ITDARE,AREA,82,NATSUR,LIST,3,[1],4,4
|
||||
78,ITDARE,AREA,82,NATSUR,LIST,4,[4],4,4
|
||||
79,LAKARE,AREA,80,OBJNAM,STRING,1,Ane Lake,1,1
|
||||
86,LIGHTS,POINT,25,CATLIT,BYTE,1,5,5,4
|
||||
86,LIGHTS,POINT,25,CATLIT,BYTE,2,8,2,4
|
||||
86,LIGHTS,POINT,25,CATLIT,BYTE,3,6,1,4
|
||||
86,LIGHTS,POINT,25,CATLIT,BYTE,4,11,1,4
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,1,[6],28,6
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,2,[4],23,6
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,3,[3],23,6
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,4,[1],15,6
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,5,"[1,1,4]",2,6
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,6,"[1,4]",2,6
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,1,12,10,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,2,14,6,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,3,57,4,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,4,11,4,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,5,5,4,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,6,9,3,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,7,17,3,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,8,22,3,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,9,69,2,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,10,79,2,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,11,7,2,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,12,16,2,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,13,4,2,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,14,8,1,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,15,31,1,16
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,16,10,1,16
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,1,2 fl in 3s,4,5
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,2,The white light can be apparent on 8M,2,5
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,3,Illuminates Hinode Iwa 430m NNW,2,5
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,4,FW spotlight illuminates Hinode Iwa.,1,5
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,5,More than one,1,5
|
||||
86,LIGHTS,POINT,58,LITCHR,BYTE,1,2,35,4
|
||||
86,LIGHTS,POINT,58,LITCHR,BYTE,2,7,13,4
|
||||
86,LIGHTS,POINT,58,LITCHR,BYTE,3,1,6,4
|
||||
86,LIGHTS,POINT,58,LITCHR,BYTE,4,19,4,4
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,1,C1,2,6
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,2,C2,1,6
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,3,R1,1,6
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,4,R2,1,6
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,5,L1,1,6
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,6,L2,1,6
|
||||
86,LIGHTS,POINT,93,QUAVEM,BYTE,1,1,12,1
|
||||
86,LIGHTS,POINT,100,SECTR1,WORD10,1,228,3,2
|
||||
86,LIGHTS,POINT,100,SECTR1,WORD10,2,48,3,2
|
||||
86,LIGHTS,POINT,101,SECTR2,WORD10,1,48,3,2
|
||||
86,LIGHTS,POINT,101,SECTR2,WORD10,2,228,3,2
|
||||
86,LIGHTS,POINT,72,SIGGRP,STRING,1,(1),38,2
|
||||
86,LIGHTS,POINT,72,SIGGRP,STRING,2,(2),14,2
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,1,3,10,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,2,6,10,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,3,4,7,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,4,9,6,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,5,5,5,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,6,10,4,7
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,7,8,4,7
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,1,"GB,MDHS,graph,LL F-6624.7.C",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,2,"GB,MDHS,graph,LL F-6624.7.D",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,3,"GB,MDHS,graph,LL F-6624.7.E",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,4,"GB,MDHS,graph,LL F-6624.7.F",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,5,"GB,MDHS,graph,LL F-6624.7.A",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,6,"GB,MDHS,graph,LL F-6624.7.B",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,7,"GB,MDHS,graph,LL F-6623.2.A",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,8,"GB,UKHO,graph,LL M-6624.62",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,9,"GB,UKHO,graph,LL M-6624.621",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,10,"GB,UKHO,graph,LL M-6624.64",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,11,"GB,UKHO,graph,LL M-6624.641",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,12,"GB,UKHO,graph,LL M-6624.63",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,13,"GB,UKHO,graph,LL M-6624.631",1,14
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,14,"GB,UKHO,graph,LL M-6624.5",1,14
|
||||
86,LIGHTS,POINT,109,STATUS,LIST,1,[8],26,1
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,1,4,16,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,2,6,7,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,3,3,7,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,4,5,7,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,5,19,4,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,6,7,3,7
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,7,2,1,7
|
||||
81,LNDARE,AREA,80,OBJNAM,STRING,1,Honshu,1,3
|
||||
81,LNDARE,AREA,80,OBJNAM,STRING,2,Todo Shima,1,3
|
||||
81,LNDARE,AREA,80,OBJNAM,STRING,3,Hinode Iwa,1,3
|
||||
95,MONUMT,POINT,65,CONVIS,BYTE,1,2,2,1
|
||||
96,MORFAC,POINT,29,CATMOR,BYTE,1,1,7,1
|
||||
96,MORFAC,POINT,78,INFORM,STRING,1,Always dry,1,1
|
||||
96,MORFAC,AREA,29,CATMOR,BYTE,1,1,2,1
|
||||
96,MORFAC,AREA,78,INFORM,STRING,1,Always dry,2,1
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,1,20080102,2,5
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,2,20060322,2,5
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,3,20141006,1,5
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,4,20140602,1,5
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,5,20140505,1,5
|
||||
97,NATARE,AREA,78,INFORM,STRING,1,"Jeppesen adopts ""International Boundaries and National Limits"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.",3,1
|
||||
97,NATARE,AREA,81,NATION,STRING,1,JP,3,1
|
||||
99,OBSTRN,POINT,69,EXPSOU,BYTE,1,2,1,1
|
||||
99,OBSTRN,POINT,78,INFORM,STRING,1,Wave Meter,2,1
|
||||
99,OBSTRN,POINT,116,VALSOU,WORD10,1,25,2,4
|
||||
99,OBSTRN,POINT,116,VALSOU,WORD10,2,1.5,2,4
|
||||
99,OBSTRN,POINT,116,VALSOU,WORD10,3,1.2,1,4
|
||||
99,OBSTRN,POINT,116,VALSOU,WORD10,4,4.9,1,4
|
||||
99,OBSTRN,POINT,124,WATLEV,BYTE,1,3,6,1
|
||||
99,OBSTRN,AREA,78,INFORM,STRING,1,Crib|Caissons,2,2
|
||||
99,OBSTRN,AREA,78,INFORM,STRING,2,Crib|Caisson Area,1,2
|
||||
99,OBSTRN,AREA,116,VALSOU,WORD10,1,4.9,1,3
|
||||
99,OBSTRN,AREA,116,VALSOU,WORD10,2,1.2,1,3
|
||||
99,OBSTRN,AREA,116,VALSOU,WORD10,3,1.5,1,3
|
||||
99,OBSTRN,AREA,124,WATLEV,BYTE,1,3,70,1
|
||||
103,PILPNT,POINT,78,INFORM,STRING,1,Always dry,8,2
|
||||
103,PILPNT,POINT,78,INFORM,STRING,2,Private,1,2
|
||||
107,PIPSOL,LINE,35,CATPIP,BYTE,1,1,2,1
|
||||
107,PIPSOL,LINE,78,INFORM,STRING,1,"PIPELINES|Mariners are advised not to anchor or trawl in the vicinity of pipelines. Gas from a damaged oil or gas pipeline could cause an explosion, loss of a vessels buoyancy or other serious hazard. Pipelines are not always buried and may effectively reduce the charted depth by up to 2 metres. They may also span seabed undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. See Annual Notice to Mariners No 24 and The Mariners Handbook.",1,1
|
||||
107,PIPSOL,LINE,89,PRODCT,LIST,1,[1],1,2
|
||||
107,PIPSOL,LINE,89,PRODCT,LIST,2,[2],1,2
|
||||
111,PRDINS,POINT,78,INFORM,STRING,1,Production area,12,1
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,1,"Pacific Metals CO., LTD.",2,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,2,"Tozai Oilterminal Co.,Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,3,Tohoku Satetsu,1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,4,"MRC Unitec Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,5,Toshin Steel Industry,1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,6,"Hachinohe Gas Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,7,"Koshuha Foundry Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,8,"Sumimetal Mining Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,9,"Hachinohe Smelting Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,10,"Kitanihon Shipbuilding Co., Ltd.",1,11
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,11,JX Nippon Oil & Energy Corporation,1,11
|
||||
111,PRDINS,POINT,89,PRODCT,LIST,1,[1],1,2
|
||||
111,PRDINS,POINT,89,PRODCT,LIST,2,[2],1,2
|
||||
111,PRDINS,POINT,91,QUAPOS,BYTE,1,4,11,1
|
||||
111,PRDINS,AREA,78,INFORM,STRING,1,Tank farm,9,4
|
||||
111,PRDINS,AREA,78,INFORM,STRING,2,Production area,3,4
|
||||
111,PRDINS,AREA,78,INFORM,STRING,3,Production area|Silo farm,2,4
|
||||
111,PRDINS,AREA,78,INFORM,STRING,4,Tank farm|Oil Tank Yard,1,4
|
||||
111,PRDINS,AREA,80,OBJNAM,STRING,1,Mitsubishi Paper Mills Limited,1,3
|
||||
111,PRDINS,AREA,80,OBJNAM,STRING,2,"Tokyotekko Co., Ltd.",1,3
|
||||
111,PRDINS,AREA,80,OBJNAM,STRING,3,Yoshida Sangyo Corporation,1,3
|
||||
111,PRDINS,AREA,89,PRODCT,LIST,1,[1],1,1
|
||||
112,PYLONS,POINT,78,INFORM,STRING,1,Power transmission pylon/pole,2,1
|
||||
129,RIVERS,AREA,80,OBJNAM,STRING,1,Mabechi River,1,3
|
||||
129,RIVERS,AREA,80,OBJNAM,STRING,2,Oirase River,1,3
|
||||
129,RIVERS,AREA,80,OBJNAM,STRING,3,Gonohe Kawa,1,3
|
||||
118,RTPBCN,POINT,38,CATRTB,BYTE,1,1,1,1
|
||||
118,RTPBCN,POINT,108,SORIND,STRING,1,"GB,MDHS,graph,LL F-6620.A",1,1
|
||||
138,SBDARE,POINT,90,NATQUA,LIST,1,[1],144,2
|
||||
138,SBDARE,POINT,90,NATQUA,LIST,2,[3],1,2
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,1,[4],176,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,2,[1],54,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,3,[9],15,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,4,[5],14,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,5,"[4,17]",9,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,6,"[1,4]",8,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,7,"[4,1]",7,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,8,"[6,17,61]",1,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,9,"[1,4,17]",1,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,10,"[1,6]",1,11
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,11,"[1,4,5]",1,11
|
||||
138,SBDARE,AREA,82,NATSUR,LIST,1,[9],5,3
|
||||
138,SBDARE,AREA,82,NATSUR,LIST,2,[4],3,3
|
||||
138,SBDARE,AREA,82,NATSUR,LIST,3,[5],1,3
|
||||
136,SEAARE,AREA,80,OBJNAM,STRING,1,North Pacific Ocean,1,2
|
||||
136,SEAARE,AREA,80,OBJNAM,STRING,2,Hamanaka,1,2
|
||||
142,SILBUI,POINT,78,INFORM,STRING,1,More than one,1,3
|
||||
142,SILBUI,POINT,78,INFORM,STRING,2,more than one,1,3
|
||||
142,SILBUI,POINT,78,INFORM,STRING,3,SILOS,1,3
|
||||
142,SILBUI,POINT,91,QUAPOS,BYTE,1,4,2,1
|
||||
140,SISTAT,POINT,47,CATSIT,LIST,1,[2],2,1
|
||||
141,SISTAW,POINT,48,CATSIW,LIST,1,[10],1,1
|
||||
139,SLCONS,LINE,46,CATSLC,BYTE,1,6,3,1
|
||||
139,SLCONS,LINE,63,CONDTN,BYTE,1,2,5,1
|
||||
139,SLCONS,LINE,78,INFORM,STRING,1,Land Area,2,1
|
||||
139,SLCONS,LINE,80,OBJNAM,STRING,1,No 3,1,3
|
||||
139,SLCONS,LINE,80,OBJNAM,STRING,2,Kawaragi No 1,1,3
|
||||
139,SLCONS,LINE,80,OBJNAM,STRING,3,Kawaragi No 2,1,3
|
||||
139,SLCONS,LINE,124,WATLEV,BYTE,1,2,204,1
|
||||
139,SLCONS,AREA,46,CATSLC,BYTE,1,1,34,3
|
||||
139,SLCONS,AREA,46,CATSLC,BYTE,2,6,10,3
|
||||
139,SLCONS,AREA,46,CATSLC,BYTE,3,4,4,3
|
||||
139,SLCONS,AREA,63,CONDTN,BYTE,1,2,8,2
|
||||
139,SLCONS,AREA,63,CONDTN,BYTE,2,3,1,2
|
||||
139,SLCONS,AREA,78,INFORM,STRING,1,Source date: 2005,1,1
|
||||
139,SLCONS,AREA,83,NATCON,LIST,1,[3],78,1
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,1,Hattaro North Breakwater,3,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,2,Middle Breakwater,2,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,3,Hattaro East Breakwater,2,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,4,West Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,5,Grain Terminal,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,6,No 4 Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,7,No 3 Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,8,No 1 Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,9,No 2 Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,10,Kawaragi No 2 Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,11,No 2 Middle Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,12,Shirogane West Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,13,Japan Maritime Self Defense Force Quay,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,14,Ichikawa East Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,15,Shirogane North Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,16,Grain Terminal Pier,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,17,Ichikawa North Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,18,Ferry Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,19,Mitsubishi Paper Mills Limited Quay,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,20,Kabu Island Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,21,Shirogane Wharf,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,22,Kawaragi South Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,23,Kawaragi West Breakwater,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,24,Hachinohe Smelting Quay,1,25
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,25,Kawaragi Breakwater,1,25
|
||||
139,SLCONS,AREA,124,WATLEV,BYTE,1,2,100,3
|
||||
139,SLCONS,AREA,124,WATLEV,BYTE,2,4,9,3
|
||||
139,SLCONS,AREA,124,WATLEV,BYTE,3,3,1,3
|
||||
143,SLIPWY,AREA,80,OBJNAM,STRING,1,Ichikawa Slipway,1,1
|
||||
143,SLIPWY,AREA,124,WATLEV,BYTE,1,4,2,2
|
||||
143,SLIPWY,AREA,124,WATLEV,BYTE,2,2,1,2
|
||||
155,TESARE,AREA,78,INFORM,STRING,1,"Jeppesen adopts ""International Boundaries and National Limits"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation.",3,1
|
||||
155,TESARE,AREA,81,NATION,STRING,1,JP,3,1
|
||||
158,TOWERS,POINT,52,CATTOW,BYTE,1,1,22,3
|
||||
158,TOWERS,POINT,52,CATTOW,BYTE,2,3,19,3
|
||||
158,TOWERS,POINT,52,CATTOW,BYTE,3,2,10,3
|
||||
158,TOWERS,POINT,59,COLOUR,LIST,1,[1],22,1
|
||||
158,TOWERS,POINT,65,CONVIS,BYTE,1,1,23,2
|
||||
158,TOWERS,POINT,65,CONVIS,BYTE,2,2,4,2
|
||||
158,TOWERS,POINT,73,HEIGHT,REAL,1,51,1,2
|
||||
158,TOWERS,POINT,73,HEIGHT,REAL,2,53,1,2
|
||||
158,TOWERS,POINT,78,INFORM,STRING,1,Radio,4,3
|
||||
158,TOWERS,POINT,78,INFORM,STRING,2,Ice Supply Tower,2,3
|
||||
158,TOWERS,POINT,78,INFORM,STRING,3,Framework tower,1,3
|
||||
158,TOWERS,POINT,83,NATCON,LIST,1,[2],12,1
|
||||
158,TOWERS,POINT,91,QUAPOS,BYTE,1,4,6,1
|
||||
158,TOWERS,POINT,108,SORIND,STRING,1,"GB,UKHO,graph,LL M-6620",3,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,2,"GB,UKHO,graph,LL M-6621",2,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,3,"GB,UKHO,graph,LL M-6625.5",2,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,4,"GB,UKHO,graph,LL M-6624.86",2,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,5,"GB,UKHO,graph,LL M-6619.5",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,6,"GB,UKHO,graph,LL M-6618.4",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,7,"GB,UKHO,graph,LL M-6625.7",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,8,"GB,UKHO,graph,LL M-6624.85",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,9,"GB,MDHS,graph,LL F-6623.2",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,10,"GB,MDHS,graph,LL F-6621",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,11,"GB,MDHS,graph,LL F-6622",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,12,"GB,MDHS,graph,LL F-6625.5",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,13,"GB,MDHS,graph,LL F-6620",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,14,"GB,MDHS,graph,LL F-6624.4",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,15,"GB,MDHS,graph,LL F-6624.85",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,16,"GB,UKHO,graph,LL M-6622",1,17
|
||||
158,TOWERS,POINT,108,SORIND,STRING,17,"GB,UKHO,graph,LL M-6624.4",1,17
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,1,9,7,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,2,23,4,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,3,10,4,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,4,5,3,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,5,16,2,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,6,6,1,7
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,7,8,1,7
|
||||
168,UWTROC,POINT,69,EXPSOU,BYTE,1,2,3,1
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,1,15,5,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,2,9.9,4,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,3,2.6,4,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,4,4.4,4,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,5,2,4,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,6,17,3,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,7,18,3,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,8,19,3,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,9,21,3,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,10,0.3,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,11,1.7,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,12,2.2,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,13,4.1,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,14,0.7,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,15,2.3,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,16,7.7,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,17,7.8,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,18,8.8,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,19,16,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,20,20,2,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,21,0.5,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,22,0.8,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,23,1.4,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,24,1.6,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,25,2.5,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,26,2.7,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,27,3.1,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,28,4,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,29,4.7,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,30,4.8,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,31,5.7,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,32,5.9,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,33,6.2,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,34,6.3,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,35,6.5,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,36,6.8,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,37,6.9,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,38,7,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,39,7.3,1,69
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,40,7.4,1,69
|
||||
168,UWTROC,POINT,124,WATLEV,BYTE,1,3,110,3
|
||||
168,UWTROC,POINT,124,WATLEV,BYTE,2,2,56,3
|
||||
168,UWTROC,POINT,124,WATLEV,BYTE,3,4,10,3
|
||||
176,WRECKS,POINT,57,CATWRK,BYTE,1,3,477,2
|
||||
176,WRECKS,POINT,57,CATWRK,BYTE,2,2,2,2
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,1,11.2,7,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,2,12.2,5,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,3,12.6,5,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,4,9.6,4,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,5,10.2,4,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,6,11.1,4,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,7,12,4,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,8,12.5,4,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,9,6.3,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,10,7,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,11,7.3,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,12,8.3,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,13,9,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,14,9.5,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,15,11.4,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,16,11.9,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,17,12.3,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,18,12.7,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,19,13,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,20,13.1,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,21,13.4,3,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,22,23.5,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,23,21.5,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,24,3,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,25,3.7,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,26,4.3,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,27,5,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,28,5.1,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,29,5.7,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,30,6,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,31,6.2,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,32,6.9,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,33,7.8,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,34,8.1,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,35,8.5,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,36,8.7,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,37,9.1,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,38,9.4,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,39,9.9,2,103
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,40,10.3,2,103
|
||||
176,WRECKS,POINT,124,WATLEV,BYTE,1,3,480,1
|
||||
176,WRECKS,AREA,57,CATWRK,BYTE,1,2,1,1
|
||||
176,WRECKS,AREA,116,VALSOU,WORD10,1,7,1,1
|
||||
176,WRECKS,AREA,124,WATLEV,BYTE,1,3,1,1
|
||||
201,_extgn,POINT,60,COLMAR,BYTE,1,11,1,1
|
||||
201,_extgn,POINT,78,INFORM,STRING,1,Height: 123m|Chimney|Visually conspicuous,1,1
|
||||
217,_m_sor,META,151,CSCALE,LONG,1,3000000,1,6
|
||||
217,_m_sor,META,151,CSCALE,LONG,2,1200000,1,6
|
||||
217,_m_sor,META,151,CSCALE,LONG,3,250000,1,6
|
||||
217,_m_sor,META,151,CSCALE,LONG,4,20000,1,6
|
||||
217,_m_sor,META,151,CSCALE,LONG,5,12000,1,6
|
||||
217,_m_sor,META,151,CSCALE,LONG,6,20000000,1,6
|
||||
217,_m_sor,META,75,HORDAT,BYTE,1,2,6,1
|
||||
217,_m_sor,META,84,MARSYS,BYTE,1,2,4,2
|
||||
217,_m_sor,META,84,MARSYS,BYTE,2,1,2,2
|
||||
217,_m_sor,META,156,NMDATE,STRING,1,20021101,2,5
|
||||
217,_m_sor,META,156,NMDATE,STRING,2,20140926,1,5
|
||||
217,_m_sor,META,156,NMDATE,STRING,3,20140523,1,5
|
||||
217,_m_sor,META,156,NMDATE,STRING,4,20060323,1,5
|
||||
217,_m_sor,META,156,NMDATE,STRING,5,20140328,1,5
|
||||
217,_m_sor,META,96,RECDAT,STRING,1,20080102,2,5
|
||||
217,_m_sor,META,96,RECDAT,STRING,2,20141006,1,5
|
||||
217,_m_sor,META,96,RECDAT,STRING,3,20140602,1,5
|
||||
217,_m_sor,META,96,RECDAT,STRING,4,20060322,1,5
|
||||
217,_m_sor,META,96,RECDAT,STRING,5,20140505,1,5
|
||||
217,_m_sor,META,108,SORIND,STRING,1,"IT,CMAP,graph,W-135",1,6
|
||||
217,_m_sor,META,108,SORIND,STRING,2,"JP,JHOD,graph,W1154",1,6
|
||||
217,_m_sor,META,108,SORIND,STRING,3,"JP,JHOD,graph,W53",1,6
|
||||
217,_m_sor,META,108,SORIND,STRING,4,"GB,MDHS,graph,2959B",1,6
|
||||
217,_m_sor,META,108,SORIND,STRING,5,"JP,JHOD,graph,W65",1,6
|
||||
217,_m_sor,META,108,SORIND,STRING,6,"IT,CMAP,graph,W-14",1,6
|
||||
217,_m_sor,META,121,VERDAT,BYTE,1,11,3,2
|
||||
217,_m_sor,META,121,VERDAT,BYTE,2,10,1,2
|
||||
217,_m_sor,META,173,_chcod,STRING,1,90-01520,1,6
|
||||
217,_m_sor,META,173,_chcod,STRING,2,31-0F270,1,6
|
||||
217,_m_sor,META,173,_chcod,STRING,3,31-0F710,1,6
|
||||
217,_m_sor,META,173,_chcod,STRING,4,31-0684B,1,6
|
||||
217,_m_sor,META,173,_chcod,STRING,5,31-0F700,1,6
|
||||
217,_m_sor,META,173,_chcod,STRING,6,90-00310,1,6
|
||||
217,_m_sor,META,174,_dgdat,STRING,1,20000101,2,5
|
||||
217,_m_sor,META,174,_dgdat,STRING,2,20081003,1,5
|
||||
217,_m_sor,META,174,_dgdat,STRING,3,20070914,1,5
|
||||
217,_m_sor,META,174,_dgdat,STRING,4,20030320,1,5
|
||||
217,_m_sor,META,174,_dgdat,STRING,5,20120313,1,5
|
||||
217,_m_sor,META,180,_hvdat,BYTE,1,3,3,2
|
||||
217,_m_sor,META,180,_hvdat,BYTE,2,21,1,2
|
||||
217,_m_sor,META,175,_quart,BYTE,1,4,6,1
|
||||
217,_m_sor,META,177,_sorhd,BYTE,1,2,6,1
|
||||
217,_m_sor,META,178,_wgsox,REAL,1,0,6,1
|
||||
217,_m_sor,META,179,_wgsoy,REAL,1,0,6,1
|
||||
198,_texto,POINT,139,_texta,COMPLEX,1,"{""prefix"":[0,12,0],""text"":""Same Kado""}",3,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,2,"{""prefix"":[0,12,0],""text"":""Hachinohe""}",3,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,3,"{""prefix"":[0,12,0],""text"":""Hachinohe Fishing Harbour""}",3,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,4,"{""prefix"":[0,12,0],""text"":""Misawa""}",2,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,5,"{""prefix"":[0,12,0],""text"":""Hamanaka""}",2,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,6,"{""prefix"":[0,12,0],""text"":""Hashimukai""}",2,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,7,"{""prefix"":[128,12,0],""text"":""HACHINOHE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,8,"{""prefix"":[0,12,0],""text"":""AOMORI""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,9,"{""prefix"":[0,12,0],""text"":""Hachinohe Ko""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,10,"{""prefix"":[0,12,0],""text"":""Kabayama Reef""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,11,"{""prefix"":[0,12,0],""text"":""Hitokawame""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,12,"{""prefix"":[0,12,0],""text"":""Mikawame""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,13,"{""prefix"":[0,12,0],""text"":""Minato""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,14,"{""prefix"":[0,12,0],""text"":""Oirase Town""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,15,"{""prefix"":[0,12,0],""text"":""Okuki""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,16,"{""prefix"":[0,12,0],""text"":""Same""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,17,"{""prefix"":[0,12,0],""text"":""Shirahama""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,18,"{""prefix"":[0,12,0],""text"":""CONVEYOR""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,19,"{""prefix"":[0,12,0],""text"":""H A C H I T A R O""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,20,"{""prefix"":[0,12,0],""text"":""HACHINOHE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,21,"{""prefix"":[16,12,0],""text"":""HACHINOHE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,22,"{""prefix"":[0,12,0],""text"":""HINODE IWA(ILLUM)""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,23,"{""prefix"":[0,12,0],""text"":""HOUSE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,24,"{""prefix"":[0,12,0],""text"":""K A W A R A G I""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,25,"{""prefix"":[0,12,0],""text"":""KABAYAMA NE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,26,"{""prefix"":[0,12,0],""text"":""KABU SH.""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,27,"{""prefix"":[0,12,0],""text"":""KO NE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,28,"{""prefix"":[0,12,0],""text"":""MABECHI KAWA""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,29,"{""prefix"":[0,12,0],""text"":""MITSUBUSHI JETTY""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,30,"{""prefix"":[0,12,0],""text"":""MONOMIWA""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,31,"{""prefix"":[0,12,0],""text"":""N. BREAKWATER""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,32,"{""prefix"":[0,12,0],""text"":""NIIDA KAWA""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,33,"{""prefix"":[0,12,0],""text"":""No 1 WHARF""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,34,"{""prefix"":[0,12,0],""text"":""No 2 WHARF""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,35,"{""prefix"":[0,12,0],""text"":""No 4 WHARF""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,36,"{""prefix"":[0,12,0],""text"":""O SAKI""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,37,"{""prefix"":[0,12,0],""text"":""OGOMUNE""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,38,"{""prefix"":[0,12,0],""text"":""SAME KADO""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,39,"{""prefix"":[0,12,0],""text"":""SHIROGANE WHARF""}",1,104
|
||||
198,_texto,POINT,139,_texta,COMPLEX,40,"{""prefix"":[0,12,0],""text"":""SILOS""}",1,104
|
||||
|
@@ -0,0 +1,73 @@
|
||||
attribute_id,attribute_name,source_type_name,decoder_type,min_value,max_value,raw_line
|
||||
3,CATACH,aLIST,L,1.0,9.0,CATACH|3|aLIST|1|9
|
||||
4,CATBRG,aLIST,L,1.0,9.0,CATBRG|4|aLIST|1|9
|
||||
6,CATCBL,aBYTE,B,1.0,3.0,CATCBL|6|aBYTE|1|3
|
||||
9,CATCTR,aBYTE,B,1.0,5.0,CATCTR|9|aBYTE|1|5
|
||||
10,CATCRN,aBYTE,B,1.0,4.0,CATCRN|10|aBYTE|1|4
|
||||
20,CATHAF,aLIST,L,1.0,10.0,CATHAF|20|aLIST|1|10
|
||||
24,CATLAM,aBYTE,B,1.0,4.0,CATLAM|24|aBYTE|1|4
|
||||
25,CATLIT,aBYTE,B,1.0,11.0,CATLIT|25|aBYTE|1|11
|
||||
29,CATMOR,aBYTE,B,1.0,3.0,CATMOR|29|aBYTE|1|3
|
||||
35,CATPIP,aBYTE,B,1.0,4.0,CATPIP|35|aBYTE|1|4
|
||||
38,CATRTB,aBYTE,B,1.0,2.0,CATRTB|38|aBYTE|1|2
|
||||
41,CATREB,aBYTE,B,1.0,9.0,CATREB|41|aBYTE|1|9
|
||||
46,CATSLC,aBYTE,B,1.0,10.0,CATSLC|46|aBYTE|1|10
|
||||
47,CATSIT,aLIST,L,1.0,9.0,CATSIT|47|aLIST|1|9
|
||||
48,CATSIW,aLIST,L,1.0,13.0,CATSIW|48|aLIST|1|13
|
||||
49,CATBUI,aLIST,L,1.0,21.0,CATBUI|49|aLIST|1|21
|
||||
51,CATSPM,aBYTE,B,1.0,38.0,CATSPM|51|aBYTE|1|38
|
||||
52,CATTOW,aBYTE,B,1.0,7.0,CATTOW|52|aBYTE|1|7
|
||||
57,CATWRK,aBYTE,B,1.0,5.0,CATWRK|57|aBYTE|1|5
|
||||
58,LITCHR,aBYTE,B,1.0,27.0,LITCHR|58|aBYTE|1|27
|
||||
59,COLOUR,aLIST,L,1.0,55.0,COLOUR|59|aLIST|1|55
|
||||
60,COLMAR,aBYTE,B,1.0,18.0,COLMAR|60|aBYTE|1|18
|
||||
63,CONDTN,aBYTE,B,1.0,5.0,CONDTN|63|aBYTE|1|5
|
||||
65,CONVIS,aBYTE,B,1.0,2.0,CONVIS|65|aBYTE|1|2
|
||||
66,DRVAL1,aFLOAT,R,0.0,12000.0,DRVAL1|66|aFLOAT|0.0|12000.0
|
||||
67,DRVAL2,aFLOAT,R,0.0,12000.0,DRVAL2|67|aFLOAT|0.0|12000.0
|
||||
69,EXPSOU,aBYTE,B,1.0,3.0,EXPSOU|69|aBYTE|1|3
|
||||
72,SIGGRP,aSTRING,S,,,SIGGRP|72|aSTRING
|
||||
73,HEIGHT,aFLOAT,R,-500.0,8900.0,HEIGHT|73|aFLOAT|-500.0|8900.0
|
||||
75,HORDAT,aBYTE,B,0.0,221.0,HORDAT|75|aBYTE|0|221
|
||||
78,INFORM,aSTRING,S,,,INFORM|78|aSTRING
|
||||
80,OBJNAM,aSTRING,S,,,OBJNAM|80|aSTRING
|
||||
81,NATION,aSTRING,S,,,NATION|81|aSTRING
|
||||
82,NATSUR,aLIST,L,1.0,88.0,NATSUR|82|aLIST|1|88
|
||||
83,NATCON,aLIST,L,1.0,7.0,NATCON|83|aLIST|1|7
|
||||
84,MARSYS,aBYTE,B,1.0,8.0,MARSYS|84|aBYTE|1|8
|
||||
86,SIGPER,aWORD10,W,0.0,1000.0,SIGPER|86|aWORD10|0.0|1000.0
|
||||
89,PRODCT,aLIST,L,1.0,6.0,PRODCT|89|aLIST|1|6
|
||||
90,NATQUA,aLIST,L,1.0,60.0,NATQUA|90|aLIST|1|60
|
||||
91,QUAPOS,aBYTE,B,1.0,8.0,QUAPOS|91|aBYTE|1|8
|
||||
93,QUAVEM,aBYTE,B,1.0,2.0,QUAVEM|93|aBYTE|1|2
|
||||
96,RECDAT,aSTRING,S,,,RECDAT|96|aSTRING
|
||||
100,SECTR1,aWORD10,W,0.0,360.0,SECTR1|100|aWORD10|0.0|360.0
|
||||
101,SECTR2,aWORD10,W,0.0,360.0,SECTR2|101|aWORD10|0.0|360.0
|
||||
103,BCNSHP,aBYTE,B,1.0,4.0,BCNSHP|103|aBYTE|1|4
|
||||
104,BUISHP,aBYTE,B,1.0,6.0,BUISHP|104|aBYTE|1|6
|
||||
105,BOYSHP,aBYTE,B,1.0,8.0,BOYSHP|105|aBYTE|1|8
|
||||
108,SORIND,aSTRING,S,,,SORIND|108|aSTRING
|
||||
109,STATUS,aLIST,L,1.0,11.0,STATUS|109|aLIST|1|11
|
||||
113,VALDCO,aFLOAT,R,0.0,12000.0,VALDCO|113|aFLOAT|0.0|12000.0
|
||||
115,VALNMR,aWORD10,W,0.0,400.0,VALNMR|115|aWORD10|0.0|400.0
|
||||
116,VALSOU,aWORD10,W,0.0,12000.0,VALSOU|116|aWORD10|0|12000.0
|
||||
117,VERCLR,aFLOAT,R,0.0,10000.0,VERCLR|117|aFLOAT|0.0|10000.0
|
||||
121,VERDAT,aBYTE,B,1.0,59.0,VERDAT|121|aBYTE|1|59
|
||||
122,VERLEN,aFLOAT,R,0.0,10000.0,VERLEN|122|aFLOAT|0.0|10000.0
|
||||
124,WATLEV,aBYTE,B,1.0,5.0,WATLEV|124|aBYTE|1|5
|
||||
126,$VARIA,aSTRING,S,,,$VARIA|126|aSTRING
|
||||
127,$CYEAR,aFLOAT,R,0.0,3000.0,$CYEAR|127|aFLOAT|0.0|3000.0
|
||||
128,$ANNCH,aSTRING,S,,,$ANNCH|128|aSTRING
|
||||
129,$SCODE,aSTRING,S,,,$SCODE|129|aSTRING
|
||||
139,_texta,aCMPLX,C,,,_texta|139|aCMPLX
|
||||
147,CATCOA,aBYTE,B,1.0,9.0,CATCOA|147|aBYTE|1|9
|
||||
150,CPDATE,aSTRING,S,,,CPDATE|150|aSTRING
|
||||
151,CSCALE,aLONG,G,0.0,20000000.0,CSCALE|151|aLONG|0|20000000
|
||||
156,NMDATE,aSTRING,S,,,NMDATE|156|aSTRING
|
||||
173,_chcod,aSTRING,S,,,_chcod|173|aSTRING
|
||||
174,_dgdat,aSTRING,S,,,_dgdat|174|aSTRING
|
||||
175,_quart,aBYTE,B,1.0,6.0,_quart|175|aBYTE|1|6
|
||||
177,_sorhd,aBYTE,B,0.0,221.0,_sorhd|177|aBYTE|0|221
|
||||
178,_wgsox,aFLOAT,R,-5000.0,5000.0,_wgsox|178|aFLOAT|-5000.0|5000.0
|
||||
179,_wgsoy,aFLOAT,R,-5000.0,5000.0,_wgsoy|179|aFLOAT|-5000.0|5000.0
|
||||
180,_hvdat,aBYTE,B,1.0,59.0,_hvdat|180|aBYTE|1|59
|
||||
|
@@ -0,0 +1,178 @@
|
||||
object_class_id,object_class,geometry_type,attribute_id,attribute_name,value_type,occurrence_count,distinct_value_count,native_scales,top_values
|
||||
194,$AREAS,AREA,129,$SCODE,STRING,11,1,"[20000, 50000, 200000]","[{""value"": ""II25"", ""count"": 11}]"
|
||||
191,$COMPS,POINT,128,$ANNCH,STRING,5,2,"[20000, 50000]","[{""value"": ""00.00 E"", ""count"": 4}, {""value"": ""01.00 W"", ""count"": 1}]"
|
||||
191,$COMPS,POINT,127,$CYEAR,REAL,5,2,"[20000, 50000]","[{""value"": ""2012"", ""count"": 4}, {""value"": ""2002"", ""count"": 1}]"
|
||||
191,$COMPS,POINT,126,$VARIA,STRING,5,1,"[20000, 50000]","[{""value"": ""08.25 W"", ""count"": 5}]"
|
||||
193,$LINES,LINE,129,$SCODE,STRING,15,3,"[20000, 50000]","[{""value"": ""IH40"", ""count"": 6}, {""value"": ""IH41"", ""count"": 6}, {""value"": ""IK1"", ""count"": 3}]"
|
||||
4,ACHARE,AREA,3,CATACH,LIST,2,1,"[20000, 50000]","[{""value"": ""[5]"", ""count"": 2}]"
|
||||
1,AIRARE,POINT,80,OBJNAM,STRING,1,1,[20000],"[{""value"": ""Hachinohe Airfield"", ""count"": 1}]"
|
||||
7,BCNLAT,POINT,103,BCNSHP,BYTE,4,1,[50000],"[{""value"": ""3"", ""count"": 4}]"
|
||||
7,BCNLAT,POINT,24,CATLAM,BYTE,15,1,"[20000, 50000, 200000]","[{""value"": ""2"", ""count"": 15}]"
|
||||
7,BCNLAT,POINT,60,COLMAR,BYTE,15,1,"[20000, 50000, 200000]","[{""value"": ""3"", ""count"": 15}]"
|
||||
7,BCNLAT,POINT,78,INFORM,STRING,6,3,"[20000, 50000, 200000]","[{""value"": ""Concrete"", ""count"": 3}, {""value"": ""Metal"", ""count"": 2}, {""value"": ""Metal|Framework tower"", ""count"": 1}]"
|
||||
7,BCNLAT,POINT,108,SORIND,STRING,15,11,"[20000, 50000, 200000]","[{""value"": ""GB,UKHO,graph,LL M-6623"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6624.8"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6624.7"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6624"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6619"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6623"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6623.6"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.8"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6623.6"", ""count"": 1}]"
|
||||
7,BCNLAT,POINT,122,VERLEN,REAL,15,4,"[20000, 50000, 200000]","[{""value"": ""10"", ""count"": 6}, {""value"": ""9"", ""count"": 5}, {""value"": ""16"", ""count"": 3}, {""value"": ""6"", ""count"": 1}]"
|
||||
9,BCNSPP,POINT,51,CATSPM,BYTE,5,2,"[20000, 50000, 1000000]","[{""value"": ""6"", ""count"": 4}, {""value"": ""27"", ""count"": 1}]"
|
||||
9,BCNSPP,POINT,60,COLMAR,BYTE,2,1,"[20000, 200000]","[{""value"": ""5"", ""count"": 2}]"
|
||||
9,BCNSPP,POINT,78,INFORM,STRING,4,1,"[200000, 1000000]","[{""value"": ""Metal"", ""count"": 4}]"
|
||||
9,BCNSPP,POINT,108,SORIND,STRING,6,3,"[20000, 200000, 1000000]","[{""value"": ""GB,UKHO,graph,LL M-6625"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6626"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6623.2"", ""count"": 2}]"
|
||||
9,BCNSPP,POINT,122,VERLEN,REAL,4,2,"[20000, 200000, 1000000]","[{""value"": ""43"", ""count"": 2}, {""value"": ""9"", ""count"": 2}]"
|
||||
20,BOYSPP,POINT,105,BOYSHP,BYTE,8,2,"[20000, 50000]","[{""value"": ""1"", ""count"": 5}, {""value"": ""4"", ""count"": 3}]"
|
||||
20,BOYSPP,POINT,51,CATSPM,BYTE,5,3,"[20000, 50000]","[{""value"": ""27"", ""count"": 3}, {""value"": ""10"", ""count"": 1}, {""value"": ""13"", ""count"": 1}]"
|
||||
20,BOYSPP,POINT,60,COLMAR,BYTE,8,1,"[20000, 50000]","[{""value"": ""4"", ""count"": 8}]"
|
||||
20,BOYSPP,POINT,78,INFORM,STRING,1,1,[50000],"[{""value"": ""Private mark|Wave recorder"", ""count"": 1}]"
|
||||
20,BOYSPP,POINT,109,STATUS,LIST,6,1,[20000],"[{""value"": ""[8]"", ""count"": 6}]"
|
||||
11,BRIDGE,AREA,4,CATBRG,LIST,2,1,[50000],"[{""value"": ""[1]"", ""count"": 2}]"
|
||||
11,BRIDGE,AREA,78,INFORM,STRING,3,2,[20000],"[{""value"": ""Vertical Datum: Nearly highest high water|Vertical clearance 4.5m - 5.5m"", ""count"": 2}, {""value"": ""Vertical Datum: Nearly highest high water"", ""count"": 1}]"
|
||||
11,BRIDGE,AREA,80,OBJNAM,STRING,7,7,[20000],"[{""value"": ""Hachinohe Bridge"", ""count"": 1}, {""value"": ""Hattaro Bridge"", ""count"": 1}, {""value"": ""The Numadate Bridge"", ""count"": 1}, {""value"": ""The Shin-O-Hashi Bridge"", ""count"": 1}, {""value"": ""Seagull Bridge"", ""count"": 1}, {""value"": ""Minato Bridge"", ""count"": 1}, {""value"": ""Ichikawa Bridge"", ""count"": 1}]"
|
||||
11,BRIDGE,AREA,117,VERCLR,REAL,5,3,"[20000, 50000]","[{""value"": ""4.5"", ""count"": 2}, {""value"": ""31"", ""count"": 2}, {""value"": ""5.30000019073486"", ""count"": 1}]"
|
||||
10,BRTFAC,POINT,80,OBJNAM,STRING,89,25,"[20000, 50000]","[{""value"": ""2"", ""count"": 8}, {""value"": ""1"", ""count"": 6}, {""value"": ""3"", ""count"": 6}, {""value"": ""4"", ""count"": 6}, {""value"": ""A"", ""count"": 6}, {""value"": ""B"", ""count"": 6}, {""value"": ""C"", ""count"": 6}, {""value"": ""5"", ""count"": 4}, {""value"": ""6"", ""count"": 4}, {""value"": ""D"", ""count"": 4}, {""value"": ""F"", ""count"": 4}, {""value"": ""G"", ""count"": 4}, {""value"": ""7"", ""count"": 2}, {""value"": ""8"", ""count"": 2}, {""value"": ""9"", ""count"": 2}, {""value"": ""E"", ""count"": 2}, {""value"": ""H"", ""count"": 2}, {""value"": ""I"", ""count"": 2}, {""value"": ""J"", ""count"": 2}, {""value"": ""L"", ""count"": 2}, {""value"": ""M"", ""count"": 2}, {""value"": ""N"", ""count"": 2}, {""value"": ""O"", ""count"": 2}, {""value"": ""10"", ""count"": 2}, {""value"": ""P"", ""count"": 1}]"
|
||||
14,BUAARE,AREA,80,OBJNAM,STRING,2,2,[200000],"[{""value"": ""Hachinohe"", ""count"": 1}, {""value"": ""Misawa"", ""count"": 1}]"
|
||||
14,BUAARE,POINT,80,OBJNAM,STRING,35,33,"[20000, 200000, 1000000]","[{""value"": ""Hachinohe"", ""count"": 2}, {""value"": ""Hashimukai"", ""count"": 2}, {""value"": ""Misawa"", ""count"": 1}, {""value"": ""Same"", ""count"": 1}, {""value"": ""Okuki"", ""count"": 1}, {""value"": ""Minato"", ""count"": 1}, {""value"": ""Mikawame"", ""count"": 1}, {""value"": ""Shirahama"", ""count"": 1}, {""value"": ""Hitokawame"", ""count"": 1}, {""value"": ""Oirase Town"", ""count"": 1}, {""value"": ""Tate"", ""count"": 1}, {""value"": ""Osawa"", ""count"": 1}, {""value"": ""Hinode"", ""count"": 1}, {""value"": ""Toyosu"", ""count"": 1}, {""value"": ""Hattaro"", ""count"": 1}, {""value"": ""Hasunuma"", ""count"": 1}, {""value"": ""Kawaragi"", ""count"": 1}, {""value"": ""Kitanuma"", ""count"": 1}, {""value"": ""Numadate"", ""count"": 1}, {""value"": ""Sunamori"", ""count"": 1}, {""value"": ""Tatehana"", ""count"": 1}, {""value"": ""Uenoyama"", ""count"": 1}, {""value"": ""Kami-Same"", ""count"": 1}, {""value"": ""Hikagezawa"", ""count"": 1}, {""value"": ""Shinminato"", ""count"": 1}, {""value"": ""Uheikawara"", ""count"": 1}, {""value"": ""Senzogakubo"", ""count"": 1}, {""value"": ""Hamana-Yachi"", ""count"": 1}, {""value"": ""Shimo-Oyachi"", ""count"": 1}, {""value"": ""Minami-Oyachi"", ""count"": 1}, {""value"": ""Toyama-Shinden"", ""count"": 1}, {""value"": ""Shimo-Matsunaeba"", ""count"": 1}, {""value"": ""Shimo-Mekurakubo"", ""count"": 1}]"
|
||||
12,BUIREL,POINT,41,CATREB,BYTE,5,3,"[20000, 50000]","[{""value"": ""6"", ""count"": 2}, {""value"": ""7"", ""count"": 2}, {""value"": ""4"", ""count"": 1}]"
|
||||
13,BUISGL,AREA,49,CATBUI,LIST,10,4,[20000],"[{""value"": ""[19]"", ""count"": 7}, {""value"": ""[13]"", ""count"": 1}, {""value"": ""[3,2]"", ""count"": 1}, {""value"": ""[10]"", ""count"": 1}]"
|
||||
13,BUISGL,AREA,78,INFORM,STRING,7,7,[20000],"[{""value"": ""Port Management Office"", ""count"": 1}, {""value"": ""Fisheries High School"", ""count"": 1}, {""value"": ""Fishery Hall"", ""count"": 1}, {""value"": ""Fisheries Laboratory"", ""count"": 1}, {""value"": ""Coast Guard Office|Marine Procedure Commission Agent Office"", ""count"": 1}, {""value"": ""Fishing Harbor Development Office"", ""count"": 1}, {""value"": ""Regional Development Bureau,Port And Airport Office"", ""count"": 1}]"
|
||||
13,BUISGL,AREA,80,OBJNAM,STRING,7,7,[20000],"[{""value"": ""Tohoku Electric Power Electric Substation"", ""count"": 1}, {""value"": ""No.1 Fish Market"", ""count"": 1}, {""value"": ""No.2 Fish Market"", ""count"": 1}, {""value"": ""No.3 Fish Market"", ""count"": 1}, {""value"": ""Maritime Office"", ""count"": 1}, {""value"": ""Construction Office"", ""count"": 1}, {""value"": ""Fisherman's Union"", ""count"": 1}]"
|
||||
13,BUISGL,POINT,104,BUISHP,BYTE,1,1,[200000],"[{""value"": ""4"", ""count"": 1}]"
|
||||
13,BUISGL,POINT,49,CATBUI,LIST,9,5,"[20000, 50000]","[{""value"": ""[6]"", ""count"": 5}, {""value"": ""[2]"", ""count"": 1}, {""value"": ""[3]"", ""count"": 1}, {""value"": ""[17]"", ""count"": 1}, {""value"": ""[5]"", ""count"": 1}]"
|
||||
13,BUISGL,POINT,65,CONVIS,BYTE,2,1,"[20000, 200000]","[{""value"": ""2"", ""count"": 2}]"
|
||||
13,BUISGL,POINT,78,INFORM,STRING,1,1,[20000],"[{""value"": ""Light support|Not in use"", ""count"": 1}]"
|
||||
13,BUISGL,POINT,80,OBJNAM,STRING,2,2,[20000],"[{""value"": ""Tohoku Electric Power Thermal Power Plants"", ""count"": 1}, {""value"": ""Japan Maritime Self Defense Force Air Base"", ""count"": 1}]"
|
||||
13,BUISGL,POINT,91,QUAPOS,BYTE,2,1,[20000],"[{""value"": ""4"", ""count"": 2}]"
|
||||
21,CBLOHD,LINE,6,CATCBL,BYTE,5,1,"[20000, 50000]","[{""value"": ""1"", ""count"": 5}]"
|
||||
21,CBLOHD,LINE,93,QUAVEM,BYTE,1,1,[50000],"[{""value"": ""1"", ""count"": 1}]"
|
||||
21,CBLOHD,LINE,117,VERCLR,REAL,1,1,[50000],"[{""value"": ""12"", ""count"": 1}]"
|
||||
22,CBLSUB,LINE,6,CATCBL,BYTE,2,1,"[20000, 50000]","[{""value"": ""1"", ""count"": 2}]"
|
||||
22,CBLSUB,LINE,109,STATUS,LIST,3,1,"[20000, 50000]","[{""value"": ""[4]"", ""count"": 3}]"
|
||||
33,CHIMNY,POINT,59,COLOUR,LIST,2,1,[50000],"[{""value"": ""[3,1]"", ""count"": 2}]"
|
||||
33,CHIMNY,POINT,65,CONVIS,BYTE,9,2,"[20000, 50000, 200000]","[{""value"": ""2"", ""count"": 8}, {""value"": ""1"", ""count"": 1}]"
|
||||
33,CHIMNY,POINT,73,HEIGHT,REAL,9,7,"[20000, 200000]","[{""value"": ""123"", ""count"": 2}, {""value"": ""30"", ""count"": 2}, {""value"": ""27"", ""count"": 1}, {""value"": ""81"", ""count"": 1}, {""value"": ""40"", ""count"": 1}, {""value"": ""71"", ""count"": 1}, {""value"": ""82"", ""count"": 1}]"
|
||||
33,CHIMNY,POINT,78,INFORM,STRING,1,1,[50000],"[{""value"": ""3 CHYS"", ""count"": 1}]"
|
||||
35,COALNE,LINE,147,CATCOA,BYTE,8,1,[20000],"[{""value"": ""1"", ""count"": 8}]"
|
||||
36,CONZNE,AREA,78,INFORM,STRING,2,1,"[200000, 1000000]","[{""value"": ""Jeppesen adopts \""International Boundaries and National Limits\"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation."", ""count"": 2}]"
|
||||
36,CONZNE,AREA,81,NATION,STRING,2,1,"[200000, 1000000]","[{""value"": ""JP"", ""count"": 2}]"
|
||||
36,CONZNE,AREA,108,SORIND,STRING,1,1,[200000],"[{""value"": ""CM,PAD,graph,B3900420"", ""count"": 1}]"
|
||||
39,CRANES,POINT,10,CATCRN,BYTE,11,2,"[20000, 50000]","[{""value"": ""4"", ""count"": 9}, {""value"": ""2"", ""count"": 2}]"
|
||||
29,CTNARE,AREA,78,INFORM,STRING,16,12,"[20000, 50000, 200000, 1000000]","[{""value"": ""Caisson Temporary Storage Area"", ""count"": 3}, {""value"": ""The contents of the charts affected by earthquakes etc. occured offshore Pacific Ocean in Tohoku region in Japan.|By earthquakes and tsunami occured offshore Pacific Ocean in Tohoku region in Japan on 11th March 2011, damages of breakwaters, quays, etc. and existance of foul bottoms (i.e. houses and vehicles) on the seafloor which were pushed and flowed from land area in the east coast of Honshu and each ports and harbours. Users are aware that contents of the charts may be different from existing situations. Notices to Mariners about these matters will be issued as soon as survey results are received.Notices to Mariners address http://www1.kaiho.mlit.go.jp/TUHO/tuho_db/tuhoserch.html"", ""count"": 2}, {""value"": ""Unassessed. Surveys before the earthquake (11th Mar. 2011)"", ""count"": 2}, {""value"": ""Caution|Undiscovered shoals may exist around charted shoals. Mariners are advised to exercise caution.|Caution|Only the principal lights are shown on this chart. For the details of these and other lights, the larger scale charts and the List of Lights should be consulted.|Note|The straight baselines and the limits of the territorial sea shown on this chart are based on the provisions of Japanese Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone and the Enforcement Order No.210 of 1977 of Japanese Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone.|Note|Owing to scale, only major points of the straight baselines given in the Enforcement Order are shown.|Caution|As submarine cables are not shown on this chart, take care with regard to the fishing industry, submarine exploration etc. For submarine cable information, refer to JP charts with scales of larger than 1:750,000 or the JP chart with scale 1:3,500,000."", ""count"": 1}, {""value"": ""Jeppesen digital nautical charts do not reflect all soundings present on the official paper charts published by Japan Hydrographic and Oceanographic Department. This product is not an Electronic Navigational Chart. Mariners are required to use official paper charts for navigational judgements."", ""count"": 1}, {""value"": ""CAUTION|As undiscovered shoals may exist around charted shoals, mariners are warned to excercise cautions.|NOTE|The straight baselines and the limits of the territorial sea shown on this chart are based on the provisions of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone and the Enforcement Order No.210 of 1977 of the Law No.30 of 1977 on the Territorial Sea and the Contiguous Zone.|NOTE|Of all the base points of the straight baselines given in the Enforcement Order, only major points are shown on this chart due to its small scale."", ""count"": 1}, {""value"": ""CABLES|1. Submarine and overhead cables may conduct high voltages; contact with or proximity to these poses an extreme danger and mariners may risk prosecution if damage is caused.|2. Anchoring or trawling in the vicinity of submarine cables should be avoided. Seabed mobility may leave a cable spanning undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. If a cable is snagged, care must be taken not to sever it.|3. Sufficient clearance must be allowed under overhead cables.|4. Some cables, particularly those installed since this edition was published, may not be charted.|5. For further information, see The Mariner's Handbook."", ""count"": 1}, {""value"": ""Dredged to 7.5m|Source date: 1994"", ""count"": 1}, {""value"": ""Caution|Undiscovered shoals may exist around charted shoals. Mariners are advised to exercise caution. |Caution|Depths are very changeable at the entrance to river mouths. Mariners are advised to exercise caution."", ""count"": 1}, {""value"": ""Section 3"", ""count"": 1}, {""value"": ""Section 2"", ""count"": 1}, {""value"": ""Section 1"", ""count"": 1}]"
|
||||
29,CTNARE,POINT,78,INFORM,STRING,13,12,"[20000, 50000]","[{""value"": ""Works in progress|Source date: 2005"", ""count"": 2}, {""value"": ""FOUL"", ""count"": 1}, {""value"": ""Marked by buoys"", ""count"": 1}, {""value"": ""(liable to shoal)"", ""count"": 1}, {""value"": ""WORKS IN PROGRESS (1998)"", ""count"": 1}, {""value"": ""Works in progress|Source date: 2000"", ""count"": 1}, {""value"": ""Works in progress|Source date: 2002"", ""count"": 1}, {""value"": ""Ebb stream|Orientation: 130 Deg|Current velocity: 0.2kn"", ""count"": 1}, {""value"": ""Flood stream|Orientation: 290 Deg|Current velocity: 0.3kn"", ""count"": 1}, {""value"": ""Slipway"", ""count"": 1}, {""value"": ""Ebb stream|Orientation: 133 Deg|Current velocity: 0.3kn"", ""count"": 1}, {""value"": ""Flood stream|Orientation: 299 Deg|Current velocity: 0.3kn"", ""count"": 1}]"
|
||||
38,CTRPNT,POINT,9,CATCTR,BYTE,6,2,"[20000, 50000]","[{""value"": ""1"", ""count"": 4}, {""value"": ""4"", ""count"": 2}]"
|
||||
38,CTRPNT,POINT,80,OBJNAM,STRING,1,1,[20000],"[{""value"": ""Monomiiwa"", ""count"": 1}]"
|
||||
44,DEPARE,AREA,66,DRVAL1,REAL,414,7,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""2"", ""count"": 188}, {""value"": ""0"", ""count"": 117}, {""value"": ""5"", ""count"": 81}, {""value"": ""10"", ""count"": 18}, {""value"": ""20"", ""count"": 5}, {""value"": ""200"", ""count"": 4}, {""value"": ""30"", ""count"": 1}]"
|
||||
44,DEPARE,AREA,67,DRVAL2,REAL,411,8,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""5"", ""count"": 203}, {""value"": ""2"", ""count"": 96}, {""value"": ""10"", ""count"": 84}, {""value"": ""20"", ""count"": 18}, {""value"": ""200"", ""count"": 4}, {""value"": ""50"", ""count"": 4}, {""value"": ""30"", ""count"": 1}, {""value"": ""2000"", ""count"": 1}]"
|
||||
45,DEPCNT,LINE,91,QUAPOS,BYTE,1,1,[50000],"[{""value"": ""4"", ""count"": 1}]"
|
||||
45,DEPCNT,LINE,113,VALDCO,REAL,451,6,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""5"", ""count"": 230}, {""value"": ""2"", ""count"": 102}, {""value"": ""10"", ""count"": 100}, {""value"": ""20"", ""count"": 14}, {""value"": ""200"", ""count"": 4}, {""value"": ""30"", ""count"": 1}]"
|
||||
50,DRGARE,AREA,66,DRVAL1,REAL,13,6,[50000],"[{""value"": ""7.5"", ""count"": 5}, {""value"": ""13"", ""count"": 4}, {""value"": ""14"", ""count"": 1}, {""value"": ""12"", ""count"": 1}, {""value"": ""9.59999942779541"", ""count"": 1}, {""value"": ""10"", ""count"": 1}]"
|
||||
50,DRGARE,AREA,78,INFORM,STRING,11,7,[50000],"[{""value"": ""(1981-2000)"", ""count"": 4}, {""value"": ""Source date: 1990"", ""count"": 2}, {""value"": ""(1995-2000)"", ""count"": 1}, {""value"": ""Source date: 1991"", ""count"": 1}, {""value"": ""1980"", ""count"": 1}, {""value"": ""1994"", ""count"": 1}, {""value"": ""Source date: 1977"", ""count"": 1}]"
|
||||
56,EXEZNE,AREA,78,INFORM,STRING,2,1,"[200000, 1000000]","[{""value"": ""Jeppesen adopts \""International Boundaries and National Limits\"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation."", ""count"": 2}]"
|
||||
56,EXEZNE,AREA,81,NATION,STRING,2,1,"[200000, 1000000]","[{""value"": ""JP"", ""count"": 2}]"
|
||||
56,EXEZNE,AREA,108,SORIND,STRING,1,1,[200000],"[{""value"": ""CM,PAD,graph,B3900420"", ""count"": 1}]"
|
||||
57,FAIRWY,AREA,80,OBJNAM,STRING,4,4,"[20000, 50000]","[{""value"": ""East Fairway"", ""count"": 1}, {""value"": ""West Fairway"", ""count"": 1}, {""value"": ""East Passage"", ""count"": 1}, {""value"": ""West Passage"", ""count"": 1}]"
|
||||
60,FSHHAV,POINT,78,INFORM,STRING,18,1,"[20000, 50000, 200000]","[{""value"": ""Always under water/submerged"", ""count"": 18}]"
|
||||
72,HRBARE,AREA,80,OBJNAM,STRING,3,3,[50000],"[{""value"": ""No 3 Area"", ""count"": 1}, {""value"": ""No 2 Area"", ""count"": 1}, {""value"": ""No1 Area"", ""count"": 1}]"
|
||||
73,HRBFAC,AREA,20,CATHAF,LIST,1,1,[20000],"[{""value"": ""[9]"", ""count"": 1}]"
|
||||
73,HRBFAC,POINT,80,OBJNAM,STRING,1,1,[20000],"[{""value"": ""Tohoku Grain Terminal"", ""count"": 1}]"
|
||||
78,ITDARE,AREA,82,NATSUR,LIST,38,4,"[20000, 50000]","[{""value"": ""[9]"", ""count"": 25}, {""value"": ""[56]"", ""count"": 5}, {""value"": ""[1]"", ""count"": 4}, {""value"": ""[4]"", ""count"": 4}]"
|
||||
79,LAKARE,AREA,80,OBJNAM,STRING,1,1,[200000],"[{""value"": ""Ane Lake"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,25,CATLIT,BYTE,9,4,"[20000, 50000, 200000, 1000000]","[{""value"": ""5"", ""count"": 5}, {""value"": ""8"", ""count"": 2}, {""value"": ""6"", ""count"": 1}, {""value"": ""11"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,59,COLOUR,LIST,93,6,"[20000, 50000, 200000, 1000000]","[{""value"": ""[6]"", ""count"": 28}, {""value"": ""[4]"", ""count"": 23}, {""value"": ""[3]"", ""count"": 23}, {""value"": ""[1]"", ""count"": 15}, {""value"": ""[1,1,4]"", ""count"": 2}, {""value"": ""[1,4]"", ""count"": 2}]"
|
||||
86,LIGHTS,POINT,73,HEIGHT,REAL,50,16,"[20000, 50000, 200000, 1000000]","[{""value"": ""12"", ""count"": 10}, {""value"": ""14"", ""count"": 6}, {""value"": ""57"", ""count"": 4}, {""value"": ""11"", ""count"": 4}, {""value"": ""5"", ""count"": 4}, {""value"": ""9"", ""count"": 3}, {""value"": ""17"", ""count"": 3}, {""value"": ""22"", ""count"": 3}, {""value"": ""69"", ""count"": 2}, {""value"": ""79"", ""count"": 2}, {""value"": ""7"", ""count"": 2}, {""value"": ""16"", ""count"": 2}, {""value"": ""4"", ""count"": 2}, {""value"": ""8"", ""count"": 1}, {""value"": ""31"", ""count"": 1}, {""value"": ""10"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,78,INFORM,STRING,10,5,"[20000, 50000, 200000, 1000000]","[{""value"": ""2 fl in 3s"", ""count"": 4}, {""value"": ""The white light can be apparent on 8M"", ""count"": 2}, {""value"": ""Illuminates Hinode Iwa 430m NNW"", ""count"": 2}, {""value"": ""FW spotlight illuminates Hinode Iwa."", ""count"": 1}, {""value"": ""More than one"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,58,LITCHR,BYTE,58,4,"[20000, 50000, 200000, 1000000]","[{""value"": ""2"", ""count"": 35}, {""value"": ""7"", ""count"": 13}, {""value"": ""1"", ""count"": 6}, {""value"": ""19"", ""count"": 4}]"
|
||||
86,LIGHTS,POINT,80,OBJNAM,STRING,7,6,[20000],"[{""value"": ""C1"", ""count"": 2}, {""value"": ""C2"", ""count"": 1}, {""value"": ""R1"", ""count"": 1}, {""value"": ""R2"", ""count"": 1}, {""value"": ""L1"", ""count"": 1}, {""value"": ""L2"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,93,QUAVEM,BYTE,12,1,[50000],"[{""value"": ""1"", ""count"": 12}]"
|
||||
86,LIGHTS,POINT,100,SECTR1,WORD10,6,2,[20000],"[{""value"": ""228"", ""count"": 3}, {""value"": ""48"", ""count"": 3}]"
|
||||
86,LIGHTS,POINT,101,SECTR2,WORD10,6,2,[20000],"[{""value"": ""48"", ""count"": 3}, {""value"": ""228"", ""count"": 3}]"
|
||||
86,LIGHTS,POINT,72,SIGGRP,STRING,52,2,"[20000, 50000, 200000, 1000000]","[{""value"": ""(1)"", ""count"": 38}, {""value"": ""(2)"", ""count"": 14}]"
|
||||
86,LIGHTS,POINT,86,SIGPER,WORD10,46,7,"[20000, 50000, 200000, 1000000]","[{""value"": ""3"", ""count"": 10}, {""value"": ""6"", ""count"": 10}, {""value"": ""4"", ""count"": 7}, {""value"": ""9"", ""count"": 6}, {""value"": ""5"", ""count"": 5}, {""value"": ""10"", ""count"": 4}, {""value"": ""8"", ""count"": 4}]"
|
||||
86,LIGHTS,POINT,108,SORIND,STRING,14,14,"[20000, 50000]","[{""value"": ""GB,MDHS,graph,LL F-6624.7.C"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7.D"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7.E"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7.F"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7.A"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.7.B"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6623.2.A"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.62"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.621"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.64"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.641"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.63"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.631"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.5"", ""count"": 1}]"
|
||||
86,LIGHTS,POINT,109,STATUS,LIST,26,1,"[20000, 50000]","[{""value"": ""[8]"", ""count"": 26}]"
|
||||
86,LIGHTS,POINT,115,VALNMR,WORD10,45,7,"[20000, 50000, 200000, 1000000]","[{""value"": ""4"", ""count"": 16}, {""value"": ""6"", ""count"": 7}, {""value"": ""3"", ""count"": 7}, {""value"": ""5"", ""count"": 7}, {""value"": ""19"", ""count"": 4}, {""value"": ""7"", ""count"": 3}, {""value"": ""2"", ""count"": 1}]"
|
||||
81,LNDARE,AREA,80,OBJNAM,STRING,3,3,"[20000, 1000000]","[{""value"": ""Honshu"", ""count"": 1}, {""value"": ""Todo Shima"", ""count"": 1}, {""value"": ""Hinode Iwa"", ""count"": 1}]"
|
||||
95,MONUMT,POINT,65,CONVIS,BYTE,2,1,[20000],"[{""value"": ""2"", ""count"": 2}]"
|
||||
96,MORFAC,AREA,29,CATMOR,BYTE,2,1,[20000],"[{""value"": ""1"", ""count"": 2}]"
|
||||
96,MORFAC,AREA,78,INFORM,STRING,2,1,[20000],"[{""value"": ""Always dry"", ""count"": 2}]"
|
||||
96,MORFAC,POINT,29,CATMOR,BYTE,7,1,[50000],"[{""value"": ""1"", ""count"": 7}]"
|
||||
96,MORFAC,POINT,78,INFORM,STRING,1,1,[50000],"[{""value"": ""Always dry"", ""count"": 1}]"
|
||||
210,M_PROD,AREA,150,CPDATE,STRING,7,5,"[20000, 50000, 100000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""20080102"", ""count"": 2}, {""value"": ""20060322"", ""count"": 2}, {""value"": ""20141006"", ""count"": 1}, {""value"": ""20140602"", ""count"": 1}, {""value"": ""20140505"", ""count"": 1}]"
|
||||
97,NATARE,AREA,78,INFORM,STRING,3,1,"[20000, 200000, 1000000]","[{""value"": ""Jeppesen adopts \""International Boundaries and National Limits\"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation."", ""count"": 3}]"
|
||||
97,NATARE,AREA,81,NATION,STRING,3,1,"[20000, 200000, 1000000]","[{""value"": ""JP"", ""count"": 3}]"
|
||||
99,OBSTRN,AREA,78,INFORM,STRING,3,2,[50000],"[{""value"": ""Crib|Caissons"", ""count"": 2}, {""value"": ""Crib|Caisson Area"", ""count"": 1}]"
|
||||
99,OBSTRN,AREA,116,VALSOU,WORD10,3,3,[50000],"[{""value"": ""4.9"", ""count"": 1}, {""value"": ""1.2"", ""count"": 1}, {""value"": ""1.5"", ""count"": 1}]"
|
||||
99,OBSTRN,AREA,124,WATLEV,BYTE,70,1,"[20000, 50000, 200000, 1000000]","[{""value"": ""3"", ""count"": 70}]"
|
||||
99,OBSTRN,POINT,69,EXPSOU,BYTE,1,1,[20000],"[{""value"": ""2"", ""count"": 1}]"
|
||||
99,OBSTRN,POINT,78,INFORM,STRING,2,1,"[20000, 200000]","[{""value"": ""Wave Meter"", ""count"": 2}]"
|
||||
99,OBSTRN,POINT,116,VALSOU,WORD10,6,4,"[20000, 50000, 200000]","[{""value"": ""25"", ""count"": 2}, {""value"": ""1.5"", ""count"": 2}, {""value"": ""1.2"", ""count"": 1}, {""value"": ""4.9"", ""count"": 1}]"
|
||||
99,OBSTRN,POINT,124,WATLEV,BYTE,6,1,"[20000, 50000, 200000]","[{""value"": ""3"", ""count"": 6}]"
|
||||
103,PILPNT,POINT,78,INFORM,STRING,9,2,"[20000, 50000]","[{""value"": ""Always dry"", ""count"": 8}, {""value"": ""Private"", ""count"": 1}]"
|
||||
107,PIPSOL,LINE,35,CATPIP,BYTE,2,1,"[20000, 50000]","[{""value"": ""1"", ""count"": 2}]"
|
||||
107,PIPSOL,LINE,78,INFORM,STRING,1,1,[50000],"[{""value"": ""PIPELINES|Mariners are advised not to anchor or trawl in the vicinity of pipelines. Gas from a damaged oil or gas pipeline could cause an explosion, loss of a vessels buoyancy or other serious hazard. Pipelines are not always buried and may effectively reduce the charted depth by up to 2 metres. They may also span seabed undulations and cause fishing gear to become irrecoverably snagged, putting a vessel in severe danger. See Annual Notice to Mariners No 24 and The Mariners Handbook."", ""count"": 1}]"
|
||||
107,PIPSOL,LINE,89,PRODCT,LIST,2,2,"[20000, 50000]","[{""value"": ""[1]"", ""count"": 1}, {""value"": ""[2]"", ""count"": 1}]"
|
||||
111,PRDINS,AREA,78,INFORM,STRING,15,4,[20000],"[{""value"": ""Tank farm"", ""count"": 9}, {""value"": ""Production area"", ""count"": 3}, {""value"": ""Production area|Silo farm"", ""count"": 2}, {""value"": ""Tank farm|Oil Tank Yard"", ""count"": 1}]"
|
||||
111,PRDINS,AREA,80,OBJNAM,STRING,3,3,[20000],"[{""value"": ""Mitsubishi Paper Mills Limited"", ""count"": 1}, {""value"": ""Tokyotekko Co., Ltd."", ""count"": 1}, {""value"": ""Yoshida Sangyo Corporation"", ""count"": 1}]"
|
||||
111,PRDINS,AREA,89,PRODCT,LIST,1,1,[20000],"[{""value"": ""[1]"", ""count"": 1}]"
|
||||
111,PRDINS,POINT,78,INFORM,STRING,12,1,[20000],"[{""value"": ""Production area"", ""count"": 12}]"
|
||||
111,PRDINS,POINT,80,OBJNAM,STRING,12,11,[20000],"[{""value"": ""Pacific Metals CO., LTD."", ""count"": 2}, {""value"": ""Tozai Oilterminal Co.,Ltd."", ""count"": 1}, {""value"": ""Tohoku Satetsu"", ""count"": 1}, {""value"": ""MRC Unitec Co., Ltd."", ""count"": 1}, {""value"": ""Toshin Steel Industry"", ""count"": 1}, {""value"": ""Hachinohe Gas Co., Ltd."", ""count"": 1}, {""value"": ""Koshuha Foundry Co., Ltd."", ""count"": 1}, {""value"": ""Sumimetal Mining Co., Ltd."", ""count"": 1}, {""value"": ""Hachinohe Smelting Co., Ltd."", ""count"": 1}, {""value"": ""Kitanihon Shipbuilding Co., Ltd."", ""count"": 1}, {""value"": ""JX Nippon Oil & Energy Corporation"", ""count"": 1}]"
|
||||
111,PRDINS,POINT,89,PRODCT,LIST,2,2,[20000],"[{""value"": ""[1]"", ""count"": 1}, {""value"": ""[2]"", ""count"": 1}]"
|
||||
111,PRDINS,POINT,91,QUAPOS,BYTE,11,1,[20000],"[{""value"": ""4"", ""count"": 11}]"
|
||||
112,PYLONS,POINT,78,INFORM,STRING,2,1,[50000],"[{""value"": ""Power transmission pylon/pole"", ""count"": 2}]"
|
||||
129,RIVERS,AREA,80,OBJNAM,STRING,3,3,"[20000, 200000]","[{""value"": ""Mabechi River"", ""count"": 1}, {""value"": ""Oirase River"", ""count"": 1}, {""value"": ""Gonohe Kawa"", ""count"": 1}]"
|
||||
118,RTPBCN,POINT,38,CATRTB,BYTE,1,1,[50000],"[{""value"": ""1"", ""count"": 1}]"
|
||||
118,RTPBCN,POINT,108,SORIND,STRING,1,1,[50000],"[{""value"": ""GB,MDHS,graph,LL F-6620.A"", ""count"": 1}]"
|
||||
138,SBDARE,AREA,82,NATSUR,LIST,9,3,"[20000, 50000, 200000]","[{""value"": ""[9]"", ""count"": 5}, {""value"": ""[4]"", ""count"": 3}, {""value"": ""[5]"", ""count"": 1}]"
|
||||
138,SBDARE,POINT,90,NATQUA,LIST,145,2,"[20000, 50000, 200000]","[{""value"": ""[1]"", ""count"": 144}, {""value"": ""[3]"", ""count"": 1}]"
|
||||
138,SBDARE,POINT,82,NATSUR,LIST,287,11,"[20000, 50000, 200000]","[{""value"": ""[4]"", ""count"": 176}, {""value"": ""[1]"", ""count"": 54}, {""value"": ""[9]"", ""count"": 15}, {""value"": ""[5]"", ""count"": 14}, {""value"": ""[4,17]"", ""count"": 9}, {""value"": ""[1,4]"", ""count"": 8}, {""value"": ""[4,1]"", ""count"": 7}, {""value"": ""[6,17,61]"", ""count"": 1}, {""value"": ""[1,4,17]"", ""count"": 1}, {""value"": ""[1,6]"", ""count"": 1}, {""value"": ""[1,4,5]"", ""count"": 1}]"
|
||||
136,SEAARE,AREA,80,OBJNAM,STRING,2,2,[200000],"[{""value"": ""North Pacific Ocean"", ""count"": 1}, {""value"": ""Hamanaka"", ""count"": 1}]"
|
||||
142,SILBUI,POINT,78,INFORM,STRING,3,3,[50000],"[{""value"": ""More than one"", ""count"": 1}, {""value"": ""more than one"", ""count"": 1}, {""value"": ""SILOS"", ""count"": 1}]"
|
||||
142,SILBUI,POINT,91,QUAPOS,BYTE,2,1,[50000],"[{""value"": ""4"", ""count"": 2}]"
|
||||
140,SISTAT,POINT,47,CATSIT,LIST,2,1,[20000],"[{""value"": ""[2]"", ""count"": 2}]"
|
||||
141,SISTAW,POINT,48,CATSIW,LIST,1,1,[20000],"[{""value"": ""[10]"", ""count"": 1}]"
|
||||
139,SLCONS,AREA,46,CATSLC,BYTE,48,3,"[20000, 50000]","[{""value"": ""1"", ""count"": 34}, {""value"": ""6"", ""count"": 10}, {""value"": ""4"", ""count"": 4}]"
|
||||
139,SLCONS,AREA,63,CONDTN,BYTE,9,2,"[20000, 50000]","[{""value"": ""2"", ""count"": 8}, {""value"": ""3"", ""count"": 1}]"
|
||||
139,SLCONS,AREA,78,INFORM,STRING,1,1,[50000],"[{""value"": ""Source date: 2005"", ""count"": 1}]"
|
||||
139,SLCONS,AREA,83,NATCON,LIST,78,1,"[20000, 50000]","[{""value"": ""[3]"", ""count"": 78}]"
|
||||
139,SLCONS,AREA,80,OBJNAM,STRING,29,25,"[20000, 50000]","[{""value"": ""Hattaro North Breakwater"", ""count"": 3}, {""value"": ""Middle Breakwater"", ""count"": 2}, {""value"": ""Hattaro East Breakwater"", ""count"": 2}, {""value"": ""West Breakwater"", ""count"": 1}, {""value"": ""Grain Terminal"", ""count"": 1}, {""value"": ""No 4 Wharf"", ""count"": 1}, {""value"": ""No 3 Wharf"", ""count"": 1}, {""value"": ""No 1 Wharf"", ""count"": 1}, {""value"": ""No 2 Wharf"", ""count"": 1}, {""value"": ""Kawaragi No 2 Wharf"", ""count"": 1}, {""value"": ""No 2 Middle Breakwater"", ""count"": 1}, {""value"": ""Shirogane West Breakwater"", ""count"": 1}, {""value"": ""Japan Maritime Self Defense Force Quay"", ""count"": 1}, {""value"": ""Ichikawa East Breakwater"", ""count"": 1}, {""value"": ""Shirogane North Breakwater"", ""count"": 1}, {""value"": ""Grain Terminal Pier"", ""count"": 1}, {""value"": ""Ichikawa North Breakwater"", ""count"": 1}, {""value"": ""Ferry Wharf"", ""count"": 1}, {""value"": ""Mitsubishi Paper Mills Limited Quay"", ""count"": 1}, {""value"": ""Kabu Island Breakwater"", ""count"": 1}, {""value"": ""Shirogane Wharf"", ""count"": 1}, {""value"": ""Kawaragi South Breakwater"", ""count"": 1}, {""value"": ""Kawaragi West Breakwater"", ""count"": 1}, {""value"": ""Hachinohe Smelting Quay"", ""count"": 1}, {""value"": ""Kawaragi Breakwater"", ""count"": 1}]"
|
||||
139,SLCONS,AREA,124,WATLEV,BYTE,110,3,"[20000, 50000]","[{""value"": ""2"", ""count"": 100}, {""value"": ""4"", ""count"": 9}, {""value"": ""3"", ""count"": 1}]"
|
||||
139,SLCONS,LINE,46,CATSLC,BYTE,3,1,[50000],"[{""value"": ""6"", ""count"": 3}]"
|
||||
139,SLCONS,LINE,63,CONDTN,BYTE,5,1,"[20000, 200000]","[{""value"": ""2"", ""count"": 5}]"
|
||||
139,SLCONS,LINE,78,INFORM,STRING,2,1,[50000],"[{""value"": ""Land Area"", ""count"": 2}]"
|
||||
139,SLCONS,LINE,80,OBJNAM,STRING,3,3,[50000],"[{""value"": ""No 3"", ""count"": 1}, {""value"": ""Kawaragi No 1"", ""count"": 1}, {""value"": ""Kawaragi No 2"", ""count"": 1}]"
|
||||
139,SLCONS,LINE,124,WATLEV,BYTE,204,1,"[20000, 50000, 200000, 1000000]","[{""value"": ""2"", ""count"": 204}]"
|
||||
143,SLIPWY,AREA,80,OBJNAM,STRING,1,1,[20000],"[{""value"": ""Ichikawa Slipway"", ""count"": 1}]"
|
||||
143,SLIPWY,AREA,124,WATLEV,BYTE,3,2,"[20000, 50000]","[{""value"": ""4"", ""count"": 2}, {""value"": ""2"", ""count"": 1}]"
|
||||
155,TESARE,AREA,78,INFORM,STRING,3,1,"[20000, 200000, 1000000]","[{""value"": ""Jeppesen adopts \""International Boundaries and National Limits\"" as defined by international standards from sources, such as government provided official charts and other official documents. Due to the resolution of information provided, as well as the age of underlying surveys or publication dates, the reference datum used or its conversion, inaccuracies in the position or the form of these boundaries and limits may exist and as such may not be relied on as a primary source of information. Therefore Jeppesen cannot accept any liability regarding the use of this data for navigation."", ""count"": 3}]"
|
||||
155,TESARE,AREA,81,NATION,STRING,3,1,"[20000, 200000, 1000000]","[{""value"": ""JP"", ""count"": 3}]"
|
||||
158,TOWERS,POINT,52,CATTOW,BYTE,51,3,"[20000, 50000, 200000, 1000000]","[{""value"": ""1"", ""count"": 22}, {""value"": ""3"", ""count"": 19}, {""value"": ""2"", ""count"": 10}]"
|
||||
158,TOWERS,POINT,59,COLOUR,LIST,22,1,"[20000, 50000, 200000, 1000000]","[{""value"": ""[1]"", ""count"": 22}]"
|
||||
158,TOWERS,POINT,65,CONVIS,BYTE,27,2,"[20000, 50000, 200000, 1000000]","[{""value"": ""1"", ""count"": 23}, {""value"": ""2"", ""count"": 4}]"
|
||||
158,TOWERS,POINT,73,HEIGHT,REAL,2,2,[20000],"[{""value"": ""51"", ""count"": 1}, {""value"": ""53"", ""count"": 1}]"
|
||||
158,TOWERS,POINT,78,INFORM,STRING,7,3,"[20000, 50000]","[{""value"": ""Radio"", ""count"": 4}, {""value"": ""Ice Supply Tower"", ""count"": 2}, {""value"": ""Framework tower"", ""count"": 1}]"
|
||||
158,TOWERS,POINT,83,NATCON,LIST,12,1,"[20000, 50000, 200000, 1000000]","[{""value"": ""[2]"", ""count"": 12}]"
|
||||
158,TOWERS,POINT,91,QUAPOS,BYTE,6,1,"[20000, 50000]","[{""value"": ""4"", ""count"": 6}]"
|
||||
158,TOWERS,POINT,108,SORIND,STRING,22,17,"[20000, 50000, 200000, 1000000]","[{""value"": ""GB,UKHO,graph,LL M-6620"", ""count"": 3}, {""value"": ""GB,UKHO,graph,LL M-6621"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6625.5"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6624.86"", ""count"": 2}, {""value"": ""GB,UKHO,graph,LL M-6619.5"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6618.4"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6625.7"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.85"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6623.2"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6621"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6622"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6625.5"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6620"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.4"", ""count"": 1}, {""value"": ""GB,MDHS,graph,LL F-6624.85"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6622"", ""count"": 1}, {""value"": ""GB,UKHO,graph,LL M-6624.4"", ""count"": 1}]"
|
||||
158,TOWERS,POINT,122,VERLEN,REAL,22,7,"[20000, 50000, 200000, 1000000]","[{""value"": ""9"", ""count"": 7}, {""value"": ""23"", ""count"": 4}, {""value"": ""10"", ""count"": 4}, {""value"": ""5"", ""count"": 3}, {""value"": ""16"", ""count"": 2}, {""value"": ""6"", ""count"": 1}, {""value"": ""8"", ""count"": 1}]"
|
||||
168,UWTROC,POINT,69,EXPSOU,BYTE,3,1,[50000],"[{""value"": ""2"", ""count"": 3}]"
|
||||
168,UWTROC,POINT,116,VALSOU,WORD10,104,69,"[20000, 50000, 200000]","[{""value"": ""15"", ""count"": 5}, {""value"": ""9.9"", ""count"": 4}, {""value"": ""2.6"", ""count"": 4}, {""value"": ""4.4"", ""count"": 4}, {""value"": ""2"", ""count"": 4}, {""value"": ""17"", ""count"": 3}, {""value"": ""18"", ""count"": 3}, {""value"": ""19"", ""count"": 3}, {""value"": ""21"", ""count"": 3}, {""value"": ""0.3"", ""count"": 2}, {""value"": ""1.7"", ""count"": 2}, {""value"": ""2.2"", ""count"": 2}, {""value"": ""4.1"", ""count"": 2}, {""value"": ""0.7"", ""count"": 2}, {""value"": ""2.3"", ""count"": 2}, {""value"": ""7.7"", ""count"": 2}, {""value"": ""7.8"", ""count"": 2}, {""value"": ""8.8"", ""count"": 2}, {""value"": ""16"", ""count"": 2}, {""value"": ""20"", ""count"": 2}, {""value"": ""0.5"", ""count"": 1}, {""value"": ""0.8"", ""count"": 1}, {""value"": ""1.4"", ""count"": 1}, {""value"": ""1.6"", ""count"": 1}, {""value"": ""2.5"", ""count"": 1}, {""value"": ""2.7"", ""count"": 1}, {""value"": ""3.1"", ""count"": 1}, {""value"": ""4"", ""count"": 1}, {""value"": ""4.7"", ""count"": 1}, {""value"": ""4.8"", ""count"": 1}, {""value"": ""5.7"", ""count"": 1}, {""value"": ""5.9"", ""count"": 1}, {""value"": ""6.2"", ""count"": 1}, {""value"": ""6.3"", ""count"": 1}, {""value"": ""6.5"", ""count"": 1}, {""value"": ""6.8"", ""count"": 1}, {""value"": ""6.9"", ""count"": 1}, {""value"": ""7"", ""count"": 1}, {""value"": ""7.3"", ""count"": 1}, {""value"": ""7.4"", ""count"": 1}]"
|
||||
168,UWTROC,POINT,124,WATLEV,BYTE,176,3,"[20000, 50000, 200000, 1000000]","[{""value"": ""3"", ""count"": 110}, {""value"": ""2"", ""count"": 56}, {""value"": ""4"", ""count"": 10}]"
|
||||
176,WRECKS,AREA,57,CATWRK,BYTE,1,1,[20000],"[{""value"": ""2"", ""count"": 1}]"
|
||||
176,WRECKS,AREA,116,VALSOU,WORD10,1,1,[20000],"[{""value"": ""7"", ""count"": 1}]"
|
||||
176,WRECKS,AREA,124,WATLEV,BYTE,1,1,[20000],"[{""value"": ""3"", ""count"": 1}]"
|
||||
176,WRECKS,POINT,57,CATWRK,BYTE,479,2,"[20000, 50000, 200000]","[{""value"": ""3"", ""count"": 477}, {""value"": ""2"", ""count"": 2}]"
|
||||
176,WRECKS,POINT,116,VALSOU,WORD10,188,103,"[20000, 50000, 200000]","[{""value"": ""11.2"", ""count"": 7}, {""value"": ""12.2"", ""count"": 5}, {""value"": ""12.6"", ""count"": 5}, {""value"": ""9.6"", ""count"": 4}, {""value"": ""10.2"", ""count"": 4}, {""value"": ""11.1"", ""count"": 4}, {""value"": ""12"", ""count"": 4}, {""value"": ""12.5"", ""count"": 4}, {""value"": ""6.3"", ""count"": 3}, {""value"": ""7"", ""count"": 3}, {""value"": ""7.3"", ""count"": 3}, {""value"": ""8.3"", ""count"": 3}, {""value"": ""9"", ""count"": 3}, {""value"": ""9.5"", ""count"": 3}, {""value"": ""11.4"", ""count"": 3}, {""value"": ""11.9"", ""count"": 3}, {""value"": ""12.3"", ""count"": 3}, {""value"": ""12.7"", ""count"": 3}, {""value"": ""13"", ""count"": 3}, {""value"": ""13.1"", ""count"": 3}, {""value"": ""13.4"", ""count"": 3}, {""value"": ""23.5"", ""count"": 2}, {""value"": ""21.5"", ""count"": 2}, {""value"": ""3"", ""count"": 2}, {""value"": ""3.7"", ""count"": 2}, {""value"": ""4.3"", ""count"": 2}, {""value"": ""5"", ""count"": 2}, {""value"": ""5.1"", ""count"": 2}, {""value"": ""5.7"", ""count"": 2}, {""value"": ""6"", ""count"": 2}, {""value"": ""6.2"", ""count"": 2}, {""value"": ""6.9"", ""count"": 2}, {""value"": ""7.8"", ""count"": 2}, {""value"": ""8.1"", ""count"": 2}, {""value"": ""8.5"", ""count"": 2}, {""value"": ""8.7"", ""count"": 2}, {""value"": ""9.1"", ""count"": 2}, {""value"": ""9.4"", ""count"": 2}, {""value"": ""9.9"", ""count"": 2}, {""value"": ""10.3"", ""count"": 2}]"
|
||||
176,WRECKS,POINT,124,WATLEV,BYTE,480,1,"[20000, 50000, 200000]","[{""value"": ""3"", ""count"": 480}]"
|
||||
201,_extgn,POINT,60,COLMAR,BYTE,1,1,[50000],"[{""value"": ""11"", ""count"": 1}]"
|
||||
201,_extgn,POINT,78,INFORM,STRING,1,1,[50000],"[{""value"": ""Height: 123m|Chimney|Visually conspicuous"", ""count"": 1}]"
|
||||
217,_m_sor,META,151,CSCALE,LONG,6,6,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""3000000"", ""count"": 1}, {""value"": ""1200000"", ""count"": 1}, {""value"": ""250000"", ""count"": 1}, {""value"": ""20000"", ""count"": 1}, {""value"": ""12000"", ""count"": 1}, {""value"": ""20000000"", ""count"": 1}]"
|
||||
217,_m_sor,META,75,HORDAT,BYTE,6,1,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""2"", ""count"": 6}]"
|
||||
217,_m_sor,META,84,MARSYS,BYTE,6,2,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""2"", ""count"": 4}, {""value"": ""1"", ""count"": 2}]"
|
||||
217,_m_sor,META,156,NMDATE,STRING,6,5,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""20021101"", ""count"": 2}, {""value"": ""20140926"", ""count"": 1}, {""value"": ""20140523"", ""count"": 1}, {""value"": ""20060323"", ""count"": 1}, {""value"": ""20140328"", ""count"": 1}]"
|
||||
217,_m_sor,META,96,RECDAT,STRING,6,5,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""20080102"", ""count"": 2}, {""value"": ""20141006"", ""count"": 1}, {""value"": ""20140602"", ""count"": 1}, {""value"": ""20060322"", ""count"": 1}, {""value"": ""20140505"", ""count"": 1}]"
|
||||
217,_m_sor,META,108,SORIND,STRING,6,6,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""IT,CMAP,graph,W-135"", ""count"": 1}, {""value"": ""JP,JHOD,graph,W1154"", ""count"": 1}, {""value"": ""JP,JHOD,graph,W53"", ""count"": 1}, {""value"": ""GB,MDHS,graph,2959B"", ""count"": 1}, {""value"": ""JP,JHOD,graph,W65"", ""count"": 1}, {""value"": ""IT,CMAP,graph,W-14"", ""count"": 1}]"
|
||||
217,_m_sor,META,121,VERDAT,BYTE,4,2,"[20000, 50000, 200000, 1000000]","[{""value"": ""11"", ""count"": 3}, {""value"": ""10"", ""count"": 1}]"
|
||||
217,_m_sor,META,173,_chcod,STRING,6,6,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""90-01520"", ""count"": 1}, {""value"": ""31-0F270"", ""count"": 1}, {""value"": ""31-0F710"", ""count"": 1}, {""value"": ""31-0684B"", ""count"": 1}, {""value"": ""31-0F700"", ""count"": 1}, {""value"": ""90-00310"", ""count"": 1}]"
|
||||
217,_m_sor,META,174,_dgdat,STRING,6,5,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""20000101"", ""count"": 2}, {""value"": ""20081003"", ""count"": 1}, {""value"": ""20070914"", ""count"": 1}, {""value"": ""20030320"", ""count"": 1}, {""value"": ""20120313"", ""count"": 1}]"
|
||||
217,_m_sor,META,180,_hvdat,BYTE,4,2,"[20000, 50000, 200000, 1000000]","[{""value"": ""3"", ""count"": 3}, {""value"": ""21"", ""count"": 1}]"
|
||||
217,_m_sor,META,175,_quart,BYTE,6,1,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""4"", ""count"": 6}]"
|
||||
217,_m_sor,META,177,_sorhd,BYTE,6,1,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""2"", ""count"": 6}]"
|
||||
217,_m_sor,META,178,_wgsox,REAL,6,1,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""0"", ""count"": 6}]"
|
||||
217,_m_sor,META,179,_wgsoy,REAL,6,1,"[20000, 50000, 200000, 1000000, 3000000, 20000000]","[{""value"": ""0"", ""count"": 6}]"
|
||||
198,_texto,POINT,139,_texta,COMPLEX,113,104,"[20000, 50000, 200000, 1000000, 3000000]","[{""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Same Kado\""}"", ""count"": 3}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hachinohe\""}"", ""count"": 3}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hachinohe Fishing Harbour\""}"", ""count"": 3}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Misawa\""}"", ""count"": 2}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hamanaka\""}"", ""count"": 2}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hashimukai\""}"", ""count"": 2}, {""value"": ""{\""prefix\"":[128,12,0],\""text\"":\""HACHINOHE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""AOMORI\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hachinohe Ko\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Kabayama Reef\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Hitokawame\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Mikawame\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Minato\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Oirase Town\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Okuki\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Same\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""Shirahama\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""CONVEYOR\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""H A C H I T A R O\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""HACHINOHE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[16,12,0],\""text\"":\""HACHINOHE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""HINODE IWA(ILLUM)\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""HOUSE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""K A W A R A G I\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""KABAYAMA NE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""KABU SH.\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""KO NE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""MABECHI KAWA\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""MITSUBUSHI JETTY\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""MONOMIWA\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""N. BREAKWATER\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""NIIDA KAWA\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""No 1 WHARF\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""No 2 WHARF\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""No 4 WHARF\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""O SAKI\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""OGOMUNE\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""SAME KADO\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""SHIROGANE WHARF\""}"", ""count"": 1}, {""value"": ""{\""prefix\"":[0,12,0],\""text\"":\""SILOS\""}"", ""count"": 1}]"
|
||||
|
@@ -0,0 +1,23 @@
|
||||
CM95 选定 AOI → NavSea PBF 映射输入审计 v2
|
||||
====================================================================================
|
||||
Dataset ID : 1
|
||||
Tile : z10/914/385
|
||||
BBox WGS84 : 141.3281250000,40.4469470596 → 141.6796875000,40.7139558263
|
||||
|
||||
AOI cells : 7
|
||||
AOI spatial features : 3605
|
||||
Object class/geom groups : 80
|
||||
Attribute groups : 177
|
||||
Feature samples : 600
|
||||
Related samples : 0
|
||||
|
||||
Geometry counts:
|
||||
POINT 1632
|
||||
LINE 970
|
||||
AREA 993
|
||||
SOUNDING 4
|
||||
META 6
|
||||
|
||||
NEXT:
|
||||
上传本脚本生成的 ZIP。
|
||||
下一步直接生成 cm95_to_navsea_v1.yaml 初版并标注 UNMAPPED / hard_gate 缺口。
|
||||
1502
config/mappings/cm95_gap_disposition_japan_dataset_1_v1.yaml
Normal file
1502
config/mappings/cm95_gap_disposition_japan_dataset_1_v1.yaml
Normal file
File diff suppressed because it is too large
Load Diff
1284
config/mappings/cm95_gap_disposition_v1.yaml
Normal file
1284
config/mappings/cm95_gap_disposition_v1.yaml
Normal file
File diff suppressed because it is too large
Load Diff
1522
config/mappings/cm95_to_navsea_v1.yaml
Normal file
1522
config/mappings/cm95_to_navsea_v1.yaml
Normal file
File diff suppressed because it is too large
Load Diff
18
config/pbf/cm95_production_v1.yaml
Normal file
18
config/pbf/cm95_production_v1.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
schema: navsea.cm95.production-policy/v1
|
||||
version: v1.4.2-materialization-split
|
||||
status: PRODUCTION_CANDIDATE
|
||||
zooms: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
||||
profile: delivery
|
||||
workers: 4
|
||||
max_attempts: 3
|
||||
release_root: build/releases
|
||||
plan_path: build/production/cm95_production_plan_v1.json
|
||||
rules:
|
||||
- 生产目标固定为 z0-z12。
|
||||
- 高 zoom tile 的物理枚举只由 enumeration_scales 决定。
|
||||
- scale_ladders 的粗比例尺只允许在已枚举 tile 内回退,不得扩张生产 footprint。
|
||||
- mapping、tile policy、Dataset fingerprint、FID manifest 在计划创建后必须保持不变。
|
||||
- PASS tile 自动断点续跑;RUNNING 状态在下次启动时恢复为 PENDING。
|
||||
- FAILED tile 最多尝试 max_attempts 次;失败不会被静默跳过。
|
||||
- 空 tile 可为 PASS 且不生成 PBF 文件;release manifest 只列真实产物。
|
||||
- 发布前 finalize-production 必须满足 planned/report/decoded feature 三方一致。
|
||||
96
config/pbf/cm95_tile_policy_japan_full_detail_v1.yaml
Normal file
96
config/pbf/cm95_tile_policy_japan_full_detail_v1.yaml
Normal file
@@ -0,0 +1,96 @@
|
||||
schema: navsea.cm95.tile-policy/v1
|
||||
version: v1.3-japan-full-detail-g7500-at-z12
|
||||
status: PRODUCTION_CANDIDATE
|
||||
xyz: true
|
||||
nominal_tile_pixels: 256
|
||||
buffer_tile_pixels: 8
|
||||
default_extent: 4096
|
||||
extent_by_zoom:
|
||||
'10': 4096
|
||||
'11': 4096
|
||||
'12': 1048576
|
||||
enumeration_scales:
|
||||
'0':
|
||||
- 20000000
|
||||
'1':
|
||||
- 20000000
|
||||
'2':
|
||||
- 20000000
|
||||
'3':
|
||||
- 20000000
|
||||
'4':
|
||||
- 20000000
|
||||
'5':
|
||||
- 3000000
|
||||
'6':
|
||||
- 3000000
|
||||
'7':
|
||||
- 3000000
|
||||
'8':
|
||||
- 1000000
|
||||
'9':
|
||||
- 1000000
|
||||
'10':
|
||||
- 200000
|
||||
'11':
|
||||
- 50000
|
||||
- 100000
|
||||
'12':
|
||||
- 7500
|
||||
- 20000
|
||||
- 50000
|
||||
scale_ladders:
|
||||
'0':
|
||||
- 20000000
|
||||
'1':
|
||||
- 20000000
|
||||
'2':
|
||||
- 20000000
|
||||
'3':
|
||||
- 20000000
|
||||
'4':
|
||||
- 20000000
|
||||
'5':
|
||||
- 3000000
|
||||
- 20000000
|
||||
'6':
|
||||
- 3000000
|
||||
- 20000000
|
||||
'7':
|
||||
- 3000000
|
||||
- 20000000
|
||||
'8':
|
||||
- 1000000
|
||||
- 3000000
|
||||
- 20000000
|
||||
'9':
|
||||
- 1000000
|
||||
- 3000000
|
||||
- 20000000
|
||||
'10':
|
||||
- 200000
|
||||
- 1000000
|
||||
- 3000000
|
||||
- 20000000
|
||||
'11':
|
||||
- 50000
|
||||
- 100000
|
||||
- 200000
|
||||
- 1000000
|
||||
- 3000000
|
||||
- 20000000
|
||||
'12':
|
||||
- 7500
|
||||
- 20000
|
||||
- 50000
|
||||
- 100000
|
||||
- 200000
|
||||
- 1000000
|
||||
- 3000000
|
||||
- 20000000
|
||||
notes:
|
||||
- Japan full-detail production 仍保持 z0-z12;不新增 z13/z14。
|
||||
- z12 enumeration 加入 1:7,500(G),避免正确 Japan 数据中的 G 级细节被生产策略直接忽略。
|
||||
- z12 scale ladder 优先 7,500,再回退 20k/50k/100k/...。
|
||||
- z0-z11 extent=4096;z12 extent=1048576,保持已验证 NavSea/MapLibre 契约。
|
||||
- enumeration_scales 仅决定物化范围;scale_ladders 仅决定 tile 内选择/回退。
|
||||
51
config/pbf/cm95_tile_policy_v1.yaml
Normal file
51
config/pbf/cm95_tile_policy_v1.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
schema: navsea.cm95.tile-policy/v1
|
||||
version: v1.2-production-materialization-split
|
||||
status: PRODUCTION_CANDIDATE
|
||||
xyz: true
|
||||
nominal_tile_pixels: 256
|
||||
buffer_tile_pixels: 8
|
||||
default_extent: 4096
|
||||
extent_by_zoom:
|
||||
'10': 4096
|
||||
'11': 4096
|
||||
'12': 1048576
|
||||
|
||||
# enumeration_scales 决定哪些 coverage 可以创建物理 tile。
|
||||
# 这里只使用与目标 zoom 匹配的原生/近原生比例尺,避免粗比例尺 coverage
|
||||
# 把高 zoom 生产范围膨胀成百万级静态文件。
|
||||
enumeration_scales:
|
||||
'0': [20000000]
|
||||
'1': [20000000]
|
||||
'2': [20000000]
|
||||
'3': [20000000]
|
||||
'4': [20000000]
|
||||
'5': [3000000]
|
||||
'6': [3000000]
|
||||
'7': [3000000]
|
||||
'8': [1000000]
|
||||
'9': [1000000]
|
||||
'10': [200000]
|
||||
'11': [50000, 100000]
|
||||
'12': [20000, 50000]
|
||||
|
||||
# scale_ladders 只控制已经决定生成的 tile 内部如何选择数据。
|
||||
# 粗比例尺仍可作为 tile 内回退,但不再扩张 tile 枚举范围。
|
||||
scale_ladders:
|
||||
'0': [20000000]
|
||||
'1': [20000000]
|
||||
'2': [20000000]
|
||||
'3': [20000000]
|
||||
'4': [20000000]
|
||||
'5': [3000000, 20000000]
|
||||
'6': [3000000, 20000000]
|
||||
'7': [3000000, 20000000]
|
||||
'8': [1000000, 3000000, 20000000]
|
||||
'9': [1000000, 3000000, 20000000]
|
||||
'10': [200000, 1000000, 3000000, 20000000]
|
||||
'11': [50000, 100000, 200000, 1000000, 3000000, 20000000]
|
||||
'12': [20000, 50000, 100000, 200000, 1000000, 3000000, 20000000]
|
||||
notes:
|
||||
- 生产目标为 z0-z12;Pilot 的 z10-z12 只用于验证。
|
||||
- enumeration_scales 与 scale_ladders 必须分离。
|
||||
- enumeration_scales 只决定是否物化 tile;scale_ladders 只决定 tile 内数据回退。
|
||||
- z0-z11 extent=4096;z12 extent=1048576,保持已验证 NavSea 契约。
|
||||
18
config/pbf/cm95_v1_4_5_nonrenderable_label_tiles.txt
Normal file
18
config/pbf/cm95_v1_4_5_nonrenderable_label_tiles.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
# CM95 PBF v1.4.5 定向重建 tile
|
||||
# 来源:cm95_style_contract_unmatched_features_v1.json
|
||||
10/912/366
|
||||
10/913/366
|
||||
10/916/327
|
||||
11/1893/717
|
||||
11/1893/718
|
||||
11/1908/643
|
||||
11/1908/645
|
||||
11/1909/636
|
||||
11/1909/639
|
||||
11/1909/643
|
||||
11/1910/633
|
||||
12/3662/1409
|
||||
12/3737/1466
|
||||
12/3787/1435
|
||||
12/3787/1436
|
||||
12/3825/1376
|
||||
3334
config/sprite/semantic-sprite-20260808.json
Normal file
3334
config/sprite/semantic-sprite-20260808.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
58
docs/25个新增映射缺口分类说明_v1.md
Normal file
58
docs/25个新增映射缺口分类说明_v1.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 25个新增映射缺口分类说明_v1
|
||||
|
||||
## 结论
|
||||
|
||||
- 正确 Japan Dataset 1 的 gap variant:165。
|
||||
- 原 disposition 可直接覆盖:140。
|
||||
- 新出现且未分类:25 variants / 869 rows。
|
||||
- 本次 25 个全部显式分类为 `ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW`。
|
||||
- 不新增 delivery mapping,不修改 `cm95_to_navsea_v1.yaml`,避免在未完成图层/样式语义设计前臆造显示。
|
||||
- 分类后 closure 预期:`PASS`。
|
||||
- 新 semantic backlog:137 variants / 90,009 rows。
|
||||
|
||||
## 25个新增 variant
|
||||
|
||||
| Object | Geometry | Rows | Safety | 处理 |
|
||||
|---|---:|---:|---|---|
|
||||
| TWRTPT | AREA | 462 | important | pending semantic review |
|
||||
| LNDSTS | AREA | 78 | normal | pending semantic review |
|
||||
| SNDWAV | AREA | 74 | important | pending semantic review |
|
||||
| FORSTC | POINT | 62 | normal | pending semantic review |
|
||||
| TIDEWY | LINE | 42 | important | pending semantic review |
|
||||
| RCTLPT | AREA | 30 | important | pending semantic review |
|
||||
| DWRTPT | AREA | 20 | important | pending semantic review |
|
||||
| TREPNT | POINT | 19 | normal | pending semantic review |
|
||||
| DAMCON | LINE | 12 | important | pending semantic review |
|
||||
| LITFLT | POINT | 9 | important | pending semantic review |
|
||||
| FSHZNE | AREA | 8 | important | pending semantic review |
|
||||
| TIDEWY | AREA | 8 | important | pending semantic review |
|
||||
| TOWERS | AREA | 8 | normal | pending semantic review |
|
||||
| DISMAR | POINT | 6 | normal | pending semantic review |
|
||||
| LOKBSN | AREA | 5 | normal | pending semantic review |
|
||||
| BRTFAC | AREA | 4 | normal | pending semantic review |
|
||||
| FORSTC | AREA | 4 | normal | pending semantic review |
|
||||
| GRIDRN | AREA | 4 | normal | pending semantic review |
|
||||
| MIPARE | AREA | 4 | important | pending semantic review |
|
||||
| SMCFAC | POINT | 4 | normal | pending semantic review |
|
||||
| HULKES | POINT | 2 | important | pending semantic review |
|
||||
| CHIMNY | AREA | 1 | normal | pending semantic review |
|
||||
| SMCFAC | AREA | 1 | normal | pending semantic review |
|
||||
| SPLARE | AREA | 1 | normal | pending semantic review |
|
||||
| WNDMIL | POINT | 1 | normal | pending semantic review |
|
||||
|
||||
## 特别优先审查
|
||||
|
||||
以下虽然本次先进入 pending,但属于后续应优先处理的航行语义:
|
||||
|
||||
- `TWRTPT AREA`:双向交通航路。
|
||||
- `RCTLPT AREA`:推荐交通航道。
|
||||
- `DWRTPT AREA`:深水航路。
|
||||
- `LITFLT POINT`:灯浮。
|
||||
- `FSHZNE AREA`:渔业区,样本明确包含鱼陷阱警告。
|
||||
- `MIPARE AREA`:军事演习区,样本包含潜艇演习警告。
|
||||
- `HULKES POINT`:沉船/废船点。
|
||||
- `SNDWAV AREA`、`TIDEWY LINE/AREA`:海底/水道相关语义。
|
||||
|
||||
## 重要说明
|
||||
|
||||
本次只解决“分类闭环”,不等于语义完整。当前 90,009 条 `NO_EXACT_RULE` 仍不会进入正式 delivery,其中还包括 TOPMAR、BOYLAT、RESARE、NAVLNE 等重要航海对象。
|
||||
84
docs/CM95_21张PBF对照审计_v1.md
Normal file
84
docs/CM95_21张PBF对照审计_v1.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# CM95 21 张 PBF 与现有 NavSea/NEWPEC 对照审计 v1
|
||||
|
||||
## 1. 结论
|
||||
|
||||
PBF-03 v1.1 的 MVT 结构、extent、tile buffer、FID 稳定性和 scale-region 机制通过;但发现两个正式语义/样式契约问题,因此 v1.1 不冻结,进入 v1.2。
|
||||
|
||||
## 2. 已通过项目
|
||||
|
||||
- 新 delivery 与参考 AOI 均为完全相同的 21 个 `z/x/y` 路径。
|
||||
- MVT layer version 为 2。
|
||||
- extent 与当前工作参考一致:z10/z11 为 4096,z12 为 1048576。
|
||||
- 所有 geometry command 可解析;无空 geometry、无截断 geometry。
|
||||
- 新 PBF 坐标均落在现有 8px buffer 契约内。
|
||||
- delivery feature ID 均能在同 tile、同 source-layer 的 engineering PBF 中找到。
|
||||
- 以 `(source_id, output source-layer)` 检查,共 6067 个键;其中 890 个跨 tile 重复出现,MVT ID 不稳定数为 0。
|
||||
- 同一 tile/source-layer 内未发现重复 MVT ID。
|
||||
- scale-region 实现采用 `coverage.difference(occupied)`,详细比例尺优先、低比例尺只补空缺。
|
||||
- 对多比例尺并存的点图层做 30m 内近重复检查,未发现跨比例尺重复点。
|
||||
- 21 张 delivery 报告:hard-gate unmapped = 0;nav name conflicts = 0。
|
||||
|
||||
## 3. 问题 A:DEPARE 非标准水深区间不被现有 style 消费
|
||||
|
||||
v1.1 会直接把 CM95 `DRVAL1/DRVAL2` 拼成 `chart_fill_style`。当前 NavSea style 只接受固定区间,所以以下 24 个水深面在现有 style 下不会显示:
|
||||
|
||||
| 值 | 数量 |
|
||||
|---|---:|
|
||||
| depth_zone_13-20m | 7 |
|
||||
| depth_zone_7.5-10m | 7 |
|
||||
| depth_zone_20-50m | 7 |
|
||||
| depth_zone_12-20m | 1 |
|
||||
| depth_zone_9.6-10m | 1 |
|
||||
| depth_zone_14-20m | 1 |
|
||||
|
||||
v1.2 修正:将任意 CM95 深度范围归一到“能够完整包含原范围的最小现有 NavSea 区间”。例如:
|
||||
|
||||
- 7.5–10m → 5–10m
|
||||
- 9.6–10m → 5–10m
|
||||
- 12–20m / 13–20m / 14–20m → 10–20m
|
||||
- 20–50m → 20–100m
|
||||
|
||||
原始 `DRVAL1/DRVAL2` 仍保留在 engineering trace/source attributes,不修改 MySQL。
|
||||
|
||||
## 4. 问题 B:SOUNDG 与底质文字共用过宽 style filter
|
||||
|
||||
v1.1 在 21 张 delivery PBF 中输出的 `seabed_text_point`:
|
||||
|
||||
- z10:spot_sounding 71,seabed_material 9,seabed_area 1
|
||||
- z11:spot_sounding 590,seabed_material 83,seabed_area 2
|
||||
- z12:spot_sounding 2269,seabed_material 250,seabed_area 10
|
||||
|
||||
参考 PBF 的 `seabed_text_point` 只在 z12 出现,共 273 个,全部为 `canonical_object_type=seabed_material`。
|
||||
|
||||
当前 `bottom-material-labels` 仅判断 `has(chart_label_text)`,因此 v1.1 的 SOUNDG 在 z11/z12 会被当作底质文字直接显示,并且 `text-allow-overlap=true`,会造成测深数字过密。
|
||||
|
||||
v1.2 不改变 source-layer,仍使用 `seabed_text_point`,但提供最小 style 扩展:
|
||||
|
||||
1. `bottom-material-labels` 排除 `spot_sounding`;
|
||||
2. 新增 `spot-sounding-labels`;
|
||||
3. spot sounding 从 z12 开始显示;
|
||||
4. `text-allow-overlap=false`,由 MapLibre 的符号碰撞机制控制密度。
|
||||
|
||||
这样不增加新的正式 source-layer,也不丢 SOUNDG hard-gate 数据。
|
||||
|
||||
## 5. 参考数据差异,不判为生成器错误
|
||||
|
||||
参考 NEWPEC 与 CM95 是不同上游数据,因此 Feature 数量不要求一致。例如:
|
||||
|
||||
- 新 z12:4770 个 feature;参考 z12:11383 个 feature。
|
||||
- 参考含大量 `onshore_structure_line`、`baseline_outline`、`hole_area` 等;CM95 当前映射及源对象组成不同。
|
||||
- navigation_marks 全 AOI 数量接近:CM95 新 PBF 118,参考 123。
|
||||
- CM95 直接助航名称明显少于参考,这是源数据可证明关系差异;不得用参考名称反灌。
|
||||
|
||||
## 6. v1.2 冻结门槛
|
||||
|
||||
重新生成 21 张后必须满足:
|
||||
|
||||
- build report audit:PASS;
|
||||
- hard-gate unmapped = 0;
|
||||
- nav name conflicts = 0;
|
||||
- style contract audit:`contract_unmatched_count = 0`;
|
||||
- z10/z11/z12 extent 不变;
|
||||
- FID 稳定性不退化;
|
||||
- SOUNDG 在 z11 属于有意 zoom-hidden,在 z12 进入独立 sounding style;
|
||||
- 不修改 importer、geometry 或 MySQL schema。
|
||||
205
docs/CM95_PBF_Pilot生成器设计_v1.md
Normal file
205
docs/CM95_PBF_Pilot生成器设计_v1.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# CM95 → NavSea PBF Pilot Generator v1
|
||||
|
||||
## 1. 当前阶段
|
||||
|
||||
已完成前置门禁:
|
||||
|
||||
- CM93 → MySQL 全量 Geometry / Non-Geometry:PASS。
|
||||
- NavSea 现有 style、semantic sprite、z10–z12 PBF 契约已审计。
|
||||
- 测试 AOI:`z10/914/385`。
|
||||
- AOI 中 CM95 数据有效。
|
||||
- `LIGHTS` relation20 全 AOI 审计:
|
||||
- LIGHTS total = 96
|
||||
- with relation20 = 94
|
||||
- relation20 可安全合成 = 94
|
||||
- 坐标冲突 = 0
|
||||
- 无 relation20、必须独立输出 = 2
|
||||
- 结论:`PASS_RELATION20_PRIMARY_KEY`
|
||||
|
||||
本包进入第一版真实生成阶段。
|
||||
|
||||
## 2. 架构
|
||||
|
||||
```text
|
||||
CM93 / CM95 source
|
||||
↓
|
||||
已冻结 MySQL importer
|
||||
↓
|
||||
CM95 MySQL Dataset 1
|
||||
↓ read-only
|
||||
Coverage / scale selector
|
||||
↓
|
||||
cm95_to_navsea_v1.yaml
|
||||
↓
|
||||
navigation relation20 composer
|
||||
↓
|
||||
Web Mercator clip / tile quantization
|
||||
↓
|
||||
NavSea source-layer
|
||||
↓
|
||||
MVT/PBF
|
||||
```
|
||||
|
||||
PBF 生成器不修改 importer、schema 或原始 CM93 数据。
|
||||
|
||||
## 3. 第一 AOI 的 scale policy
|
||||
|
||||
```text
|
||||
z10 → C / 1:200,000
|
||||
fallback B/A/Z
|
||||
|
||||
z11 → E / 1:50,000
|
||||
fallback D/C/B/A/Z
|
||||
|
||||
z12 → F / 1:20,000
|
||||
fallback E/D/C/B/A/Z
|
||||
```
|
||||
|
||||
回退不是简单叠加。
|
||||
|
||||
每一级优先使用该 scale 的 `chart_coverage.geom`;细图覆盖过的区域会遮蔽更粗 scale,只在未覆盖部分回退。
|
||||
|
||||
因此不会把 F/E/C/B 等多个比例尺的对象全部重复塞进同一 tile。
|
||||
|
||||
## 4. extent
|
||||
|
||||
为兼容用户提供的当前 NavSea/NEWPEC PBF:
|
||||
|
||||
```text
|
||||
z10 = 4096
|
||||
z11 = 4096
|
||||
z12 = 1048576
|
||||
```
|
||||
|
||||
这是 Pilot 明确 policy,而不是从 CM95 上游 PBF“继承”。
|
||||
|
||||
## 5. 助航对象合成
|
||||
|
||||
主键:
|
||||
|
||||
```text
|
||||
cell_id + attributes._cm93_relation20_raw
|
||||
```
|
||||
|
||||
仅当同一 relation20 组同时存在 `LIGHTS + base component` 时合成。
|
||||
|
||||
base component 优先级:
|
||||
|
||||
```text
|
||||
BCNLAT
|
||||
BCNSPP
|
||||
BOYSPP
|
||||
RTPBCN
|
||||
TOWERS
|
||||
_extgn
|
||||
```
|
||||
|
||||
同一组只输出一个 `navigation_marks` Feature。
|
||||
|
||||
原始组件在 engineering trace 中全部保留。
|
||||
|
||||
### 无 relation20 的 LIGHTS
|
||||
|
||||
当前 AOI 有 2 个。
|
||||
|
||||
规则:
|
||||
|
||||
```text
|
||||
独立输出
|
||||
不按距离猜测合并
|
||||
```
|
||||
|
||||
## 6. MVT ID
|
||||
|
||||
禁止使用 MySQL `chart_feature.id` 作为稳定外部身份。
|
||||
|
||||
第一次生成前建立:
|
||||
|
||||
```text
|
||||
build/cm95_fid_manifest_v1.sqlite
|
||||
```
|
||||
|
||||
Manifest 按:
|
||||
|
||||
```text
|
||||
source_relative_path
|
||||
source_record_index
|
||||
geometry_type
|
||||
sounding point_index
|
||||
```
|
||||
|
||||
确定性排序并分配 base ordinal。
|
||||
|
||||
最终 MVT numeric id:
|
||||
|
||||
```text
|
||||
base_ord * 16 + geometry_role
|
||||
```
|
||||
|
||||
这样:
|
||||
|
||||
- 结果是 signed-int32 范围;
|
||||
- Dataset 不变时重复构建稳定;
|
||||
- derived boundary / point-on-surface 有独立稳定 ID;
|
||||
- MySQL 重建导致自增 id 改变不会影响 PBF ID。
|
||||
|
||||
如果 Dataset 的 source SHA 集合发生变化,manifest fingerprint 不匹配,生成器会拒绝继续,要求显式重建。
|
||||
|
||||
## 7. Engineering / Delivery
|
||||
|
||||
### Engineering
|
||||
|
||||
保留:
|
||||
|
||||
```text
|
||||
source_id
|
||||
source_dataset_id
|
||||
source_cell
|
||||
source_record_index
|
||||
source_object_class
|
||||
source_geometry_type
|
||||
native_scale
|
||||
mapping_rule_id
|
||||
mapping_status
|
||||
source_attr_json
|
||||
```
|
||||
|
||||
无法安全映射对象进入:
|
||||
|
||||
```text
|
||||
cm95_unmapped
|
||||
```
|
||||
|
||||
### Delivery
|
||||
|
||||
只输出现有 NavSea style source-layer。
|
||||
|
||||
字段按当前 delivery allowlist 裁剪。
|
||||
|
||||
正式 delivery 不包含 `cm95_unmapped`。
|
||||
|
||||
## 8. 当前限制
|
||||
|
||||
这是 Pilot,不是全国发布版。
|
||||
|
||||
当前需要实测的内容:
|
||||
|
||||
1. `mapbox-vector-tile` 在用户 Windows 环境的编码结果;
|
||||
2. z10/z11/z12 Coverage 回退效果;
|
||||
3. CM95 和 NEWPEC 内容不同导致的对象数量差异;
|
||||
4. 航标 icon / label 实际视觉;
|
||||
5. 未映射对象收敛;
|
||||
6. hard-gate 对象保全;
|
||||
7. tile edge buffer;
|
||||
8. 后续 sector light 的专项 arc 映射。
|
||||
|
||||
因此第一轮目标是:
|
||||
|
||||
```text
|
||||
能生成
|
||||
能被当前 NavSea style 直接打开
|
||||
对象可追溯
|
||||
hard-gate 不静默丢
|
||||
```
|
||||
|
||||
而不是第一轮就宣称全国正式发布。
|
||||
70
docs/CM95_PBF_v1.4.7_导航名称冲突审计式省略_v1.md
Normal file
70
docs/CM95_PBF_v1.4.7_导航名称冲突审计式省略_v1.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# CM95 PBF Production v1.4.7 — 导航名称冲突审计式省略
|
||||
|
||||
## 1. 本版本定位
|
||||
|
||||
v1.4.7 是 **release gate 修复**,不是 PBF builder 语义版本。
|
||||
|
||||
因此:
|
||||
|
||||
- Project/runtime 升级为 v1.4.7;
|
||||
- `BUILDER_CONTRACT_VERSION` **保持** `cm95pbf-builder/0.4.6-spatial-candidate-query`;
|
||||
- 已完成的 v1.4.6 Plan、FID、27,038 个 job、27,030 个 PBF 全部复用;
|
||||
- 不重新生成 PBF;
|
||||
- 不修改 MySQL;
|
||||
- 不修改 mapping / style / sprite / FID / geometry / quantization / encoder reconcile / non-renderable omission。
|
||||
|
||||
## 2. 已确认的真实冲突
|
||||
|
||||
当前 Japan release 中:
|
||||
|
||||
- report conflict occurrences:10;
|
||||
- trace conflict occurrences:10;
|
||||
- unique conflict outputs:4;
|
||||
- affected tiles:3;
|
||||
- native scale:全部 1:50,000;
|
||||
- 每个真实 conflict 都恰好有两个不同 direct-name candidate。
|
||||
|
||||
四组候选分别为:
|
||||
|
||||
- `R2` / `P4`
|
||||
- `R1` / `P3`
|
||||
- `L1` / `P1`
|
||||
- `L2` / `P2`
|
||||
|
||||
它们不是大小写、空格或格式差异,因此不能做字符串归一化后任选一个。
|
||||
|
||||
## 3. v1.4.7 policy
|
||||
|
||||
采用:
|
||||
|
||||
`AMBIGUOUS_DIRECT_NAMES_OMIT_LABEL_FAIL_CLOSED`
|
||||
|
||||
即:
|
||||
|
||||
1. composite base 自己没有直接名称;
|
||||
2. relation group 内有两个以上不同 LIGHTS 直接名称;
|
||||
3. Builder 继续不猜名称,不写 `chart_label_text`;
|
||||
4. finalizer 必须逐条核对 report 与 trace 数量;
|
||||
5. trace 必须明确 `nav_name_conflict=true` 且 `nav_name_source=conflict`;
|
||||
6. 至少存在两个 distinct name candidates;
|
||||
7. finalizer 解码对应 PBF feature,确认 `chart_label_text` 实际为空;
|
||||
8. 只有全部满足时,这些冲突才记为 `nav_name_conflict_omissions` 并允许 release PASS;
|
||||
9. 若 trace 缺失、数量不一致、PBF feature 不存在、或 ambiguous feature 被写入任意 label,则继续 hard fail。
|
||||
|
||||
这不是关闭 gate,而是把原来的“只要有 conflict 就失败”改成“只允许经过可验证的安全省略”。
|
||||
|
||||
## 4. 当前 release 不重建
|
||||
|
||||
当前 release:
|
||||
|
||||
`cm95-d1-62a85bd40d3a-6bc3c1352da3`
|
||||
|
||||
现有生产数据:
|
||||
|
||||
- jobs: 27,038 / 27,038 PASS
|
||||
- attempts: 27,038
|
||||
- PBF files: 27,030
|
||||
- planned features: 2,974,375
|
||||
- decoded features: 2,974,375
|
||||
|
||||
v1.4.7 仅重新执行 finalize。
|
||||
37
docs/CM95_PBF_v1_2变更说明.md
Normal file
37
docs/CM95_PBF_v1_2变更说明.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# CM95 PBF Pilot Generator v1.2 变更说明
|
||||
|
||||
## 变更范围
|
||||
|
||||
本版本只处理 21 张 Pilot 对照中确认的两个问题:
|
||||
|
||||
1. DEPARE 深度区间归一化到当前 NavSea style 固定词汇;
|
||||
2. SOUNDG 与底质标签在同一 `seabed_text_point` source-layer 内分流显示。
|
||||
|
||||
## 未修改
|
||||
|
||||
- CM93/CM95 importer
|
||||
- geometry normalization
|
||||
- MySQL schema
|
||||
- relation20 助航合成规则
|
||||
- FID manifest 规则
|
||||
- tile extent / buffer
|
||||
- scale ladder / coverage difference 算法
|
||||
- 80 条 CM95 对象 mapping 主结构
|
||||
|
||||
## 新增 style 候选
|
||||
|
||||
`config/style/style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json`
|
||||
|
||||
它以当前 `style.navsea-delivery-full-semantic-unified-20260808.json` 为基线,只做:
|
||||
|
||||
- `bottom-material-labels` 排除 `spot_sounding`;
|
||||
- 新增 `spot-sounding-labels`,minzoom=12,禁止文字强制重叠。
|
||||
|
||||
## 新增审计工具
|
||||
|
||||
`tools/cm95_pbf_style_contract_audit_v2.py`
|
||||
|
||||
用于区分:
|
||||
|
||||
- style 属性/值域真正不匹配;
|
||||
- 因 minzoom/maxzoom 有意隐藏。
|
||||
35
docs/CM95_PBF_v1_3变更说明.md
Normal file
35
docs/CM95_PBF_v1_3变更说明.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# CM95 PBF Pilot Generator v1.3 变更说明
|
||||
|
||||
## 原因
|
||||
|
||||
v1.2 的 21 张批量 Gate 中,构建报告累计 6911 个输出,而真实 PBF 解码为 6910。定位到唯一缺失对象:
|
||||
|
||||
- tile: `11/1828/771`
|
||||
- layer: `clearance_limit_line`
|
||||
- source_id: `cm95:1:03900420/E/03910424.E:574:line`
|
||||
- mapping: `CM95-052 / TELPHC`
|
||||
- safety_class: `hard_gate`
|
||||
|
||||
该线在 z11 extent=4096 量化后退化,被 `mapbox-vector-tile` encoder 静默省略。
|
||||
|
||||
## v1.3 规则
|
||||
|
||||
1. `clearance_limit_line` 若量化后仍有至少两个不同整数顶点,正常输出 line。
|
||||
2. 若量化后退化,改用 `representative_point()` 输出到已有 `clearance_limit_point`。
|
||||
3. fallback 使用同一 source_id 的 `ROLE_SECONDARY` 稳定 FID,不复用原 line FID。
|
||||
4. fallback 写入 trace,状态追加 `QUANTIZATION_FALLBACK_POINT`。
|
||||
5. 编码后立即 decode,并以 layer + feature.id 与计划输出逐项对账。
|
||||
6. 任何未处理的 encoder 丢失都会写失败报告并终止构建,不允许静默 PASS。
|
||||
|
||||
## 预期 Gate
|
||||
|
||||
本 AOI 应得到:
|
||||
|
||||
- 21 reports
|
||||
- planned output = actual output
|
||||
- quantization fallback = 1
|
||||
- encoder dropped = 0
|
||||
- hard-gate unmapped = 0
|
||||
- style contract unmatched = 0
|
||||
|
||||
`quantization fallback = 1` 是预期安全回退,不是失败。
|
||||
52
docs/CM95_PBF_v1_4_3离线自检报告_v1.md
Normal file
52
docs/CM95_PBF_v1_4_3离线自检报告_v1.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# CM95 PBF Production v1.4.3 离线自检报告 v1
|
||||
|
||||
## 结论
|
||||
|
||||
离线自检:PASS。
|
||||
|
||||
## 检查项
|
||||
|
||||
1. Python 静态编译
|
||||
- 18 个 `.py` 文件全部 `py_compile` PASS。
|
||||
|
||||
2. Mapping → Style/Sprite Contract
|
||||
- Rules:81
|
||||
- Style source layers:37
|
||||
- Sprite keys:476
|
||||
- Layer failures:0
|
||||
- Sprite failures:0
|
||||
- OVERALL:PASS
|
||||
|
||||
3. Global Mapping Gap 分类收口
|
||||
- Observed gap variants:141
|
||||
- Unclassified:0
|
||||
- New delivery mapping:1(FSHHAV AREA)
|
||||
- Pending semantic review:112 variants / 52,828 rows
|
||||
- FSHHAV AREA hard-gate:PASS
|
||||
- Delivery change contract:PASS,仅 `FSHHAV`
|
||||
- 分类收口 OVERALL:PASS
|
||||
- Semantic completeness:PENDING_REVIEW
|
||||
|
||||
4. 量化预检合成测试
|
||||
- 亚像素短 Line:判定不可绘制
|
||||
- 正常 Line:判定可绘制
|
||||
- 亚像素 Polygon:判定不可绘制
|
||||
- 正常 Polygon:判定可绘制
|
||||
- 结果符合预期。
|
||||
|
||||
5. Release migration 合成测试
|
||||
- 3 个模拟任务:
|
||||
- 1 个旧 PASS 且不受 changed class 影响 → 成功复用
|
||||
- 1 个旧 PASS 但 report 含 FSHHAV → 新 release 留 PENDING
|
||||
- 1 个旧 FAILED → 新 release 留 PENDING
|
||||
- 新 ledger:PASS=1 / PENDING=2 / attempts=0
|
||||
- 结果符合预期。
|
||||
|
||||
## 未在离线环境执行
|
||||
|
||||
- 未连接用户 MySQL Dataset-1;
|
||||
- 未实际迁移 19,913 张旧 PASS;
|
||||
- 未实际重建 202 张失败 tile;
|
||||
- 未执行用户环境最终 `finalize-production`。
|
||||
|
||||
以上必须按《替换与执行说明.md》在用户 Windows 11 / 项目环境中完成。
|
||||
97
docs/CM95_PBF生产化阶段_v1_4.md
Normal file
97
docs/CM95_PBF生产化阶段_v1_4.md
Normal file
@@ -0,0 +1,97 @@
|
||||
> 注意:本文件记录 v1.4 初版。生产范围已在 v1.4.1 改为 z0–z12;以 `CM95_PBF生产化阶段_v1_4_1.md` 为准。
|
||||
|
||||
# CM95 PBF 生产化阶段 v1.4(历史:z10–z12 初版)
|
||||
|
||||
## 1. 基线
|
||||
|
||||
本版本以已经通过 21 张 AOI 双 Gate 的 v1.3 为冻结内核。以下行为不得在本阶段随意改变:
|
||||
|
||||
- `cm95_to_navsea_v1.yaml` 语义映射;
|
||||
- z10/z11/z12 extent;
|
||||
- scale ladder / coverage mask;
|
||||
- relation20 助航合成;
|
||||
- `OBJNAM/NOBJNM` 直接名称规则;
|
||||
- stable FID manifest;
|
||||
- hard-gate quantization fallback;
|
||||
- encoder 写后 Feature ID 对账。
|
||||
|
||||
v1.4 只增加生产编排层。
|
||||
|
||||
## 2. 新增生产闭环
|
||||
|
||||
### `plan-production`
|
||||
|
||||
从 MySQL 只读读取 `chart_cell` 与 `chart_coverage`,按当前 tile policy 中每个 zoom 的 scale ladder 枚举真实需要的 tile。
|
||||
|
||||
优先使用真实 coverage polygon;若某 Cell 没有 coverage,则使用 Cell bbox 作为保守 fallback,避免漏图。
|
||||
|
||||
生产计划冻结:
|
||||
|
||||
- Dataset fingerprint;
|
||||
- mapping SHA256;
|
||||
- tile policy SHA256;
|
||||
- FID manifest fingerprint/count;
|
||||
- profile;
|
||||
- zoom;
|
||||
- 完整 XYZ job 列表。
|
||||
|
||||
任何输入在计划创建后变化,`build-production` 必须拒绝继续。
|
||||
|
||||
### `build-production`
|
||||
|
||||
- SQLite 账本;
|
||||
- PASS 自动跳过;
|
||||
- 上次异常中断的 RUNNING 自动恢复 PENDING;
|
||||
- FAILED 最多重试指定次数;
|
||||
- 有限线程并发;
|
||||
- 每个 tile 继续使用 v1.3 builder 自带 hard-gate 与 encoder 对账;
|
||||
- 空 tile 允许 PASS,但不写 `.pbf`。
|
||||
|
||||
### `finalize-production`
|
||||
|
||||
发布前重新读取所有 report 与真实 PBF,要求:
|
||||
|
||||
- 所有计划 job = PASS;
|
||||
- hard-gate unmapped = 0;
|
||||
- encoder dropped = 0;
|
||||
- nav name conflict = 0;
|
||||
- planned output = report output = decoded PBF feature count;
|
||||
- tile 内同 layer Feature ID 无重复。
|
||||
|
||||
同时执行全量 style filter 契约与动态 sprite closure,并生成每个 PBF 的 SHA256/bytes/feature/layer inventory。
|
||||
|
||||
## 3. 产物结构
|
||||
|
||||
```text
|
||||
build/
|
||||
production/
|
||||
cm95_production_plan_v1.json
|
||||
|
||||
releases/
|
||||
<release_id>/
|
||||
production_run_v1.sqlite
|
||||
production_run_summary_v1.json
|
||||
release_manifest_v1.json
|
||||
|
||||
pbf/
|
||||
delivery/
|
||||
{z}/{x}/{y}.pbf
|
||||
|
||||
reports/
|
||||
delivery/
|
||||
{z}/{x}/{y}.json
|
||||
{z}/{x}/{y}.trace.jsonl
|
||||
```
|
||||
|
||||
`release_id` 由 Dataset fingerprint + plan hash 确定,相同输入得到相同 release identity。
|
||||
|
||||
## 4. 当前阶段不做
|
||||
|
||||
- 不选择 HTTP/Nginx/FastAPI serving;
|
||||
- 不改变 NavSea 客户端;
|
||||
- 不改 importer/schema;
|
||||
- 不增加新正式 source-layer;
|
||||
- 不改变 v1.3 safety semantics;
|
||||
- 不自动清理旧 release。
|
||||
|
||||
Serving 在完整 Dataset production release PASS 后再单独决定。
|
||||
56
docs/CM95_PBF生产化阶段_v1_4_1.md
Normal file
56
docs/CM95_PBF生产化阶段_v1_4_1.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# CM95 PBF 生产化阶段 v1.4.1:z0–z12
|
||||
|
||||
## 1. 决策
|
||||
|
||||
生产目标固定为 **XYZ z0–z12**。
|
||||
|
||||
此前 z10–z12 是 Pilot AOI 验证范围,只用于验证 CM95→NavSea MVT 的语义、extent、FID、助航合成、hard-gate 与 style contract,不是生产发布范围。
|
||||
|
||||
v1.4.1 不改变 v1.3 已冻结内核,只扩展生产 tile policy 与生产计划 Gate。
|
||||
|
||||
## 2. Scale ladder
|
||||
|
||||
按当前 Dataset 已确认的 CM95 native scale 层级:
|
||||
|
||||
| Zoom | 优先比例尺及 fallback |
|
||||
|---|---|
|
||||
| z0–z4 | 1:20M |
|
||||
| z5–z7 | 1:3M → 1:20M |
|
||||
| z8–z9 | 1:1M → 1:3M → 1:20M |
|
||||
| z10 | 1:200k → 1:1M → 1:3M → 1:20M |
|
||||
| z11 | 1:50k → 1:100k → 1:200k → 1:1M → 1:3M → 1:20M |
|
||||
| z12 | 1:20k → 1:50k → 1:100k → 1:200k → 1:1M → 1:3M → 1:20M |
|
||||
|
||||
每级只向更粗比例尺 fallback。具体空间覆盖仍由 `chart_coverage` 控制,coverage 缺失时才使用 Cell bbox 保守兜底。
|
||||
|
||||
## 3. Extent
|
||||
|
||||
- z0–z11:4096;
|
||||
- z12:1048576,保持 Pilot 与当前 NavSea/NEWPEC 已验证契约。
|
||||
|
||||
## 4. Plan Gate
|
||||
|
||||
`plan-production --zooms 0-12` 必须创建完整 13 个 zoom 的不可变计划。
|
||||
|
||||
计划审计默认要求:
|
||||
|
||||
- planned zoom = 0..12;
|
||||
- 每一级至少存在一个真实 tile job;
|
||||
- duplicate job = 0;
|
||||
- invalid XYZ = 0;
|
||||
- `source_stats.tile_count` 与实际 job 数一致。
|
||||
|
||||
在完整 tile 数量未审查前,不启动 production build。
|
||||
|
||||
## 5. 冻结边界
|
||||
|
||||
以下内容仍保持 v1.3:
|
||||
|
||||
- CM95→NavSea mapping;
|
||||
- relation20 助航合成;
|
||||
- OBJNAM/NOBJNM 名称规则;
|
||||
- FID manifest;
|
||||
- hard-gate quantization fallback;
|
||||
- encoder 写后 Feature ID 对账;
|
||||
- release PBF 属性 allowlist;
|
||||
- style/sprite contract Gate。
|
||||
28
docs/CM95_PBF生产化阶段_v1_4_2.md
Normal file
28
docs/CM95_PBF生产化阶段_v1_4_2.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# CM95 PBF 生产化阶段 v1.4.2
|
||||
|
||||
## 结论
|
||||
|
||||
v1.4.1 的计划枚举把 `scale_ladders` 中所有粗比例尺 coverage 都用于高 zoom tile 枚举,导致 z10/z11/z12 接近连续 4 倍膨胀:66,848 / 265,706 / 1,056,589。该计划仅结构合法,不具备生产合理性,必须作废。
|
||||
|
||||
## v1.4.2 修正
|
||||
|
||||
新增 `enumeration_scales`:
|
||||
|
||||
- 决定哪些 coverage 有资格创建物理 tile;
|
||||
- 与 `scale_ladders` 完全分离;
|
||||
- 粗比例尺 fallback 只能在已创建 tile 内参与数据选择,不能扩张高 zoom footprint。
|
||||
|
||||
默认 materialization:
|
||||
|
||||
- z0-z4: 1:20M
|
||||
- z5-z7: 1:3M
|
||||
- z8-z9: 1:1M
|
||||
- z10: 1:200k
|
||||
- z11: 1:50k + 1:100k
|
||||
- z12: 1:20k + 1:50k
|
||||
|
||||
原 `scale_ladders` 保持不变,因此 Pilot 已验证的 tile 内回退语义不变。
|
||||
|
||||
## 当前动作
|
||||
|
||||
只重新生成 z0-z12 production plan 并审计 tile 数量。未审查新数量前不得执行 `build-production`。
|
||||
146
docs/CM95_PBF生产化阶段_v1_4_3.md
Normal file
146
docs/CM95_PBF生产化阶段_v1_4_3.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# CM95 PBF Production v1.4.3:生产收口与失败恢复
|
||||
|
||||
## 1. 背景
|
||||
|
||||
v1.4.2 首轮 Dataset-1 / z0–z12 production:
|
||||
|
||||
- 计划任务:20,115
|
||||
- PASS:19,913
|
||||
- FAILED:202
|
||||
- FAILED 分类:
|
||||
- MVT encoder dropped:171 tile
|
||||
- hard-gate unmapped:31 tile
|
||||
- hard-gate 缺口全部为 `FSHHAV AREA`,共 51 条源 Feature,失败报告中累计命中 73 次 tile-local 记录。
|
||||
|
||||
Encoder dropped 主要分布:
|
||||
|
||||
- `depth_contour`:313
|
||||
- `baseline_line`:85
|
||||
- `seabed_line`:9
|
||||
- `baseline_area`:5
|
||||
- `navigation_hazard_area`:1
|
||||
- `navigation_hazard_outline`:1
|
||||
|
||||
全 Dataset Mapping Gap 审计还发现:
|
||||
|
||||
- source variants:191
|
||||
- gap variants:141
|
||||
- gap object classes:117
|
||||
- gap feature rows:81,443
|
||||
- no exact rule rows:52,879
|
||||
- explicit/status gap rows:28,564
|
||||
- inherited hard-gate rows:51(全部 `FSHHAV AREA`)
|
||||
|
||||
因此 v1.4.3 不允许把 5 万多条未知语义对象粗暴映射到错误 NavSea 图层。
|
||||
|
||||
## 2. v1.4.3 决策
|
||||
|
||||
### 2.1 FSHHAV AREA 正式进入 delivery
|
||||
|
||||
`FSHHAV` Dictionary 含义为 Fish haven。
|
||||
|
||||
Dataset-1 实际出现 AREA variant,现映射为:
|
||||
|
||||
- main:`anchor_caution_hazard_area`
|
||||
- outline:`anchor_caution_hazard_outline`
|
||||
- point-on-surface:`anchor_caution_hazard_point`
|
||||
- canonical:`fish_reef`
|
||||
- safety:`hard_gate`
|
||||
- icon:`reef_fish`
|
||||
- fill:`pattern_fill_fish_reef`
|
||||
|
||||
AREA、outline、point-on-surface 三者都是同一源对象的不同渲染产物;不得把 AREA 静默降为 unmapped。
|
||||
|
||||
### 2.2 全量 gap 显式分类,但不伪造语义
|
||||
|
||||
新增:
|
||||
|
||||
`config/mappings/cm95_gap_disposition_v1.yaml`
|
||||
|
||||
141 个已观察 gap variant 全部有明确 disposition:
|
||||
|
||||
- 1 variant / 51 rows:`DELIVERY_MAPPED_V1_4_3`(FSHHAV AREA)
|
||||
- 28 variants / 28,564 rows:已有显式非 delivery mapping/status
|
||||
- 112 variants / 52,828 rows:`ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW`
|
||||
|
||||
后者不是“已经完成映射”,而是明确的语义 backlog;正式后续阶段必须按对象类别逐组审查,不得 generic 映射冒充正确航海语义。
|
||||
|
||||
## 3. MVT 量化策略
|
||||
|
||||
v1.3 只保护了 `clearance_limit_line` 的单一退化场景。v1.4.3 改为统一编码前预量化:
|
||||
|
||||
1. 使用当前 tile `quantize_bounds + extent` 计算整数坐标;
|
||||
2. Line 必须至少有两个不同量化坐标;
|
||||
3. Polygon exterior 必须至少有三个不同量化点且量化面积非零;
|
||||
4. 不满足条件的 tile-local 几何,不再送入 encoder。
|
||||
|
||||
处理分两类:
|
||||
|
||||
### 3.1 对象存在性必须保留
|
||||
|
||||
以下图层退化时转换到现有 point layer:
|
||||
|
||||
- `clearance_limit_line` → `clearance_limit_point`
|
||||
- `navigation_hazard_area/outline` → `navigation_hazard_point`
|
||||
- `anchor_caution_hazard_area/outline` → `anchor_caution_hazard_point`
|
||||
|
||||
报告记入 `quantization_fallbacks`。
|
||||
|
||||
### 3.2 线性参考/普通面片
|
||||
|
||||
例如:
|
||||
|
||||
- `depth_contour`
|
||||
- `baseline_line`
|
||||
- `seabed_line`
|
||||
- `baseline_area`
|
||||
|
||||
若当前 tile 内量化后已经没有可绘制二维/一维形状,则明确记入 `quantization_omissions` 后省略当前 tile-local 片段。
|
||||
|
||||
这不等于删除源对象;源对象、FID identity 和其它 tile/zoom 中可绘制片段不变。禁止把等深线等线性语义伪造成点。
|
||||
|
||||
Encoder 后仍做真实二进制 decode 对账;`encoder_dropped_features` 必须继续为 0。
|
||||
|
||||
## 4. Release 迁移
|
||||
|
||||
v1.4.3 mapping SHA 与 v1.4.2 不同,因此旧 plan 不得继续运行。
|
||||
|
||||
新增:
|
||||
|
||||
`cm95pbf migrate-production-release`
|
||||
|
||||
流程:
|
||||
|
||||
1. 用 v1.4.3 mapping 创建新 plan / 新 release_id;
|
||||
2. 读取旧 release ledger;
|
||||
3. 仅复用旧 `PASS`;
|
||||
4. 旧 FAILED/PENDING/RUNNING 一律在新 ledger 中重新 PENDING;
|
||||
5. 若旧 PASS report 命中新 mapping 声明的 `delivery_output_changed_object_classes`,也不复用;
|
||||
6. 旧 PASS 必须同时满足:
|
||||
- hard_gate_unmapped = 0
|
||||
- encoder_dropped_features = 0
|
||||
- planned == output
|
||||
- PBF/report 文件完整
|
||||
7. 通过的 PBF/report 默认用 hardlink 复用,失败则自动 copy fallback。
|
||||
|
||||
v1.4.3 的 delivery output changed class 只有:
|
||||
|
||||
`FSHHAV`
|
||||
|
||||
因为旧版所有出现 FSHHAV AREA 的 tile 都已被 hard-gate 阻断,正常预期是复用约 19,913 PASS,只重建约 202 tile。
|
||||
|
||||
## 5. Release 状态语义
|
||||
|
||||
`finalize-production` 现在同时输出:
|
||||
|
||||
- production integrity `status`
|
||||
- `semantic_completeness`
|
||||
- `semantic_backlog`
|
||||
- `quantization_fallbacks`
|
||||
- `quantization_omissions`
|
||||
|
||||
v1.4.3 即使 production integrity PASS,只要 112 个 pending semantic variant 尚未处理:
|
||||
|
||||
`semantic_completeness = PENDING_REVIEW`
|
||||
|
||||
因此不得把 v1.4.3 称为“全国 CM95 语义全部完成”;它是生产生成链/失败恢复/安全硬门收口版。
|
||||
66
docs/CM95_PBF生产化阶段_v1_4_4.md
Normal file
66
docs/CM95_PBF生产化阶段_v1_4_4.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# CM95 PBF 生产化阶段 v1.4.4
|
||||
|
||||
## 状态
|
||||
|
||||
目标:解决 v1.4.3 全量 production 重建后剩余 45 个 `MVT encoder dropped features`。
|
||||
|
||||
v1.4.3 实测:
|
||||
|
||||
- jobs: 20,115
|
||||
- PASS: 20,070
|
||||
- FAILED: 45
|
||||
- FSHHAV hard-gate: 已解决
|
||||
- 剩余失败:全部 encoder drop
|
||||
|
||||
## 根因
|
||||
|
||||
v1.4.3 的 MVT 编码前预量化检查只能近似模拟 mapbox-vector-tile 的实际 geometry clean-up。
|
||||
实际 encoder 内部仍可能把部分 line/polygon 清理为空,因此第一遍 encode/decode 仍发现 planned ID 缺失。
|
||||
|
||||
## 修复
|
||||
|
||||
采用两阶段真实 encoder reconciliation:
|
||||
|
||||
1. encode + decode;
|
||||
2. 比较 planned IDs 与 actual IDs;
|
||||
3. 对 dropped ID:
|
||||
- 普通几何:显式 quantization omission;
|
||||
- safety-preserving layer:point fallback;
|
||||
4. 重建 planned set;
|
||||
5. 重新 encode + decode;
|
||||
6. 最终仍不一致则 fail-closed。
|
||||
|
||||
不会把 depth contour / baseline line 等普通线性对象伪造成 hazard point。
|
||||
|
||||
## Production plan 完整性修复
|
||||
|
||||
`builder_contract_version` 现在属于 immutable plan 内容,因此 builder 输出语义改变时 Plan ID / Release ID 会改变。
|
||||
|
||||
v1.4.4:
|
||||
|
||||
`cm95pbf-builder/0.4.4-encoder-reconcile`
|
||||
|
||||
这防止同一个 release 目录混用不同 encoder reconciliation 逻辑。
|
||||
|
||||
## Release Gate
|
||||
|
||||
允许:
|
||||
|
||||
- quantization omissions
|
||||
- safety point fallbacks
|
||||
- encoder probe candidates
|
||||
|
||||
禁止:
|
||||
|
||||
- final encoder_dropped_features
|
||||
- hard_gate_unmapped
|
||||
- planned/report/decode count mismatch
|
||||
- unexpected encoder output IDs
|
||||
|
||||
## 恢复策略
|
||||
|
||||
从 v1.4.3 release 迁移:
|
||||
|
||||
`cm95-d1-bfa67dd5625f-289c62fbf758`
|
||||
|
||||
预期复用 20,070 PASS,只重建 45 FAILED。
|
||||
42
docs/CM95_PBF生产化阶段_v1_4_5.md
Normal file
42
docs/CM95_PBF生产化阶段_v1_4_5.md
Normal file
@@ -0,0 +1,42 @@
|
||||
# CM95 PBF 生产化阶段 v1.4.5
|
||||
|
||||
## 目标
|
||||
|
||||
收口 v1.4.4 finalize-production 唯一剩余的 Style contract unmatched:18 个没有任何可渲染文本内容的 label-only Feature。
|
||||
|
||||
## 事实基线
|
||||
|
||||
- production jobs: 20115 / PASS 20115
|
||||
- PBF: 19751
|
||||
- planned/decoded features: 787902 / 787902
|
||||
- sprite missing: 0
|
||||
- style contract unmatched: 18
|
||||
- place_label_land / built_up_place: 9
|
||||
- seabed_text_point / seabed_material: 9
|
||||
- 18 个 tile-local Feature 分布于 16 个 tile。
|
||||
|
||||
## 修复
|
||||
|
||||
1. Builder contract 升级为 `cm95pbf-builder/0.4.5-nonrenderable-label-omit`。
|
||||
2. delivery 编码前增加 label renderability gate:
|
||||
- `place_label_land` 必须至少有非空 `place_name_en` 或 `chart_label_text`;
|
||||
- `seabed_text_point` 必须有非空 `chart_label_text`。
|
||||
3. 不满足时不进入 PBF,写入 `non_renderable_omissions`;trace 标记 `delivery_omitted=true`。
|
||||
4. 不修改 mapping/style/sprite/FID/geometry/quantization。
|
||||
5. migration 增加 `--invalidate-tiles-file`,只强制重建实际受 builder contract 变化影响的 tile。
|
||||
6. 修正 migration trace 文件扩展名为实际 `.trace.jsonl`。
|
||||
|
||||
## 预期结果
|
||||
|
||||
- 新 release jobs 20115
|
||||
- migrate reuse 20099
|
||||
- PENDING 16
|
||||
- 16 tile 重建 PASS
|
||||
- planned/decoded feature count 预计从 787902 降到 787884
|
||||
- `non_renderable_omissions = 18`
|
||||
- `style_sprite_contract.overall = PASS`
|
||||
- `contract_unmatched_count = 0`
|
||||
- `sprite_missing_count = 0`
|
||||
- finalize-production `status = PASS`
|
||||
|
||||
语义 backlog `112 variants / 52828 rows` 仍维持 `PENDING_REVIEW`,不在本版本伪装为完成。
|
||||
116
docs/CM95_PBF生产化阶段_v1_4_6.md
Normal file
116
docs/CM95_PBF生产化阶段_v1_4_6.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# CM95 PBF 生产化阶段 v1.4.6
|
||||
|
||||
## 目标
|
||||
|
||||
v1.4.6 是 **纯生产查询性能修复**。不改变 NavSea delivery 语义、FID、mapping、Style、Sprite、量化、encoder reconcile、non-renderable omission 或 Japan z12 G=1:7,500 policy。
|
||||
|
||||
## 已确认根因
|
||||
|
||||
正确 Japan Dataset 1(1492 cells / 1,282,431 source features)在 z11 高密度生产时,v1.4.5 的 `_fetch_scale_features()` 使用:
|
||||
|
||||
```sql
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ...
|
||||
JOIN chart_area_geometry g ...
|
||||
WHERE f.dataset_id=?
|
||||
AND f.native_scale=?
|
||||
AND f.geometry_type='AREA'
|
||||
AND four numeric bbox predicates
|
||||
ORDER BY c.source_relative_path, f.source_record_index
|
||||
```
|
||||
|
||||
代表性 tile EXPLAIN:
|
||||
|
||||
- `chart_feature` 驱动;
|
||||
- `key=idx_feature_class`;
|
||||
- `rows≈611,396`;
|
||||
- `Using temporary; Using filesort`。
|
||||
|
||||
同一 tile 改为 geometry spatial-first 后:
|
||||
|
||||
- `chart_area_geometry` 驱动;
|
||||
- `type=range`;
|
||||
- `key=spx_area_geom`;
|
||||
- `rows≈38`;
|
||||
- `chart_feature` 通过 PRIMARY KEY `eq_ref` 回表。
|
||||
|
||||
## v1.4.6 修改
|
||||
|
||||
### POINT / LINE / AREA
|
||||
|
||||
分别使用现有 MySQL 5.7 SPATIAL INDEX:
|
||||
|
||||
- `chart_point_geometry.spx_point_geom`
|
||||
- `chart_line_geometry.spx_line_geom`
|
||||
- `chart_area_geometry.spx_area_geom`
|
||||
|
||||
查询结构改为:
|
||||
|
||||
1. geometry table `FORCE INDEX(spx_*)`;
|
||||
2. `STRAIGHT_JOIN chart_feature`,防止 MySQL 5.7 重新选择 `chart_feature` 为驱动表;
|
||||
3. `MBRIntersects(g.geom, tile envelope)` 做 R-tree candidate lookup;
|
||||
4. 保留 v1.4.5 四个 `f.bbox_*` 条件作为第二道候选一致性 gate;
|
||||
5. 继续通过 `chart_feature` PRIMARY KEY 读取属性;
|
||||
6. 不增加/修改 importer schema。
|
||||
|
||||
### Deterministic ordering
|
||||
|
||||
v1.4.5 的 SQL `ORDER BY c.source_relative_path, f.source_record_index` 会对包含 JSON/WKB 的结果触发大量 disk temporary/filesort。
|
||||
|
||||
v1.4.6 删除 SQL ORDER BY,改为 Python 排序,同时保留原有顺序语义:
|
||||
|
||||
- 外层仍固定 `POINT → LINE → AREA`;
|
||||
- 每一种 geometry 内按 `(source_relative_path, source_record_index)` 排序;
|
||||
- sounding 按 `(source_relative_path, source_record_index, point_index)` 排序。
|
||||
|
||||
### SOUNDING
|
||||
|
||||
`chart_sounding_point` 同样显式:
|
||||
|
||||
- `FORCE INDEX(spx_sounding_geom)`;
|
||||
- `STRAIGHT_JOIN chart_feature`;
|
||||
- 保持原 `MBRContains(tile envelope, s.geom)` 语义不变;
|
||||
- 排序移到 Python。
|
||||
|
||||
## 不变项
|
||||
|
||||
- Dataset / importer / MySQL schema:不变;
|
||||
- `cm95_to_navsea_v1.yaml`:不变;
|
||||
- FID identity contract:不变;
|
||||
- delivery source-layer contract:不变;
|
||||
- encoder reconcile:不变;
|
||||
- non-renderable label omission:不变;
|
||||
- Japan gap disposition:不变;
|
||||
- Japan z12 G=1:7,500 policy:不变;
|
||||
- z0-z12 extent:不变。
|
||||
|
||||
## Builder contract
|
||||
|
||||
- project: `0.4.6`
|
||||
- runtime: `0.4.6-production-spatial-candidate-query`
|
||||
- builder: `cm95pbf-builder/0.4.6-spatial-candidate-query`
|
||||
|
||||
Builder contract 参与 production plan hash,因此必须创建新的 plan / release ID。不得用 v1.4.5 plan 直接继续 v1.4.6 build。
|
||||
|
||||
## 验收
|
||||
|
||||
正式 build 前执行:
|
||||
|
||||
```powershell
|
||||
& ".\.venv\Scripts\python.exe" .\tools\cm95_v1_4_6_preflight.py
|
||||
|
||||
& ".\.venv\Scripts\python.exe" .\tools\cm95_v1_4_6_query_equivalence.py `
|
||||
--dataset-id 1
|
||||
```
|
||||
|
||||
query equivalence 必须满足:
|
||||
|
||||
- POINT old IDs == new IDs;
|
||||
- LINE old IDs == new IDs;
|
||||
- AREA old IDs == new IDs;
|
||||
- SOUNDING old IDs == new IDs;
|
||||
- new query geometry table 为第一驱动表;
|
||||
- `type=range`;
|
||||
- 使用对应 `spx_*` index。
|
||||
|
||||
最终 release 仍允许 `semantic_completeness=PENDING_REVIEW`,但 technical final status 必须 PASS。
|
||||
47
docs/CM95_助航名称规则冻结_v1.md
Normal file
47
docs/CM95_助航名称规则冻结_v1.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# CM95 助航名称规则冻结 v1
|
||||
|
||||
## 结论
|
||||
|
||||
基于 Dataset ID=1、z10/914/385 AOI 的 1:20,000 / 1:50,000 / 1:200,000 多尺度审计,冻结以下规则:
|
||||
|
||||
1. `navigation_marks.chart_label_text` 只允许来自助航组件自身的 `OBJNAM` 或 `NOBJNM`。
|
||||
2. `_texto._texta.text` 不参与自动助航名称关联。
|
||||
3. 不使用“最近文字”“同 Cell 最近文字”“距离阈值”生成助航名称。
|
||||
4. 不从 NEWPEC / reference PBF 反向灌入名称。
|
||||
5. relation20 仍只负责同 Cell 助航组件合成,不用于关联 `_texto`。
|
||||
6. 合成组中:
|
||||
- 基体存在直接名称时,基体名称优先;
|
||||
- 否则只有一个唯一 LIGHTS 直接名称时使用该名称;
|
||||
- 若多个 LIGHTS 提供不同直接名称,则 delivery 留空,engineering trace 记录 `nav_name_conflict=true` 与所有候选。
|
||||
7. standalone LIGHTS 同样只使用自身 `OBJNAM/NOBJNM`。
|
||||
|
||||
## 审计事实
|
||||
|
||||
- 共 136 个助航组。
|
||||
- 1:20,000:62 组,7 组带直接名称。
|
||||
- 1:50,000:57 组,0 组带直接名称。
|
||||
- 1:200,000:17 组,0 组带直接名称。
|
||||
- 三个比例尺 `explicit_text_candidates = 0`。
|
||||
- `_texto` 中没有可用于显式关联的 relation/index 字段。
|
||||
- 1:20,000 的 7 个直接名称均来自 `LIGHTS.OBJNAM`,值为:
|
||||
`L2 / R1 / L1 / C1 / C1 / C2 / R2`。
|
||||
|
||||
这些值属于 CM95 源对象自身字段,因此可以保留;但它们不能被解释成 NEWPEC 的日文灯塔名,也不能作为距离文字关联的依据。
|
||||
|
||||
## 生成器实现要求
|
||||
|
||||
- `OBJNAM` 优先,`NOBJNM` fallback。
|
||||
- 不引入 `_texto` proximity lookup。
|
||||
- engineering report 统计:
|
||||
- `named_from_direct_source`
|
||||
- `name_conflict_groups`
|
||||
- engineering trace 记录:
|
||||
- `nav_name_source`
|
||||
- `nav_name_candidates`
|
||||
- `nav_name_conflict`
|
||||
|
||||
## 状态
|
||||
|
||||
名称调查:CLOSED / PASS
|
||||
|
||||
本规则不阻塞 PBF-03 后续 21 张 z10-z12 批量生成。
|
||||
389
docs/CM95到NavSea映射设计报告_v1.md
Normal file
389
docs/CM95到NavSea映射设计报告_v1.md
Normal file
@@ -0,0 +1,389 @@
|
||||
# CM95 → NavSea PBF 映射设计报告 v1
|
||||
|
||||
日期:2026-09-03
|
||||
状态:`PBF-02 / IMPLEMENTATION_DRAFT`
|
||||
测试 AOI:`z10/914/385`
|
||||
|
||||
## 1. 本轮输入
|
||||
|
||||
CM95 MySQL AOI 审计:
|
||||
|
||||
```text
|
||||
AOI Cells : 7
|
||||
AOI Spatial Features : 3605
|
||||
Object class/geom groups : 80
|
||||
Attribute groups : 177
|
||||
Feature samples : 600
|
||||
```
|
||||
|
||||
现有 NavSea/NEWPEC 对照 PBF:
|
||||
|
||||
```text
|
||||
z10 tiles : 1
|
||||
z11 tiles : 4
|
||||
z12 tiles : 16
|
||||
total : 21
|
||||
observed source-layers : 37
|
||||
```
|
||||
|
||||
实际 extent:
|
||||
|
||||
```text
|
||||
z10 : 4096
|
||||
z11 : 4096
|
||||
z12 : 1048576
|
||||
```
|
||||
|
||||
因此 CM95 generator 不应把“所有 zoom 固定 extent=4096”当成既有生产事实。首版 generator 必须把 extent 作为显式策略,并在输出审计中记录实际值。
|
||||
|
||||
## 2. CM95 AOI 主要对象
|
||||
|
||||
当前 AOI 具备完整的安全对象闭环:
|
||||
|
||||
```text
|
||||
WRECKS POINT : 480
|
||||
DEPCNT LINE : 451
|
||||
DEPARE AREA : 414
|
||||
SBDARE POINT : 287
|
||||
SLCONS LINE : 209
|
||||
UWTROC POINT : 176
|
||||
COALNE LINE : 171
|
||||
LNDARE AREA : 159
|
||||
SLCONS AREA : 119
|
||||
LIGHTS POINT : 96
|
||||
OBSTRN AREA : 70
|
||||
ITDARE AREA : 69
|
||||
```
|
||||
|
||||
同时存在 Beacon/Buoy、Bridge、overhead cable、submarine cable、pilot boarding、anchorage 等对象,可覆盖第一阶段 hard-gate。
|
||||
|
||||
## 3. 现有 NavSea PBF 实际契约
|
||||
|
||||
当前 21 张参考 PBF 中最主要的 source-layer:
|
||||
|
||||
```text
|
||||
onshore_structure_line 12940
|
||||
baseline_outline 2129
|
||||
baseline_area 1146
|
||||
bathymetry_line 1128
|
||||
anchor_caution_hazard_point 897
|
||||
depth_contour 821
|
||||
hole_area 563
|
||||
land_area 321
|
||||
seabed_text_point 273
|
||||
baseline_line 234
|
||||
anchor_caution_hazard_area 172
|
||||
anchor_caution_hazard_outline 172
|
||||
onshore_structure_area 137
|
||||
place_label_land 136
|
||||
onshore_structure_point 124
|
||||
```
|
||||
|
||||
当前 unified style 实际消费 37 个 NavSea source-layer。
|
||||
|
||||
参考 PBF 与 style 之间存在少量“PBF 有但当前 style 不消费”的历史层:
|
||||
|
||||
```text
|
||||
depth_contour_overview
|
||||
route_area
|
||||
route_outline
|
||||
```
|
||||
|
||||
因此 CM95 v1 不因为参考 PBF 中存在 `route_area` 就自动输出它。
|
||||
例如 `FAIRWY` 首版保留在工程版,避免违反“只改 tile URL 即可使用当前 style”的目标。
|
||||
|
||||
## 4. 第一版映射覆盖
|
||||
|
||||
`cm95_to_navsea_v1.yaml` 已覆盖本 AOI 全部 80 个 `object_class + geometry_type` 组合。
|
||||
|
||||
映射状态(按组合数):
|
||||
|
||||
```text
|
||||
MAPPED 33
|
||||
ENGINEERING_ONLY 12
|
||||
MAPPED_CONDITIONAL 11
|
||||
REVIEW_STYLE_GAP 11
|
||||
COMPOSITE 5
|
||||
REVIEW_CONDITIONAL 4
|
||||
ENGINEERING_COMPONENT 1
|
||||
UNMAPPED_REVIEW 1
|
||||
DERIVED_LABEL_ONLY 1
|
||||
MAPPED_DERIVED_POINTS 1
|
||||
```
|
||||
|
||||
可以直接进入映射/合成实现的 Feature 数:
|
||||
|
||||
```text
|
||||
3239 / 3605 = 89.8%
|
||||
```
|
||||
|
||||
其余对象没有静默丢弃,全部明确进入:
|
||||
|
||||
```text
|
||||
REVIEW_CONDITIONAL
|
||||
REVIEW_STYLE_GAP
|
||||
ENGINEERING_ONLY
|
||||
ENGINEERING_COMPONENT
|
||||
UNMAPPED_REVIEW
|
||||
```
|
||||
|
||||
正式 delivery 不会因为未映射而“假装成功”。
|
||||
|
||||
## 5. Hard-gate 映射
|
||||
|
||||
### DEPARE
|
||||
|
||||
```text
|
||||
DEPARE AREA
|
||||
→ baseline_area
|
||||
→ DRVAL1 / DRVAL2
|
||||
→ canonical depth range
|
||||
→ chart_fill_style=depth_zone_*
|
||||
```
|
||||
|
||||
原 polygon 不重建。
|
||||
|
||||
### DEPCNT
|
||||
|
||||
```text
|
||||
DEPCNT LINE
|
||||
→ depth_contour
|
||||
VALDCO → least_depth_m
|
||||
VALDCO → chart_label_text
|
||||
```
|
||||
|
||||
### WRECKS
|
||||
|
||||
```text
|
||||
WRECKS POINT
|
||||
→ navigation_hazard_point
|
||||
VALSOU present → wreck_surveyed
|
||||
otherwise → wreck_submerged_dangerous
|
||||
```
|
||||
|
||||
Area wreck 保持 area,不降级为 point,并额外派生 boundary 到 `navigation_hazard_outline`。
|
||||
|
||||
### UWTROC
|
||||
|
||||
```text
|
||||
UWTROC POINT
|
||||
→ navigation_hazard_point
|
||||
|
||||
WATLEV submerged → rock_submerged
|
||||
WATLEV awash/drying → rock_awash
|
||||
VALSOU → least_depth_m
|
||||
```
|
||||
|
||||
必须保留水上/水下语义。
|
||||
|
||||
### OBSTRN
|
||||
|
||||
Point 与 Area 分开:
|
||||
|
||||
```text
|
||||
POINT → navigation_hazard_point
|
||||
AREA → navigation_hazard_area + derived outline
|
||||
```
|
||||
|
||||
### FSHHAV
|
||||
|
||||
```text
|
||||
FSHHAV POINT
|
||||
→ anchor_caution_hazard_point
|
||||
→ reef_fish
|
||||
```
|
||||
|
||||
### BRIDGE / CBLOHD / TELPHC / PIPOHD
|
||||
|
||||
净空/架空安全对象使用现有:
|
||||
|
||||
```text
|
||||
bridge_structure
|
||||
clearance_limit_line
|
||||
clearance_limit_point
|
||||
```
|
||||
|
||||
存在 `VERCLR` 时才写净空数值;没有值时不伪造。
|
||||
|
||||
## 6. 助航对象必须合成,而不是简单逐对象输出
|
||||
|
||||
本轮最重要的新结论是:
|
||||
|
||||
CM93 中:
|
||||
|
||||
```text
|
||||
LIGHTS
|
||||
BCNLAT
|
||||
BCNSPP
|
||||
BOYSPP
|
||||
RTPBCN
|
||||
TOWERS
|
||||
_extgn
|
||||
```
|
||||
|
||||
可能是同一个现实助航标的多个对象组件。
|
||||
|
||||
AOI 样本已经观察到共享:
|
||||
|
||||
```text
|
||||
cell_id + attributes._cm93_relation20_raw
|
||||
```
|
||||
|
||||
并且共享 relation20 的样本坐标完全一致。
|
||||
|
||||
样本证据包括:
|
||||
|
||||
- cell `693` relation20 `2273` → `BCNLAT, LIGHTS`;坐标组数 `1`
|
||||
- cell `693` relation20 `2272` → `BCNLAT, LIGHTS`;坐标组数 `1`
|
||||
- cell `693` relation20 `2254` → `BCNLAT, LIGHTS`;坐标组数 `1`
|
||||
- cell `693` relation20 `2266` → `LIGHTS, _extgn`;坐标组数 `1`
|
||||
- cell `693` relation20 `2270` → `LIGHTS, _extgn`;坐标组数 `1`
|
||||
- cell `693` relation20 `2276` → `LIGHTS, _extgn`;坐标组数 `1`
|
||||
- cell `693` relation20 `2239` → `LIGHTS, TOWERS`;坐标组数 `1`
|
||||
- cell `693` relation20 `2241` → `LIGHTS, TOWERS`;坐标组数 `1`
|
||||
|
||||
因此 CM95 PBF Adapter 第一版采用:
|
||||
|
||||
```text
|
||||
primary composition key =
|
||||
cell_id
|
||||
+ _cm93_relation20_raw
|
||||
```
|
||||
|
||||
而不是仅凭经纬度 proximity 合并。
|
||||
|
||||
规则:
|
||||
|
||||
1. relation20 相同且坐标一致 → 合成一个 `navigation_marks` Feature;
|
||||
2. LIGHTS 的灯色、灯质、周期、高度、射程、扇区等属性并入基体;
|
||||
3. Beacon/Buoy/Tower 提供主体 symbol 语义;
|
||||
4. `_extgn` 只作为组件/trace,不单独 delivery;
|
||||
5. relation20 缺失时才允许进入 fallback;
|
||||
6. fallback 必须被审计标记,不能静默按邻近点合并。
|
||||
|
||||
在真正写 generator 前,需要用全 AOI 数据验证 relation20,而不是只依赖 600 条采样记录。
|
||||
|
||||
本包已经提供:
|
||||
|
||||
```text
|
||||
tools/cm95_nav_aid_relation_audit_v1.py
|
||||
```
|
||||
|
||||
## 7. Light 字段
|
||||
|
||||
本 AOI 实际出现的 CM93/S-57 `COLOUR` 值:
|
||||
|
||||
```text
|
||||
1 → white
|
||||
3 → red
|
||||
4 → green
|
||||
6 → yellow
|
||||
```
|
||||
|
||||
首版只对当前实际出现值建立冻结映射;其它值先进入 mapping gap,不猜值。
|
||||
|
||||
`LIGHTS` 输出至少包括:
|
||||
|
||||
```text
|
||||
light_color_code
|
||||
chart_label_text
|
||||
chart_label_subtext
|
||||
chart_text_style
|
||||
chart_text_color
|
||||
light_sector_mode
|
||||
chart_icon_image
|
||||
```
|
||||
|
||||
灯略记由:
|
||||
|
||||
```text
|
||||
LITCHR
|
||||
SIGGRP
|
||||
SIGPER
|
||||
COLOUR
|
||||
HEIGHT
|
||||
VALNMR
|
||||
```
|
||||
|
||||
组合生成。
|
||||
|
||||
## 8. Sounding
|
||||
|
||||
当前 AOI 有 `SOUNDG` Feature,并由 `chart_sounding_point` 保存多个真实 sounding points。
|
||||
|
||||
因为当前 style 没有独立 `sounding_point` source-layer,v1 采用:
|
||||
|
||||
```text
|
||||
chart_sounding_point
|
||||
→ derived point label
|
||||
→ seabed_text_point
|
||||
```
|
||||
|
||||
这是额外 render artifact,不修改/替换数据库里的原 sounding。
|
||||
|
||||
## 9. Stable identity
|
||||
|
||||
禁止把:
|
||||
|
||||
```text
|
||||
chart_feature.id
|
||||
```
|
||||
|
||||
当成长期 PBF identity。
|
||||
|
||||
v1 冻结 source identity:
|
||||
|
||||
```text
|
||||
cm95:
|
||||
dataset_id
|
||||
+ source_relative_path
|
||||
+ source_record_index
|
||||
+ geometry_role
|
||||
```
|
||||
|
||||
下一阶段 generator 会在此基础上建立稳定 FID manifest,再接现有 NavSea numeric feature-id 体系。
|
||||
|
||||
## 10. 当前尚未正式进入 delivery 的内容
|
||||
|
||||
主要包括:
|
||||
|
||||
```text
|
||||
_texto 文本归属 land/sea/facility 尚需关联判断
|
||||
BUISGL POINT 当前 style 表达不明确
|
||||
行政边界类 当前 style 不需要
|
||||
FAIRWY 参考 PBF 有 route_area,但当前 unified style 不消费
|
||||
若干一般陆上点对象 不属于 hard-gate,后续补 symbol 映射
|
||||
```
|
||||
|
||||
这些对象全部保留在工程 trace / `cm95_unmapped`,没有删除。
|
||||
|
||||
## 11. 下一步门禁
|
||||
|
||||
先执行 relation20 全 AOI 审计。
|
||||
|
||||
通过条件:
|
||||
|
||||
```text
|
||||
LIGHTS relation20 可覆盖主要灯标
|
||||
relation group 不出现明显坐标冲突
|
||||
跨 Cell 不发生错误合并
|
||||
无法合并的 LIGHTS 数量明确
|
||||
```
|
||||
|
||||
通过后进入:
|
||||
|
||||
```text
|
||||
PBF-03
|
||||
CM95 MySQL → z10/914/385 单 tile generator
|
||||
```
|
||||
|
||||
第一版 generator 将只实现当前已经冻结的映射,并同时输出:
|
||||
|
||||
```text
|
||||
delivery PBF
|
||||
engineering PBF / trace
|
||||
cm95_unmapped report
|
||||
FID audit
|
||||
sprite closure audit
|
||||
object preservation audit
|
||||
```
|
||||
35
docs/PBF03_离线自检报告_v1.md
Normal file
35
docs/PBF03_离线自检报告_v1.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# PBF-03 离线自检报告 v1
|
||||
|
||||
状态:`PASS / WAITING FOR USER MYSQL + WINDOWS MVT BUILD`
|
||||
|
||||
## 已检查
|
||||
|
||||
- 当前仓库 `pyproject.toml` 基线已读取并按完整文件方式更新。
|
||||
- `requirements.txt` 已同步新增 `PyYAML` 与 `mapbox-vector-tile`。
|
||||
- 新增包:`src/cm95pbf/`,不修改 `src/cm93db/` importer/geometry。
|
||||
- Mapping:80 条 `object_class + geometry_type` 规则,无重复 key。
|
||||
- 当前 NavSea style:37 个 `source-layer`。
|
||||
- 当前 semantic sprite:476 个 key。
|
||||
- Mapping contract:layer failure = 0,sprite failure = 0。
|
||||
- AOI:`z10/914/385`。
|
||||
- Tile math:WGS84 bbox 与前置 AOI 审计一致。
|
||||
- 子瓦片:z11 = 4 张,z12 = 16 张。
|
||||
- relation20:96 LIGHTS 中 94 可安全关联,坐标冲突 0,2 条独立 LIGHTS。
|
||||
- Python 静态编译:`src/cm95pbf/*.py` 与 `tools/*.py` PASS。
|
||||
|
||||
## 生成器原则
|
||||
|
||||
- MySQL 只读。
|
||||
- 不使用 `chart_feature.id` 作为外部稳定 MVT id。
|
||||
- 使用 Dataset FID manifest。
|
||||
- Coverage 决定同一 tile 内的比例尺优先级和回退区域。
|
||||
- Engineering 版保留 trace;Delivery 版按当前 NavSea delivery allowlist 裁字段。
|
||||
- 无安全映射对象不进入正式 delivery,engineering 进入 `cm95_unmapped`。
|
||||
- 扇区灯第一轮不伪造 `arc_id`;待与实际生成结果和现有 PBF 做专项闭合。
|
||||
|
||||
## 尚需用户环境验证
|
||||
|
||||
- MySQL 实际查询与 Coverage 回退。
|
||||
- `mapbox-vector-tile` Windows 编码结果。
|
||||
- 21 张 PBF 实际 decode/audit。
|
||||
- 与现有 NavSea/NEWPEC 同 AOI 的 source-layer、hard-gate 和视觉对照。
|
||||
34
docs/PBF03_离线自检报告_v1_1.md
Normal file
34
docs/PBF03_离线自检报告_v1_1.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# PBF-03 Pilot Generator v1.1 离线自检报告
|
||||
|
||||
## 变更
|
||||
|
||||
v1.1 在已通过单 tile 二进制兼容性检查的 v1 基线上,只补充助航名称契约:
|
||||
|
||||
- 新增 `OBJNAM -> NOBJNM` fallback;
|
||||
- 多灯组直接名称冲突不写入 delivery;
|
||||
- engineering trace 记录名称来源/候选/冲突;
|
||||
- build report 增加直接名称与名称冲突统计;
|
||||
- `_texto` 距离候选仍完全不参与生成。
|
||||
|
||||
## 静态检查
|
||||
|
||||
- Python `py_compile`:PASS
|
||||
- Mapping rules:80
|
||||
- 助航名称 direct helper:PASS
|
||||
- 当前 mapping 的 LIGHTS `chart_label_text`:`first_present(OBJNAM,NOBJNM)`
|
||||
- 不修改 importer / geometry / schema。
|
||||
- z10/z11/z12 extent policy 不变。
|
||||
- build-sample-aoi 仍固定生成 1 + 4 + 16 = 21 张/每 profile。
|
||||
|
||||
## 运行时待验证
|
||||
|
||||
本环境没有用户 MySQL Dataset,因此以下由用户本机执行:
|
||||
|
||||
1. 重新安装 editable project;
|
||||
2. 运行 `build-sample-aoi`;
|
||||
3. 运行 delivery build report audit;
|
||||
4. 上传 `sample_aoi_summary_v1.json` 与 `cm95_pbf_build_reports_audit_v1.json`。
|
||||
|
||||
## Gate
|
||||
|
||||
允许进入 21 张 Pilot 批量生成。
|
||||
866
docs/cm95_global_mapping_gap_closure_audit_v2.json
Normal file
866
docs/cm95_global_mapping_gap_closure_audit_v2.json
Normal file
@@ -0,0 +1,866 @@
|
||||
{
|
||||
"schema": "navsea.cm95.global-mapping-gap-closure-audit/v2",
|
||||
"dataset_id": 1,
|
||||
"observed_gap_variants": 141,
|
||||
"unclassified_variants": [],
|
||||
"newly_delivery_mapped": [
|
||||
{
|
||||
"object_class": "FSHHAV",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 51,
|
||||
"disposition": "DELIVERY_MAPPED_V1_4_3"
|
||||
}
|
||||
],
|
||||
"existing_explicit_non_delivery": [
|
||||
{
|
||||
"object_class": "_texto",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 13911,
|
||||
"disposition": "EXISTING_REVIEW_CONDITIONAL"
|
||||
},
|
||||
{
|
||||
"object_class": "$LINES",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 2652,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "CTNARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2546,
|
||||
"disposition": "EXISTING_REVIEW_CONDITIONAL"
|
||||
},
|
||||
{
|
||||
"object_class": "CTNARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 2262,
|
||||
"disposition": "EXISTING_REVIEW_CONDITIONAL"
|
||||
},
|
||||
{
|
||||
"object_class": "BUAARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2046,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "M_PROD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 784,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "$COMPS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 538,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "BUISGL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 516,
|
||||
"disposition": "EXISTING_UNMAPPED_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "_extgn",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 462,
|
||||
"disposition": "EXISTING_ENGINEERING_COMPONENT"
|
||||
},
|
||||
{
|
||||
"object_class": "TNKCON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 426,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "$AREAS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 418,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "NATARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 315,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "TESARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 277,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "BUIREL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 246,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "HRBARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 204,
|
||||
"disposition": "EXISTING_REVIEW_CONDITIONAL"
|
||||
},
|
||||
{
|
||||
"object_class": "CRANES",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 167,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "FAIRWY",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 157,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "CTRPNT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 151,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "PRDINS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 131,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "EXEZNE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 64,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "SILBUI",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 60,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "SISTAW",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 59,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "CONZNE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 47,
|
||||
"disposition": "EXISTING_ENGINEERING_ONLY"
|
||||
},
|
||||
{
|
||||
"object_class": "SISTAT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 43,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "PYLONS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 33,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "MONUMT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 20,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "AIRARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 16,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
},
|
||||
{
|
||||
"object_class": "RSCSTA",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 13,
|
||||
"disposition": "EXISTING_REVIEW_STYLE_GAP"
|
||||
}
|
||||
],
|
||||
"pending_semantic_review": [
|
||||
{
|
||||
"object_class": "RIVERS",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 17606,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SLOTOP",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 7572,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LNDELV",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 5441,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SLOGRD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5181,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LNDRGN",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3041,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TOPMAR",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1572,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ROADPT",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 1408,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WEDKLP",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1288,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "VEGARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 881,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RECTRC",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 807,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BOYLAT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 762,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RESARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 671,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RAILWY",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 477,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WATTUR",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 474,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ACHBRT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 408,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "NAVLNE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 399,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSSLPT",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 337,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BRTFAC",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 311,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RADRFL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 280,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LOCMAG",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 264,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "MARCUL",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 234,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSSBND",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 233,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BOYCAR",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 217,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RDOSTA",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 206,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WATTUR",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 172,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FOGSIG",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 150,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSEZNE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 145,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "STSLNE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 137,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ACHARE",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 134,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BOYSAW",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 114,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CANALS",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 111,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CAUSWY",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 99,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ICEARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 97,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ROADPT",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 95,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "PONTON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 91,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CANBNK",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 81,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DMPGRD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 73,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RCRTCL",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 70,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FSHFAC",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 64,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WEDKLP",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 56,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DAMCON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 53,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SPOGRD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 53,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LOCMAG",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 52,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DYKCRW",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 51,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WIMCON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 51,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "OFSPLF",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 49,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "$TEXTS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 48,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "MSTCON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 48,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RDOCAL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 44,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BOYISD",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 42,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSELNE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 41,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FLASTK",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 39,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CANALS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 34,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SLTPAN",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 32,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FLODOC",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 28,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DRYDOC",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 25,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "PRCARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 22,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FSHFAC",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 19,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RADSTA",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 18,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSSRON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 17,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "MARCUL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 16,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DYKARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 15,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DMPGRD",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 14,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "GATCON",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 14,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SLIPWY",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 13,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SNDWAV",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 13,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "GATCON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 12,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FNCLNE",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 11,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LOGPON",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 11,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "PIPARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 11,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "PILBOP",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 10,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BCNISD",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 9,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CGUSTA",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 9,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CRANES",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 9,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WATFAL",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 9,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BCNCAR",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 8,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FSHFAC",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 8,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BOYINB",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 7,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DIFFUS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 7,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DSHAER",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 6,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "OILBAR",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 6,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "PYLONS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 6,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BUIREL",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CBLARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "HILARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "HULKES",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LITVES",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "TSSCRS",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 5,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "$CSYMB",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 4,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ACHBRT",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 4,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CEMTRY",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 4,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "ACHPNT",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CAUSWY",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CEMTRY",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DIFFUS",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FLGSTF",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "WATTUR",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 3,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CHNWIR",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 2,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "CTSARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "OFSPRD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RMPARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 2,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "AIRARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "BCNSAW",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "DOCARE",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FERYRT",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FLODOC",
|
||||
"geometry_type": "LINE",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "FSHGRD",
|
||||
"geometry_type": "AREA",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "GATCON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "LOGPON",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "RADDOM",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SPOGRD",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
},
|
||||
{
|
||||
"object_class": "SPRING",
|
||||
"geometry_type": "POINT",
|
||||
"feature_count": 1,
|
||||
"disposition": "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
}
|
||||
],
|
||||
"pending_semantic_review_feature_rows": 52828,
|
||||
"fshhav_area_hard_gate_mapping_ok": true,
|
||||
"delivery_output_changed_object_classes": [
|
||||
"FSHHAV"
|
||||
],
|
||||
"delivery_change_contract_ok": true,
|
||||
"semantic_completeness": "PENDING_REVIEW",
|
||||
"overall": "PASS"
|
||||
}
|
||||
12
docs/cm95_mapping_contract_check_v1.json
Normal file
12
docs/cm95_mapping_contract_check_v1.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"mapping": "/mnt/data/cm95_pbf_pilot_generator_v1/config/mappings/cm95_to_navsea_v1.yaml",
|
||||
"style": "/mnt/data/_pbf_sample/style.navsea-delivery-full-semantic-unified-20260808.json",
|
||||
"sprite_json": "/mnt/data/_pbf_sample/semantic-sprite/sprite.json",
|
||||
"style_source_layer_count": 37,
|
||||
"sprite_key_count": 476,
|
||||
"rule_count": 80,
|
||||
"layer_failures": [],
|
||||
"sprite_failures": [],
|
||||
"failure_count": 0,
|
||||
"overall": "PASS"
|
||||
}
|
||||
12
docs/cm95_mapping_contract_check_v1_1.json
Normal file
12
docs/cm95_mapping_contract_check_v1_1.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"mapping": "/mnt/data/cm95_pbf_pilot_generator_v1_1/config/mappings/cm95_to_navsea_v1.yaml",
|
||||
"style": "/mnt/data/navsea_contract_ref/style.navsea-delivery-full-semantic-unified-20260808.json",
|
||||
"sprite_json": "/mnt/data/navsea_contract_ref/semantic-sprite/sprite.json",
|
||||
"style_source_layer_count": 37,
|
||||
"sprite_key_count": 476,
|
||||
"rule_count": 80,
|
||||
"layer_failures": [],
|
||||
"sprite_failures": [],
|
||||
"failure_count": 0,
|
||||
"overall": "PASS"
|
||||
}
|
||||
12
docs/cm95_mapping_contract_check_v1_4_3.json
Normal file
12
docs/cm95_mapping_contract_check_v1_4_3.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"mapping": "/mnt/data/cm95_pbf_production_v1_4_3/cm95_pbf_production_v1_4/config/mappings/cm95_to_navsea_v1.yaml",
|
||||
"style": "/mnt/data/cm95_pbf_production_v1_4_3/cm95_pbf_production_v1_4/config/style/style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json",
|
||||
"sprite_json": "/mnt/data/cm95_pbf_production_v1_4_3/cm95_pbf_production_v1_4/config/sprite/semantic-sprite-20260808.json",
|
||||
"style_source_layer_count": 37,
|
||||
"sprite_key_count": 476,
|
||||
"rule_count": 81,
|
||||
"layer_failures": [],
|
||||
"sprite_failures": [],
|
||||
"failure_count": 0,
|
||||
"overall": "PASS"
|
||||
}
|
||||
@@ -4,18 +4,21 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "cm93-mysql-importer"
|
||||
version = "0.2.0"
|
||||
description = "CM93 complete high-precision importer and auditor for MySQL 5.7"
|
||||
version = "0.4.7"
|
||||
description = "CM93 complete high-precision importer/auditor and CM95-to-NavSea PBF frozen-pilot and production generator for MySQL 5.7"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12,<3.13"
|
||||
dependencies = [
|
||||
"PyMySQL>=1.1,<2",
|
||||
"python-dotenv>=1.0,<2",
|
||||
"Shapely>=2.0,<3",
|
||||
"PyYAML>=6.0,<7",
|
||||
"mapbox-vector-tile>=2.2,<3",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
cm93db = "cm93db.cli:main"
|
||||
cm95pbf = "cm95pbf.cli:main"
|
||||
|
||||
[tool.setuptools]
|
||||
package-dir = {"" = "src"}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
PyMySQL>=1.1,<2
|
||||
python-dotenv>=1.0,<2
|
||||
Shapely>=2.0,<3
|
||||
PyYAML>=6.0,<7
|
||||
mapbox-vector-tile>=2.2,<3
|
||||
|
||||
392
scripts/cm95_japan_continue_from_step8.ps1
Normal file
392
scripts/cm95_japan_continue_from_step8.ps1
Normal file
@@ -0,0 +1,392 @@
|
||||
param(
|
||||
[string]$ProjectRoot = "D:\React\cm93-mysql-importer-starter",
|
||||
[string]$SourceRoot = "D:\Ship\CM93V2\CM93JAPAN",
|
||||
[int]$DatasetId = 1,
|
||||
[int]$ExpectedCells = 1492,
|
||||
[int]$Workers = 4
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Step([string]$Text) {
|
||||
Write-Host ""
|
||||
Write-Host "======================================================================"
|
||||
Write-Host $Text
|
||||
Write-Host "======================================================================"
|
||||
}
|
||||
|
||||
function Run([string]$Label, [scriptblock]$Action) {
|
||||
Step $Label
|
||||
& $Action
|
||||
$Code = $LASTEXITCODE
|
||||
if ($null -ne $Code -and $Code -ne 0) {
|
||||
throw "$Label FAILED (exit=$Code)"
|
||||
}
|
||||
}
|
||||
|
||||
function StateCount($States, [string]$Name) {
|
||||
if ($null -eq $States) { return 0 }
|
||||
$P = $States.PSObject.Properties[$Name]
|
||||
if ($null -eq $P) { return 0 }
|
||||
return [int]$P.Value
|
||||
}
|
||||
|
||||
Set-Location $ProjectRoot
|
||||
|
||||
$Python = ".\.venv\Scripts\python.exe"
|
||||
$Cm95Pbf = ".\.venv\Scripts\cm95pbf.exe"
|
||||
|
||||
$Mapping = ".\config\mappings\cm95_to_navsea_v1.yaml"
|
||||
$Disposition = ".\config\mappings\cm95_gap_disposition_japan_dataset_1_v1.yaml"
|
||||
$Policy = ".\config\pbf\cm95_tile_policy_japan_full_detail_v1.yaml"
|
||||
|
||||
$GapAudit = ".\build\production\cm95_global_mapping_gap_audit_dataset_1.json"
|
||||
$Closure = ".\build\production\cm95_global_mapping_gap_closure_dataset_1_after_review.json"
|
||||
$MappingContract = ".\build\production\cm95_mapping_contract_check_japan_dataset_1.json"
|
||||
|
||||
$Manifest = ".\build\cm95_fid_manifest_japan_dataset_1_v1.sqlite"
|
||||
$Plan = ".\build\production\cm95_production_plan_japan_full_detail_v1.json"
|
||||
$PlanAudit = ".\build\production\cm95_production_plan_audit_japan_full_detail_v1.json"
|
||||
|
||||
foreach ($Path in @($Python,$Cm95Pbf,$Mapping,$Disposition,$Policy)) {
|
||||
if (-not (Test-Path $Path)) {
|
||||
throw "Missing required file: $Path"
|
||||
}
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 0. Verify v1.4.5 runtime
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 0 - CM95 v1.4.5 preflight" {
|
||||
& $Python ".\tools\cm95_v1_4_5_preflight.py"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 1. Verify fresh Japan Dataset in MySQL, no reimport
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Step "STEP 1 - Verify existing fresh Japan Dataset"
|
||||
|
||||
$Tmp = Join-Path $env:TEMP ("cm95_japan_continue_" + $PID)
|
||||
Remove-Item $Tmp -Recurse -Force -ErrorAction SilentlyContinue
|
||||
New-Item -ItemType Directory -Path $Tmp | Out-Null
|
||||
|
||||
try {
|
||||
$Helper = Join-Path $Tmp "verify_dataset.py"
|
||||
|
||||
@'
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
import os, sys, json, pymysql
|
||||
|
||||
project_root = Path(sys.argv[1]).resolve()
|
||||
dataset_id = int(sys.argv[2])
|
||||
expected_root = str(Path(sys.argv[3]).resolve())
|
||||
|
||||
load_dotenv(dotenv_path=project_root / ".env")
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=os.getenv("CM93_DB_HOST", "127.0.0.1"),
|
||||
port=int(os.getenv("CM93_DB_PORT", "3306")),
|
||||
user=os.getenv("CM93_DB_USER", "root"),
|
||||
password=os.getenv("CM93_DB_PASSWORD", ""),
|
||||
database=os.getenv("CM93_DB_NAME", "cm93_chart"),
|
||||
charset=os.getenv("CM93_DB_CHARSET", "utf8mb4"),
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
)
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT d.id,d.name,d.source_root,
|
||||
COUNT(c.id) cells,
|
||||
SUM(c.import_status='DONE') done_cells,
|
||||
SUM(c.import_status='FAILED') failed_cells
|
||||
FROM chart_dataset d
|
||||
LEFT JOIN chart_cell c ON c.dataset_id=d.id
|
||||
WHERE d.id=%s
|
||||
GROUP BY d.id,d.name,d.source_root
|
||||
""",
|
||||
(dataset_id,),
|
||||
)
|
||||
row = cur.fetchone()
|
||||
if not row:
|
||||
raise RuntimeError(f"dataset {dataset_id} not found")
|
||||
|
||||
actual_root = str(Path(row["source_root"]).resolve())
|
||||
|
||||
result = {
|
||||
"id": int(row["id"]),
|
||||
"name": row["name"],
|
||||
"source_root": actual_root,
|
||||
"cells": int(row["cells"] or 0),
|
||||
"done_cells": int(row["done_cells"] or 0),
|
||||
"failed_cells": int(row["failed_cells"] or 0),
|
||||
}
|
||||
|
||||
if actual_root.lower() != expected_root.lower():
|
||||
raise RuntimeError(
|
||||
f"source_root mismatch: {actual_root} != {expected_root}"
|
||||
)
|
||||
|
||||
print(json.dumps(result, ensure_ascii=False))
|
||||
finally:
|
||||
conn.close()
|
||||
'@ | Set-Content $Helper -Encoding UTF8
|
||||
|
||||
$DatasetText = (
|
||||
& $Python $Helper $ProjectRoot $DatasetId $SourceRoot |
|
||||
Out-String
|
||||
).Trim()
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "Dataset verification failed"
|
||||
}
|
||||
|
||||
$Dataset = $DatasetText | ConvertFrom-Json
|
||||
|
||||
if ([int]$Dataset.cells -ne $ExpectedCells -or
|
||||
[int]$Dataset.done_cells -ne $ExpectedCells -or
|
||||
[int]$Dataset.failed_cells -ne 0) {
|
||||
throw "Dataset state mismatch: $DatasetText"
|
||||
}
|
||||
|
||||
Write-Host $DatasetText
|
||||
|
||||
}
|
||||
finally {
|
||||
Remove-Item $Tmp -Recurse -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 2. Re-run gap audit and closure with the new dataset-specific disposition
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 2A - Re-run global mapping gap audit" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_audit_v1.py" `
|
||||
--dataset-id $DatasetId `
|
||||
--mapping $Mapping `
|
||||
--output $GapAudit
|
||||
}
|
||||
|
||||
Run "STEP 2B - Close 25 new Japan gap variants" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_closure_audit_v2.py" `
|
||||
--gap-audit $GapAudit `
|
||||
--mapping $Mapping `
|
||||
--disposition $Disposition `
|
||||
--output $Closure
|
||||
}
|
||||
|
||||
$C = Get-Content $Closure -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$C.overall -ne "PASS") {
|
||||
throw "Mapping gap closure is not PASS"
|
||||
}
|
||||
if (@($C.unclassified_variants).Count -ne 0) {
|
||||
throw "Unclassified variants remain"
|
||||
}
|
||||
if ([int]$C.observed_gap_variants -ne 165) {
|
||||
throw "Unexpected gap variant count: $($C.observed_gap_variants)"
|
||||
}
|
||||
if (@($C.pending_semantic_review).Count -ne 137) {
|
||||
throw "Unexpected pending variant count: $(@($C.pending_semantic_review).Count)"
|
||||
}
|
||||
if ([int]$C.pending_semantic_review_feature_rows -ne 90009) {
|
||||
throw "Unexpected pending rows: $($C.pending_semantic_review_feature_rows)"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Expected closure confirmed:"
|
||||
Write-Host " observed = 165"
|
||||
Write-Host " unclassified = 0"
|
||||
Write-Host " pending = 137"
|
||||
Write-Host " pending rows = 90009"
|
||||
Write-Host " overall = PASS"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 3. Static mapping/style/sprite contract
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 3 - Mapping / Style / Sprite static contract" {
|
||||
& $Python ".\tools\cm95_mapping_contract_check_v1.py" `
|
||||
--mapping $Mapping `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--output $MappingContract
|
||||
}
|
||||
|
||||
$MC = Get-Content $MappingContract -Raw | ConvertFrom-Json
|
||||
if ([string]$MC.overall -ne "PASS") {
|
||||
throw "Mapping/style/sprite contract failed"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 4. Full-detail policy hard gate: G=7500 must be in z12
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Step "STEP 4 - Japan full-detail policy check"
|
||||
|
||||
$PolicyObj = Get-Content $Policy -Raw |
|
||||
& $Python -c "import sys,yaml,json; print(json.dumps(yaml.safe_load(sys.stdin.read())))" |
|
||||
ConvertFrom-Json
|
||||
|
||||
# No multi-line Python is passed here; only a fixed one-line expression.
|
||||
$Enum12 = @($PolicyObj.enumeration_scales.'12')
|
||||
$Ladder12 = @($PolicyObj.scale_ladders.'12')
|
||||
|
||||
if (7500 -notin $Enum12 -or
|
||||
$Ladder12.Count -eq 0 -or
|
||||
[int]$Ladder12[0] -ne 7500) {
|
||||
throw "Japan full-detail policy does not prioritize G=7500 at z12"
|
||||
}
|
||||
|
||||
Write-Host "z12 enumeration : $($Enum12 -join ', ')"
|
||||
Write-Host "z12 ladder : $($Ladder12 -join ', ')"
|
||||
Write-Host "G=7500 gate : PASS"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 5. Reset PBF-side outputs only. MySQL remains untouched.
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Step "STEP 5 - Reset PBF-side outputs only"
|
||||
|
||||
Remove-Item ".\build\releases" -Recurse -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item $Manifest -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item $Plan -Force -ErrorAction SilentlyContinue
|
||||
Remove-Item $PlanAudit -Force -ErrorAction SilentlyContinue
|
||||
|
||||
New-Item -ItemType Directory -Force -Path ".\build\releases" | Out-Null
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 6. Fresh deterministic FID manifest
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 6 - Build fresh FID manifest" {
|
||||
& $Cm95Pbf build-fid-manifest `
|
||||
--dataset-id $DatasetId `
|
||||
--manifest $Manifest `
|
||||
--rebuild-fid-manifest
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 7. Fresh production plan using G=7500-aware z12 policy
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 7A - plan-production z0-z12 Japan full detail" {
|
||||
& $Cm95Pbf plan-production `
|
||||
--dataset-id $DatasetId `
|
||||
--zooms 0-12 `
|
||||
--profile delivery `
|
||||
--mapping $Mapping `
|
||||
--policy $Policy `
|
||||
--manifest $Manifest `
|
||||
--output $Plan
|
||||
}
|
||||
|
||||
Run "STEP 7B - production plan audit" {
|
||||
& $Python ".\tools\cm95_production_plan_audit_v1.py" `
|
||||
--plan $Plan `
|
||||
--expected-zooms 0-12 `
|
||||
--output $PlanAudit
|
||||
}
|
||||
|
||||
$PA = Get-Content $PlanAudit -Raw | ConvertFrom-Json
|
||||
if ([string]$PA.overall -ne "PASS") {
|
||||
throw "Production plan audit failed"
|
||||
}
|
||||
|
||||
$PlanObj = Get-Content $Plan -Raw | ConvertFrom-Json
|
||||
$ReleaseId = [string]$PlanObj.release_id
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Plan ID : $($PlanObj.plan_id)"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($PlanObj.job_count)"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 8. Full production build
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 8 - Full PBF production build" {
|
||||
& $Cm95Pbf build-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--workers $Workers `
|
||||
--max-attempts 3
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 9. Status
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Step "STEP 9 - Production status"
|
||||
|
||||
$StatusText = (
|
||||
& $Cm95Pbf status-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" |
|
||||
Out-String
|
||||
).Trim()
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
throw "status-production failed"
|
||||
}
|
||||
|
||||
Write-Host $StatusText
|
||||
|
||||
$S = $StatusText | ConvertFrom-Json
|
||||
|
||||
$Pass = StateCount $S.states "PASS"
|
||||
$Fail = StateCount $S.states "FAILED"
|
||||
$Pending = StateCount $S.states "PENDING"
|
||||
$Running = StateCount $S.states "RUNNING"
|
||||
|
||||
if ($Pass -ne [int]$S.jobs -or
|
||||
$Fail -ne 0 -or
|
||||
$Pending -ne 0 -or
|
||||
$Running -ne 0) {
|
||||
throw "Production state gate failed"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 10. Final release gate
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Run "STEP 10 - Finalize production release" {
|
||||
& $Cm95Pbf finalize-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--gap-disposition $Disposition
|
||||
}
|
||||
|
||||
$ReleaseManifest = ".\build\releases\$ReleaseId\release_manifest_v1.json"
|
||||
|
||||
if (-not (Test-Path $ReleaseManifest)) {
|
||||
throw "Release manifest missing: $ReleaseManifest"
|
||||
}
|
||||
|
||||
$Final = Get-Content $ReleaseManifest -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$Final.status -ne "PASS") {
|
||||
throw "Final release status is not PASS"
|
||||
}
|
||||
|
||||
Step "JAPAN CONTINUATION COMPLETE / PASS"
|
||||
|
||||
Write-Host "Dataset ID : $DatasetId"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($S.jobs)"
|
||||
Write-Host "PBF files : $($S.pbf_files)"
|
||||
Write-Host "Output features : $($S.output_features)"
|
||||
Write-Host "Semantic status : $($Final.semantic_completeness)"
|
||||
Write-Host "Pending variants : 137"
|
||||
Write-Host "Pending rows : 90009"
|
||||
Write-Host ""
|
||||
Write-Host "Web test:"
|
||||
Write-Host " cd `"$ProjectRoot`""
|
||||
Write-Host " & `".\.venv\Scripts\python.exe`" .\web\cm95_web.py --release-id `"$ReleaseId`""
|
||||
946
scripts/cm95_japan_full_rebuild_pipeline.ps1
Normal file
946
scripts/cm95_japan_full_rebuild_pipeline.ps1
Normal file
@@ -0,0 +1,946 @@
|
||||
param(
|
||||
[string]$ProjectRoot = "D:\React\cm93-mysql-importer-starter",
|
||||
[string]$SourceRoot = "D:\Ship\CM93V2\CM93JAPAN",
|
||||
[int]$ExpectedCells = 1492,
|
||||
[int]$Workers = 4,
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
# CM95 Japan Full Rebuild Pipeline v2
|
||||
#
|
||||
# 从零重建:
|
||||
# CM93 source -> fresh MySQL -> audit -> mapping gates
|
||||
# -> fresh FID manifest -> fresh production plan
|
||||
# -> full PBF build -> final release gate
|
||||
#
|
||||
# Windows 11 / PowerShell
|
||||
#
|
||||
# 破坏性范围:
|
||||
# - DROP .env 中 CM93_DB_NAME 整个数据库
|
||||
# - 删除旧 build\production
|
||||
# - 删除旧 build\releases
|
||||
# - 删除旧 build\pbf
|
||||
# - 删除旧 build\pbf-reports
|
||||
# - 删除旧 build\cm95_fid_manifest*.sqlite*
|
||||
#
|
||||
# 不会删除:
|
||||
# - D:\Ship\CM93V2\CM93JAPAN
|
||||
# - src\
|
||||
# - config\
|
||||
# - web\
|
||||
# - logs\ 历史文件
|
||||
#
|
||||
# v2 修正:
|
||||
# - 禁止 python.exe -c 多行代码,避免 Windows/PowerShell 引号损坏
|
||||
# - 临时 Python helper 一律落盘执行
|
||||
# - audit JSON gate 对齐当前 cm93db AuditResult
|
||||
# - geometry_validity_issues 保持 informational
|
||||
# - status JSON 使用 Out-String 后再 ConvertFrom-Json
|
||||
# - 生成当前 Dataset 专属 semantic disposition summary
|
||||
#
|
||||
# 如果新 Dataset 出现未分类 mapping gap,会在 PBF build 前 STOP。
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Write-Step {
|
||||
param([string]$Text)
|
||||
Write-Host ""
|
||||
Write-Host "======================================================================"
|
||||
Write-Host $Text
|
||||
Write-Host "======================================================================"
|
||||
}
|
||||
|
||||
function Invoke-Checked {
|
||||
param(
|
||||
[string]$Label,
|
||||
[scriptblock]$Action
|
||||
)
|
||||
|
||||
Write-Step $Label
|
||||
|
||||
& $Action
|
||||
$ExitCode = $LASTEXITCODE
|
||||
|
||||
if ($null -ne $ExitCode -and $ExitCode -ne 0) {
|
||||
throw "$Label FAILED (exit code=$ExitCode)"
|
||||
}
|
||||
}
|
||||
|
||||
function Remove-PathIfExists {
|
||||
param([string]$PathValue)
|
||||
|
||||
if (Test-Path $PathValue) {
|
||||
Write-Host "DELETE: $PathValue"
|
||||
Remove-Item $PathValue -Recurse -Force
|
||||
}
|
||||
}
|
||||
|
||||
function Get-StateCount {
|
||||
param(
|
||||
[object]$States,
|
||||
[string]$Name
|
||||
)
|
||||
|
||||
if ($null -eq $States) {
|
||||
return 0
|
||||
}
|
||||
|
||||
$Prop = $States.PSObject.Properties[$Name]
|
||||
if ($null -eq $Prop) {
|
||||
return 0
|
||||
}
|
||||
|
||||
return [int]$Prop.Value
|
||||
}
|
||||
|
||||
if (-not (Test-Path $ProjectRoot -PathType Container)) {
|
||||
throw "ProjectRoot 不存在: $ProjectRoot"
|
||||
}
|
||||
|
||||
if (-not (Test-Path $SourceRoot -PathType Container)) {
|
||||
throw "SourceRoot 不存在: $SourceRoot"
|
||||
}
|
||||
|
||||
Set-Location $ProjectRoot
|
||||
|
||||
$ProjectRoot = (Resolve-Path $ProjectRoot).Path
|
||||
$SourceRoot = (Resolve-Path $SourceRoot).Path
|
||||
|
||||
$Python = Join-Path $ProjectRoot ".venv\Scripts\python.exe"
|
||||
$Cm93Db = Join-Path $ProjectRoot ".venv\Scripts\cm93db.exe"
|
||||
$Cm95Pbf = Join-Path $ProjectRoot ".venv\Scripts\cm95pbf.exe"
|
||||
$EnvPath = Join-Path $ProjectRoot ".env"
|
||||
|
||||
foreach ($RequiredExe in @($Python, $Cm93Db, $Cm95Pbf)) {
|
||||
if (-not (Test-Path $RequiredExe -PathType Leaf)) {
|
||||
throw "缺少运行文件: $RequiredExe"
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Path $EnvPath -PathType Leaf)) {
|
||||
throw "缺少项目 .env: $EnvPath"
|
||||
}
|
||||
|
||||
# 临时 helper 放系统 TEMP,不受 build 清理影响。
|
||||
$TempRoot = Join-Path $env:TEMP ("cm95_japan_pipeline_v2_" + $PID)
|
||||
|
||||
Remove-Item $TempRoot -Recurse -Force -ErrorAction SilentlyContinue
|
||||
New-Item -ItemType Directory -Path $TempRoot -Force | Out-Null
|
||||
|
||||
try {
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 0 - Source hard gate
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Write-Step "STEP 0 - Japan CM93 源目录检查"
|
||||
|
||||
$RequiredRegions = @(
|
||||
"03300360",
|
||||
"03300420",
|
||||
"03900360",
|
||||
"03900420"
|
||||
)
|
||||
|
||||
$ActualRegions = @(
|
||||
Get-ChildItem $SourceRoot -Directory -ErrorAction Stop |
|
||||
Where-Object { $_.Name -match '^\d{8}$' } |
|
||||
ForEach-Object { $_.Name } |
|
||||
Sort-Object
|
||||
)
|
||||
|
||||
$MissingRegions = @(
|
||||
$RequiredRegions |
|
||||
Where-Object { $_ -notin $ActualRegions }
|
||||
)
|
||||
|
||||
$ExtraRegions = @(
|
||||
$ActualRegions |
|
||||
Where-Object { $_ -notin $RequiredRegions }
|
||||
)
|
||||
|
||||
Write-Host "SourceRoot:"
|
||||
Write-Host " $SourceRoot"
|
||||
Write-Host ""
|
||||
Write-Host "Numeric regions:"
|
||||
$ActualRegions | ForEach-Object { Write-Host " $_" }
|
||||
|
||||
if ($MissingRegions.Count -gt 0) {
|
||||
throw "缺少 Japan 必需区域: $($MissingRegions -join ', ')"
|
||||
}
|
||||
|
||||
if ($ExtraRegions.Count -gt 0) {
|
||||
throw "发现 Japan 工作集之外的数字区域,停止: $($ExtraRegions -join ', ')"
|
||||
}
|
||||
|
||||
if (-not (Test-Path (Join-Path $SourceRoot "CM93OBJ.DIC"))) {
|
||||
throw "缺少 CM93OBJ.DIC"
|
||||
}
|
||||
|
||||
$HasAttrDic =
|
||||
(Test-Path (Join-Path $SourceRoot "CM93ATTR.DIC")) -or
|
||||
(Test-Path (Join-Path $SourceRoot "ATTRLUT.DIC"))
|
||||
|
||||
if (-not $HasAttrDic) {
|
||||
throw "缺少 CM93ATTR.DIC / ATTRLUT.DIC"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Japan source region gate: PASS"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 1 - Current code baseline + read-only checks
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Invoke-Checked "STEP 1A - pip install -e ." {
|
||||
& $Python -m pip install -e .
|
||||
}
|
||||
|
||||
if (-not (Test-Path ".\tools\cm95_v1_4_5_preflight.py")) {
|
||||
throw "缺少 tools\cm95_v1_4_5_preflight.py;当前项目不是 v1.4.5 baseline"
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 1B - CM95 v1.4.5 preflight" {
|
||||
& $Python ".\tools\cm95_v1_4_5_preflight.py"
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 1C - CM93 scan" {
|
||||
& $Cm93Db scan $SourceRoot
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 1D - CM93 dictionaries" {
|
||||
& $Cm93Db inspect-dicts $SourceRoot
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 2 - Read DB config with a real helper .py file
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$ReadDbInfoPy = Join-Path $TempRoot "read_db_info.py"
|
||||
|
||||
@'
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from dotenv import load_dotenv
|
||||
|
||||
env_path = Path(sys.argv[1]).resolve()
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
result = {
|
||||
"host": os.getenv("CM93_DB_HOST", "127.0.0.1"),
|
||||
"port": int(os.getenv("CM93_DB_PORT", "3306")),
|
||||
"database": (os.getenv("CM93_DB_NAME", "cm93_chart") or "").strip(),
|
||||
"user": os.getenv("CM93_DB_USER", "root"),
|
||||
"charset": os.getenv("CM93_DB_CHARSET", "utf8mb4"),
|
||||
}
|
||||
|
||||
if not result["database"]:
|
||||
raise SystemExit("CM93_DB_NAME is empty")
|
||||
|
||||
print(json.dumps(result, ensure_ascii=False))
|
||||
'@ | Set-Content $ReadDbInfoPy -Encoding UTF8
|
||||
|
||||
$DbInfoText = (& $Python $ReadDbInfoPy $EnvPath | Out-String).Trim()
|
||||
|
||||
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($DbInfoText)) {
|
||||
throw "无法读取数据库配置"
|
||||
}
|
||||
|
||||
$DbInfo = $DbInfoText | ConvertFrom-Json
|
||||
$DbName = [string]$DbInfo.database
|
||||
|
||||
$ForbiddenDbNames = @(
|
||||
"mysql",
|
||||
"information_schema",
|
||||
"performance_schema",
|
||||
"sys"
|
||||
)
|
||||
|
||||
if ($DbName.ToLowerInvariant() -in $ForbiddenDbNames) {
|
||||
throw "拒绝删除系统数据库: $DbName"
|
||||
}
|
||||
|
||||
Write-Step "STEP 2 - DESTRUCTIVE RESET CONFIRMATION"
|
||||
|
||||
Write-Host "将永久删除整个 MySQL database:"
|
||||
Write-Host " $DbName"
|
||||
Write-Host ""
|
||||
Write-Host "数据库服务器:"
|
||||
Write-Host " $($DbInfo.host):$($DbInfo.port)"
|
||||
Write-Host ""
|
||||
Write-Host "也会删除旧 CM95 build/release 产物。"
|
||||
Write-Host ""
|
||||
Write-Host "不会删除 CM93 source:"
|
||||
Write-Host " $SourceRoot"
|
||||
|
||||
if (-not $Force) {
|
||||
$Expected = "DELETE $DbName"
|
||||
$Answer = Read-Host "请输入 [$Expected] 继续"
|
||||
|
||||
if ($Answer -ne $Expected) {
|
||||
throw "用户取消。"
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host "-Force 已指定,跳过交互确认。"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 3 - Delete old generated artifacts
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Write-Step "STEP 3 - 删除旧 CM95 build/release 产物"
|
||||
|
||||
Remove-PathIfExists (Join-Path $ProjectRoot "build\production")
|
||||
Remove-PathIfExists (Join-Path $ProjectRoot "build\releases")
|
||||
Remove-PathIfExists (Join-Path $ProjectRoot "build\pbf")
|
||||
Remove-PathIfExists (Join-Path $ProjectRoot "build\pbf-reports")
|
||||
|
||||
$BuildRoot = Join-Path $ProjectRoot "build"
|
||||
|
||||
if (Test-Path $BuildRoot) {
|
||||
Get-ChildItem $BuildRoot -File -Filter "cm95_fid_manifest*.sqlite*" -ErrorAction SilentlyContinue |
|
||||
ForEach-Object {
|
||||
Write-Host "DELETE: $($_.FullName)"
|
||||
Remove-Item $_.FullName -Force
|
||||
}
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Force -Path ".\build\production" | Out-Null
|
||||
New-Item -ItemType Directory -Force -Path ".\logs" | Out-Null
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 4 - DROP database using helper file, then let cm93db recreate schema
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$DropDbPy = Join-Path $TempRoot "drop_cm93_database.py"
|
||||
|
||||
@'
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pymysql
|
||||
from dotenv import load_dotenv
|
||||
|
||||
env_path = Path(sys.argv[1]).resolve()
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
host = os.getenv("CM93_DB_HOST", "127.0.0.1")
|
||||
port = int(os.getenv("CM93_DB_PORT", "3306"))
|
||||
user = os.getenv("CM93_DB_USER", "root")
|
||||
password = os.getenv("CM93_DB_PASSWORD", "")
|
||||
database = (os.getenv("CM93_DB_NAME", "cm93_chart") or "").strip()
|
||||
charset = os.getenv("CM93_DB_CHARSET", "utf8mb4")
|
||||
|
||||
if not database:
|
||||
raise RuntimeError("CM93_DB_NAME is empty")
|
||||
|
||||
if database.lower() in {
|
||||
"mysql",
|
||||
"information_schema",
|
||||
"performance_schema",
|
||||
"sys",
|
||||
}:
|
||||
raise RuntimeError(f"refuse to drop system database: {database}")
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=host,
|
||||
port=port,
|
||||
user=user,
|
||||
password=password,
|
||||
charset=charset,
|
||||
autocommit=False,
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
)
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("SELECT VERSION() AS v")
|
||||
version = str(cur.fetchone()["v"])
|
||||
|
||||
match = re.match(r"^(\d+)\.(\d+)\.(\d+)", version)
|
||||
if not match or tuple(map(int, match.groups()[:2])) != (5, 7):
|
||||
raise RuntimeError(
|
||||
f"expected MySQL 5.7.x, got {version}; refusing destructive reset"
|
||||
)
|
||||
|
||||
safe = database.replace("`", "``")
|
||||
cur.execute(f"DROP DATABASE IF EXISTS `{safe}`")
|
||||
|
||||
conn.commit()
|
||||
print(f"DROP_DATABASE_OK database={database} mysql={version}")
|
||||
|
||||
finally:
|
||||
conn.close()
|
||||
'@ | Set-Content $DropDbPy -Encoding UTF8
|
||||
|
||||
Invoke-Checked "STEP 4A - DROP old database" {
|
||||
& $Python $DropDbPy $EnvPath
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 4B - CREATE database + initialize schema" {
|
||||
& $Cm93Db db-init --create-database
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 4C - DB contract check" {
|
||||
& $Cm93Db db-check
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 5 - Full import on fresh DB
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Invoke-Checked "STEP 5 - 全量 CM93 Japan import(fresh DB)" {
|
||||
& $Cm93Db import $SourceRoot --fail-fast
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 6 - Full audit
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
|
||||
$AuditReport = ".\logs\cm93_audit_japan_full_rebuild_$Timestamp.json"
|
||||
|
||||
Invoke-Checked "STEP 6 - CM93 full audit + geometry validation" {
|
||||
& $Cm93Db audit `
|
||||
$SourceRoot `
|
||||
--validate-geometry `
|
||||
--report $AuditReport
|
||||
}
|
||||
|
||||
$Audit = Get-Content $AuditReport -Raw | ConvertFrom-Json
|
||||
|
||||
if (-not [bool]$Audit.passed) {
|
||||
throw "CM93 audit report passed=false;检查 $AuditReport"
|
||||
}
|
||||
|
||||
$AuditHardFailures = @(
|
||||
[int64]$Audit.source_parse_failed,
|
||||
[int64]$Audit.db_missing_cells,
|
||||
[int64]$Audit.db_not_done_cells,
|
||||
[int64]$Audit.count_mismatches,
|
||||
[int64]$Audit.hash_mismatches,
|
||||
[int64]$Audit.raw_preservation_mismatches,
|
||||
[int64]$Audit.unknown_objects,
|
||||
[int64]$Audit.unknown_attributes,
|
||||
[int64]$Audit.precision_failed
|
||||
)
|
||||
|
||||
if (($AuditHardFailures | Measure-Object -Sum).Sum -ne 0) {
|
||||
throw "CM93 audit hard gate failed;检查 $AuditReport"
|
||||
}
|
||||
|
||||
if ($ExpectedCells -gt 0 -and [int]$Audit.source_cells -ne $ExpectedCells) {
|
||||
throw "Source cell count 不符合当前 Japan baseline: $($Audit.source_cells) != $ExpectedCells"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "CM93 AUDIT HARD GATE: PASS"
|
||||
Write-Host "Source cells : $($Audit.source_cells)"
|
||||
Write-Host "Geometry validity issues : $($Audit.geometry_validity_issues) (informational)"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 7 - Resolve fresh Dataset
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$DatasetInfoPy = Join-Path $TempRoot "dataset_info.py"
|
||||
|
||||
@'
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pymysql
|
||||
from dotenv import load_dotenv
|
||||
|
||||
env_path = Path(sys.argv[1]).resolve()
|
||||
source_root = str(Path(sys.argv[2]).resolve())
|
||||
|
||||
load_dotenv(dotenv_path=env_path)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=os.getenv("CM93_DB_HOST", "127.0.0.1"),
|
||||
port=int(os.getenv("CM93_DB_PORT", "3306")),
|
||||
user=os.getenv("CM93_DB_USER", "root"),
|
||||
password=os.getenv("CM93_DB_PASSWORD", ""),
|
||||
database=os.getenv("CM93_DB_NAME", "cm93_chart"),
|
||||
charset=os.getenv("CM93_DB_CHARSET", "utf8mb4"),
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
)
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("SELECT COUNT(*) AS n FROM chart_dataset")
|
||||
dataset_count = int(cur.fetchone()["n"])
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
d.id,
|
||||
d.name,
|
||||
d.source_root,
|
||||
COUNT(c.id) AS cells,
|
||||
SUM(c.import_status='DONE') AS done_cells,
|
||||
SUM(c.import_status='FAILED') AS failed_cells
|
||||
FROM chart_dataset d
|
||||
LEFT JOIN chart_cell c
|
||||
ON c.dataset_id=d.id
|
||||
WHERE d.source_type='CM93'
|
||||
AND d.source_root=%s
|
||||
GROUP BY d.id,d.name,d.source_root
|
||||
""",
|
||||
(source_root,),
|
||||
)
|
||||
rows = cur.fetchall()
|
||||
|
||||
if dataset_count != 1:
|
||||
raise RuntimeError(
|
||||
f"fresh DB expected exactly 1 dataset, got {dataset_count}"
|
||||
)
|
||||
|
||||
if len(rows) != 1:
|
||||
raise RuntimeError(
|
||||
f"expected one dataset for source_root={source_root}, got {len(rows)}"
|
||||
)
|
||||
|
||||
row = rows[0]
|
||||
|
||||
print(
|
||||
json.dumps(
|
||||
{
|
||||
"id": int(row["id"]),
|
||||
"name": row["name"],
|
||||
"source_root": row["source_root"],
|
||||
"cells": int(row["cells"] or 0),
|
||||
"done_cells": int(row["done_cells"] or 0),
|
||||
"failed_cells": int(row["failed_cells"] or 0),
|
||||
},
|
||||
ensure_ascii=False,
|
||||
)
|
||||
)
|
||||
|
||||
finally:
|
||||
conn.close()
|
||||
'@ | Set-Content $DatasetInfoPy -Encoding UTF8
|
||||
|
||||
$DatasetText = (& $Python $DatasetInfoPy $EnvPath $SourceRoot | Out-String).Trim()
|
||||
|
||||
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($DatasetText)) {
|
||||
throw "无法读取 fresh Dataset 信息"
|
||||
}
|
||||
|
||||
$Dataset = $DatasetText | ConvertFrom-Json
|
||||
$DatasetId = [int]$Dataset.id
|
||||
|
||||
if ([int]$Dataset.cells -ne [int]$Audit.source_cells) {
|
||||
throw "DB cell count != audit source_cells ($($Dataset.cells) != $($Audit.source_cells))"
|
||||
}
|
||||
|
||||
if ([int]$Dataset.done_cells -ne [int]$Audit.source_cells) {
|
||||
throw "不是所有 Cell 都 DONE"
|
||||
}
|
||||
|
||||
if ([int]$Dataset.failed_cells -ne 0) {
|
||||
throw "存在 FAILED Cell"
|
||||
}
|
||||
|
||||
Write-Step "STEP 7 - Fresh Dataset confirmed"
|
||||
|
||||
Write-Host "Dataset ID : $DatasetId"
|
||||
Write-Host "Name : $($Dataset.name)"
|
||||
Write-Host "SourceRoot : $($Dataset.source_root)"
|
||||
Write-Host "Cells : $($Dataset.cells)"
|
||||
Write-Host "DONE : $($Dataset.done_cells)"
|
||||
Write-Host "FAILED : $($Dataset.failed_cells)"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 8 - Dataset-aware mapping gates
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$GapAudit = ".\build\production\cm95_global_mapping_gap_audit_dataset_${DatasetId}.json"
|
||||
$GapClosure = ".\build\production\cm95_global_mapping_gap_closure_dataset_${DatasetId}.json"
|
||||
$MappingContract = ".\build\production\cm95_mapping_contract_check_dataset_${DatasetId}.json"
|
||||
|
||||
Invoke-Checked "STEP 8A - Global mapping gap audit (fresh Dataset)" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_audit_v1.py" `
|
||||
--dataset-id $DatasetId `
|
||||
--mapping ".\config\mappings\cm95_to_navsea_v1.yaml" `
|
||||
--output $GapAudit
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 8B - Mapping gap classification closure" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_closure_audit_v2.py" `
|
||||
--gap-audit $GapAudit `
|
||||
--mapping ".\config\mappings\cm95_to_navsea_v1.yaml" `
|
||||
--disposition ".\config\mappings\cm95_gap_disposition_v1.yaml" `
|
||||
--output $GapClosure
|
||||
}
|
||||
|
||||
$Closure = Get-Content $GapClosure -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$Closure.overall -ne "PASS") {
|
||||
Write-Host ""
|
||||
Write-Host "NEW DATASET MAPPING GATE STOPPED PIPELINE."
|
||||
Write-Host "新 Japan Dataset 有当前 disposition 尚未收口的 gap variant。"
|
||||
Write-Host ""
|
||||
Write-Host "检查:"
|
||||
Write-Host " $GapAudit"
|
||||
Write-Host " $GapClosure"
|
||||
throw "Mapping gap closure FAIL;PBF generation intentionally stopped."
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 8C - Mapping / Style / Sprite static contract" {
|
||||
& $Python ".\tools\cm95_mapping_contract_check_v1.py" `
|
||||
--mapping ".\config\mappings\cm95_to_navsea_v1.yaml" `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--output $MappingContract
|
||||
}
|
||||
|
||||
$MapContract = Get-Content $MappingContract -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$MapContract.overall -ne "PASS") {
|
||||
throw "Mapping / Style / Sprite static contract FAIL"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 8D - Build Dataset-specific effective gap disposition
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$EffectiveDisposition = ".\build\production\cm95_gap_disposition_dataset_${DatasetId}_effective.yaml"
|
||||
$EffectiveDispositionPy = Join-Path $TempRoot "build_effective_disposition.py"
|
||||
|
||||
@'
|
||||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
template_path = Path(sys.argv[1])
|
||||
gap_path = Path(sys.argv[2])
|
||||
closure_path = Path(sys.argv[3])
|
||||
dataset_id = int(sys.argv[4])
|
||||
out_path = Path(sys.argv[5])
|
||||
|
||||
template = yaml.safe_load(template_path.read_text(encoding="utf-8")) or {}
|
||||
gap = yaml.safe_load(gap_path.read_text(encoding="utf-8")) or {}
|
||||
closure = yaml.safe_load(closure_path.read_text(encoding="utf-8")) or {}
|
||||
|
||||
template_by_key = {
|
||||
(
|
||||
str(v.get("object_class") or ""),
|
||||
str(v.get("geometry_type") or "").upper(),
|
||||
): v
|
||||
for v in template.get("variants") or []
|
||||
if isinstance(v, dict)
|
||||
}
|
||||
|
||||
effective_variants = []
|
||||
|
||||
for item in gap.get("gap_variants") or []:
|
||||
key = (
|
||||
str(item.get("object_class") or ""),
|
||||
str(item.get("geometry_type") or "").upper(),
|
||||
)
|
||||
|
||||
src = template_by_key.get(key)
|
||||
if src is None:
|
||||
raise RuntimeError(
|
||||
f"unclassified gap variant while building effective disposition: {key}"
|
||||
)
|
||||
|
||||
row = copy.deepcopy(src)
|
||||
row["object_class"] = key[0]
|
||||
row["geometry_type"] = key[1]
|
||||
row["feature_count"] = int(item.get("feature_count") or 0)
|
||||
|
||||
if item.get("object_class_id") is not None:
|
||||
row["object_class_id"] = item.get("object_class_id")
|
||||
|
||||
if item.get("dictionary_description") is not None:
|
||||
row["dictionary_description"] = item.get("dictionary_description")
|
||||
|
||||
if item.get("gap_reason") is not None:
|
||||
row["gap_reason_v1"] = item.get("gap_reason")
|
||||
|
||||
effective_variants.append(row)
|
||||
|
||||
pending = [
|
||||
v for v in effective_variants
|
||||
if str(v.get("disposition") or "")
|
||||
== "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW"
|
||||
]
|
||||
|
||||
delivery = [
|
||||
v for v in effective_variants
|
||||
if str(v.get("disposition") or "")
|
||||
== "DELIVERY_MAPPED_V1_4_3"
|
||||
]
|
||||
|
||||
existing = [
|
||||
v for v in effective_variants
|
||||
if str(v.get("disposition") or "").startswith("EXISTING_")
|
||||
]
|
||||
|
||||
result = {
|
||||
"schema": "navsea.cm95.gap-disposition/v1",
|
||||
"version": "v1.4.5-dataset-effective",
|
||||
"dataset_id": dataset_id,
|
||||
"source_audit": str(gap_path),
|
||||
"policy": (
|
||||
"Dataset-specific effective disposition generated from "
|
||||
"cm95_gap_disposition_v1.yaml after current-dataset closure PASS."
|
||||
),
|
||||
"summary": {
|
||||
"observed_gap_variants": len(effective_variants),
|
||||
"delivery_mapped_v1_4_3": len(delivery),
|
||||
"existing_explicit_non_delivery": len(existing),
|
||||
"pending_semantic_review": len(pending),
|
||||
"delivery_mapped_v1_4_3_feature_rows": sum(
|
||||
int(v.get("feature_count") or 0) for v in delivery
|
||||
),
|
||||
"existing_explicit_non_delivery_feature_rows": sum(
|
||||
int(v.get("feature_count") or 0) for v in existing
|
||||
),
|
||||
"pending_semantic_review_feature_rows": sum(
|
||||
int(v.get("feature_count") or 0) for v in pending
|
||||
),
|
||||
},
|
||||
"variants": effective_variants,
|
||||
}
|
||||
|
||||
out_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
out_path.write_text(
|
||||
yaml.safe_dump(
|
||||
result,
|
||||
allow_unicode=True,
|
||||
sort_keys=False,
|
||||
width=120,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
print(f"Effective disposition: {out_path}")
|
||||
print(f"Observed gap variants : {len(effective_variants)}")
|
||||
print(f"Pending review : {len(pending)}")
|
||||
print(
|
||||
"Pending rows : "
|
||||
f"{result['summary']['pending_semantic_review_feature_rows']}"
|
||||
)
|
||||
'@ | Set-Content $EffectiveDispositionPy -Encoding UTF8
|
||||
|
||||
Invoke-Checked "STEP 8D - Dataset-specific semantic disposition summary" {
|
||||
& $Python $EffectiveDispositionPy `
|
||||
".\config\mappings\cm95_gap_disposition_v1.yaml" `
|
||||
$GapAudit `
|
||||
$GapClosure `
|
||||
$DatasetId `
|
||||
$EffectiveDisposition
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 9 - Fresh deterministic FID manifest
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$Manifest = ".\build\cm95_fid_manifest_dataset_${DatasetId}_v1.sqlite"
|
||||
|
||||
Invoke-Checked "STEP 9 - Rebuild FID manifest from zero" {
|
||||
& $Cm95Pbf build-fid-manifest `
|
||||
--dataset-id $DatasetId `
|
||||
--manifest $Manifest `
|
||||
--rebuild-fid-manifest
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 10 - Fresh immutable production plan
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$Plan = ".\build\production\cm95_production_plan_dataset_${DatasetId}_v1_4_5.json"
|
||||
$PlanAudit = ".\build\production\cm95_production_plan_audit_dataset_${DatasetId}_v1_4_5.json"
|
||||
|
||||
Invoke-Checked "STEP 10A - plan-production z0-z12" {
|
||||
& $Cm95Pbf plan-production `
|
||||
--dataset-id $DatasetId `
|
||||
--zooms 0-12 `
|
||||
--profile delivery `
|
||||
--manifest $Manifest `
|
||||
--output $Plan
|
||||
}
|
||||
|
||||
Invoke-Checked "STEP 10B - production plan audit" {
|
||||
& $Python ".\tools\cm95_production_plan_audit_v1.py" `
|
||||
--plan $Plan `
|
||||
--expected-zooms 0-12 `
|
||||
--output $PlanAudit
|
||||
}
|
||||
|
||||
$PlanObj = Get-Content $Plan -Raw | ConvertFrom-Json
|
||||
$PlanAuditObj = Get-Content $PlanAudit -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$PlanAuditObj.overall -ne "PASS") {
|
||||
throw "Production plan audit FAIL"
|
||||
}
|
||||
|
||||
$ReleaseId = [string]$PlanObj.release_id
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($ReleaseId)) {
|
||||
throw "Plan 没有 release_id"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Plan ID : $($PlanObj.plan_id)"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($PlanObj.job_count)"
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 11 - Full PBF build
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Invoke-Checked "STEP 11 - build-production FULL" {
|
||||
& $Cm95Pbf build-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--workers $Workers `
|
||||
--max-attempts 3
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 12 - Production status
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Write-Step "STEP 12 - Production status"
|
||||
|
||||
$StatusText = (
|
||||
& $Cm95Pbf status-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" |
|
||||
Out-String
|
||||
).Trim()
|
||||
|
||||
if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($StatusText)) {
|
||||
throw "status-production FAILED"
|
||||
}
|
||||
|
||||
Write-Host $StatusText
|
||||
|
||||
$Status = $StatusText | ConvertFrom-Json
|
||||
$States = $Status.states
|
||||
|
||||
$PassCount = Get-StateCount $States "PASS"
|
||||
$FailedCount = Get-StateCount $States "FAILED"
|
||||
$PendingCount = Get-StateCount $States "PENDING"
|
||||
$RunningCount = Get-StateCount $States "RUNNING"
|
||||
|
||||
if ($PassCount -ne [int]$Status.jobs -or
|
||||
$FailedCount -ne 0 -or
|
||||
$PendingCount -ne 0 -or
|
||||
$RunningCount -ne 0) {
|
||||
throw "Production state gate FAIL"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 13 - Final release gate
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
Invoke-Checked "STEP 13 - finalize-production" {
|
||||
& $Cm95Pbf finalize-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--gap-disposition $EffectiveDisposition
|
||||
}
|
||||
|
||||
$ReleaseDir = Join-Path $ProjectRoot ("build\releases\" + $ReleaseId)
|
||||
$ReleaseManifest = Join-Path $ReleaseDir "release_manifest_v1.json"
|
||||
|
||||
if (-not (Test-Path $ReleaseManifest -PathType Leaf)) {
|
||||
throw "finalize 已运行,但 release manifest 不存在: $ReleaseManifest"
|
||||
}
|
||||
|
||||
$Final = Get-Content $ReleaseManifest -Raw | ConvertFrom-Json
|
||||
|
||||
if ([string]$Final.status -ne "PASS") {
|
||||
throw "Final release manifest status != PASS"
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# STEP 14 - Save compact baseline summary
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$SummaryPath = ".\build\production\CM95_JAPAN_FULL_REBUILD_CURRENT.json"
|
||||
|
||||
$Summary = [ordered]@{
|
||||
schema = "navsea.cm95.japan-full-rebuild-pipeline/v2"
|
||||
completed_at = (Get-Date).ToString("o")
|
||||
project_root = $ProjectRoot
|
||||
source_root = $SourceRoot
|
||||
database = $DbName
|
||||
dataset_id = $DatasetId
|
||||
source_cells = [int]$Audit.source_cells
|
||||
source_geometry_validity_issues = [int]$Audit.geometry_validity_issues
|
||||
audit_report = $AuditReport
|
||||
mapping_gap_audit = $GapAudit
|
||||
mapping_gap_closure = [string]$Closure.overall
|
||||
effective_gap_disposition = $EffectiveDisposition
|
||||
semantic_completeness = [string]$Final.semantic_completeness
|
||||
semantic_backlog = $Final.semantic_backlog
|
||||
fid_manifest = $Manifest
|
||||
plan = $Plan
|
||||
plan_id = [string]$PlanObj.plan_id
|
||||
release_id = $ReleaseId
|
||||
release_dir = $ReleaseDir
|
||||
release_manifest = $ReleaseManifest
|
||||
jobs = [int]$Status.jobs
|
||||
pbf_files = [int]$Status.pbf_files
|
||||
output_features = [int64]$Status.output_features
|
||||
final_status = [string]$Final.status
|
||||
}
|
||||
|
||||
$Summary |
|
||||
ConvertTo-Json -Depth 12 |
|
||||
Set-Content $SummaryPath -Encoding UTF8
|
||||
|
||||
Write-Step "PIPELINE COMPLETE / PASS"
|
||||
|
||||
Write-Host "Database : $DbName"
|
||||
Write-Host "Dataset ID : $DatasetId"
|
||||
Write-Host "Source cells : $($Audit.source_cells)"
|
||||
Write-Host "Plan ID : $($PlanObj.plan_id)"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($Status.jobs) PASS"
|
||||
Write-Host "PBF files : $($Status.pbf_files)"
|
||||
Write-Host "Output features: $($Status.output_features)"
|
||||
Write-Host "Final status : $($Final.status)"
|
||||
Write-Host "Semantic : $($Final.semantic_completeness)"
|
||||
Write-Host ""
|
||||
Write-Host "Summary:"
|
||||
Write-Host " $SummaryPath"
|
||||
Write-Host ""
|
||||
Write-Host "Release:"
|
||||
Write-Host " $ReleaseDir"
|
||||
Write-Host ""
|
||||
Write-Host "Web test:"
|
||||
Write-Host " cd `"$ProjectRoot`""
|
||||
Write-Host " & `".\.venv\Scripts\python.exe`" .\web\cm95_web.py --release-id `"$ReleaseId`""
|
||||
|
||||
}
|
||||
finally {
|
||||
Remove-Item $TempRoot -Recurse -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
280
scripts/cm95_japan_v1_4_6_continue.ps1
Normal file
280
scripts/cm95_japan_v1_4_6_continue.ps1
Normal file
@@ -0,0 +1,280 @@
|
||||
param(
|
||||
[string]$ProjectRoot = "D:\React\cm93-mysql-importer-starter",
|
||||
[string]$SourceRoot = "D:\Ship\CM93V2\CM93JAPAN",
|
||||
[int]$DatasetId = 1,
|
||||
[int]$ExpectedCells = 1492,
|
||||
[int]$Workers = 4,
|
||||
[switch]$SkipQueryEquivalence
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Step([string]$Text) {
|
||||
Write-Host ""
|
||||
Write-Host "======================================================================"
|
||||
Write-Host $Text
|
||||
Write-Host "======================================================================"
|
||||
}
|
||||
|
||||
function Run([string]$Label, [scriptblock]$Action) {
|
||||
Step $Label
|
||||
& $Action
|
||||
$Code = $LASTEXITCODE
|
||||
if ($null -ne $Code -and $Code -ne 0) {
|
||||
throw "$Label FAILED (exit=$Code)"
|
||||
}
|
||||
}
|
||||
|
||||
function StateCount($States, [string]$Name) {
|
||||
if ($null -eq $States) { return 0 }
|
||||
$P = $States.PSObject.Properties[$Name]
|
||||
if ($null -eq $P) { return 0 }
|
||||
return [int]$P.Value
|
||||
}
|
||||
|
||||
Set-Location $ProjectRoot
|
||||
|
||||
$Python = ".\.venv\Scripts\python.exe"
|
||||
$Cm95Pbf = ".\.venv\Scripts\cm95pbf.exe"
|
||||
$Mapping = ".\config\mappings\cm95_to_navsea_v1.yaml"
|
||||
$Disposition = ".\config\mappings\cm95_gap_disposition_japan_dataset_1_v1.yaml"
|
||||
$Policy = ".\config\pbf\cm95_tile_policy_japan_full_detail_v1.yaml"
|
||||
$Manifest = ".\build\cm95_fid_manifest_japan_dataset_1_v1.sqlite"
|
||||
$GapAudit = ".\build\production\cm95_global_mapping_gap_audit_dataset_1.json"
|
||||
$Closure = ".\build\production\cm95_global_mapping_gap_closure_dataset_1_v1_4_6.json"
|
||||
$MappingContract = ".\build\production\cm95_mapping_contract_check_japan_dataset_1_v1_4_6.json"
|
||||
$Plan = ".\build\production\cm95_production_plan_japan_full_detail_v1_4_6.json"
|
||||
$PlanAudit = ".\build\production\cm95_production_plan_audit_japan_full_detail_v1_4_6.json"
|
||||
|
||||
foreach ($Path in @($Python,$Cm95Pbf,$Mapping,$Disposition,$Policy)) {
|
||||
if (-not (Test-Path $Path)) {
|
||||
throw "Missing required file: $Path"
|
||||
}
|
||||
}
|
||||
|
||||
Run "STEP 0A - pip install v1.4.6 editable" {
|
||||
& $Python -m pip install -e .
|
||||
}
|
||||
|
||||
Run "STEP 0B - CM95 v1.4.6 preflight" {
|
||||
& $Python ".\tools\cm95_v1_4_6_preflight.py"
|
||||
}
|
||||
|
||||
# Verify the existing fresh Japan Dataset. No import / no DROP database.
|
||||
Step "STEP 1 - Verify existing Japan Dataset"
|
||||
|
||||
$Tmp = Join-Path $env:TEMP ("cm95_japan_v146_" + $PID)
|
||||
Remove-Item $Tmp -Recurse -Force -ErrorAction SilentlyContinue
|
||||
New-Item -ItemType Directory -Path $Tmp | Out-Null
|
||||
|
||||
try {
|
||||
$Helper = Join-Path $Tmp "verify_dataset.py"
|
||||
@'
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
import os, sys, json, pymysql
|
||||
|
||||
project_root = Path(sys.argv[1]).resolve()
|
||||
dataset_id = int(sys.argv[2])
|
||||
expected_root = str(Path(sys.argv[3]).resolve())
|
||||
load_dotenv(dotenv_path=project_root / ".env")
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=os.getenv("CM93_DB_HOST", "127.0.0.1"),
|
||||
port=int(os.getenv("CM93_DB_PORT", "3306")),
|
||||
user=os.getenv("CM93_DB_USER", "root"),
|
||||
password=os.getenv("CM93_DB_PASSWORD", ""),
|
||||
database=os.getenv("CM93_DB_NAME", "cm93_chart"),
|
||||
charset=os.getenv("CM93_DB_CHARSET", "utf8mb4"),
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
)
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT d.id,d.name,d.source_root,
|
||||
COUNT(c.id) cells,
|
||||
SUM(c.import_status='DONE') done_cells,
|
||||
SUM(c.import_status='FAILED') failed_cells
|
||||
FROM chart_dataset d
|
||||
LEFT JOIN chart_cell c ON c.dataset_id=d.id
|
||||
WHERE d.id=%s
|
||||
GROUP BY d.id,d.name,d.source_root
|
||||
""",
|
||||
(dataset_id,),
|
||||
)
|
||||
row = cur.fetchone()
|
||||
if not row:
|
||||
raise RuntimeError(f"dataset {dataset_id} not found")
|
||||
actual_root = str(Path(row["source_root"]).resolve())
|
||||
if actual_root.lower() != expected_root.lower():
|
||||
raise RuntimeError(f"source_root mismatch: {actual_root} != {expected_root}")
|
||||
print(json.dumps({
|
||||
"id": int(row["id"]),
|
||||
"name": row["name"],
|
||||
"source_root": actual_root,
|
||||
"cells": int(row["cells"] or 0),
|
||||
"done_cells": int(row["done_cells"] or 0),
|
||||
"failed_cells": int(row["failed_cells"] or 0),
|
||||
}, ensure_ascii=False))
|
||||
finally:
|
||||
conn.close()
|
||||
'@ | Set-Content $Helper -Encoding UTF8
|
||||
|
||||
$DatasetText = (& $Python $Helper $ProjectRoot $DatasetId $SourceRoot | Out-String).Trim()
|
||||
if ($LASTEXITCODE -ne 0) { throw "Dataset verification failed" }
|
||||
$Dataset = $DatasetText | ConvertFrom-Json
|
||||
if ([int]$Dataset.cells -ne $ExpectedCells -or
|
||||
[int]$Dataset.done_cells -ne $ExpectedCells -or
|
||||
[int]$Dataset.failed_cells -ne 0) {
|
||||
throw "Dataset state mismatch: $DatasetText"
|
||||
}
|
||||
Write-Host $DatasetText
|
||||
}
|
||||
finally {
|
||||
Remove-Item $Tmp -Recurse -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
if (-not $SkipQueryEquivalence) {
|
||||
Run "STEP 2 - v1.4.5 vs v1.4.6 candidate query equivalence + SPATIAL plan" {
|
||||
& $Python ".\tools\cm95_v1_4_6_query_equivalence.py" `
|
||||
--dataset-id $DatasetId
|
||||
}
|
||||
}
|
||||
else {
|
||||
Step "STEP 2 - Query equivalence SKIPPED by user"
|
||||
}
|
||||
|
||||
Run "STEP 3A - Re-run mapping gap audit" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_audit_v1.py" `
|
||||
--dataset-id $DatasetId `
|
||||
--mapping $Mapping `
|
||||
--output $GapAudit
|
||||
}
|
||||
|
||||
Run "STEP 3B - Japan gap closure" {
|
||||
& $Python ".\tools\cm95_global_mapping_gap_closure_audit_v2.py" `
|
||||
--gap-audit $GapAudit `
|
||||
--mapping $Mapping `
|
||||
--disposition $Disposition `
|
||||
--output $Closure
|
||||
}
|
||||
|
||||
$C = Get-Content $Closure -Raw | ConvertFrom-Json
|
||||
if ([string]$C.overall -ne "PASS") { throw "Mapping gap closure != PASS" }
|
||||
if (@($C.unclassified_variants).Count -ne 0) { throw "Unclassified gap variants remain" }
|
||||
|
||||
Run "STEP 3C - Mapping / Style / Sprite contract" {
|
||||
& $Python ".\tools\cm95_mapping_contract_check_v1.py" `
|
||||
--mapping $Mapping `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--output $MappingContract
|
||||
}
|
||||
|
||||
$MC = Get-Content $MappingContract -Raw | ConvertFrom-Json
|
||||
if ([string]$MC.overall -ne "PASS") { throw "Mapping/style/sprite contract != PASS" }
|
||||
|
||||
# FID manifest is independent from builder query implementation; reuse when valid.
|
||||
if (-not (Test-Path $Manifest)) {
|
||||
Run "STEP 4 - FID manifest missing; rebuild" {
|
||||
& $Cm95Pbf build-fid-manifest `
|
||||
--dataset-id $DatasetId `
|
||||
--manifest $Manifest `
|
||||
--rebuild-fid-manifest
|
||||
}
|
||||
}
|
||||
else {
|
||||
Step "STEP 4 - Reuse existing FID manifest"
|
||||
Write-Host $Manifest
|
||||
}
|
||||
|
||||
# v1.4.6 builder contract changes the immutable plan hash, so create a NEW plan/release.
|
||||
Run "STEP 5A - Create NEW v1.4.6 production plan" {
|
||||
& $Cm95Pbf plan-production `
|
||||
--dataset-id $DatasetId `
|
||||
--zooms 0-12 `
|
||||
--profile delivery `
|
||||
--mapping $Mapping `
|
||||
--policy $Policy `
|
||||
--manifest $Manifest `
|
||||
--output $Plan
|
||||
}
|
||||
|
||||
Run "STEP 5B - Audit v1.4.6 production plan" {
|
||||
& $Python ".\tools\cm95_production_plan_audit_v1.py" `
|
||||
--plan $Plan `
|
||||
--expected-zooms 0-12 `
|
||||
--output $PlanAudit
|
||||
}
|
||||
|
||||
$PA = Get-Content $PlanAudit -Raw | ConvertFrom-Json
|
||||
if ([string]$PA.overall -ne "PASS") { throw "Production plan audit != PASS" }
|
||||
|
||||
$PlanObj = Get-Content $Plan -Raw | ConvertFrom-Json
|
||||
if ([string]$PlanObj.builder_contract_version -ne "cm95pbf-builder/0.4.6-spatial-candidate-query") {
|
||||
throw "Wrong builder contract in plan: $($PlanObj.builder_contract_version)"
|
||||
}
|
||||
|
||||
$ReleaseId = [string]$PlanObj.release_id
|
||||
Write-Host ""
|
||||
Write-Host "Plan ID : $($PlanObj.plan_id)"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($PlanObj.job_count)"
|
||||
Write-Host "Workers : $Workers"
|
||||
|
||||
# Deliberately do NOT migrate PASS jobs from v1.4.5 partial release.
|
||||
# The new query must receive a clean production run for output equivalence/final gate.
|
||||
Run "STEP 6 - Full v1.4.6 PBF production build" {
|
||||
& $Cm95Pbf build-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--workers $Workers `
|
||||
--max-attempts 3
|
||||
}
|
||||
|
||||
Step "STEP 7 - Production status"
|
||||
$StatusText = (
|
||||
& $Cm95Pbf status-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" |
|
||||
Out-String
|
||||
).Trim()
|
||||
if ($LASTEXITCODE -ne 0) { throw "status-production failed" }
|
||||
Write-Host $StatusText
|
||||
$S = $StatusText | ConvertFrom-Json
|
||||
$Pass = StateCount $S.states "PASS"
|
||||
$Fail = StateCount $S.states "FAILED"
|
||||
$Pending = StateCount $S.states "PENDING"
|
||||
$Running = StateCount $S.states "RUNNING"
|
||||
if ($Pass -ne [int]$S.jobs -or $Fail -ne 0 -or $Pending -ne 0 -or $Running -ne 0) {
|
||||
throw "Production state gate failed"
|
||||
}
|
||||
|
||||
Run "STEP 8 - Finalize v1.4.6 release" {
|
||||
& $Cm95Pbf finalize-production `
|
||||
--plan $Plan `
|
||||
--release-root ".\build\releases" `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--gap-disposition $Disposition
|
||||
}
|
||||
|
||||
$ReleaseManifest = ".\build\releases\$ReleaseId\release_manifest_v1.json"
|
||||
if (-not (Test-Path $ReleaseManifest)) { throw "Release manifest missing" }
|
||||
$Final = Get-Content $ReleaseManifest -Raw | ConvertFrom-Json
|
||||
if ([string]$Final.status -ne "PASS") { throw "Final release status != PASS" }
|
||||
|
||||
Step "CM95 JAPAN v1.4.6 COMPLETE / PASS"
|
||||
Write-Host "Dataset ID : $DatasetId"
|
||||
Write-Host "Release ID : $ReleaseId"
|
||||
Write-Host "Jobs : $($S.jobs)"
|
||||
Write-Host "PBF files : $($S.pbf_files)"
|
||||
Write-Host "Output features : $($S.output_features)"
|
||||
Write-Host "Final status : $($Final.status)"
|
||||
Write-Host "Semantic status : $($Final.semantic_completeness)"
|
||||
Write-Host ""
|
||||
Write-Host "Web test:"
|
||||
Write-Host " cd `"$ProjectRoot`""
|
||||
Write-Host " & `".\.venv\Scripts\python.exe`" .\web\cm95_web.py --release-id `"$ReleaseId`""
|
||||
153
scripts/cm95_japan_v1_4_7_finalize_existing.ps1
Normal file
153
scripts/cm95_japan_v1_4_7_finalize_existing.ps1
Normal file
@@ -0,0 +1,153 @@
|
||||
param(
|
||||
[string]$ProjectRoot = "D:\React\cm93-mysql-importer-starter"
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Step([string]$Text) {
|
||||
Write-Host ""
|
||||
Write-Host "======================================================================"
|
||||
Write-Host $Text
|
||||
Write-Host "======================================================================"
|
||||
}
|
||||
|
||||
function Run([string]$Label, [scriptblock]$Action) {
|
||||
Step $Label
|
||||
& $Action
|
||||
$Code = $LASTEXITCODE
|
||||
if ($null -ne $Code -and $Code -ne 0) {
|
||||
throw "$Label FAILED (exit=$Code)"
|
||||
}
|
||||
}
|
||||
|
||||
Set-Location $ProjectRoot
|
||||
|
||||
$Python = ".\.venv\Scripts\python.exe"
|
||||
$Cm95Pbf = ".\.venv\Scripts\cm95pbf.exe"
|
||||
$Plan = ".\build\production\cm95_production_plan_japan_full_detail_v1_4_6.json"
|
||||
$ReleaseRoot = ".\build\releases"
|
||||
$Disposition = ".\config\mappings\cm95_gap_disposition_japan_dataset_1_v1.yaml"
|
||||
$ExpectedPlanId = "6bc3c1352da347b77256c83d8ab3b771fcde151d70332e8d96c6e50605cb5d8f"
|
||||
$ExpectedReleaseId = "cm95-d1-62a85bd40d3a-6bc3c1352da3"
|
||||
$ExpectedBuilder = "cm95pbf-builder/0.4.6-spatial-candidate-query"
|
||||
|
||||
foreach ($Path in @($Python,$Cm95Pbf,$Plan,$Disposition)) {
|
||||
if (-not (Test-Path $Path)) {
|
||||
throw "Missing required path: $Path"
|
||||
}
|
||||
}
|
||||
|
||||
Run "STEP 0A - pip install v1.4.7 editable" {
|
||||
& $Python -m pip install -e .
|
||||
}
|
||||
|
||||
Run "STEP 0B - CM95 v1.4.7 preflight" {
|
||||
& $Python ".\tools\cm95_v1_4_7_preflight.py"
|
||||
}
|
||||
|
||||
Step "STEP 1 - Verify existing v1.4.6 plan / release identity"
|
||||
$PlanObj = Get-Content $Plan -Raw | ConvertFrom-Json
|
||||
if ([string]$PlanObj.plan_id -ne $ExpectedPlanId) {
|
||||
throw "Unexpected plan_id: $($PlanObj.plan_id)"
|
||||
}
|
||||
if ([string]$PlanObj.release_id -ne $ExpectedReleaseId) {
|
||||
throw "Unexpected release_id: $($PlanObj.release_id)"
|
||||
}
|
||||
if ([string]$PlanObj.builder_contract_version -ne $ExpectedBuilder) {
|
||||
throw "Unexpected builder contract: $($PlanObj.builder_contract_version)"
|
||||
}
|
||||
Write-Host "Plan ID : $($PlanObj.plan_id)"
|
||||
Write-Host "Release ID : $($PlanObj.release_id)"
|
||||
Write-Host "Builder : $($PlanObj.builder_contract_version)"
|
||||
Write-Host "PBF rebuild : NO"
|
||||
|
||||
Step "STEP 2 - Verify existing production is already 27038/27038 PASS"
|
||||
$StatusText = (
|
||||
& $Cm95Pbf status-production `
|
||||
--plan $Plan `
|
||||
--release-root $ReleaseRoot |
|
||||
Out-String
|
||||
).Trim()
|
||||
if ($LASTEXITCODE -ne 0) { throw "status-production failed" }
|
||||
Write-Host $StatusText
|
||||
$S = $StatusText | ConvertFrom-Json
|
||||
if ([int]$S.jobs -ne 27038 -or
|
||||
[int]$S.attempts -ne 27038 -or
|
||||
[int64]$S.output_features -ne 2974375 -or
|
||||
[int]$S.pbf_files -ne 27030 -or
|
||||
[int]$S.states.PASS -ne 27038) {
|
||||
throw "Existing production baseline does not match expected completed v1.4.6 release"
|
||||
}
|
||||
|
||||
$ReleaseDir = Join-Path $ReleaseRoot $ExpectedReleaseId
|
||||
$AuditJson = ".\build\production\cm95_nav_name_conflicts_v1_4_7_precheck.json"
|
||||
$AuditCsv = ".\build\production\cm95_nav_name_conflicts_v1_4_7_precheck.csv"
|
||||
|
||||
Run "STEP 3 - Re-audit the 10 trace occurrences / 4 unique ambiguous outputs" {
|
||||
& $Python ".\tools\cm95_nav_name_conflict_audit_v1.py" `
|
||||
--release-dir $ReleaseDir `
|
||||
--profile delivery `
|
||||
--output-json $AuditJson `
|
||||
--output-csv $AuditCsv
|
||||
}
|
||||
|
||||
$A = Get-Content $AuditJson -Raw | ConvertFrom-Json
|
||||
if ([int]$A.report_name_conflict_occurrences -ne 10 -or
|
||||
[int]$A.trace_name_conflict_occurrences -ne 10 -or
|
||||
[int]$A.unique_conflict_outputs -ne 4 -or
|
||||
[int]$A.affected_tiles -ne 3) {
|
||||
throw "Nav name conflict baseline changed unexpectedly"
|
||||
}
|
||||
|
||||
Run "STEP 4 - Finalize EXISTING PBF release with audited ambiguous-name omission gate" {
|
||||
& $Cm95Pbf finalize-production `
|
||||
--plan $Plan `
|
||||
--release-root $ReleaseRoot `
|
||||
--style ".\config\style\style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json" `
|
||||
--sprite-json ".\config\sprite\semantic-sprite-20260808.json" `
|
||||
--gap-disposition $Disposition
|
||||
}
|
||||
|
||||
$Manifest = Join-Path $ReleaseDir "release_manifest_v1.json"
|
||||
if (-not (Test-Path $Manifest)) {
|
||||
throw "release manifest missing: $Manifest"
|
||||
}
|
||||
|
||||
$F = Get-Content $Manifest -Raw | ConvertFrom-Json
|
||||
if ([string]$F.status -ne "PASS") {
|
||||
throw "release manifest status != PASS"
|
||||
}
|
||||
if ([string]$F.nav_name_conflict_audit.overall -ne "PASS") {
|
||||
throw "nav_name_conflict_audit != PASS"
|
||||
}
|
||||
if ([int]$F.nav_name_conflict_audit.report_occurrences -ne 10 -or
|
||||
[int]$F.nav_name_conflict_audit.trace_occurrences -ne 10 -or
|
||||
[int]$F.nav_name_conflict_audit.safe_omission_occurrences -ne 10 -or
|
||||
[int]$F.nav_name_conflict_audit.unique_conflict_outputs -ne 4 -or
|
||||
[int]$F.nav_name_conflict_audit.affected_tiles -ne 3 -or
|
||||
[int]$F.nav_name_conflict_audit.labeled_conflict_occurrences -ne 0 -or
|
||||
[int]$F.nav_name_conflict_audit.missing_pbf_occurrences -ne 0) {
|
||||
throw "audited ambiguous-name omission counts differ from expected baseline"
|
||||
}
|
||||
if ([int64]$F.planned_output_features -ne 2974375 -or
|
||||
[int64]$F.decoded_pbf_features -ne 2974375) {
|
||||
throw "feature count changed unexpectedly"
|
||||
}
|
||||
if ([string]$F.style_sprite_contract.overall -ne "PASS") {
|
||||
throw "style/sprite contract != PASS"
|
||||
}
|
||||
|
||||
Step "CM95 JAPAN v1.4.7 FINALIZE COMPLETE / PASS"
|
||||
Write-Host "Release ID : $ExpectedReleaseId"
|
||||
Write-Host "PBF rebuilt : NO"
|
||||
Write-Host "Jobs : 27038 / 27038 PASS"
|
||||
Write-Host "Decoded features : $($F.decoded_pbf_features)"
|
||||
Write-Host "Ambiguous-name occurrences: $($F.nav_name_conflict_audit.report_occurrences)"
|
||||
Write-Host "Unique ambiguous outputs : $($F.nav_name_conflict_audit.unique_conflict_outputs)"
|
||||
Write-Host "Labels safely omitted : $($F.nav_name_conflict_audit.safe_omission_occurrences)"
|
||||
Write-Host "Unsafe labels : $($F.nav_name_conflict_audit.labeled_conflict_occurrences)"
|
||||
Write-Host "Style/Sprite : $($F.style_sprite_contract.overall)"
|
||||
Write-Host "Semantic completeness : $($F.semantic_completeness)"
|
||||
Write-Host "FINAL STATUS : $($F.status)"
|
||||
Write-Host "Manifest : $Manifest"
|
||||
2
src/cm95pbf/__init__.py
Normal file
2
src/cm95pbf/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
__version__ = "0.4.7-production-audited-nav-name-conflict-omission"
|
||||
BUILDER_CONTRACT_VERSION = "cm95pbf-builder/0.4.6-spatial-candidate-query"
|
||||
1939
src/cm95pbf/builder.py
Normal file
1939
src/cm95pbf/builder.py
Normal file
File diff suppressed because it is too large
Load Diff
360
src/cm95pbf/cli.py
Normal file
360
src/cm95pbf/cli.py
Normal file
@@ -0,0 +1,360 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from cm93db.config import load_config
|
||||
|
||||
from .builder import Cm95TileBuilder, TileJob
|
||||
from .identity import build_manifest
|
||||
from .policy import child_tiles
|
||||
from .production import (
|
||||
create_production_plan,
|
||||
migrate_production_release,
|
||||
parse_zooms,
|
||||
production_status,
|
||||
run_production_plan,
|
||||
)
|
||||
from .release import finalize_release
|
||||
|
||||
|
||||
DEFAULT_MAPPING = Path("config/mappings/cm95_to_navsea_v1.yaml")
|
||||
DEFAULT_POLICY = Path("config/pbf/cm95_tile_policy_v1.yaml")
|
||||
DEFAULT_MANIFEST = Path("build/cm95_fid_manifest_v1.sqlite")
|
||||
|
||||
|
||||
def _add_common_db(p):
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
p = argparse.ArgumentParser(
|
||||
prog="cm95pbf",
|
||||
description="CM95 MySQL → NavSea-compatible MVT/PBF pilot generator",
|
||||
)
|
||||
sub = p.add_subparsers(dest="command", required=True)
|
||||
|
||||
manifest = sub.add_parser(
|
||||
"build-fid-manifest",
|
||||
help="建立全 Dataset 确定性 int32 MVT Feature ID 清单",
|
||||
)
|
||||
_add_common_db(manifest)
|
||||
manifest.add_argument("--manifest", default=str(DEFAULT_MANIFEST))
|
||||
manifest.add_argument("--rebuild-fid-manifest", action="store_true")
|
||||
|
||||
tile = sub.add_parser(
|
||||
"build-tile",
|
||||
help="生成单张 CM95 NavSea-compatible PBF",
|
||||
)
|
||||
_add_common_db(tile)
|
||||
tile.add_argument("--z", type=int, required=True)
|
||||
tile.add_argument("--x", type=int, required=True)
|
||||
tile.add_argument("--y", type=int, required=True)
|
||||
tile.add_argument("--profile", choices=["engineering", "delivery"], default="delivery")
|
||||
tile.add_argument("--mapping", default=str(DEFAULT_MAPPING))
|
||||
tile.add_argument("--policy", default=str(DEFAULT_POLICY))
|
||||
tile.add_argument("--manifest", default=str(DEFAULT_MANIFEST))
|
||||
tile.add_argument("--output-root", default="build/pbf")
|
||||
tile.add_argument("--report-root", default="build/pbf-reports")
|
||||
|
||||
sample = sub.add_parser(
|
||||
"build-sample-aoi",
|
||||
help="生成 z10 parent + z11 children + z12 grandchildren,共 21 张测试 tile",
|
||||
)
|
||||
_add_common_db(sample)
|
||||
sample.add_argument("--z10-x", type=int, default=914)
|
||||
sample.add_argument("--z10-y", type=int, default=385)
|
||||
sample.add_argument(
|
||||
"--profiles",
|
||||
default="engineering,delivery",
|
||||
help="逗号分隔:engineering,delivery",
|
||||
)
|
||||
sample.add_argument("--mapping", default=str(DEFAULT_MAPPING))
|
||||
sample.add_argument("--policy", default=str(DEFAULT_POLICY))
|
||||
sample.add_argument("--manifest", default=str(DEFAULT_MANIFEST))
|
||||
sample.add_argument("--output-root", default="build/pbf")
|
||||
sample.add_argument("--report-root", default="build/pbf-reports")
|
||||
|
||||
|
||||
prod_plan = sub.add_parser(
|
||||
"plan-production",
|
||||
help="按 Dataset coverage 枚举生产 tile,并冻结不可变生成计划",
|
||||
)
|
||||
_add_common_db(prod_plan)
|
||||
prod_plan.add_argument("--zooms", default="0-12", help="缩放级别,支持 0-12 或 0,1,...,12")
|
||||
prod_plan.add_argument("--profile", choices=["engineering", "delivery"], default="delivery")
|
||||
prod_plan.add_argument("--mapping", default=str(DEFAULT_MAPPING))
|
||||
prod_plan.add_argument("--policy", default=str(DEFAULT_POLICY))
|
||||
prod_plan.add_argument("--manifest", default=str(DEFAULT_MANIFEST))
|
||||
prod_plan.add_argument("--output", default="build/production/cm95_production_plan_v1.json")
|
||||
|
||||
prod_build = sub.add_parser(
|
||||
"build-production",
|
||||
help="按冻结计划批量生成,支持断点续跑、并发和失败重试",
|
||||
)
|
||||
prod_build.add_argument("--plan", default="build/production/cm95_production_plan_v1.json")
|
||||
prod_build.add_argument("--release-root", default="build/releases")
|
||||
prod_build.add_argument("--workers", type=int, default=4)
|
||||
prod_build.add_argument("--max-attempts", type=int, default=3)
|
||||
|
||||
prod_migrate = sub.add_parser(
|
||||
"migrate-production-release",
|
||||
help="把旧 release 的 delivery-equivalent PASS tile 复用到新计划,只重建受影响/失败任务(支持 builder contract 升级)",
|
||||
)
|
||||
prod_migrate.add_argument("--old-release-dir", required=True)
|
||||
prod_migrate.add_argument("--new-plan", default="build/production/cm95_production_plan_v1_4_5.json")
|
||||
prod_migrate.add_argument("--release-root", default="build/releases")
|
||||
prod_migrate.add_argument("--copy-mode", choices=["hardlink", "copy"], default="hardlink")
|
||||
prod_migrate.add_argument(
|
||||
"--invalidate-tiles-file",
|
||||
default=None,
|
||||
help="每行一个 z/x/y;这些旧 PASS tile 强制留为 PENDING,适用于 builder contract 的定向重建",
|
||||
)
|
||||
|
||||
prod_status = sub.add_parser(
|
||||
"status-production",
|
||||
help="查看生产计划当前账本状态",
|
||||
)
|
||||
prod_status.add_argument("--plan", default="build/production/cm95_production_plan_v1.json")
|
||||
prod_status.add_argument("--release-root", default="build/releases")
|
||||
|
||||
prod_final = sub.add_parser(
|
||||
"finalize-production",
|
||||
help="对完成的生产产物做三方计数/FID/哈希盘点并生成 release manifest",
|
||||
)
|
||||
prod_final.add_argument("--plan", default="build/production/cm95_production_plan_v1.json")
|
||||
prod_final.add_argument("--release-root", default="build/releases")
|
||||
prod_final.add_argument("--style", default="config/style/style.navsea-delivery-full-semantic-unified-20260808-cm95-v1.json")
|
||||
prod_final.add_argument("--sprite-json", default="config/sprite/semantic-sprite-20260808.json")
|
||||
prod_final.add_argument("--gap-disposition", default="config/mappings/cm95_gap_disposition_v1.yaml")
|
||||
|
||||
return p
|
||||
|
||||
|
||||
def ensure_manifest(dataset_id: int, manifest_path: Path) -> dict:
|
||||
cfg = load_config()
|
||||
with __import__("pymysql").connect(
|
||||
host=cfg.host,
|
||||
port=cfg.port,
|
||||
user=cfg.user,
|
||||
password=cfg.password,
|
||||
database=cfg.database,
|
||||
charset=cfg.charset,
|
||||
cursorclass=__import__("pymysql").cursors.DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
) as conn:
|
||||
return build_manifest(
|
||||
conn,
|
||||
dataset_id,
|
||||
manifest_path,
|
||||
rebuild=False,
|
||||
)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
args = build_parser().parse_args()
|
||||
cfg = load_config()
|
||||
|
||||
if args.command == "plan-production":
|
||||
manifest_path = Path(args.manifest)
|
||||
if not manifest_path.exists():
|
||||
print("FID manifest 不存在,先自动建立。")
|
||||
print(json.dumps(ensure_manifest(args.dataset_id, manifest_path), ensure_ascii=False, indent=2))
|
||||
result = create_production_plan(
|
||||
db=cfg,
|
||||
dataset_id=args.dataset_id,
|
||||
mapping_path=Path(args.mapping),
|
||||
policy_path=Path(args.policy),
|
||||
manifest_path=manifest_path,
|
||||
output_path=Path(args.output),
|
||||
zooms=parse_zooms(args.zooms),
|
||||
profile=args.profile,
|
||||
)
|
||||
print(json.dumps({
|
||||
"plan_id": result["plan_id"],
|
||||
"release_id": result["release_id"],
|
||||
"job_count": result["job_count"],
|
||||
"source_stats": result["source_stats"],
|
||||
"output": str(Path(args.output)),
|
||||
}, ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
if args.command == "build-production":
|
||||
result = run_production_plan(
|
||||
db=cfg,
|
||||
plan_path=Path(args.plan),
|
||||
release_root=Path(args.release_root),
|
||||
workers=args.workers,
|
||||
max_attempts=args.max_attempts,
|
||||
)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
states = result.get("states") or {}
|
||||
if states.get("FAILED", 0) or states.get("PENDING", 0) or states.get("RUNNING", 0):
|
||||
raise SystemExit(2)
|
||||
return
|
||||
|
||||
if args.command == "migrate-production-release":
|
||||
result = migrate_production_release(
|
||||
old_release_dir=Path(args.old_release_dir),
|
||||
new_plan_path=Path(args.new_plan),
|
||||
release_root=Path(args.release_root),
|
||||
copy_mode=args.copy_mode,
|
||||
invalidate_tiles_file=(Path(args.invalidate_tiles_file) if args.invalidate_tiles_file else None),
|
||||
)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
if args.command == "status-production":
|
||||
print(json.dumps(production_status(Path(args.plan), Path(args.release_root)), ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
if args.command == "finalize-production":
|
||||
result = finalize_release(
|
||||
Path(args.plan),
|
||||
Path(args.release_root),
|
||||
Path(args.style) if args.style else None,
|
||||
Path(args.sprite_json) if args.sprite_json else None,
|
||||
Path(args.gap_disposition) if args.gap_disposition else None,
|
||||
)
|
||||
print(json.dumps({
|
||||
"status": result["status"],
|
||||
"release_id": result["release_id"],
|
||||
"planned_tile_jobs": result["planned_tile_jobs"],
|
||||
"pbf_file_count": result["pbf_file_count"],
|
||||
"planned_output_features": result["planned_output_features"],
|
||||
"decoded_pbf_features": result["decoded_pbf_features"],
|
||||
"semantic_completeness": result.get("semantic_completeness"),
|
||||
"semantic_backlog": result.get("semantic_backlog"),
|
||||
"non_renderable_omissions": result.get("non_renderable_omissions"),
|
||||
"non_renderable_omission_layers": result.get("non_renderable_omission_layers"),
|
||||
"style_sprite_contract": {
|
||||
"overall": (result.get("style_sprite_contract") or {}).get("overall"),
|
||||
"contract_unmatched_count": (result.get("style_sprite_contract") or {}).get("contract_unmatched_count"),
|
||||
"sprite_missing_count": (result.get("style_sprite_contract") or {}).get("sprite_missing_count"),
|
||||
},
|
||||
"quantization_fallbacks": result.get("quantization_fallbacks"),
|
||||
"quantization_omissions": result.get("quantization_omissions"),
|
||||
"nav_name_conflict_audit": {
|
||||
"overall": (result.get("nav_name_conflict_audit") or {}).get("overall"),
|
||||
"policy": (result.get("nav_name_conflict_audit") or {}).get("policy"),
|
||||
"report_occurrences": (result.get("nav_name_conflict_audit") or {}).get("report_occurrences"),
|
||||
"trace_occurrences": (result.get("nav_name_conflict_audit") or {}).get("trace_occurrences"),
|
||||
"safe_omission_occurrences": (result.get("nav_name_conflict_audit") or {}).get("safe_omission_occurrences"),
|
||||
"unique_conflict_outputs": (result.get("nav_name_conflict_audit") or {}).get("unique_conflict_outputs"),
|
||||
"affected_tiles": (result.get("nav_name_conflict_audit") or {}).get("affected_tiles"),
|
||||
},
|
||||
"failures": result["failures"],
|
||||
}, ensure_ascii=False, indent=2))
|
||||
if result["status"] != "PASS":
|
||||
raise SystemExit(2)
|
||||
return
|
||||
|
||||
if args.command == "build-fid-manifest":
|
||||
import pymysql
|
||||
with pymysql.connect(
|
||||
host=cfg.host,
|
||||
port=cfg.port,
|
||||
user=cfg.user,
|
||||
password=cfg.password,
|
||||
database=cfg.database,
|
||||
charset=cfg.charset,
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
) as conn:
|
||||
result = build_manifest(
|
||||
conn,
|
||||
args.dataset_id,
|
||||
Path(args.manifest),
|
||||
rebuild=bool(args.rebuild_fid_manifest),
|
||||
)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
manifest_path = Path(args.manifest)
|
||||
if not manifest_path.exists():
|
||||
print("FID manifest 不存在,先自动建立。")
|
||||
print(
|
||||
json.dumps(
|
||||
ensure_manifest(args.dataset_id, manifest_path),
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
)
|
||||
)
|
||||
|
||||
if args.command == "build-tile":
|
||||
builder = Cm95TileBuilder(
|
||||
db=cfg,
|
||||
dataset_id=args.dataset_id,
|
||||
mapping_path=Path(args.mapping),
|
||||
policy_path=Path(args.policy),
|
||||
fid_manifest_path=manifest_path,
|
||||
output_root=Path(args.output_root) / args.profile,
|
||||
report_root=Path(args.report_root),
|
||||
profile=args.profile,
|
||||
)
|
||||
result = builder.build_tile(
|
||||
TileJob(args.z, args.x, args.y)
|
||||
)
|
||||
print(json.dumps(result, ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
if args.command == "build-sample-aoi":
|
||||
profiles = [
|
||||
token.strip()
|
||||
for token in str(args.profiles).split(",")
|
||||
if token.strip()
|
||||
]
|
||||
for profile in profiles:
|
||||
if profile not in {"engineering", "delivery"}:
|
||||
raise SystemExit(f"invalid profile: {profile}")
|
||||
|
||||
jobs = [(10, args.z10_x, args.z10_y)]
|
||||
jobs.extend(child_tiles(10, args.z10_x, args.z10_y, 11))
|
||||
jobs.extend(child_tiles(10, args.z10_x, args.z10_y, 12))
|
||||
|
||||
results = []
|
||||
for profile in profiles:
|
||||
builder = Cm95TileBuilder(
|
||||
db=cfg,
|
||||
dataset_id=args.dataset_id,
|
||||
mapping_path=Path(args.mapping),
|
||||
policy_path=Path(args.policy),
|
||||
fid_manifest_path=manifest_path,
|
||||
output_root=Path(args.output_root) / profile,
|
||||
report_root=Path(args.report_root),
|
||||
profile=profile,
|
||||
)
|
||||
for z, x, y in jobs:
|
||||
result = builder.build_tile(TileJob(z, x, y))
|
||||
results.append(result)
|
||||
print(
|
||||
f"[{profile}] {z}/{x}/{y} "
|
||||
f"features={result['output_feature_count']} "
|
||||
f"layers={result['output_layer_count']} "
|
||||
f"hard_gate_unmapped={len(result['hard_gate_unmapped'])}"
|
||||
)
|
||||
|
||||
summary = {
|
||||
"dataset_id": args.dataset_id,
|
||||
"root_tile": f"10/{args.z10_x}/{args.z10_y}",
|
||||
"profiles": profiles,
|
||||
"tile_count_per_profile": len(jobs),
|
||||
"results": results,
|
||||
}
|
||||
summary_path = Path(args.report_root) / "sample_aoi_summary_v1.json"
|
||||
summary_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
summary_path.write_text(
|
||||
json.dumps(summary, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8",
|
||||
)
|
||||
print(f"SUMMARY: {summary_path}")
|
||||
return
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
329
src/cm95pbf/identity.py
Normal file
329
src/cm95pbf/identity.py
Normal file
@@ -0,0 +1,329 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
from typing import Iterable
|
||||
|
||||
ROLE_PRIMARY = 0
|
||||
ROLE_BOUNDARY = 1
|
||||
ROLE_POINT_ON_SURFACE = 2
|
||||
ROLE_SECONDARY = 3
|
||||
ROLE_FACTOR = 16
|
||||
MAX_SIGNED_INT32 = (1 << 31) - 1
|
||||
|
||||
|
||||
def feature_source_key(
|
||||
dataset_id: int,
|
||||
source_relative_path: str,
|
||||
source_record_index: int,
|
||||
geometry_type: str,
|
||||
) -> str:
|
||||
path = str(source_relative_path).replace("\\", "/")
|
||||
return (
|
||||
f"cm95:{int(dataset_id)}:{path}:"
|
||||
f"{int(source_record_index)}:{str(geometry_type).lower()}"
|
||||
)
|
||||
|
||||
|
||||
def sounding_source_key(
|
||||
dataset_id: int,
|
||||
source_relative_path: str,
|
||||
source_record_index: int,
|
||||
point_index: int,
|
||||
) -> str:
|
||||
return (
|
||||
feature_source_key(
|
||||
dataset_id,
|
||||
source_relative_path,
|
||||
source_record_index,
|
||||
"SOUNDING",
|
||||
)
|
||||
+ f":point:{int(point_index)}"
|
||||
)
|
||||
|
||||
|
||||
def dataset_fingerprint(conn, dataset_id: int) -> str:
|
||||
h = hashlib.sha256()
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
source_relative_path,
|
||||
COALESCE(source_sha256,'') AS source_sha256,
|
||||
source_size,
|
||||
scale_code,
|
||||
native_scale
|
||||
FROM chart_cell
|
||||
WHERE dataset_id=%s
|
||||
ORDER BY source_relative_path
|
||||
""",
|
||||
(dataset_id,),
|
||||
)
|
||||
for row in cur.fetchall():
|
||||
line = (
|
||||
f"{row['source_relative_path']}|{row['source_sha256']}|"
|
||||
f"{row['source_size']}|{row['scale_code']}|{row['native_scale']}\n"
|
||||
)
|
||||
h.update(line.encode("utf-8"))
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
class FidManifest:
|
||||
def __init__(self, path: Path):
|
||||
self.path = Path(path)
|
||||
self.db: sqlite3.Connection | None = None
|
||||
|
||||
def open(self) -> "FidManifest":
|
||||
self.path.parent.mkdir(parents=True, exist_ok=True)
|
||||
self.db = sqlite3.connect(self.path)
|
||||
self.db.row_factory = sqlite3.Row
|
||||
return self
|
||||
|
||||
def close(self) -> None:
|
||||
if self.db is not None:
|
||||
self.db.close()
|
||||
self.db = None
|
||||
|
||||
def __enter__(self) -> "FidManifest":
|
||||
return self.open()
|
||||
|
||||
def __exit__(self, exc_type, exc, tb) -> None:
|
||||
self.close()
|
||||
|
||||
def _require(self) -> sqlite3.Connection:
|
||||
if self.db is None:
|
||||
raise RuntimeError("manifest not open")
|
||||
return self.db
|
||||
|
||||
def init_schema(self) -> None:
|
||||
db = self._require()
|
||||
db.executescript(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS manifest_meta (
|
||||
k TEXT PRIMARY KEY,
|
||||
v TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS manifest_identity (
|
||||
source_key TEXT PRIMARY KEY,
|
||||
base_ord INTEGER NOT NULL UNIQUE,
|
||||
source_kind TEXT NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_manifest_identity_ord
|
||||
ON manifest_identity(base_ord);
|
||||
"""
|
||||
)
|
||||
db.commit()
|
||||
|
||||
def clear(self) -> None:
|
||||
db = self._require()
|
||||
self.init_schema()
|
||||
db.execute("DELETE FROM manifest_identity")
|
||||
db.execute("DELETE FROM manifest_meta")
|
||||
db.commit()
|
||||
|
||||
def set_meta(self, key: str, value: str) -> None:
|
||||
db = self._require()
|
||||
db.execute(
|
||||
"INSERT OR REPLACE INTO manifest_meta(k,v) VALUES(?,?)",
|
||||
(str(key), str(value)),
|
||||
)
|
||||
|
||||
def get_meta(self, key: str) -> str | None:
|
||||
db = self._require()
|
||||
row = db.execute(
|
||||
"SELECT v FROM manifest_meta WHERE k=?",
|
||||
(str(key),),
|
||||
).fetchone()
|
||||
return None if row is None else str(row["v"])
|
||||
|
||||
def insert_many(self, rows: Iterable[tuple[str, int, str]]) -> None:
|
||||
db = self._require()
|
||||
db.executemany(
|
||||
"""
|
||||
INSERT INTO manifest_identity(source_key,base_ord,source_kind)
|
||||
VALUES(?,?,?)
|
||||
""",
|
||||
rows,
|
||||
)
|
||||
|
||||
def commit(self) -> None:
|
||||
self._require().commit()
|
||||
|
||||
def base_ord(self, source_key: str) -> int:
|
||||
db = self._require()
|
||||
row = db.execute(
|
||||
"SELECT base_ord FROM manifest_identity WHERE source_key=?",
|
||||
(source_key,),
|
||||
).fetchone()
|
||||
if row is None:
|
||||
raise KeyError(f"source identity missing from manifest: {source_key}")
|
||||
return int(row["base_ord"])
|
||||
|
||||
def mvt_id(self, source_key: str, role_code: int = ROLE_PRIMARY) -> int:
|
||||
if role_code < 0 or role_code >= ROLE_FACTOR:
|
||||
raise ValueError(f"invalid role code: {role_code}")
|
||||
value = self.base_ord(source_key) * ROLE_FACTOR + int(role_code)
|
||||
if value > MAX_SIGNED_INT32:
|
||||
raise RuntimeError(
|
||||
"deterministic fid exceeded signed int32; "
|
||||
"increase identity design before publishing"
|
||||
)
|
||||
return value
|
||||
|
||||
|
||||
def build_manifest(
|
||||
mysql_conn,
|
||||
dataset_id: int,
|
||||
manifest_path: Path,
|
||||
rebuild: bool = False,
|
||||
) -> dict:
|
||||
fingerprint = dataset_fingerprint(mysql_conn, dataset_id)
|
||||
|
||||
with FidManifest(manifest_path) as manifest:
|
||||
manifest.init_schema()
|
||||
|
||||
old_dataset = manifest.get_meta("dataset_id")
|
||||
old_fingerprint = manifest.get_meta("dataset_fingerprint")
|
||||
|
||||
if old_dataset is not None and not rebuild:
|
||||
if old_dataset == str(dataset_id) and old_fingerprint == fingerprint:
|
||||
count = int(
|
||||
manifest._require()
|
||||
.execute("SELECT COUNT(*) FROM manifest_identity")
|
||||
.fetchone()[0]
|
||||
)
|
||||
return {
|
||||
"status": "REUSED",
|
||||
"dataset_id": dataset_id,
|
||||
"dataset_fingerprint": fingerprint,
|
||||
"identity_count": count,
|
||||
"manifest": str(manifest_path),
|
||||
}
|
||||
raise RuntimeError(
|
||||
"existing fid manifest belongs to a different dataset state; "
|
||||
"run with --rebuild-fid-manifest"
|
||||
)
|
||||
|
||||
manifest.clear()
|
||||
|
||||
base_ord = 0
|
||||
batch: list[tuple[str, int, str]] = []
|
||||
|
||||
with mysql_conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.geometry_type
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
ORDER BY
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.geometry_type
|
||||
""",
|
||||
(dataset_id,),
|
||||
)
|
||||
while True:
|
||||
mysql_batch = cur.fetchmany(5000)
|
||||
if not mysql_batch:
|
||||
break
|
||||
for row in mysql_batch:
|
||||
base_ord += 1
|
||||
batch.append(
|
||||
(
|
||||
feature_source_key(
|
||||
dataset_id,
|
||||
row["source_relative_path"],
|
||||
row["source_record_index"],
|
||||
row["geometry_type"],
|
||||
),
|
||||
base_ord,
|
||||
"feature",
|
||||
)
|
||||
)
|
||||
manifest.insert_many(batch)
|
||||
batch.clear()
|
||||
|
||||
feature_identity_count = base_ord
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
s.point_index
|
||||
FROM chart_sounding_point s
|
||||
JOIN chart_feature f ON f.id=s.feature_id
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
ORDER BY
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
s.point_index
|
||||
""",
|
||||
(dataset_id,),
|
||||
)
|
||||
while True:
|
||||
mysql_batch = cur.fetchmany(5000)
|
||||
if not mysql_batch:
|
||||
break
|
||||
for row in mysql_batch:
|
||||
base_ord += 1
|
||||
batch.append(
|
||||
(
|
||||
sounding_source_key(
|
||||
dataset_id,
|
||||
row["source_relative_path"],
|
||||
row["source_record_index"],
|
||||
row["point_index"],
|
||||
),
|
||||
base_ord,
|
||||
"sounding_point",
|
||||
)
|
||||
)
|
||||
manifest.insert_many(batch)
|
||||
batch.clear()
|
||||
|
||||
manifest.set_meta("schema", "navsea.cm95.fid-manifest/v1")
|
||||
manifest.set_meta("dataset_id", str(dataset_id))
|
||||
manifest.set_meta("dataset_fingerprint", fingerprint)
|
||||
manifest.set_meta("role_factor", str(ROLE_FACTOR))
|
||||
manifest.set_meta("feature_identity_count", str(feature_identity_count))
|
||||
manifest.set_meta("identity_count", str(base_ord))
|
||||
manifest.commit()
|
||||
|
||||
return {
|
||||
"status": "BUILT",
|
||||
"dataset_id": dataset_id,
|
||||
"dataset_fingerprint": fingerprint,
|
||||
"feature_identity_count": feature_identity_count,
|
||||
"identity_count": base_ord,
|
||||
"manifest": str(manifest_path),
|
||||
}
|
||||
|
||||
|
||||
def validate_manifest(mysql_conn, dataset_id: int, manifest_path: Path) -> dict:
|
||||
fingerprint = dataset_fingerprint(mysql_conn, dataset_id)
|
||||
with FidManifest(manifest_path) as manifest:
|
||||
manifest.init_schema()
|
||||
dataset = manifest.get_meta("dataset_id")
|
||||
stored_fp = manifest.get_meta("dataset_fingerprint")
|
||||
if dataset != str(dataset_id) or stored_fp != fingerprint:
|
||||
raise RuntimeError(
|
||||
"fid manifest does not match current dataset; rebuild required"
|
||||
)
|
||||
count = int(
|
||||
manifest._require()
|
||||
.execute("SELECT COUNT(*) FROM manifest_identity")
|
||||
.fetchone()[0]
|
||||
)
|
||||
return {
|
||||
"dataset_id": dataset_id,
|
||||
"dataset_fingerprint": fingerprint,
|
||||
"identity_count": count,
|
||||
"manifest": str(manifest_path),
|
||||
}
|
||||
495
src/cm95pbf/mapping.py
Normal file
495
src/cm95pbf/mapping.py
Normal file
@@ -0,0 +1,495 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
DELIVERY_PROPERTY_ALLOWLIST = frozenset(
|
||||
{
|
||||
"canonical_object_type",
|
||||
"class_code",
|
||||
"chart_fill_pattern",
|
||||
"chart_fill_style",
|
||||
"chart_icon_image",
|
||||
"chart_label_position_code",
|
||||
"chart_label_subtext",
|
||||
"chart_label_text",
|
||||
"chart_line_color",
|
||||
"chart_line_width",
|
||||
"chart_symbol_code",
|
||||
"chart_text_color",
|
||||
"chart_text_style",
|
||||
"clearance_height_m",
|
||||
"depth_value_m",
|
||||
"display_code",
|
||||
"least_depth_m",
|
||||
"light_color_code",
|
||||
"light_sector_mode",
|
||||
"arc_id",
|
||||
"arc_source_code",
|
||||
"name_ja",
|
||||
"place_name_en",
|
||||
"shape_class_code",
|
||||
}
|
||||
)
|
||||
|
||||
DELIVERY_MAIN_STATUSES = frozenset(
|
||||
{
|
||||
"MAPPED",
|
||||
"MAPPED_CONDITIONAL",
|
||||
"COMPOSITE",
|
||||
"MAPPED_DERIVED_POINTS",
|
||||
}
|
||||
)
|
||||
|
||||
DELIVERY_DERIVED_STATUSES = frozenset(
|
||||
{
|
||||
"MAPPED",
|
||||
"MAPPED_CONDITIONAL",
|
||||
"DERIVED_LABEL_ONLY",
|
||||
}
|
||||
)
|
||||
|
||||
NAV_COMPONENT_CLASSES = frozenset(
|
||||
{
|
||||
"LIGHTS",
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
}
|
||||
)
|
||||
|
||||
LIGHT_COLOUR = {
|
||||
1: ("white", "W"),
|
||||
3: ("red", "R"),
|
||||
4: ("green", "G"),
|
||||
6: ("yellow", "Y"),
|
||||
}
|
||||
|
||||
LIGHT_CHARACTER = {
|
||||
1: "F",
|
||||
2: "Fl",
|
||||
3: "LFl",
|
||||
4: "Q",
|
||||
5: "VQ",
|
||||
6: "UQ",
|
||||
7: "Iso",
|
||||
8: "Oc",
|
||||
9: "IQ",
|
||||
10: "IVQ",
|
||||
11: "IUQ",
|
||||
12: "Mo",
|
||||
13: "F+Fl",
|
||||
14: "Fl+LFl",
|
||||
15: "Oc+Fl",
|
||||
16: "F+LFl",
|
||||
17: "Al.Oc",
|
||||
18: "Al.LFl",
|
||||
19: "Al.Fl",
|
||||
20: "Al.Gr",
|
||||
21: "Q+LFl",
|
||||
22: "VQ+LFl",
|
||||
23: "UQ+LFl",
|
||||
}
|
||||
|
||||
NATSUR_TEXT = {
|
||||
1: "M",
|
||||
2: "Cy",
|
||||
3: "Si",
|
||||
4: "S",
|
||||
5: "St",
|
||||
6: "G",
|
||||
7: "P",
|
||||
8: "Cb",
|
||||
9: "R",
|
||||
11: "Lv",
|
||||
14: "Co",
|
||||
17: "Sh",
|
||||
18: "Bo",
|
||||
}
|
||||
|
||||
|
||||
def scalarize(value: Any) -> Any:
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, bool):
|
||||
return value
|
||||
if isinstance(value, (int, float, str)):
|
||||
return value
|
||||
if isinstance(value, (list, dict, tuple)):
|
||||
return json.dumps(value, ensure_ascii=False, separators=(",", ":"))
|
||||
return str(value)
|
||||
|
||||
|
||||
def get_path(data: dict[str, Any], path: str) -> Any:
|
||||
cur: Any = data
|
||||
for token in str(path).split("."):
|
||||
if isinstance(cur, dict) and token in cur:
|
||||
cur = cur[token]
|
||||
else:
|
||||
return None
|
||||
return cur
|
||||
|
||||
|
||||
|
||||
def first_direct_name(attrs: dict[str, Any]) -> str | None:
|
||||
"""Return a direct source-owned navigation name, never a proximity-derived text."""
|
||||
for key in ("OBJNAM", "NOBJNM"):
|
||||
value = attrs.get(key)
|
||||
if isinstance(value, str):
|
||||
value = value.strip()
|
||||
if value:
|
||||
return value
|
||||
return None
|
||||
|
||||
|
||||
def unique_direct_names(rows: list[dict[str, Any]]) -> list[str]:
|
||||
out: list[str] = []
|
||||
for attrs in rows:
|
||||
value = first_direct_name(attrs)
|
||||
if value and value not in out:
|
||||
out.append(value)
|
||||
return out
|
||||
|
||||
|
||||
def format_number(value: Any) -> str:
|
||||
if value is None:
|
||||
return ""
|
||||
try:
|
||||
v = float(value)
|
||||
except Exception:
|
||||
return str(value)
|
||||
if abs(v - round(v)) < 1e-9:
|
||||
return str(int(round(v)))
|
||||
return f"{v:.2f}".rstrip("0").rstrip(".")
|
||||
|
||||
|
||||
def format_depth(value: Any) -> str | None:
|
||||
if value is None:
|
||||
return None
|
||||
return format_number(value)
|
||||
|
||||
|
||||
def format_clearance(value: Any) -> str | None:
|
||||
if value is None:
|
||||
return None
|
||||
return f"{format_number(value)}m"
|
||||
|
||||
|
||||
def _depth_token(value: Any) -> str:
|
||||
return format_number(value)
|
||||
|
||||
|
||||
# Current NavSea unified style only consumes these depth-area buckets.
|
||||
# Keep this list aligned with style.navsea-delivery-full-semantic-unified-20260808.
|
||||
NAVSEA_DEPTH_ZONE_INTERVALS: tuple[tuple[float, float, str], ...] = (
|
||||
(0, 2, "depth_zone_0-2m"),
|
||||
(0, 5, "depth_zone_0-5m"),
|
||||
(0, 10, "depth_zone_0-10m"),
|
||||
(0, 20, "depth_zone_0-20m"),
|
||||
(2, 5, "depth_zone_2-5m"),
|
||||
(2, 10, "depth_zone_2-10m"),
|
||||
(2, 20, "depth_zone_2-20m"),
|
||||
(5, 10, "depth_zone_5-10m"),
|
||||
(5, 20, "depth_zone_5-20m"),
|
||||
(10, 20, "depth_zone_10-20m"),
|
||||
(20, 100, "depth_zone_20-100m"),
|
||||
(20, 200, "depth_zone_20-200m"),
|
||||
(100, 200, "depth_zone_100-200m"),
|
||||
(200, 500, "depth_zone_200-500m"),
|
||||
(500, 1000, "depth_zone_500-1000m"),
|
||||
(1000, 2000, "depth_zone_1000-2000m"),
|
||||
(2000, 3000, "depth_zone_2000-3000m"),
|
||||
(3000, 4000, "depth_zone_3000-4000m"),
|
||||
(4000, 5000, "depth_zone_4000-5000m"),
|
||||
(5000, 6000, "depth_zone_5000-6000m"),
|
||||
(6000, 7000, "depth_zone_6000-7000m"),
|
||||
(7000, 8000, "depth_zone_7000-8000m"),
|
||||
(8000, 9000, "depth_zone_8000-9000m"),
|
||||
)
|
||||
|
||||
|
||||
def _smallest_supported_depth_bucket(lo: float, hi: float | None) -> str | None:
|
||||
if lo >= 9000 and (hi is None or hi >= lo):
|
||||
return "depth_zone_over_9000m"
|
||||
|
||||
candidates: list[tuple[float, float, float, str]] = []
|
||||
for bucket_lo, bucket_hi, token in NAVSEA_DEPTH_ZONE_INTERVALS:
|
||||
if hi is None:
|
||||
# A lower-bounded zone uses the tightest bucket containing the lower bound.
|
||||
if bucket_lo <= lo < bucket_hi:
|
||||
width = bucket_hi - bucket_lo
|
||||
edge_distance = abs(bucket_lo - lo)
|
||||
candidates.append((width, edge_distance, -bucket_lo, token))
|
||||
else:
|
||||
# Prefer the smallest supported interval that fully contains the source range.
|
||||
if bucket_lo <= lo and hi <= bucket_hi:
|
||||
width = bucket_hi - bucket_lo
|
||||
edge_distance = abs(bucket_lo - lo) + abs(bucket_hi - hi)
|
||||
candidates.append((width, edge_distance, -bucket_lo, token))
|
||||
|
||||
if not candidates:
|
||||
return None
|
||||
candidates.sort()
|
||||
return candidates[0][3]
|
||||
|
||||
|
||||
def depth_zone_style(lo: Any, hi: Any) -> str:
|
||||
"""Normalize CM95 depth ranges to the existing NavSea style vocabulary.
|
||||
|
||||
Arbitrary CM95 intervals such as 7.5-10m, 13-20m or 20-50m must never
|
||||
leak into delivery PBF because the current style does not consume them.
|
||||
The chosen style bucket is the smallest existing NavSea interval that fully
|
||||
contains the source range. The original DRVAL1/DRVAL2 remain available in
|
||||
engineering trace/source attributes.
|
||||
"""
|
||||
if lo is None and hi is None:
|
||||
return "water_area"
|
||||
|
||||
try:
|
||||
lv = float(lo) if lo is not None else 0.0
|
||||
except Exception:
|
||||
return "water_area"
|
||||
|
||||
hv: float | None
|
||||
if hi is None:
|
||||
hv = None
|
||||
else:
|
||||
try:
|
||||
hv = float(hi)
|
||||
except Exception:
|
||||
hv = None
|
||||
|
||||
if hv is not None and hv < lv:
|
||||
lv, hv = hv, lv
|
||||
|
||||
token = _smallest_supported_depth_bucket(lv, hv)
|
||||
if token is not None:
|
||||
return token
|
||||
|
||||
# No truthful single bucket exists in the current style vocabulary.
|
||||
# Use neutral water rather than inventing a style value that will not render.
|
||||
return "water_area"
|
||||
|
||||
|
||||
def format_natsur(natsur: Any, natqua: Any) -> str | None:
|
||||
values = natsur if isinstance(natsur, list) else [natsur] if natsur is not None else []
|
||||
parts: list[str] = []
|
||||
for value in values:
|
||||
try:
|
||||
code = int(value)
|
||||
except Exception:
|
||||
code = None
|
||||
text = NATSUR_TEXT.get(code, str(value) if value is not None else "")
|
||||
if text and text not in parts:
|
||||
parts.append(text)
|
||||
if not parts:
|
||||
return None
|
||||
return "/".join(parts)
|
||||
|
||||
|
||||
def s57_light_color(colour: Any) -> str | None:
|
||||
values = colour if isinstance(colour, list) else [colour] if colour is not None else []
|
||||
for value in values:
|
||||
try:
|
||||
code = int(value)
|
||||
except Exception:
|
||||
continue
|
||||
if code in LIGHT_COLOUR:
|
||||
return LIGHT_COLOUR[code][0]
|
||||
return None
|
||||
|
||||
|
||||
def light_colour_abbrs(colour: Any) -> list[str]:
|
||||
values = colour if isinstance(colour, list) else [colour] if colour is not None else []
|
||||
out: list[str] = []
|
||||
for value in values:
|
||||
try:
|
||||
code = int(value)
|
||||
except Exception:
|
||||
continue
|
||||
item = LIGHT_COLOUR.get(code)
|
||||
if item and item[1] not in out:
|
||||
out.append(item[1])
|
||||
return out
|
||||
|
||||
|
||||
def format_light_abbreviation(attrs: dict[str, Any]) -> str | None:
|
||||
parts: list[str] = []
|
||||
litchr = attrs.get("LITCHR")
|
||||
if litchr is not None:
|
||||
try:
|
||||
char = LIGHT_CHARACTER.get(int(litchr), f"L{int(litchr)}")
|
||||
except Exception:
|
||||
char = str(litchr)
|
||||
siggrp = attrs.get("SIGGRP")
|
||||
if siggrp and str(siggrp) not in {"(1)", "1"}:
|
||||
char += str(siggrp)
|
||||
parts.append(char)
|
||||
|
||||
colours = light_colour_abbrs(attrs.get("COLOUR"))
|
||||
if colours:
|
||||
parts.append(",".join(colours))
|
||||
|
||||
if attrs.get("SIGPER") is not None:
|
||||
parts.append(f"{format_number(attrs['SIGPER'])}s")
|
||||
if attrs.get("HEIGHT") is not None:
|
||||
parts.append(f"{format_number(attrs['HEIGHT'])}m")
|
||||
if attrs.get("VALNMR") is not None:
|
||||
parts.append(f"{format_number(attrs['VALNMR'])}M")
|
||||
|
||||
if not parts:
|
||||
colours = light_colour_abbrs(attrs.get("COLOUR"))
|
||||
if colours:
|
||||
return ",".join(colours)
|
||||
return None
|
||||
return " ".join(parts)
|
||||
|
||||
|
||||
def nav_icon_from_bcnlat(attrs: dict[str, Any], lighted: bool = False) -> str:
|
||||
try:
|
||||
cat = int(attrs.get("CATLAM"))
|
||||
except Exception:
|
||||
cat = 0
|
||||
suffix = {
|
||||
1: "port",
|
||||
2: "starboard",
|
||||
3: "starboard",
|
||||
4: "port",
|
||||
}.get(cat, "special")
|
||||
if lighted:
|
||||
return f"beacon_light_mark_{suffix}"
|
||||
return f"beacon_small_{suffix}"
|
||||
|
||||
|
||||
def nav_icon_from_bcnspp(attrs: dict[str, Any], lighted: bool = False) -> str:
|
||||
return "beacon_light_mark_special" if lighted else "beacon_small_special"
|
||||
|
||||
|
||||
def nav_icon_from_boyspp(attrs: dict[str, Any], lighted: bool = False) -> str:
|
||||
try:
|
||||
shape = int(attrs.get("BOYSHP"))
|
||||
except Exception:
|
||||
shape = 0
|
||||
if lighted:
|
||||
if shape == 4:
|
||||
return "buoy_pillar_light_special"
|
||||
return "buoy_light_special"
|
||||
return {
|
||||
1: "buoy_cone",
|
||||
2: "buoy_cylinder",
|
||||
3: "buoy_sphere",
|
||||
4: "buoy_pillar",
|
||||
6: "buoy_barrel_light",
|
||||
}.get(shape, "buoy_lattice_special")
|
||||
|
||||
|
||||
def nav_icon_from_rtpbcn(attrs: dict[str, Any], lighted: bool = False) -> str:
|
||||
return "beacon_light" if lighted else "beacon_large"
|
||||
|
||||
|
||||
class MappingRegistry:
|
||||
def __init__(self, path: Path):
|
||||
self.path = Path(path)
|
||||
self.document = yaml.safe_load(self.path.read_text(encoding="utf-8"))
|
||||
self.rules: dict[tuple[str, str], dict[str, Any]] = {}
|
||||
for rule in self.document.get("rules", []):
|
||||
key = (
|
||||
str(rule.get("cm95_object_class") or ""),
|
||||
str(rule.get("geometry_type") or ""),
|
||||
)
|
||||
self.rules[key] = rule
|
||||
|
||||
def resolve(self, object_class: str, geometry_type: str) -> dict[str, Any] | None:
|
||||
return self.rules.get((str(object_class), str(geometry_type)))
|
||||
|
||||
def eval_condition(self, condition: Any, attrs: dict[str, Any]) -> bool:
|
||||
if condition is None or condition == "":
|
||||
return True
|
||||
text = str(condition).strip()
|
||||
if text.endswith(" present"):
|
||||
field = text[:-8].strip()
|
||||
return get_path(attrs, field) is not None
|
||||
return False
|
||||
|
||||
def evaluate_fields(
|
||||
self,
|
||||
field_spec: dict[str, Any],
|
||||
attrs: dict[str, Any],
|
||||
context: dict[str, Any] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
context = context or {}
|
||||
merged = dict(attrs)
|
||||
merged.update(context)
|
||||
out: dict[str, Any] = {}
|
||||
for field, spec in (field_spec or {}).items():
|
||||
value = self._evaluate_spec(spec, merged)
|
||||
value = scalarize(value)
|
||||
if value is not None and value != "":
|
||||
out[str(field)] = value
|
||||
return out
|
||||
|
||||
def _evaluate_spec(self, spec: Any, attrs: dict[str, Any]) -> Any:
|
||||
if not isinstance(spec, dict):
|
||||
return spec
|
||||
if "const" in spec:
|
||||
return spec["const"]
|
||||
if "from" in spec:
|
||||
return get_path(attrs, str(spec["from"]))
|
||||
derive = spec.get("derive")
|
||||
if derive is None:
|
||||
return None
|
||||
text = str(derive)
|
||||
|
||||
if text == "wreck_surveyed if VALSOU present else wreck_submerged_dangerous":
|
||||
return "wreck_surveyed" if attrs.get("VALSOU") is not None else "wreck_submerged_dangerous"
|
||||
if text == "rock_awash if WATLEV in [2,4,5] else rock_submerged":
|
||||
try:
|
||||
watlev = int(attrs.get("WATLEV"))
|
||||
except Exception:
|
||||
watlev = None
|
||||
return "rock_awash" if watlev in {2, 4, 5} else "rock_submerged"
|
||||
if text == "format_depth(VALDCO)":
|
||||
return format_depth(attrs.get("VALDCO"))
|
||||
if text == "format_depth(chart_sounding_point.depth)":
|
||||
return format_depth(get_path(attrs, "chart_sounding_point.depth"))
|
||||
if text == "depth_zone_style(DRVAL1,DRVAL2)":
|
||||
return depth_zone_style(attrs.get("DRVAL1"), attrs.get("DRVAL2"))
|
||||
if text == "depth_zone_style(DRVAL1,null)":
|
||||
return depth_zone_style(attrs.get("DRVAL1"), None)
|
||||
if text == "format_natsur(NATSUR,NATQUA)":
|
||||
return format_natsur(attrs.get("NATSUR"), attrs.get("NATQUA"))
|
||||
if text == "_texta.text":
|
||||
return get_path(attrs, "_texta.text")
|
||||
if text == "s57_colour_to_light_color(COLOUR)":
|
||||
return s57_light_color(attrs.get("COLOUR"))
|
||||
if text == "format_light_abbreviation(LITCHR,SIGGRP,SIGPER,COLOUR,HEIGHT,VALNMR)":
|
||||
return format_light_abbreviation(attrs)
|
||||
if text == "first_present(OBJNAM,NOBJNM)":
|
||||
return first_direct_name(attrs)
|
||||
if text == "sector if SECTR1/SECTR2 present else omni":
|
||||
return "sector" if attrs.get("SECTR1") is not None or attrs.get("SECTR2") is not None else "omni"
|
||||
if text == "format_clearance(VERCLR)":
|
||||
return format_clearance(attrs.get("VERCLR"))
|
||||
if text == "nav_icon_from_bcnlat_attributes":
|
||||
return nav_icon_from_bcnlat(attrs, lighted=False)
|
||||
if text == "nav_icon_from_bcnspp_attributes":
|
||||
return nav_icon_from_bcnspp(attrs, lighted=False)
|
||||
if text == "nav_icon_from_boyspp_attributes":
|
||||
return nav_icon_from_boyspp(attrs, lighted=False)
|
||||
if text == "nav_icon_from_rtpbcn_attributes":
|
||||
return nav_icon_from_rtpbcn(attrs, lighted=False)
|
||||
return None
|
||||
|
||||
def minimize_delivery_properties(self, properties: dict[str, Any]) -> dict[str, Any]:
|
||||
return {
|
||||
key: scalarize(value)
|
||||
for key, value in properties.items()
|
||||
if key in DELIVERY_PROPERTY_ALLOWLIST and scalarize(value) is not None
|
||||
}
|
||||
98
src/cm95pbf/policy.py
Normal file
98
src/cm95pbf/policy.py
Normal file
@@ -0,0 +1,98 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
import math
|
||||
|
||||
WEB_MERCATOR_HALF_WORLD = 20037508.342789244
|
||||
MAX_MERCATOR_LAT = 85.0511287798066
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TileBounds:
|
||||
z: int
|
||||
x: int
|
||||
y: int
|
||||
west_m: float
|
||||
south_m: float
|
||||
east_m: float
|
||||
north_m: float
|
||||
|
||||
@property
|
||||
def width_m(self) -> float:
|
||||
return self.east_m - self.west_m
|
||||
|
||||
@property
|
||||
def height_m(self) -> float:
|
||||
return self.north_m - self.south_m
|
||||
|
||||
@property
|
||||
def mercator_tuple(self) -> tuple[float, float, float, float]:
|
||||
return self.west_m, self.south_m, self.east_m, self.north_m
|
||||
|
||||
@property
|
||||
def wgs84_tuple(self) -> tuple[float, float, float, float]:
|
||||
west, south = mercator_to_lonlat(self.west_m, self.south_m)
|
||||
east, north = mercator_to_lonlat(self.east_m, self.north_m)
|
||||
return west, south, east, north
|
||||
|
||||
|
||||
def lonlat_to_mercator(lon: float, lat: float) -> tuple[float, float]:
|
||||
lat = max(-MAX_MERCATOR_LAT, min(MAX_MERCATOR_LAT, float(lat)))
|
||||
x = WEB_MERCATOR_HALF_WORLD * float(lon) / 180.0
|
||||
y = math.log(math.tan((90.0 + lat) * math.pi / 360.0)) / (math.pi / 180.0)
|
||||
y = WEB_MERCATOR_HALF_WORLD * y / 180.0
|
||||
return x, y
|
||||
|
||||
|
||||
def mercator_to_lonlat(x: float, y: float) -> tuple[float, float]:
|
||||
lon = float(x) / WEB_MERCATOR_HALF_WORLD * 180.0
|
||||
lat = float(y) / WEB_MERCATOR_HALF_WORLD * 180.0
|
||||
lat = 180.0 / math.pi * (
|
||||
2.0 * math.atan(math.exp(lat * math.pi / 180.0)) - math.pi / 2.0
|
||||
)
|
||||
return lon, lat
|
||||
|
||||
|
||||
def xyz_tile_bounds(z: int, x: int, y: int) -> TileBounds:
|
||||
n = 1 << int(z)
|
||||
if x < 0 or y < 0 or x >= n or y >= n:
|
||||
raise ValueError(f"invalid XYZ tile z={z} x={x} y={y}")
|
||||
tile_size = (WEB_MERCATOR_HALF_WORLD * 2.0) / n
|
||||
west = -WEB_MERCATOR_HALF_WORLD + x * tile_size
|
||||
east = west + tile_size
|
||||
north = WEB_MERCATOR_HALF_WORLD - y * tile_size
|
||||
south = north - tile_size
|
||||
return TileBounds(
|
||||
z=z,
|
||||
x=x,
|
||||
y=y,
|
||||
west_m=west,
|
||||
south_m=south,
|
||||
east_m=east,
|
||||
north_m=north,
|
||||
)
|
||||
|
||||
|
||||
def expanded_mercator_bounds(
|
||||
tile: TileBounds,
|
||||
buffer_tile_pixels: float,
|
||||
nominal_tile_pixels: float = 256.0,
|
||||
) -> tuple[float, float, float, float]:
|
||||
pad = tile.width_m * float(buffer_tile_pixels) / float(nominal_tile_pixels)
|
||||
return (
|
||||
tile.west_m - pad,
|
||||
tile.south_m - pad,
|
||||
tile.east_m + pad,
|
||||
tile.north_m + pad,
|
||||
)
|
||||
|
||||
|
||||
def child_tiles(z: int, x: int, y: int, child_z: int) -> list[tuple[int, int, int]]:
|
||||
if child_z < z:
|
||||
raise ValueError("child_z must be >= z")
|
||||
factor = 1 << (child_z - z)
|
||||
out: list[tuple[int, int, int]] = []
|
||||
for cx in range(x * factor, (x + 1) * factor):
|
||||
for cy in range(y * factor, (y + 1) * factor):
|
||||
out.append((child_z, cx, cy))
|
||||
return out
|
||||
826
src/cm95pbf/production.py
Normal file
826
src/cm95pbf/production.py
Normal file
@@ -0,0 +1,826 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
from collections import Counter
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timezone
|
||||
import hashlib
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
from pathlib import Path
|
||||
import shutil
|
||||
import sqlite3
|
||||
import threading
|
||||
import traceback
|
||||
from typing import Any, Iterable
|
||||
|
||||
import pymysql
|
||||
from shapely import wkb
|
||||
from shapely.geometry import box
|
||||
from shapely.ops import transform
|
||||
|
||||
from cm93db.config import DbConfig
|
||||
|
||||
from . import BUILDER_CONTRACT_VERSION
|
||||
from .builder import Cm95TileBuilder, TileJob
|
||||
from .identity import dataset_fingerprint, validate_manifest
|
||||
from .policy import (
|
||||
WEB_MERCATOR_HALF_WORLD,
|
||||
lonlat_to_mercator,
|
||||
xyz_tile_bounds,
|
||||
)
|
||||
|
||||
|
||||
PRODUCTION_PLAN_SCHEMA = "navsea.cm95.production-plan/v1"
|
||||
PRODUCTION_RUN_SCHEMA = "navsea.cm95.production-run/v1"
|
||||
|
||||
|
||||
def utc_now() -> str:
|
||||
return datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z")
|
||||
|
||||
|
||||
def sha256_file(path: Path) -> str:
|
||||
h = hashlib.sha256()
|
||||
with Path(path).open("rb") as f:
|
||||
for chunk in iter(lambda: f.read(1024 * 1024), b""):
|
||||
h.update(chunk)
|
||||
return h.hexdigest()
|
||||
|
||||
|
||||
def canonical_sha256(obj: Any) -> str:
|
||||
raw = json.dumps(obj, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
||||
return hashlib.sha256(raw).hexdigest()
|
||||
|
||||
|
||||
def parse_zooms(value: str | Iterable[int]) -> list[int]:
|
||||
if isinstance(value, str):
|
||||
values: list[int] = []
|
||||
for token in value.split(","):
|
||||
token = token.strip()
|
||||
if not token:
|
||||
continue
|
||||
if "-" in token:
|
||||
parts = token.split("-", 1)
|
||||
if len(parts) != 2 or not parts[0].strip() or not parts[1].strip():
|
||||
raise ValueError(f"invalid zoom range: {token}")
|
||||
start = int(parts[0].strip())
|
||||
end = int(parts[1].strip())
|
||||
if end < start:
|
||||
raise ValueError(f"invalid zoom range: {token}")
|
||||
values.extend(range(start, end + 1))
|
||||
else:
|
||||
values.append(int(token))
|
||||
else:
|
||||
values = [int(v) for v in value]
|
||||
values = sorted(set(values))
|
||||
if not values:
|
||||
raise ValueError("zooms 不能为空")
|
||||
for z in values:
|
||||
if z < 0 or z > 22:
|
||||
raise ValueError(f"invalid zoom: {z}")
|
||||
return values
|
||||
|
||||
|
||||
def _load_policy(path: Path) -> dict[str, Any]:
|
||||
import yaml
|
||||
return yaml.safe_load(Path(path).read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def _scale_ladder(policy: dict[str, Any], z: int) -> list[int]:
|
||||
raw = (policy.get("scale_ladders") or {}).get(str(z))
|
||||
if not raw:
|
||||
raise RuntimeError(f"no scale ladder configured for z{z}")
|
||||
return [int(v) for v in raw]
|
||||
|
||||
|
||||
def _enumeration_scales(policy: dict[str, Any], z: int) -> list[int]:
|
||||
"""Return scales allowed to materialize physical tiles at a zoom.
|
||||
|
||||
This is intentionally distinct from scale_ladders: coarse fallback scales may
|
||||
be read *inside* an already materialized tile, but they must not expand the
|
||||
high-zoom production footprint.
|
||||
"""
|
||||
raw = (policy.get("enumeration_scales") or {}).get(str(z))
|
||||
if raw:
|
||||
return [int(v) for v in raw]
|
||||
return _scale_ladder(policy, z)
|
||||
|
||||
|
||||
def _mercator_geom_from_wkb(value: Any):
|
||||
if value is None:
|
||||
return None
|
||||
if isinstance(value, memoryview):
|
||||
value = value.tobytes()
|
||||
elif isinstance(value, bytearray):
|
||||
value = bytes(value)
|
||||
geom = wkb.loads(value)
|
||||
if geom is None or geom.is_empty:
|
||||
return None
|
||||
return transform(lambda x, y, z=None: lonlat_to_mercator(x, y), geom)
|
||||
|
||||
|
||||
def _mercator_tile_index(z: int, x_m: float, y_m: float) -> tuple[int, int]:
|
||||
n = 1 << int(z)
|
||||
world = WEB_MERCATOR_HALF_WORLD * 2.0
|
||||
tx = math.floor((float(x_m) + WEB_MERCATOR_HALF_WORLD) / world * n)
|
||||
ty = math.floor((WEB_MERCATOR_HALF_WORLD - float(y_m)) / world * n)
|
||||
return max(0, min(n - 1, tx)), max(0, min(n - 1, ty))
|
||||
|
||||
|
||||
def _tiles_intersecting_geom(z: int, geom) -> set[tuple[int, int, int]]:
|
||||
if geom is None or geom.is_empty:
|
||||
return set()
|
||||
minx, miny, maxx, maxy = geom.bounds
|
||||
x0, y1 = _mercator_tile_index(z, minx, miny)
|
||||
x1, y0 = _mercator_tile_index(z, maxx, maxy)
|
||||
xlo, xhi = sorted((x0, x1))
|
||||
ylo, yhi = sorted((y0, y1))
|
||||
out: set[tuple[int, int, int]] = set()
|
||||
for x in range(xlo, xhi + 1):
|
||||
for y in range(ylo, yhi + 1):
|
||||
tile_box = box(*xyz_tile_bounds(z, x, y).mercator_tuple)
|
||||
if geom.intersects(tile_box):
|
||||
out.add((z, x, y))
|
||||
return out
|
||||
|
||||
|
||||
def _connect(db: DbConfig):
|
||||
return pymysql.connect(
|
||||
host=db.host,
|
||||
port=db.port,
|
||||
user=db.user,
|
||||
password=db.password,
|
||||
database=db.database,
|
||||
charset=db.charset,
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
write_timeout=30,
|
||||
)
|
||||
|
||||
|
||||
def _fetch_plan_geometries(conn, dataset_id: int, scales: list[int]):
|
||||
placeholders = ",".join(["%s"] * len(scales))
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
id,
|
||||
native_scale,
|
||||
bbox_min_lon,
|
||||
bbox_min_lat,
|
||||
bbox_max_lon,
|
||||
bbox_max_lat
|
||||
FROM chart_cell
|
||||
WHERE dataset_id=%s
|
||||
AND native_scale IN ({placeholders})
|
||||
ORDER BY native_scale, id
|
||||
""",
|
||||
(dataset_id, *scales),
|
||||
)
|
||||
cells = list(cur.fetchall())
|
||||
|
||||
if not cells:
|
||||
return []
|
||||
|
||||
cell_ids = [int(c["id"]) for c in cells]
|
||||
ph = ",".join(["%s"] * len(cell_ids))
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT cell_id, ST_AsWKB(geom) AS geom_wkb
|
||||
FROM chart_coverage
|
||||
WHERE dataset_id=%s
|
||||
AND cell_id IN ({ph})
|
||||
ORDER BY cell_id, id
|
||||
""",
|
||||
(dataset_id, *cell_ids),
|
||||
)
|
||||
coverage_rows = list(cur.fetchall())
|
||||
|
||||
by_cell: dict[int, list[Any]] = {}
|
||||
for row in coverage_rows:
|
||||
geom = _mercator_geom_from_wkb(row["geom_wkb"])
|
||||
if geom is None:
|
||||
continue
|
||||
by_cell.setdefault(int(row["cell_id"]), []).append(geom)
|
||||
|
||||
pieces: list[tuple[int, int, Any, str]] = []
|
||||
for cell in cells:
|
||||
cid = int(cell["id"])
|
||||
scale = int(cell["native_scale"])
|
||||
geoms = by_cell.get(cid)
|
||||
if geoms:
|
||||
for geom in geoms:
|
||||
pieces.append((cid, scale, geom, "coverage"))
|
||||
continue
|
||||
minx, miny = lonlat_to_mercator(float(cell["bbox_min_lon"]), float(cell["bbox_min_lat"]))
|
||||
maxx, maxy = lonlat_to_mercator(float(cell["bbox_max_lon"]), float(cell["bbox_max_lat"]))
|
||||
pieces.append((cid, scale, box(minx, miny, maxx, maxy), "cell_bbox_fallback"))
|
||||
return pieces
|
||||
|
||||
|
||||
def create_production_plan(
|
||||
db: DbConfig,
|
||||
dataset_id: int,
|
||||
mapping_path: Path,
|
||||
policy_path: Path,
|
||||
manifest_path: Path,
|
||||
output_path: Path,
|
||||
zooms: list[int],
|
||||
profile: str = "delivery",
|
||||
) -> dict[str, Any]:
|
||||
if profile not in {"delivery", "engineering"}:
|
||||
raise ValueError("profile must be delivery or engineering")
|
||||
mapping_path = Path(mapping_path)
|
||||
policy_path = Path(policy_path)
|
||||
manifest_path = Path(manifest_path)
|
||||
output_path = Path(output_path)
|
||||
policy = _load_policy(policy_path)
|
||||
zooms = parse_zooms(zooms)
|
||||
|
||||
all_scales = sorted({s for z in zooms for s in _enumeration_scales(policy, z)})
|
||||
|
||||
with _connect(db) as conn:
|
||||
try:
|
||||
conn.cursor().execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
fingerprint = dataset_fingerprint(conn, dataset_id)
|
||||
manifest_info = validate_manifest(conn, dataset_id, manifest_path)
|
||||
pieces = _fetch_plan_geometries(conn, dataset_id, all_scales)
|
||||
conn.rollback()
|
||||
|
||||
jobs: set[tuple[int, int, int]] = set()
|
||||
source_stats: dict[str, Any] = {}
|
||||
for z in zooms:
|
||||
ladder = _scale_ladder(policy, z)
|
||||
enumeration = _enumeration_scales(policy, z)
|
||||
enumeration_set = set(enumeration)
|
||||
z_pieces = [(cid, scale, geom, src) for cid, scale, geom, src in pieces if scale in enumeration_set]
|
||||
z_jobs: set[tuple[int, int, int]] = set()
|
||||
fallback_pieces = 0
|
||||
for _cid, _scale, geom, source in z_pieces:
|
||||
if source == "cell_bbox_fallback":
|
||||
fallback_pieces += 1
|
||||
z_jobs |= _tiles_intersecting_geom(z, geom)
|
||||
jobs |= z_jobs
|
||||
source_stats[str(z)] = {
|
||||
"enumeration_scales": enumeration,
|
||||
"scale_ladder": ladder,
|
||||
"coverage_pieces": len(z_pieces),
|
||||
"cell_bbox_fallback_pieces": fallback_pieces,
|
||||
"tile_count": len(z_jobs),
|
||||
}
|
||||
|
||||
job_rows = [
|
||||
{"z": z, "x": x, "y": y}
|
||||
for z, x, y in sorted(jobs)
|
||||
]
|
||||
|
||||
immutable = {
|
||||
"schema": PRODUCTION_PLAN_SCHEMA,
|
||||
"dataset_id": int(dataset_id),
|
||||
"dataset_fingerprint": fingerprint,
|
||||
"profile": profile,
|
||||
"zooms": zooms,
|
||||
"mapping_sha256": sha256_file(mapping_path),
|
||||
"policy_sha256": sha256_file(policy_path),
|
||||
"builder_contract_version": BUILDER_CONTRACT_VERSION,
|
||||
"manifest_dataset_fingerprint": manifest_info["dataset_fingerprint"],
|
||||
"manifest_identity_count": int(manifest_info["identity_count"]),
|
||||
"jobs": job_rows,
|
||||
}
|
||||
plan_id = canonical_sha256(immutable)
|
||||
plan = {
|
||||
**immutable,
|
||||
"plan_id": plan_id,
|
||||
"release_id": f"cm95-d{int(dataset_id)}-{fingerprint[:12]}-{plan_id[:12]}",
|
||||
"created_at": utc_now(),
|
||||
"mapping_path": str(mapping_path),
|
||||
"policy_path": str(policy_path),
|
||||
"manifest_path": str(manifest_path),
|
||||
"source_stats": source_stats,
|
||||
"job_count": len(job_rows),
|
||||
}
|
||||
output_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
output_path.write_text(json.dumps(plan, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
return plan
|
||||
|
||||
|
||||
def load_plan(path: Path) -> dict[str, Any]:
|
||||
obj = json.loads(Path(path).read_text(encoding="utf-8"))
|
||||
if obj.get("schema") != PRODUCTION_PLAN_SCHEMA:
|
||||
raise RuntimeError(f"unsupported plan schema: {obj.get('schema')}")
|
||||
return obj
|
||||
|
||||
|
||||
class ProductionLedger:
|
||||
def __init__(self, path: Path):
|
||||
self.path = Path(path)
|
||||
self._lock = threading.Lock()
|
||||
self.path.parent.mkdir(parents=True, exist_ok=True)
|
||||
self._init()
|
||||
|
||||
def _conn(self):
|
||||
db = sqlite3.connect(self.path, timeout=30)
|
||||
db.row_factory = sqlite3.Row
|
||||
db.execute("PRAGMA journal_mode=WAL")
|
||||
db.execute("PRAGMA synchronous=NORMAL")
|
||||
return db
|
||||
|
||||
def _init(self):
|
||||
with self._conn() as db:
|
||||
db.executescript(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS run_meta (
|
||||
k TEXT PRIMARY KEY,
|
||||
v TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS tile_job (
|
||||
profile TEXT NOT NULL,
|
||||
z INTEGER NOT NULL,
|
||||
x INTEGER NOT NULL,
|
||||
y INTEGER NOT NULL,
|
||||
state TEXT NOT NULL,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
updated_at TEXT NOT NULL,
|
||||
output_feature_count INTEGER,
|
||||
output_layer_count INTEGER,
|
||||
written INTEGER,
|
||||
last_error TEXT,
|
||||
PRIMARY KEY(profile,z,x,y)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_tile_job_state ON tile_job(state);
|
||||
"""
|
||||
)
|
||||
|
||||
def set_meta(self, key: str, value: str):
|
||||
with self._conn() as db:
|
||||
db.execute(
|
||||
"INSERT INTO run_meta(k,v) VALUES(?,?) ON CONFLICT(k) DO UPDATE SET v=excluded.v",
|
||||
(key, value),
|
||||
)
|
||||
|
||||
def get_meta(self, key: str) -> str | None:
|
||||
with self._conn() as db:
|
||||
row = db.execute("SELECT v FROM run_meta WHERE k=?", (key,)).fetchone()
|
||||
return None if row is None else str(row[0])
|
||||
|
||||
def seed(self, profile: str, jobs: list[dict[str, int]]):
|
||||
now = utc_now()
|
||||
with self._conn() as db:
|
||||
db.executemany(
|
||||
"""
|
||||
INSERT OR IGNORE INTO tile_job(profile,z,x,y,state,attempts,updated_at)
|
||||
VALUES(?,?,?,?, 'PENDING', 0, ?)
|
||||
""",
|
||||
[(profile, int(j["z"]), int(j["x"]), int(j["y"]), now) for j in jobs],
|
||||
)
|
||||
db.execute(
|
||||
"UPDATE tile_job SET state='PENDING', updated_at=? WHERE state='RUNNING'",
|
||||
(now,),
|
||||
)
|
||||
|
||||
def runnable(self, profile: str, max_attempts: int) -> list[sqlite3.Row]:
|
||||
with self._conn() as db:
|
||||
return list(
|
||||
db.execute(
|
||||
"""
|
||||
SELECT * FROM tile_job
|
||||
WHERE profile=?
|
||||
AND state!='PASS'
|
||||
AND attempts < ?
|
||||
ORDER BY z,x,y
|
||||
""",
|
||||
(profile, int(max_attempts)),
|
||||
).fetchall()
|
||||
)
|
||||
|
||||
def mark_running(self, profile: str, z: int, x: int, y: int):
|
||||
with self._lock, self._conn() as db:
|
||||
db.execute(
|
||||
"""
|
||||
UPDATE tile_job
|
||||
SET state='RUNNING', attempts=attempts+1, updated_at=?, last_error=NULL
|
||||
WHERE profile=? AND z=? AND x=? AND y=?
|
||||
""",
|
||||
(utc_now(), profile, z, x, y),
|
||||
)
|
||||
|
||||
def mark_pass(self, profile: str, z: int, x: int, y: int, result: dict[str, Any]):
|
||||
with self._lock, self._conn() as db:
|
||||
db.execute(
|
||||
"""
|
||||
UPDATE tile_job
|
||||
SET state='PASS', updated_at=?,
|
||||
output_feature_count=?, output_layer_count=?, written=?, last_error=NULL
|
||||
WHERE profile=? AND z=? AND x=? AND y=?
|
||||
""",
|
||||
(
|
||||
utc_now(),
|
||||
int(result.get("output_feature_count") or 0),
|
||||
int(result.get("output_layer_count") or 0),
|
||||
1 if result.get("written") else 0,
|
||||
profile, z, x, y,
|
||||
),
|
||||
)
|
||||
|
||||
def mark_failed(self, profile: str, z: int, x: int, y: int, error: str):
|
||||
with self._lock, self._conn() as db:
|
||||
db.execute(
|
||||
"""
|
||||
UPDATE tile_job
|
||||
SET state='FAILED', updated_at=?, last_error=?
|
||||
WHERE profile=? AND z=? AND x=? AND y=?
|
||||
""",
|
||||
(utc_now(), error[-12000:], profile, z, x, y),
|
||||
)
|
||||
|
||||
def summary(self, profile: str) -> dict[str, Any]:
|
||||
with self._conn() as db:
|
||||
states = {
|
||||
str(r["state"]): int(r["n"])
|
||||
for r in db.execute(
|
||||
"SELECT state,COUNT(*) AS n FROM tile_job WHERE profile=? GROUP BY state",
|
||||
(profile,),
|
||||
).fetchall()
|
||||
}
|
||||
row = db.execute(
|
||||
"""
|
||||
SELECT
|
||||
COUNT(*) AS jobs,
|
||||
COALESCE(SUM(attempts),0) AS attempts,
|
||||
COALESCE(SUM(output_feature_count),0) AS output_features,
|
||||
COALESCE(SUM(CASE WHEN written=1 THEN 1 ELSE 0 END),0) AS pbf_files
|
||||
FROM tile_job WHERE profile=?
|
||||
""",
|
||||
(profile,),
|
||||
).fetchone()
|
||||
return {
|
||||
"jobs": int(row["jobs"]),
|
||||
"attempts": int(row["attempts"]),
|
||||
"output_features": int(row["output_features"]),
|
||||
"pbf_files": int(row["pbf_files"]),
|
||||
"states": states,
|
||||
}
|
||||
|
||||
|
||||
def _validate_plan_inputs(db: DbConfig, plan: dict[str, Any]):
|
||||
mapping_path = Path(plan["mapping_path"])
|
||||
policy_path = Path(plan["policy_path"])
|
||||
manifest_path = Path(plan["manifest_path"])
|
||||
if sha256_file(mapping_path) != plan["mapping_sha256"]:
|
||||
raise RuntimeError("mapping file changed after plan creation")
|
||||
if sha256_file(policy_path) != plan["policy_sha256"]:
|
||||
raise RuntimeError("policy file changed after plan creation")
|
||||
with _connect(db) as conn:
|
||||
fp = dataset_fingerprint(conn, int(plan["dataset_id"]))
|
||||
if fp != plan["dataset_fingerprint"]:
|
||||
raise RuntimeError("dataset fingerprint changed after plan creation")
|
||||
validate_manifest(conn, int(plan["dataset_id"]), manifest_path)
|
||||
conn.rollback()
|
||||
|
||||
|
||||
def run_production_plan(
|
||||
db: DbConfig,
|
||||
plan_path: Path,
|
||||
release_root: Path,
|
||||
workers: int = 4,
|
||||
max_attempts: int = 3,
|
||||
) -> dict[str, Any]:
|
||||
plan = load_plan(plan_path)
|
||||
_validate_plan_inputs(db, plan)
|
||||
workers = max(1, int(workers))
|
||||
max_attempts = max(1, int(max_attempts))
|
||||
release_dir = Path(release_root) / str(plan["release_id"])
|
||||
output_root = release_dir / "pbf" / str(plan["profile"])
|
||||
report_root = release_dir / "reports"
|
||||
ledger = ProductionLedger(release_dir / "production_run_v1.sqlite")
|
||||
ledger.set_meta("schema", PRODUCTION_RUN_SCHEMA)
|
||||
ledger.set_meta("plan_id", str(plan["plan_id"]))
|
||||
ledger.set_meta("release_id", str(plan["release_id"]))
|
||||
ledger.set_meta("plan_path", str(Path(plan_path)))
|
||||
ledger.seed(str(plan["profile"]), list(plan["jobs"]))
|
||||
|
||||
runnable = ledger.runnable(str(plan["profile"]), max_attempts)
|
||||
if not runnable:
|
||||
summary = ledger.summary(str(plan["profile"]))
|
||||
_write_run_summary(plan, release_dir, summary)
|
||||
return {"release_dir": str(release_dir), **summary}
|
||||
|
||||
def work(row):
|
||||
z, x, y = int(row["z"]), int(row["x"]), int(row["y"])
|
||||
profile = str(plan["profile"])
|
||||
ledger.mark_running(profile, z, x, y)
|
||||
try:
|
||||
builder = Cm95TileBuilder(
|
||||
db=db,
|
||||
dataset_id=int(plan["dataset_id"]),
|
||||
mapping_path=Path(plan["mapping_path"]),
|
||||
policy_path=Path(plan["policy_path"]),
|
||||
fid_manifest_path=Path(plan["manifest_path"]),
|
||||
output_root=output_root,
|
||||
report_root=report_root,
|
||||
profile=profile,
|
||||
)
|
||||
result = builder.build_tile(TileJob(z, x, y))
|
||||
if result.get("hard_gate_unmapped"):
|
||||
raise RuntimeError(f"hard-gate unmapped: {result['hard_gate_unmapped']}")
|
||||
ledger.mark_pass(profile, z, x, y, result)
|
||||
return (True, z, x, y, result)
|
||||
except Exception as exc:
|
||||
err = f"{type(exc).__name__}: {exc}\n{traceback.format_exc()}"
|
||||
ledger.mark_failed(profile, z, x, y, err)
|
||||
return (False, z, x, y, err)
|
||||
|
||||
completed = 0
|
||||
failed = 0
|
||||
with ThreadPoolExecutor(max_workers=workers, thread_name_prefix="cm95pbf") as pool:
|
||||
futures = [pool.submit(work, row) for row in runnable]
|
||||
for fut in as_completed(futures):
|
||||
ok, z, x, y, payload = fut.result()
|
||||
completed += 1
|
||||
if ok:
|
||||
print(
|
||||
f"PASS {z}/{x}/{y} "
|
||||
f"features={payload['output_feature_count']} layers={payload['output_layer_count']}"
|
||||
)
|
||||
else:
|
||||
failed += 1
|
||||
first = str(payload).splitlines()[0]
|
||||
print(f"FAIL {z}/{x}/{y} {first}")
|
||||
if completed % 50 == 0:
|
||||
s = ledger.summary(str(plan["profile"]))
|
||||
print(f"PROGRESS {completed}/{len(runnable)} states={s['states']}")
|
||||
|
||||
# 同一调用内继续重试失败任务,直到 max_attempts 用尽。
|
||||
while True:
|
||||
retry = ledger.runnable(str(plan["profile"]), max_attempts)
|
||||
retry = [r for r in retry if str(r["state"]) == "FAILED"]
|
||||
if not retry:
|
||||
break
|
||||
print(f"RETRY jobs={len(retry)}")
|
||||
with ThreadPoolExecutor(max_workers=workers, thread_name_prefix="cm95pbf-retry") as pool:
|
||||
futures = [pool.submit(work, row) for row in retry]
|
||||
for fut in as_completed(futures):
|
||||
ok, z, x, y, payload = fut.result()
|
||||
if ok:
|
||||
print(f"PASS retry {z}/{x}/{y}")
|
||||
else:
|
||||
print(f"FAIL retry {z}/{x}/{y} {str(payload).splitlines()[0]}")
|
||||
|
||||
summary = ledger.summary(str(plan["profile"]))
|
||||
_write_run_summary(plan, release_dir, summary)
|
||||
return {"release_dir": str(release_dir), **summary}
|
||||
|
||||
|
||||
def _write_run_summary(plan: dict[str, Any], release_dir: Path, summary: dict[str, Any]):
|
||||
obj = {
|
||||
"schema": PRODUCTION_RUN_SCHEMA,
|
||||
"release_id": plan["release_id"],
|
||||
"plan_id": plan["plan_id"],
|
||||
"dataset_id": plan["dataset_id"],
|
||||
"dataset_fingerprint": plan["dataset_fingerprint"],
|
||||
"profile": plan["profile"],
|
||||
"builder_contract_version": plan.get("builder_contract_version"),
|
||||
"updated_at": utc_now(),
|
||||
**summary,
|
||||
}
|
||||
path = Path(release_dir) / "production_run_summary_v1.json"
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(json.dumps(obj, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
|
||||
|
||||
def production_status(plan_path: Path, release_root: Path) -> dict[str, Any]:
|
||||
plan = load_plan(plan_path)
|
||||
release_dir = Path(release_root) / str(plan["release_id"])
|
||||
ledger = ProductionLedger(release_dir / "production_run_v1.sqlite")
|
||||
summary = ledger.summary(str(plan["profile"]))
|
||||
return {
|
||||
"release_id": plan["release_id"],
|
||||
"release_dir": str(release_dir),
|
||||
**summary,
|
||||
}
|
||||
|
||||
|
||||
def _load_delivery_changed_classes(mapping_path: Path) -> list[str]:
|
||||
import yaml
|
||||
obj = yaml.safe_load(Path(mapping_path).read_text(encoding="utf-8")) or {}
|
||||
contract = obj.get("production_change_contract") or {}
|
||||
values = contract.get("delivery_output_changed_object_classes") or []
|
||||
return sorted({str(v) for v in values if str(v).strip()})
|
||||
|
||||
|
||||
def _link_or_copy(src: Path, dst: Path, mode: str = "hardlink") -> str:
|
||||
src = Path(src)
|
||||
dst = Path(dst)
|
||||
dst.parent.mkdir(parents=True, exist_ok=True)
|
||||
if dst.exists():
|
||||
dst.unlink()
|
||||
if mode == "copy":
|
||||
shutil.copy2(src, dst)
|
||||
return "copy"
|
||||
try:
|
||||
os.link(src, dst)
|
||||
return "hardlink"
|
||||
except OSError:
|
||||
shutil.copy2(src, dst)
|
||||
return "copy_fallback"
|
||||
|
||||
|
||||
def _load_explicit_invalidate_tiles(path: Path | None) -> set[tuple[int, int, int]]:
|
||||
if path is None:
|
||||
return set()
|
||||
path = Path(path)
|
||||
if not path.exists():
|
||||
raise RuntimeError(f"invalidate tiles file not found: {path}")
|
||||
out: set[tuple[int, int, int]] = set()
|
||||
for lineno, raw in enumerate(path.read_text(encoding="utf-8").splitlines(), start=1):
|
||||
line = raw.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
parts = line.split("/")
|
||||
if len(parts) != 3:
|
||||
raise RuntimeError(f"invalid tile at {path}:{lineno}: {line}")
|
||||
try:
|
||||
z, x, y = (int(v) for v in parts)
|
||||
except ValueError as exc:
|
||||
raise RuntimeError(f"invalid tile at {path}:{lineno}: {line}") from exc
|
||||
if z < 0 or x < 0 or y < 0 or x >= (1 << z) or y >= (1 << z):
|
||||
raise RuntimeError(f"invalid XYZ at {path}:{lineno}: {line}")
|
||||
out.add((z, x, y))
|
||||
return out
|
||||
|
||||
|
||||
def migrate_production_release(
|
||||
old_release_dir: Path,
|
||||
new_plan_path: Path,
|
||||
release_root: Path,
|
||||
copy_mode: str = "hardlink",
|
||||
invalidate_tiles_file: Path | None = None,
|
||||
) -> dict[str, Any]:
|
||||
"""Reuse old PASS tiles in a new release when delivery-equivalent.
|
||||
|
||||
Safety rules:
|
||||
- old FAILED/RUNNING/PENDING are never reused;
|
||||
- any old PASS report mentioning a class whose delivery output changed is rebuilt;
|
||||
- old PASS with encoder drops, hard-gate unmapped, or planned/output mismatch is rebuilt;
|
||||
- PBF/report are linked/copied only after checks pass;
|
||||
- a fresh ledger resets attempts for all rebuilt jobs.
|
||||
"""
|
||||
old_release_dir = Path(old_release_dir)
|
||||
new_plan = load_plan(Path(new_plan_path))
|
||||
if copy_mode not in {"hardlink", "copy"}:
|
||||
raise ValueError("copy_mode must be hardlink or copy")
|
||||
|
||||
old_ledger_path = old_release_dir / "production_run_v1.sqlite"
|
||||
if not old_ledger_path.exists():
|
||||
raise RuntimeError(f"old production ledger not found: {old_ledger_path}")
|
||||
old_ledger = ProductionLedger(old_ledger_path)
|
||||
|
||||
old_summary_path = old_release_dir / "production_run_summary_v1.json"
|
||||
old_summary = {}
|
||||
if old_summary_path.exists():
|
||||
old_summary = json.loads(old_summary_path.read_text(encoding="utf-8"))
|
||||
if str(old_summary.get("dataset_fingerprint") or "") != str(new_plan["dataset_fingerprint"]):
|
||||
raise RuntimeError("old/new dataset fingerprint mismatch")
|
||||
if str(old_summary.get("profile") or "") != str(new_plan["profile"]):
|
||||
raise RuntimeError("old/new profile mismatch")
|
||||
|
||||
profile = str(new_plan["profile"])
|
||||
new_release_dir = Path(release_root) / str(new_plan["release_id"])
|
||||
if new_release_dir.resolve() == old_release_dir.resolve():
|
||||
raise RuntimeError("new release must not overwrite old release")
|
||||
|
||||
new_ledger = ProductionLedger(new_release_dir / "production_run_v1.sqlite")
|
||||
new_ledger.set_meta("schema", PRODUCTION_RUN_SCHEMA)
|
||||
new_ledger.set_meta("plan_id", str(new_plan["plan_id"]))
|
||||
new_ledger.set_meta("release_id", str(new_plan["release_id"]))
|
||||
new_ledger.set_meta("plan_path", str(Path(new_plan_path)))
|
||||
new_ledger.set_meta("migrated_from_release", old_release_dir.name)
|
||||
new_ledger.seed(profile, list(new_plan["jobs"]))
|
||||
|
||||
new_jobs = {
|
||||
(profile, int(j["z"]), int(j["x"]), int(j["y"]))
|
||||
for j in new_plan["jobs"]
|
||||
}
|
||||
with old_ledger._conn() as db:
|
||||
old_rows = list(db.execute(
|
||||
"SELECT * FROM tile_job WHERE profile=? ORDER BY z,x,y",
|
||||
(profile,),
|
||||
).fetchall())
|
||||
old_jobs = {(profile, int(r["z"]), int(r["x"]), int(r["y"])) for r in old_rows}
|
||||
if old_jobs != new_jobs:
|
||||
missing_old = len(new_jobs - old_jobs)
|
||||
extra_old = len(old_jobs - new_jobs)
|
||||
raise RuntimeError(
|
||||
f"old/new job set mismatch: missing_old={missing_old} extra_old={extra_old}"
|
||||
)
|
||||
|
||||
changed_classes = set(_load_delivery_changed_classes(Path(new_plan["mapping_path"])))
|
||||
explicit_invalidate_tiles = _load_explicit_invalidate_tiles(invalidate_tiles_file)
|
||||
reused = 0
|
||||
rebuilt_old_failed = 0
|
||||
rebuilt_changed_class = 0
|
||||
rebuilt_integrity = 0
|
||||
rebuilt_explicit_invalidate = 0
|
||||
reused_pbf = 0
|
||||
reused_empty = 0
|
||||
copy_modes = Counter()
|
||||
|
||||
for row in old_rows:
|
||||
z, x, y = int(row["z"]), int(row["x"]), int(row["y"])
|
||||
if str(row["state"]) != "PASS":
|
||||
rebuilt_old_failed += 1
|
||||
continue
|
||||
if (z, x, y) in explicit_invalidate_tiles:
|
||||
rebuilt_explicit_invalidate += 1
|
||||
continue
|
||||
|
||||
old_report = old_release_dir / "reports" / profile / str(z) / str(x) / f"{y}.json"
|
||||
if not old_report.exists():
|
||||
rebuilt_integrity += 1
|
||||
continue
|
||||
try:
|
||||
report = json.loads(old_report.read_text(encoding="utf-8"))
|
||||
except Exception:
|
||||
rebuilt_integrity += 1
|
||||
continue
|
||||
|
||||
unmapped = set((report.get("unmapped_class_counts") or {}).keys())
|
||||
hard_gate_classes = {
|
||||
str(item.get("object_class"))
|
||||
for item in (report.get("hard_gate_unmapped") or [])
|
||||
if isinstance(item, dict) and item.get("object_class")
|
||||
}
|
||||
if changed_classes & (unmapped | hard_gate_classes):
|
||||
rebuilt_changed_class += 1
|
||||
continue
|
||||
if report.get("encoder_dropped_features") or report.get("hard_gate_unmapped"):
|
||||
rebuilt_integrity += 1
|
||||
continue
|
||||
if int(report.get("planned_output_feature_count") or 0) != int(report.get("output_feature_count") or 0):
|
||||
rebuilt_integrity += 1
|
||||
continue
|
||||
|
||||
old_pbf = old_release_dir / "pbf" / profile / str(z) / str(x) / f"{y}.pbf"
|
||||
new_pbf = new_release_dir / "pbf" / profile / str(z) / str(x) / f"{y}.pbf"
|
||||
output_count = int(report.get("output_feature_count") or 0)
|
||||
written = bool(row["written"])
|
||||
if output_count > 0 or written:
|
||||
if not old_pbf.exists():
|
||||
rebuilt_integrity += 1
|
||||
continue
|
||||
mode_used = _link_or_copy(old_pbf, new_pbf, copy_mode)
|
||||
copy_modes[mode_used] += 1
|
||||
reused_pbf += 1
|
||||
else:
|
||||
reused_empty += 1
|
||||
|
||||
new_report = new_release_dir / "reports" / profile / str(z) / str(x) / f"{y}.json"
|
||||
copy_modes[_link_or_copy(old_report, new_report, copy_mode)] += 1
|
||||
old_trace = old_release_dir / "reports" / profile / str(z) / str(x) / f"{y}.trace.jsonl"
|
||||
if old_trace.exists():
|
||||
new_trace = new_release_dir / "reports" / profile / str(z) / str(x) / f"{y}.trace.jsonl"
|
||||
copy_modes[_link_or_copy(old_trace, new_trace, copy_mode)] += 1
|
||||
|
||||
new_ledger.mark_pass(
|
||||
profile, z, x, y,
|
||||
{
|
||||
"output_feature_count": output_count,
|
||||
"output_layer_count": len(report.get("output_layer_counts") or {}),
|
||||
"written": written,
|
||||
},
|
||||
)
|
||||
reused += 1
|
||||
|
||||
summary = new_ledger.summary(profile)
|
||||
result = {
|
||||
"schema": "navsea.cm95.production-migration/v1",
|
||||
"created_at": utc_now(),
|
||||
"old_release_dir": str(old_release_dir),
|
||||
"new_release_dir": str(new_release_dir),
|
||||
"new_release_id": str(new_plan["release_id"]),
|
||||
"builder_contract_version": new_plan.get("builder_contract_version"),
|
||||
"changed_delivery_classes": sorted(changed_classes),
|
||||
"reused_pass_jobs": reused,
|
||||
"reused_pbf_files": reused_pbf,
|
||||
"reused_empty_jobs": reused_empty,
|
||||
"pending_from_old_nonpass": rebuilt_old_failed,
|
||||
"pending_changed_delivery_class": rebuilt_changed_class,
|
||||
"pending_integrity_recheck": rebuilt_integrity,
|
||||
"pending_explicit_invalidate_tiles": rebuilt_explicit_invalidate,
|
||||
"explicit_invalidate_tile_count": len(explicit_invalidate_tiles),
|
||||
"invalidate_tiles_file": str(Path(invalidate_tiles_file)) if invalidate_tiles_file else None,
|
||||
"copy_modes": dict(sorted(copy_modes.items())),
|
||||
**summary,
|
||||
}
|
||||
out = new_release_dir / "production_migration_summary_v1.json"
|
||||
out.parent.mkdir(parents=True, exist_ok=True)
|
||||
out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
_write_run_summary(new_plan, new_release_dir, summary)
|
||||
return result
|
||||
|
||||
466
src/cm95pbf/release.py
Normal file
466
src/cm95pbf/release.py
Normal file
@@ -0,0 +1,466 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import Counter
|
||||
from datetime import datetime, timezone
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import mapbox_vector_tile
|
||||
|
||||
from .production import ProductionLedger, load_plan, sha256_file
|
||||
from .style_contract import audit_pbf_style_and_sprite
|
||||
|
||||
|
||||
RELEASE_SCHEMA = "navsea.cm95.release-manifest/v1"
|
||||
|
||||
|
||||
def _utc_now():
|
||||
return datetime.now(timezone.utc).isoformat(timespec="seconds").replace("+00:00", "Z")
|
||||
|
||||
|
||||
|
||||
|
||||
def _collect_nav_name_conflict_expectations(
|
||||
report_root: Path,
|
||||
conflict_reports: list[tuple[Path, int]],
|
||||
) -> dict[str, Any]:
|
||||
"""Collect ambiguous navigation-name outputs that must remain unlabeled.
|
||||
|
||||
This is intentionally fail-closed:
|
||||
- a report-side conflict must have exactly matching trace rows;
|
||||
- each trace row must explicitly say nav_name_source=conflict;
|
||||
- there must be at least two distinct direct-name candidates;
|
||||
- the corresponding PBF feature is validated later and must omit
|
||||
chart_label_text rather than guessing one candidate.
|
||||
"""
|
||||
expected_refs: dict[tuple[str, str, int], dict[str, Any]] = {}
|
||||
unique_outputs: dict[tuple[str, int], dict[str, Any]] = {}
|
||||
issues: list[dict[str, Any]] = []
|
||||
trace_occurrences = 0
|
||||
|
||||
for report_path, report_count in conflict_reports:
|
||||
rel_report = report_path.relative_to(report_root)
|
||||
trace_path = report_path.with_name(report_path.stem + ".trace.jsonl")
|
||||
pbf_rel = rel_report.with_suffix(".pbf").as_posix()
|
||||
|
||||
if not trace_path.exists():
|
||||
issues.append({
|
||||
"type": "missing_trace_file",
|
||||
"report": rel_report.as_posix(),
|
||||
"expected_conflicts": int(report_count),
|
||||
})
|
||||
continue
|
||||
|
||||
tile_rows: list[dict[str, Any]] = []
|
||||
with trace_path.open("r", encoding="utf-8") as handle:
|
||||
for lineno, raw in enumerate(handle, start=1):
|
||||
raw = raw.strip()
|
||||
if not raw:
|
||||
continue
|
||||
try:
|
||||
row = json.loads(raw)
|
||||
except json.JSONDecodeError as exc:
|
||||
issues.append({
|
||||
"type": "invalid_trace_json",
|
||||
"trace": str(trace_path.relative_to(report_root)),
|
||||
"line": lineno,
|
||||
"error": str(exc),
|
||||
})
|
||||
continue
|
||||
if isinstance(row, dict) and row.get("nav_name_conflict") is True:
|
||||
tile_rows.append(row)
|
||||
|
||||
trace_occurrences += len(tile_rows)
|
||||
if len(tile_rows) != int(report_count):
|
||||
issues.append({
|
||||
"type": "report_trace_conflict_count_mismatch",
|
||||
"report": rel_report.as_posix(),
|
||||
"report_count": int(report_count),
|
||||
"trace_count": len(tile_rows),
|
||||
})
|
||||
|
||||
for row in tile_rows:
|
||||
output_id = row.get("output_id")
|
||||
layer = str(row.get("output_layer") or "")
|
||||
name_source = str(row.get("nav_name_source") or "")
|
||||
raw_candidates = row.get("nav_name_candidates") or []
|
||||
candidates: list[str] = []
|
||||
for value in raw_candidates:
|
||||
text = str(value).strip()
|
||||
if text and text not in candidates:
|
||||
candidates.append(text)
|
||||
|
||||
if output_id is None or not layer:
|
||||
issues.append({
|
||||
"type": "invalid_conflict_trace_identity",
|
||||
"report": rel_report.as_posix(),
|
||||
"row": row,
|
||||
})
|
||||
continue
|
||||
|
||||
try:
|
||||
fid = int(output_id)
|
||||
except (TypeError, ValueError):
|
||||
issues.append({
|
||||
"type": "invalid_conflict_output_id",
|
||||
"report": rel_report.as_posix(),
|
||||
"output_id": output_id,
|
||||
})
|
||||
continue
|
||||
|
||||
if name_source != "conflict":
|
||||
issues.append({
|
||||
"type": "conflict_trace_wrong_name_source",
|
||||
"report": rel_report.as_posix(),
|
||||
"output_id": fid,
|
||||
"nav_name_source": name_source,
|
||||
})
|
||||
|
||||
if len(candidates) < 2:
|
||||
issues.append({
|
||||
"type": "conflict_trace_insufficient_candidates",
|
||||
"report": rel_report.as_posix(),
|
||||
"output_id": fid,
|
||||
"candidates": candidates,
|
||||
})
|
||||
|
||||
ref_key = (pbf_rel, layer, fid)
|
||||
if ref_key in expected_refs:
|
||||
issues.append({
|
||||
"type": "duplicate_conflict_trace_reference",
|
||||
"pbf": pbf_rel,
|
||||
"layer": layer,
|
||||
"output_id": fid,
|
||||
})
|
||||
expected_refs[ref_key] = {
|
||||
"pbf": pbf_rel,
|
||||
"layer": layer,
|
||||
"output_id": fid,
|
||||
"source_id": row.get("source_id"),
|
||||
"relation20": row.get("relation20"),
|
||||
"native_scale": row.get("native_scale"),
|
||||
"candidates": candidates,
|
||||
}
|
||||
|
||||
unique_key = (layer, fid)
|
||||
unique = unique_outputs.setdefault(unique_key, {
|
||||
"output_id": fid,
|
||||
"output_layer": layer,
|
||||
"source_id": row.get("source_id"),
|
||||
"relation20": row.get("relation20"),
|
||||
"native_scale": row.get("native_scale"),
|
||||
"nav_name_candidates": list(candidates),
|
||||
"occurrences": 0,
|
||||
"tiles": [],
|
||||
})
|
||||
unique["occurrences"] += 1
|
||||
if pbf_rel not in unique["tiles"]:
|
||||
unique["tiles"].append(pbf_rel)
|
||||
for candidate in candidates:
|
||||
if candidate not in unique["nav_name_candidates"]:
|
||||
unique["nav_name_candidates"].append(candidate)
|
||||
|
||||
return {
|
||||
"report_occurrences": sum(int(count) for _path, count in conflict_reports),
|
||||
"trace_occurrences": trace_occurrences,
|
||||
"expected_refs": expected_refs,
|
||||
"unique_outputs": unique_outputs,
|
||||
"issues": issues,
|
||||
"seen_refs": set(),
|
||||
"labeled_conflicts": [],
|
||||
}
|
||||
|
||||
|
||||
def _observe_nav_name_conflict_feature(
|
||||
state: dict[str, Any],
|
||||
pbf_rel: str,
|
||||
layer: str,
|
||||
fid: Any,
|
||||
properties: dict[str, Any],
|
||||
) -> None:
|
||||
if fid is None:
|
||||
return
|
||||
try:
|
||||
key = (pbf_rel, str(layer), int(fid))
|
||||
except (TypeError, ValueError):
|
||||
return
|
||||
|
||||
expected = state["expected_refs"].get(key)
|
||||
if expected is None:
|
||||
return
|
||||
|
||||
state["seen_refs"].add(key)
|
||||
label = properties.get("chart_label_text")
|
||||
if label is not None and str(label).strip():
|
||||
state["labeled_conflicts"].append({
|
||||
**expected,
|
||||
"chart_label_text": str(label),
|
||||
})
|
||||
|
||||
|
||||
def _finalize_nav_name_conflict_audit(state: dict[str, Any]) -> dict[str, Any]:
|
||||
expected_keys = set(state["expected_refs"])
|
||||
seen_keys = set(state["seen_refs"])
|
||||
missing = sorted(expected_keys - seen_keys)
|
||||
|
||||
issues = list(state["issues"])
|
||||
if state["report_occurrences"] != state["trace_occurrences"]:
|
||||
issues.append({
|
||||
"type": "global_report_trace_conflict_count_mismatch",
|
||||
"report_occurrences": state["report_occurrences"],
|
||||
"trace_occurrences": state["trace_occurrences"],
|
||||
})
|
||||
|
||||
for pbf_rel, layer, fid in missing:
|
||||
issues.append({
|
||||
"type": "conflict_output_missing_from_pbf",
|
||||
"pbf": pbf_rel,
|
||||
"layer": layer,
|
||||
"output_id": fid,
|
||||
})
|
||||
|
||||
for item in state["labeled_conflicts"]:
|
||||
issues.append({
|
||||
"type": "ambiguous_conflict_was_labeled",
|
||||
**item,
|
||||
})
|
||||
|
||||
unique_details = []
|
||||
for row in state["unique_outputs"].values():
|
||||
item = dict(row)
|
||||
item["tiles"] = sorted(item.get("tiles") or [])
|
||||
unique_details.append(item)
|
||||
unique_details.sort(
|
||||
key=lambda row: (
|
||||
int(row.get("native_scale") or 0),
|
||||
str(row.get("source_id") or ""),
|
||||
int(row.get("output_id") or 0),
|
||||
)
|
||||
)
|
||||
|
||||
affected_tiles = sorted({
|
||||
key[0] for key in state["expected_refs"]
|
||||
})
|
||||
safe_omissions = len(seen_keys) - len(state["labeled_conflicts"])
|
||||
|
||||
return {
|
||||
"overall": "PASS" if not issues else "FAIL",
|
||||
"policy": "AMBIGUOUS_DIRECT_NAMES_OMIT_LABEL_FAIL_CLOSED",
|
||||
"report_occurrences": int(state["report_occurrences"]),
|
||||
"trace_occurrences": int(state["trace_occurrences"]),
|
||||
"safe_omission_occurrences": int(safe_omissions),
|
||||
"unique_conflict_outputs": len(unique_details),
|
||||
"affected_tiles": len(affected_tiles),
|
||||
"labeled_conflict_occurrences": len(state["labeled_conflicts"]),
|
||||
"missing_pbf_occurrences": len(missing),
|
||||
"issues": issues,
|
||||
"unique_conflicts": unique_details,
|
||||
}
|
||||
|
||||
|
||||
def finalize_release(
|
||||
plan_path: Path,
|
||||
release_root: Path,
|
||||
style_path: Path | None = None,
|
||||
sprite_json_path: Path | None = None,
|
||||
gap_disposition_path: Path | None = None,
|
||||
) -> dict[str, Any]:
|
||||
plan = load_plan(plan_path)
|
||||
release_dir = Path(release_root) / str(plan["release_id"])
|
||||
ledger = ProductionLedger(release_dir / "production_run_v1.sqlite")
|
||||
status = ledger.summary(str(plan["profile"]))
|
||||
if status["states"].get("FAILED", 0) or status["states"].get("PENDING", 0) or status["states"].get("RUNNING", 0):
|
||||
raise RuntimeError(f"release has unfinished jobs: {status['states']}")
|
||||
if status["states"].get("PASS", 0) != int(plan["job_count"]):
|
||||
raise RuntimeError(f"PASS job count mismatch: {status['states']} plan={plan['job_count']}")
|
||||
|
||||
pbf_root = release_dir / "pbf" / str(plan["profile"])
|
||||
report_root = release_dir / "reports" / str(plan["profile"])
|
||||
pbf_files = sorted(pbf_root.rglob("*.pbf")) if pbf_root.exists() else []
|
||||
report_files = sorted(
|
||||
p for p in report_root.rglob("*.json")
|
||||
if not p.name.endswith(".trace.json")
|
||||
) if report_root.exists() else []
|
||||
|
||||
hard_gate = []
|
||||
encoder_dropped = []
|
||||
name_conflicts = 0
|
||||
nav_name_conflict_reports: list[tuple[Path, int]] = []
|
||||
non_renderable_omissions = 0
|
||||
non_renderable_omission_layers = Counter()
|
||||
quantization_fallbacks = 0
|
||||
quantization_omissions = 0
|
||||
quantization_omission_layers = Counter()
|
||||
encoder_reconciled_candidates = 0
|
||||
encoder_reconciled_tiles = 0
|
||||
planned = 0
|
||||
output = 0
|
||||
report_layer_counts = Counter()
|
||||
for path in report_files:
|
||||
obj = json.loads(path.read_text(encoding="utf-8"))
|
||||
hard_gate += [{"report": str(path.relative_to(release_dir)), **x} for x in obj.get("hard_gate_unmapped") or []]
|
||||
encoder_dropped += [{"report": str(path.relative_to(release_dir)), **x} for x in obj.get("encoder_dropped_features") or []]
|
||||
tile_name_conflicts = int((obj.get("navigation_composites") or {}).get("name_conflict_groups") or 0)
|
||||
name_conflicts += tile_name_conflicts
|
||||
if tile_name_conflicts:
|
||||
nav_name_conflict_reports.append((path, tile_name_conflicts))
|
||||
label_omissions = obj.get("non_renderable_omissions") or []
|
||||
non_renderable_omissions += len(label_omissions)
|
||||
for item in label_omissions:
|
||||
if isinstance(item, dict):
|
||||
non_renderable_omission_layers[str(item.get("layer") or "UNKNOWN")] += 1
|
||||
quantization_fallbacks += len(obj.get("quantization_fallbacks") or [])
|
||||
omissions = obj.get("quantization_omissions") or []
|
||||
quantization_omissions += len(omissions)
|
||||
reconcile_candidates = obj.get("encoder_drop_candidates") or []
|
||||
if reconcile_candidates:
|
||||
encoder_reconciled_tiles += 1
|
||||
for candidate in reconcile_candidates:
|
||||
if isinstance(candidate, dict):
|
||||
encoder_reconciled_candidates += len(candidate.get("dropped") or [])
|
||||
for item in omissions:
|
||||
if isinstance(item, dict):
|
||||
quantization_omission_layers[str(item.get("layer") or "UNKNOWN")] += 1
|
||||
planned += int(obj.get("planned_output_feature_count") or 0)
|
||||
output += int(obj.get("output_feature_count") or 0)
|
||||
report_layer_counts.update(obj.get("output_layer_counts") or {})
|
||||
|
||||
nav_name_conflict_state = _collect_nav_name_conflict_expectations(
|
||||
report_root,
|
||||
nav_name_conflict_reports,
|
||||
)
|
||||
|
||||
inventory = []
|
||||
decoded_features = 0
|
||||
decoded_layers = Counter()
|
||||
duplicate_feature_ids = []
|
||||
for path in pbf_files:
|
||||
raw = path.read_bytes()
|
||||
decoded = mapbox_vector_tile.decode(raw)
|
||||
seen = set()
|
||||
tile_features = 0
|
||||
for layer, payload in decoded.items():
|
||||
feats = payload.get("features", [])
|
||||
decoded_layers[layer] += len(feats)
|
||||
tile_features += len(feats)
|
||||
pbf_rel = str(path.relative_to(pbf_root)).replace("\\", "/")
|
||||
for feat in feats:
|
||||
fid = feat.get("id")
|
||||
_observe_nav_name_conflict_feature(
|
||||
nav_name_conflict_state,
|
||||
pbf_rel,
|
||||
layer,
|
||||
fid,
|
||||
feat.get("properties") or {},
|
||||
)
|
||||
if fid is None:
|
||||
continue
|
||||
key = (layer, int(fid))
|
||||
if key in seen:
|
||||
duplicate_feature_ids.append({"file": str(path.relative_to(release_dir)), "layer": layer, "id": int(fid)})
|
||||
seen.add(key)
|
||||
decoded_features += tile_features
|
||||
inventory.append({
|
||||
"path": str(path.relative_to(release_dir)).replace("\\", "/"),
|
||||
"bytes": len(raw),
|
||||
"sha256": hashlib.sha256(raw).hexdigest(),
|
||||
"features": tile_features,
|
||||
"layers": len(decoded),
|
||||
})
|
||||
|
||||
style_sha = None
|
||||
sprite_sha = None
|
||||
style_contract = None
|
||||
if style_path is not None:
|
||||
style_path = Path(style_path)
|
||||
style_sha = sha256_file(style_path)
|
||||
if sprite_json_path is not None:
|
||||
sprite_json_path = Path(sprite_json_path)
|
||||
sprite_sha = sha256_file(sprite_json_path)
|
||||
style_contract = audit_pbf_style_and_sprite(
|
||||
pbf_root,
|
||||
style_path,
|
||||
sprite_json_path,
|
||||
)
|
||||
|
||||
gap_disposition_sha = None
|
||||
semantic_backlog = None
|
||||
semantic_completeness = "NOT_AUDITED"
|
||||
if gap_disposition_path is not None:
|
||||
import yaml
|
||||
gap_disposition_path = Path(gap_disposition_path)
|
||||
if gap_disposition_path.exists():
|
||||
gap_disposition_sha = sha256_file(gap_disposition_path)
|
||||
gap_obj = yaml.safe_load(gap_disposition_path.read_text(encoding="utf-8")) or {}
|
||||
semantic_backlog = dict(gap_obj.get("summary") or {})
|
||||
pending = int((semantic_backlog or {}).get("pending_semantic_review") or 0)
|
||||
semantic_completeness = "COMPLETE" if pending == 0 else "PENDING_REVIEW"
|
||||
|
||||
nav_name_conflict_audit = _finalize_nav_name_conflict_audit(
|
||||
nav_name_conflict_state
|
||||
)
|
||||
|
||||
failures = []
|
||||
if hard_gate:
|
||||
failures.append("hard_gate_unmapped")
|
||||
if encoder_dropped:
|
||||
failures.append("encoder_dropped_features")
|
||||
if name_conflicts and nav_name_conflict_audit.get("overall") != "PASS":
|
||||
failures.append("nav_name_conflict_audit")
|
||||
if planned != output:
|
||||
failures.append("planned_vs_report_output_mismatch")
|
||||
if output != decoded_features:
|
||||
failures.append("report_output_vs_decoded_pbf_mismatch")
|
||||
if duplicate_feature_ids:
|
||||
failures.append("duplicate_feature_ids_within_tile_layer")
|
||||
if style_contract is not None and style_contract.get("overall") != "PASS":
|
||||
failures.append("style_or_sprite_contract")
|
||||
|
||||
result = {
|
||||
"schema": RELEASE_SCHEMA,
|
||||
"created_at": _utc_now(),
|
||||
"status": "PASS" if not failures else "FAIL",
|
||||
"release_id": plan["release_id"],
|
||||
"plan_id": plan["plan_id"],
|
||||
"dataset_id": plan["dataset_id"],
|
||||
"dataset_fingerprint": plan["dataset_fingerprint"],
|
||||
"profile": plan["profile"],
|
||||
"zooms": plan["zooms"],
|
||||
"mapping_sha256": plan["mapping_sha256"],
|
||||
"policy_sha256": plan["policy_sha256"],
|
||||
"builder_contract_version": plan.get("builder_contract_version"),
|
||||
"style_sha256": style_sha,
|
||||
"sprite_json_sha256": sprite_sha,
|
||||
"gap_disposition_sha256": gap_disposition_sha,
|
||||
"semantic_completeness": semantic_completeness,
|
||||
"semantic_backlog": semantic_backlog,
|
||||
"style_sprite_contract": style_contract,
|
||||
"planned_tile_jobs": int(plan["job_count"]),
|
||||
"pbf_file_count": len(pbf_files),
|
||||
"report_file_count": len(report_files),
|
||||
"planned_output_features": planned,
|
||||
"report_output_features": output,
|
||||
"decoded_pbf_features": decoded_features,
|
||||
"non_renderable_omissions": non_renderable_omissions,
|
||||
"non_renderable_omission_layers": dict(sorted(non_renderable_omission_layers.items())),
|
||||
"quantization_fallbacks": quantization_fallbacks,
|
||||
"quantization_omissions": quantization_omissions,
|
||||
"quantization_omission_layers": dict(sorted(quantization_omission_layers.items())),
|
||||
"encoder_reconciled_tiles": encoder_reconciled_tiles,
|
||||
"encoder_reconciled_drop_candidates": encoder_reconciled_candidates,
|
||||
"hard_gate_unmapped": hard_gate,
|
||||
"encoder_dropped_features": encoder_dropped,
|
||||
"nav_name_conflicts": name_conflicts,
|
||||
"nav_name_conflict_omissions": nav_name_conflict_audit.get("safe_omission_occurrences", 0),
|
||||
"nav_name_conflict_unique_outputs": nav_name_conflict_audit.get("unique_conflict_outputs", 0),
|
||||
"nav_name_conflict_audit": nav_name_conflict_audit,
|
||||
"duplicate_feature_ids": duplicate_feature_ids,
|
||||
"output_layer_counts": dict(sorted(decoded_layers.items())),
|
||||
"failures": failures,
|
||||
"inventory": inventory,
|
||||
}
|
||||
out = release_dir / "release_manifest_v1.json"
|
||||
out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
return result
|
||||
174
src/cm95pbf/style_contract.py
Normal file
174
src/cm95pbf/style_contract.py
Normal file
@@ -0,0 +1,174 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import Counter, defaultdict
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import mapbox_vector_tile
|
||||
|
||||
|
||||
SPRITE_PROPERTY_FIELDS = (
|
||||
"chart_icon_image",
|
||||
"chart_fill_pattern",
|
||||
"chart_line_pattern",
|
||||
)
|
||||
|
||||
|
||||
def ev(expr: Any, props: dict[str, Any]):
|
||||
if not isinstance(expr, list):
|
||||
return expr
|
||||
if not expr:
|
||||
return None
|
||||
op = expr[0]
|
||||
if op == "get":
|
||||
return props.get(expr[1])
|
||||
if op == "has":
|
||||
return expr[1] in props
|
||||
if op == "!":
|
||||
return not bool(ev(expr[1], props))
|
||||
if op == "all":
|
||||
return all(bool(ev(x, props)) for x in expr[1:])
|
||||
if op == "any":
|
||||
return any(bool(ev(x, props)) for x in expr[1:])
|
||||
if op == "==":
|
||||
return ev(expr[1], props) == ev(expr[2], props)
|
||||
if op == "!=":
|
||||
return ev(expr[1], props) != ev(expr[2], props)
|
||||
if op == "slice":
|
||||
value = ev(expr[1], props)
|
||||
if value is None:
|
||||
return None
|
||||
start = int(ev(expr[2], props))
|
||||
end = int(ev(expr[3], props)) if len(expr) > 3 else None
|
||||
return str(value)[start:end]
|
||||
if op == "to-number":
|
||||
value = ev(expr[1], props)
|
||||
try:
|
||||
num = float(value)
|
||||
return int(num) if num.is_integer() else num
|
||||
except Exception:
|
||||
return 0
|
||||
if op == "literal":
|
||||
return expr[1]
|
||||
if op == "match":
|
||||
value = ev(expr[1], props)
|
||||
pairs = expr[2:-1]
|
||||
default = expr[-1]
|
||||
for i in range(0, len(pairs), 2):
|
||||
label = pairs[i]
|
||||
output = pairs[i + 1]
|
||||
if isinstance(label, list) and label and label[0] == "literal":
|
||||
labels = label[1]
|
||||
if value in labels:
|
||||
return ev(output, props)
|
||||
elif isinstance(label, list):
|
||||
if value in label:
|
||||
return ev(output, props)
|
||||
elif value == label:
|
||||
return ev(output, props)
|
||||
return ev(default, props)
|
||||
raise RuntimeError(f"unsupported style filter op: {op}")
|
||||
|
||||
|
||||
def audit_pbf_style_and_sprite(
|
||||
pbf_root: Path,
|
||||
style_path: Path,
|
||||
sprite_json_path: Path | None = None,
|
||||
) -> dict[str, Any]:
|
||||
pbf_root = Path(pbf_root)
|
||||
style = json.loads(Path(style_path).read_text(encoding="utf-8"))
|
||||
sprite_keys = None
|
||||
if sprite_json_path is not None:
|
||||
sprite_obj = json.loads(Path(sprite_json_path).read_text(encoding="utf-8"))
|
||||
sprite_keys = set(sprite_obj)
|
||||
|
||||
style_by_source_layer = defaultdict(list)
|
||||
for layer in style.get("layers", []):
|
||||
if layer.get("source") == "navsea_delivery" and layer.get("source-layer"):
|
||||
style_by_source_layer[layer["source-layer"]].append(layer)
|
||||
|
||||
files = sorted(pbf_root.rglob("*.pbf"))
|
||||
contract_unmatched = Counter()
|
||||
zoom_hidden = Counter()
|
||||
visible = Counter()
|
||||
sprite_missing = Counter()
|
||||
sprite_values = Counter()
|
||||
total_features = 0
|
||||
|
||||
for path in files:
|
||||
rel = path.relative_to(pbf_root)
|
||||
if len(rel.parts) < 3:
|
||||
raise RuntimeError(f"PBF path must end with z/x/y.pbf: {path}")
|
||||
z = int(rel.parts[-3])
|
||||
decoded = mapbox_vector_tile.decode(path.read_bytes())
|
||||
for source_layer, layer in decoded.items():
|
||||
style_layers = style_by_source_layer.get(source_layer, [])
|
||||
for feature in layer.get("features", []):
|
||||
total_features += 1
|
||||
props = feature.get("properties") or {}
|
||||
|
||||
filter_matches = []
|
||||
for sl in style_layers:
|
||||
flt = sl.get("filter")
|
||||
if flt is None or bool(ev(flt, props)):
|
||||
filter_matches.append(sl)
|
||||
|
||||
key = (z, source_layer)
|
||||
if not filter_matches:
|
||||
contract_unmatched[key] += 1
|
||||
else:
|
||||
zoom_matches = []
|
||||
for sl in filter_matches:
|
||||
minz = sl.get("minzoom")
|
||||
maxz = sl.get("maxzoom")
|
||||
if minz is not None and z < minz:
|
||||
continue
|
||||
if maxz is not None and z >= maxz:
|
||||
continue
|
||||
zoom_matches.append(sl)
|
||||
if zoom_matches:
|
||||
visible[key] += 1
|
||||
else:
|
||||
zoom_hidden[key] += 1
|
||||
|
||||
if sprite_keys is not None:
|
||||
for field in SPRITE_PROPERTY_FIELDS:
|
||||
value = props.get(field)
|
||||
if isinstance(value, str) and value:
|
||||
sprite_values[(field, value)] += 1
|
||||
if value not in sprite_keys:
|
||||
sprite_missing[(field, value)] += 1
|
||||
|
||||
return {
|
||||
"schema": "navsea.cm95.style-sprite-contract-audit/v1",
|
||||
"pbf_file_count": len(files),
|
||||
"feature_count": total_features,
|
||||
"style_source_layer_count": len(style_by_source_layer),
|
||||
"contract_unmatched_count": sum(contract_unmatched.values()),
|
||||
"zoom_hidden_count": sum(zoom_hidden.values()),
|
||||
"visible_count": sum(visible.values()),
|
||||
"sprite_key_count": None if sprite_keys is None else len(sprite_keys),
|
||||
"sprite_missing_count": sum(sprite_missing.values()),
|
||||
"contract_unmatched": [
|
||||
{"z": z, "source_layer": sl, "count": count}
|
||||
for (z, sl), count in sorted(contract_unmatched.items())
|
||||
],
|
||||
"zoom_hidden": [
|
||||
{"z": z, "source_layer": sl, "count": count}
|
||||
for (z, sl), count in sorted(zoom_hidden.items())
|
||||
],
|
||||
"sprite_missing": [
|
||||
{"field": field, "sprite_key": key, "count": count}
|
||||
for (field, key), count in sorted(sprite_missing.items())
|
||||
],
|
||||
"sprite_values": [
|
||||
{"field": field, "sprite_key": key, "count": count}
|
||||
for (field, key), count in sorted(sprite_values.items())
|
||||
],
|
||||
"overall": (
|
||||
"PASS"
|
||||
if sum(contract_unmatched.values()) == 0 and sum(sprite_missing.values()) == 0
|
||||
else "FAIL"
|
||||
),
|
||||
}
|
||||
611
tools/cm95_global_mapping_gap_audit_v1.py
Normal file
611
tools/cm95_global_mapping_gap_audit_v1.py
Normal file
@@ -0,0 +1,611 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 全 Dataset → NavSea delivery Mapping Gap 审计 v1
|
||||
|
||||
目的
|
||||
====
|
||||
在已经完成 production 首轮生成后,对 Dataset 全量 chart_feature 与当前
|
||||
cm95_to_navsea_v1.yaml 做只读对照,找出“当前 delivery 不会输出”的真实
|
||||
object_class + geometry_type 组合。
|
||||
|
||||
这一步专门用于 production mapping 收口,不修改数据库、不生成 PBF。
|
||||
|
||||
默认输入:
|
||||
dataset_id = 1
|
||||
mapping = config/mappings/cm95_to_navsea_v1.yaml
|
||||
|
||||
默认输出:
|
||||
build/production/cm95_global_mapping_gap_audit_v1.json
|
||||
build/production/cm95_global_mapping_gap_variants_v1.csv
|
||||
build/production/cm95_global_mapping_gap_samples_v1.jsonl
|
||||
build/production/cm95_global_mapping_gap_summary_v1.txt
|
||||
|
||||
审计内容:
|
||||
- 全 Dataset object_class + geometry_type + native_scale 数量;
|
||||
- 当前 YAML 是否存在 exact rule;
|
||||
- 同 object_class 的其它 geometry rule;
|
||||
- 已知 hard_gate 是否出现未覆盖 geometry variant;
|
||||
- 显式 ENGINEERING_ONLY / cm95_unmapped;
|
||||
- 每个 gap variant 的属性键频率、样本值、relation20 覆盖;
|
||||
- 每个 gap variant 的代表 Feature 样本。
|
||||
|
||||
数据库连接直接读取项目 .env:
|
||||
CM93_DB_HOST
|
||||
CM93_DB_PORT
|
||||
CM93_DB_NAME
|
||||
CM93_DB_USER
|
||||
CM93_DB_PASSWORD
|
||||
|
||||
执行:
|
||||
& ".\.venv\Scripts\python.exe" .\tools\cm95_global_mapping_gap_audit_v1.py `
|
||||
--dataset-id 1 `
|
||||
--mapping .\config\mappings\cm95_to_navsea_v1.yaml
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import json
|
||||
from collections import Counter, defaultdict
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pymysql
|
||||
import yaml
|
||||
|
||||
from cm93db.config import load_config
|
||||
|
||||
|
||||
DELIVERY_MAIN_STATUSES = {
|
||||
"MAPPED",
|
||||
"MAPPED_CONDITIONAL",
|
||||
"COMPOSITE",
|
||||
"MAPPED_DERIVED_POINTS",
|
||||
}
|
||||
DELIVERY_DERIVED_STATUSES = {
|
||||
"MAPPED",
|
||||
"MAPPED_CONDITIONAL",
|
||||
"DERIVED_LABEL_ONLY",
|
||||
}
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser(
|
||||
description="CM95 全 Dataset → NavSea delivery Mapping Gap 审计 v1"
|
||||
)
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument(
|
||||
"--mapping",
|
||||
default=r"config\mappings\cm95_to_navsea_v1.yaml",
|
||||
)
|
||||
p.add_argument(
|
||||
"--output",
|
||||
default=r"build\production\cm95_global_mapping_gap_audit_v1.json",
|
||||
)
|
||||
p.add_argument("--sample-per-variant", type=int, default=6)
|
||||
p.add_argument("--attribute-value-limit", type=int, default=12)
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def json_dict(value: Any) -> dict[str, Any]:
|
||||
if value is None:
|
||||
return {}
|
||||
if isinstance(value, dict):
|
||||
return value
|
||||
if isinstance(value, (bytes, bytearray, memoryview)):
|
||||
value = bytes(value).decode("utf-8", errors="replace")
|
||||
try:
|
||||
obj = json.loads(str(value))
|
||||
return obj if isinstance(obj, dict) else {}
|
||||
except Exception:
|
||||
return {}
|
||||
|
||||
|
||||
def scalar_text(value: Any) -> str:
|
||||
if isinstance(value, (dict, list)):
|
||||
return json.dumps(value, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
|
||||
return str(value)
|
||||
|
||||
|
||||
def load_rules(path: Path):
|
||||
obj = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
|
||||
rules = obj.get("rules") or obj.get("mappings") or []
|
||||
if not isinstance(rules, list):
|
||||
raise RuntimeError("mapping YAML 中找不到 rules/mappings list")
|
||||
|
||||
exact: dict[tuple[str, str], dict[str, Any]] = {}
|
||||
by_class: dict[str, list[dict[str, Any]]] = defaultdict(list)
|
||||
|
||||
for rule in rules:
|
||||
if not isinstance(rule, dict):
|
||||
continue
|
||||
cls = str(rule.get("cm95_object_class") or "").strip()
|
||||
geom = str(rule.get("geometry_type") or "").strip().upper()
|
||||
if not cls or not geom:
|
||||
continue
|
||||
exact[(cls, geom)] = rule
|
||||
by_class[cls].append(rule)
|
||||
|
||||
return obj, exact, by_class
|
||||
|
||||
|
||||
def has_delivery_output(rule: dict[str, Any]) -> bool:
|
||||
status = str(rule.get("mapping_status") or "")
|
||||
target = str(rule.get("target_source_layer") or "")
|
||||
if target and target != "cm95_unmapped" and status in DELIVERY_MAIN_STATUSES:
|
||||
return True
|
||||
|
||||
derived = rule.get("derived_outputs") or []
|
||||
if derived and status in DELIVERY_DERIVED_STATUSES:
|
||||
for item in derived:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
layer = str(item.get("source_layer") or "")
|
||||
if layer and layer != "cm95_unmapped":
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def gap_reason(
|
||||
cls: str,
|
||||
geom: str,
|
||||
exact_rules: dict[tuple[str, str], dict[str, Any]],
|
||||
by_class: dict[str, list[dict[str, Any]]],
|
||||
):
|
||||
rule = exact_rules.get((cls, geom))
|
||||
class_rules = by_class.get(cls, [])
|
||||
|
||||
if rule is None:
|
||||
inherited_hard_gate = any(
|
||||
str(r.get("safety_class") or "") == "hard_gate"
|
||||
for r in class_rules
|
||||
)
|
||||
return {
|
||||
"is_gap": True,
|
||||
"reason": (
|
||||
"NO_EXACT_RULE_KNOWN_HARD_GATE_VARIANT"
|
||||
if inherited_hard_gate
|
||||
else "NO_EXACT_RULE"
|
||||
),
|
||||
"rule": None,
|
||||
"inherited_hard_gate": inherited_hard_gate,
|
||||
}
|
||||
|
||||
if has_delivery_output(rule):
|
||||
return {
|
||||
"is_gap": False,
|
||||
"reason": "DELIVERED",
|
||||
"rule": rule,
|
||||
"inherited_hard_gate": False,
|
||||
}
|
||||
|
||||
target = str(rule.get("target_source_layer") or "")
|
||||
status = str(rule.get("mapping_status") or "")
|
||||
if target == "cm95_unmapped":
|
||||
reason = "EXPLICIT_ENGINEERING_ONLY"
|
||||
else:
|
||||
reason = f"NOT_DELIVERED_STATUS_{status or 'EMPTY'}"
|
||||
|
||||
return {
|
||||
"is_gap": True,
|
||||
"reason": reason,
|
||||
"rule": rule,
|
||||
"inherited_hard_gate": (
|
||||
str(rule.get("safety_class") or "") == "hard_gate"
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
def connect():
|
||||
cfg = load_config()
|
||||
return pymysql.connect(
|
||||
host=cfg.host,
|
||||
port=cfg.port,
|
||||
user=cfg.user,
|
||||
password=cfg.password,
|
||||
database=cfg.database,
|
||||
charset=cfg.charset,
|
||||
cursorclass=pymysql.cursors.DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
write_timeout=30,
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
mapping_path = Path(a.mapping).resolve()
|
||||
output_path = Path(a.output).resolve()
|
||||
outdir = output_path.parent
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
_mapping_obj, exact_rules, by_class = load_rules(mapping_path)
|
||||
|
||||
with connect() as conn:
|
||||
try:
|
||||
conn.cursor().execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
f.object_class_id,
|
||||
f.object_class,
|
||||
f.geometry_type,
|
||||
f.native_scale,
|
||||
COUNT(*) AS feature_count,
|
||||
COUNT(DISTINCT f.cell_id) AS cell_count
|
||||
FROM chart_feature f
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.geometry_type IN ('POINT','LINE','AREA')
|
||||
GROUP BY
|
||||
f.object_class_id,
|
||||
f.object_class,
|
||||
f.geometry_type,
|
||||
f.native_scale
|
||||
ORDER BY
|
||||
f.object_class,
|
||||
f.geometry_type,
|
||||
f.native_scale
|
||||
""",
|
||||
(a.dataset_id,),
|
||||
)
|
||||
grouped = list(cur.fetchall())
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
object_class_id,
|
||||
object_class,
|
||||
geometry_code,
|
||||
display_code,
|
||||
description
|
||||
FROM chart_dictionary_object
|
||||
WHERE dataset_id=%s
|
||||
""",
|
||||
(a.dataset_id,),
|
||||
)
|
||||
dictionary_rows = list(cur.fetchall())
|
||||
|
||||
conn.rollback()
|
||||
|
||||
dictionary = {
|
||||
int(r["object_class_id"]): r
|
||||
for r in dictionary_rows
|
||||
if r.get("object_class_id") is not None
|
||||
}
|
||||
|
||||
variants: dict[tuple[str, str], dict[str, Any]] = {}
|
||||
for row in grouped:
|
||||
cls = str(row["object_class"])
|
||||
geom = str(row["geometry_type"]).upper()
|
||||
key = (cls, geom)
|
||||
v = variants.setdefault(
|
||||
key,
|
||||
{
|
||||
"object_class_id": (
|
||||
int(row["object_class_id"])
|
||||
if row.get("object_class_id") is not None
|
||||
else None
|
||||
),
|
||||
"object_class": cls,
|
||||
"geometry_type": geom,
|
||||
"feature_count": 0,
|
||||
"cell_count_max": 0,
|
||||
"scale_counts": Counter(),
|
||||
},
|
||||
)
|
||||
cnt = int(row["feature_count"])
|
||||
v["feature_count"] += cnt
|
||||
v["cell_count_max"] = max(v["cell_count_max"], int(row["cell_count"]))
|
||||
v["scale_counts"][str(int(row["native_scale"]))] += cnt
|
||||
|
||||
gap_variants = []
|
||||
for key, v in sorted(
|
||||
variants.items(),
|
||||
key=lambda kv: (-kv[1]["feature_count"], kv[0][0], kv[0][1]),
|
||||
):
|
||||
cls, geom = key
|
||||
state = gap_reason(cls, geom, exact_rules, by_class)
|
||||
if not state["is_gap"]:
|
||||
continue
|
||||
|
||||
oid = v["object_class_id"]
|
||||
d = dictionary.get(oid) if oid is not None else None
|
||||
rule = state["rule"]
|
||||
class_rules = by_class.get(cls, [])
|
||||
|
||||
item = {
|
||||
"object_class_id": oid,
|
||||
"object_class": cls,
|
||||
"geometry_type": geom,
|
||||
"feature_count": int(v["feature_count"]),
|
||||
"cell_count": int(v["cell_count_max"]),
|
||||
"scale_counts": dict(sorted(v["scale_counts"].items(), key=lambda x: int(x[0]))),
|
||||
"gap_reason": state["reason"],
|
||||
"dictionary_description": d.get("description") if d else None,
|
||||
"dictionary_geometry_code": d.get("geometry_code") if d else None,
|
||||
"dictionary_display_code": d.get("display_code") if d else None,
|
||||
"exact_rule_id": str(rule.get("rule_id")) if rule else None,
|
||||
"exact_rule_status": str(rule.get("mapping_status")) if rule else None,
|
||||
"exact_rule_target": str(rule.get("target_source_layer")) if rule else None,
|
||||
"exact_rule_safety": str(rule.get("safety_class")) if rule else None,
|
||||
"class_known_geometry_rules": [
|
||||
{
|
||||
"geometry_type": str(r.get("geometry_type") or ""),
|
||||
"rule_id": str(r.get("rule_id") or ""),
|
||||
"target_source_layer": str(r.get("target_source_layer") or ""),
|
||||
"mapping_status": str(r.get("mapping_status") or ""),
|
||||
"safety_class": str(r.get("safety_class") or ""),
|
||||
"canonical_object_type": str(r.get("canonical_object_type") or ""),
|
||||
}
|
||||
for r in class_rules
|
||||
],
|
||||
"inherited_hard_gate": bool(state["inherited_hard_gate"]),
|
||||
"attribute_key_counts": {},
|
||||
"attribute_value_samples": {},
|
||||
"relation20_present": 0,
|
||||
"relation20_missing": 0,
|
||||
"sample_features": [],
|
||||
}
|
||||
gap_variants.append(item)
|
||||
|
||||
gap_keys = {(x["object_class"], x["geometry_type"]) for x in gap_variants}
|
||||
gap_classes = sorted({x[0] for x in gap_keys})
|
||||
|
||||
# Gap rows are normally a small subset of Dataset. Read them once and
|
||||
# build attribute/sample evidence in Python, avoiding dozens of SQL round trips.
|
||||
if gap_classes:
|
||||
placeholders = ",".join(["%s"] * len(gap_classes))
|
||||
with connect() as conn:
|
||||
try:
|
||||
conn.cursor().execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class_id,
|
||||
f.object_class,
|
||||
f.geometry_type,
|
||||
f.native_scale,
|
||||
f.raw_geotype,
|
||||
f.coverage_id,
|
||||
f.bbox_min_lon,
|
||||
f.bbox_min_lat,
|
||||
f.bbox_max_lon,
|
||||
f.bbox_max_lat,
|
||||
f.attributes_json,
|
||||
f.geometry_repaired,
|
||||
f.geometry_issue
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.object_class IN ({placeholders})
|
||||
AND f.geometry_type IN ('POINT','LINE','AREA')
|
||||
ORDER BY
|
||||
f.object_class,
|
||||
f.geometry_type,
|
||||
f.native_scale,
|
||||
c.source_relative_path,
|
||||
f.source_record_index
|
||||
""",
|
||||
(a.dataset_id, *gap_classes),
|
||||
)
|
||||
source_rows = list(cur.fetchall())
|
||||
conn.rollback()
|
||||
else:
|
||||
source_rows = []
|
||||
|
||||
item_by_key = {
|
||||
(x["object_class"], x["geometry_type"]): x
|
||||
for x in gap_variants
|
||||
}
|
||||
key_counters: dict[tuple[str, str], Counter] = defaultdict(Counter)
|
||||
value_counters: dict[tuple[str, str, str], Counter] = defaultdict(Counter)
|
||||
sample_counts: Counter = Counter()
|
||||
|
||||
sample_jsonl_path = outdir / "cm95_global_mapping_gap_samples_v1.jsonl"
|
||||
with sample_jsonl_path.open("w", encoding="utf-8") as sample_file:
|
||||
for row in source_rows:
|
||||
key = (
|
||||
str(row["object_class"]),
|
||||
str(row["geometry_type"]).upper(),
|
||||
)
|
||||
item = item_by_key.get(key)
|
||||
if item is None:
|
||||
continue
|
||||
|
||||
attrs = json_dict(row.get("attributes_json"))
|
||||
for attr_key, attr_value in attrs.items():
|
||||
key_counters[key][str(attr_key)] += 1
|
||||
value_counters[(key[0], key[1], str(attr_key))][scalar_text(attr_value)] += 1
|
||||
|
||||
rel = attrs.get("_cm93_relation20_raw")
|
||||
if rel is None or rel == "":
|
||||
item["relation20_missing"] += 1
|
||||
else:
|
||||
item["relation20_present"] += 1
|
||||
|
||||
if sample_counts[key] < max(1, int(a.sample_per_variant)):
|
||||
sample_counts[key] += 1
|
||||
sample = {
|
||||
"feature_id": int(row["feature_id"]),
|
||||
"cell_id": int(row["cell_id"]),
|
||||
"source_relative_path": str(row["source_relative_path"]),
|
||||
"source_record_index": int(row["source_record_index"]),
|
||||
"object_class_id": (
|
||||
int(row["object_class_id"])
|
||||
if row.get("object_class_id") is not None
|
||||
else None
|
||||
),
|
||||
"object_class": key[0],
|
||||
"geometry_type": key[1],
|
||||
"native_scale": int(row["native_scale"]),
|
||||
"raw_geotype": row.get("raw_geotype"),
|
||||
"coverage_id": row.get("coverage_id"),
|
||||
"bbox": [
|
||||
row.get("bbox_min_lon"),
|
||||
row.get("bbox_min_lat"),
|
||||
row.get("bbox_max_lon"),
|
||||
row.get("bbox_max_lat"),
|
||||
],
|
||||
"attributes": attrs,
|
||||
"geometry_repaired": bool(row.get("geometry_repaired")),
|
||||
"geometry_issue": row.get("geometry_issue"),
|
||||
}
|
||||
item["sample_features"].append(sample)
|
||||
sample_file.write(
|
||||
json.dumps(sample, ensure_ascii=False, separators=(",", ":"), default=str)
|
||||
+ "\n"
|
||||
)
|
||||
|
||||
for item in gap_variants:
|
||||
key = (item["object_class"], item["geometry_type"])
|
||||
item["attribute_key_counts"] = dict(
|
||||
key_counters[key].most_common()
|
||||
)
|
||||
values = {}
|
||||
for attr_key, _count in key_counters[key].most_common():
|
||||
values[attr_key] = [
|
||||
{"value": value, "count": count}
|
||||
for value, count in value_counters[
|
||||
(key[0], key[1], attr_key)
|
||||
].most_common(max(1, int(a.attribute_value_limit)))
|
||||
]
|
||||
item["attribute_value_samples"] = values
|
||||
|
||||
reason_counts = Counter()
|
||||
gap_feature_total = 0
|
||||
no_exact_total = 0
|
||||
explicit_total = 0
|
||||
inherited_hard_gate_total = 0
|
||||
for item in gap_variants:
|
||||
reason_counts[item["gap_reason"]] += 1
|
||||
gap_feature_total += int(item["feature_count"])
|
||||
if item["gap_reason"].startswith("NO_EXACT_RULE"):
|
||||
no_exact_total += int(item["feature_count"])
|
||||
else:
|
||||
explicit_total += int(item["feature_count"])
|
||||
if item["inherited_hard_gate"]:
|
||||
inherited_hard_gate_total += int(item["feature_count"])
|
||||
|
||||
report = {
|
||||
"schema": "navsea.cm95.global-mapping-gap-audit/v1",
|
||||
"dataset_id": int(a.dataset_id),
|
||||
"mapping_path": str(mapping_path),
|
||||
"source_variant_count": len(variants),
|
||||
"gap_variant_count": len(gap_variants),
|
||||
"gap_object_class_count": len({x["object_class"] for x in gap_variants}),
|
||||
"gap_feature_total": gap_feature_total,
|
||||
"no_exact_rule_feature_total": no_exact_total,
|
||||
"explicit_engineering_or_status_gap_feature_total": explicit_total,
|
||||
"inherited_hard_gate_feature_total": inherited_hard_gate_total,
|
||||
"gap_reason_counts": dict(reason_counts),
|
||||
"gap_variants": gap_variants,
|
||||
}
|
||||
|
||||
output_path.write_text(
|
||||
json.dumps(report, ensure_ascii=False, indent=2, default=str),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
csv_path = outdir / "cm95_global_mapping_gap_variants_v1.csv"
|
||||
with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
fields = [
|
||||
"object_class_id",
|
||||
"object_class",
|
||||
"geometry_type",
|
||||
"feature_count",
|
||||
"cell_count",
|
||||
"gap_reason",
|
||||
"inherited_hard_gate",
|
||||
"dictionary_description",
|
||||
"dictionary_geometry_code",
|
||||
"dictionary_display_code",
|
||||
"exact_rule_id",
|
||||
"exact_rule_status",
|
||||
"exact_rule_target",
|
||||
"exact_rule_safety",
|
||||
"scale_counts",
|
||||
"known_geometry_rules",
|
||||
"attribute_keys",
|
||||
"relation20_present",
|
||||
"relation20_missing",
|
||||
]
|
||||
w = csv.DictWriter(f, fieldnames=fields)
|
||||
w.writeheader()
|
||||
for item in gap_variants:
|
||||
w.writerow(
|
||||
{
|
||||
"object_class_id": item["object_class_id"],
|
||||
"object_class": item["object_class"],
|
||||
"geometry_type": item["geometry_type"],
|
||||
"feature_count": item["feature_count"],
|
||||
"cell_count": item["cell_count"],
|
||||
"gap_reason": item["gap_reason"],
|
||||
"inherited_hard_gate": item["inherited_hard_gate"],
|
||||
"dictionary_description": item["dictionary_description"],
|
||||
"dictionary_geometry_code": item["dictionary_geometry_code"],
|
||||
"dictionary_display_code": item["dictionary_display_code"],
|
||||
"exact_rule_id": item["exact_rule_id"],
|
||||
"exact_rule_status": item["exact_rule_status"],
|
||||
"exact_rule_target": item["exact_rule_target"],
|
||||
"exact_rule_safety": item["exact_rule_safety"],
|
||||
"scale_counts": json.dumps(item["scale_counts"], ensure_ascii=False, separators=(",", ":")),
|
||||
"known_geometry_rules": json.dumps(item["class_known_geometry_rules"], ensure_ascii=False, separators=(",", ":")),
|
||||
"attribute_keys": json.dumps(item["attribute_key_counts"], ensure_ascii=False, separators=(",", ":")),
|
||||
"relation20_present": item["relation20_present"],
|
||||
"relation20_missing": item["relation20_missing"],
|
||||
}
|
||||
)
|
||||
|
||||
txt_path = outdir / "cm95_global_mapping_gap_summary_v1.txt"
|
||||
lines = [
|
||||
"CM95 全 Dataset → NavSea delivery Mapping Gap 审计 v1",
|
||||
"=" * 76,
|
||||
f"Dataset ID : {a.dataset_id}",
|
||||
f"Source variants : {len(variants)}",
|
||||
f"Gap variants : {len(gap_variants)}",
|
||||
f"Gap object classes : {report['gap_object_class_count']}",
|
||||
f"Gap feature rows : {gap_feature_total}",
|
||||
f"No exact rule rows : {no_exact_total}",
|
||||
f"Explicit/status gap rows: {explicit_total}",
|
||||
f"Inherited hard-gate rows: {inherited_hard_gate_total}",
|
||||
"",
|
||||
"Top gap variants:",
|
||||
]
|
||||
for item in gap_variants[:80]:
|
||||
scales = ",".join(
|
||||
f"{k}:{v}" for k, v in item["scale_counts"].items()
|
||||
)
|
||||
lines.append(
|
||||
f" {item['object_class']:<10} {item['geometry_type']:<5} "
|
||||
f"rows={item['feature_count']:<6} "
|
||||
f"reason={item['gap_reason']:<34} "
|
||||
f"hard={str(item['inherited_hard_gate']):<5} "
|
||||
f"scales=[{scales}]"
|
||||
)
|
||||
lines += [
|
||||
"",
|
||||
f"JSON : {output_path}",
|
||||
f"CSV : {csv_path}",
|
||||
f"SAMPLES: {sample_jsonl_path}",
|
||||
]
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
105
tools/cm95_global_mapping_gap_closure_audit_v2.py
Normal file
105
tools/cm95_global_mapping_gap_closure_audit_v2.py
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
DELIVERY_STATUSES = {"MAPPED", "MAPPED_CONDITIONAL", "COMPOSITE", "MAPPED_DERIVED_POINTS"}
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser(description="CM95 全 Dataset Mapping Gap 分类收口审计 v2")
|
||||
p.add_argument("--gap-audit", default="build/production/cm95_global_mapping_gap_audit_v1.json")
|
||||
p.add_argument("--mapping", default="config/mappings/cm95_to_navsea_v1.yaml")
|
||||
p.add_argument("--disposition", default="config/mappings/cm95_gap_disposition_v1.yaml")
|
||||
p.add_argument("--output", default="build/production/cm95_global_mapping_gap_closure_audit_v2.json")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
gap = json.loads(Path(a.gap_audit).read_text(encoding="utf-8"))
|
||||
mapping = yaml.safe_load(Path(a.mapping).read_text(encoding="utf-8")) or {}
|
||||
disposition = yaml.safe_load(Path(a.disposition).read_text(encoding="utf-8")) or {}
|
||||
|
||||
rules = {
|
||||
(str(r.get("cm95_object_class") or ""), str(r.get("geometry_type") or "").upper()): r
|
||||
for r in mapping.get("rules") or []
|
||||
if isinstance(r, dict)
|
||||
}
|
||||
disp = {
|
||||
(str(r.get("object_class") or ""), str(r.get("geometry_type") or "").upper()): r
|
||||
for r in disposition.get("variants") or []
|
||||
if isinstance(r, dict)
|
||||
}
|
||||
|
||||
unclassified = []
|
||||
pending = []
|
||||
existing_non_delivery = []
|
||||
newly_delivery = []
|
||||
for item in gap.get("gap_variants") or []:
|
||||
key = (str(item.get("object_class") or ""), str(item.get("geometry_type") or "").upper())
|
||||
d = disp.get(key)
|
||||
if d is None:
|
||||
unclassified.append({"object_class": key[0], "geometry_type": key[1], "feature_count": item.get("feature_count")})
|
||||
continue
|
||||
state = str(d.get("disposition") or "")
|
||||
row = {
|
||||
"object_class": key[0],
|
||||
"geometry_type": key[1],
|
||||
"feature_count": int(item.get("feature_count") or 0),
|
||||
"disposition": state,
|
||||
}
|
||||
if state == "ENGINEERING_ONLY_PENDING_SEMANTIC_REVIEW":
|
||||
pending.append(row)
|
||||
elif state == "DELIVERY_MAPPED_V1_4_3":
|
||||
newly_delivery.append(row)
|
||||
elif state.startswith("EXISTING_"):
|
||||
existing_non_delivery.append(row)
|
||||
|
||||
fish = rules.get(("FSHHAV", "AREA"))
|
||||
fish_ok = bool(
|
||||
fish
|
||||
and str(fish.get("target_source_layer")) == "anchor_caution_hazard_area"
|
||||
and str(fish.get("safety_class")) == "hard_gate"
|
||||
and str(fish.get("mapping_status")) in DELIVERY_STATUSES
|
||||
)
|
||||
|
||||
contract = mapping.get("production_change_contract") or {}
|
||||
changed_classes = sorted({str(v) for v in contract.get("delivery_output_changed_object_classes") or []})
|
||||
changed_ok = changed_classes == ["FSHHAV"]
|
||||
|
||||
result = {
|
||||
"schema": "navsea.cm95.global-mapping-gap-closure-audit/v2",
|
||||
"dataset_id": gap.get("dataset_id"),
|
||||
"observed_gap_variants": len(gap.get("gap_variants") or []),
|
||||
"unclassified_variants": unclassified,
|
||||
"newly_delivery_mapped": newly_delivery,
|
||||
"existing_explicit_non_delivery": existing_non_delivery,
|
||||
"pending_semantic_review": pending,
|
||||
"pending_semantic_review_feature_rows": sum(x["feature_count"] for x in pending),
|
||||
"fshhav_area_hard_gate_mapping_ok": fish_ok,
|
||||
"delivery_output_changed_object_classes": changed_classes,
|
||||
"delivery_change_contract_ok": changed_ok,
|
||||
"semantic_completeness": "COMPLETE" if not pending else "PENDING_REVIEW",
|
||||
"overall": "PASS" if not unclassified and fish_ok and changed_ok else "FAIL",
|
||||
}
|
||||
Path(a.output).parent.mkdir(parents=True, exist_ok=True)
|
||||
Path(a.output).write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
|
||||
print(f"Observed gap variants : {result['observed_gap_variants']}")
|
||||
print(f"Unclassified variants : {len(unclassified)}")
|
||||
print(f"New delivery mappings : {len(newly_delivery)}")
|
||||
print(f"Pending semantic review : {len(pending)} variants / {result['pending_semantic_review_feature_rows']} rows")
|
||||
print(f"FSHHAV AREA hard-gate : {'PASS' if fish_ok else 'FAIL'}")
|
||||
print(f"Delivery change contract: {'PASS' if changed_ok else 'FAIL'} {changed_classes}")
|
||||
print(f"Semantic completeness : {result['semantic_completeness']}")
|
||||
print(f"OVERALL classification : {result['overall']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
190
tools/cm95_mapping_contract_check_v1.py
Normal file
190
tools/cm95_mapping_contract_check_v1.py
Normal file
@@ -0,0 +1,190 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 → NavSea Mapping Contract 静态检查 v1
|
||||
|
||||
检查:
|
||||
1. mapping 的正式 target_source_layer 是否被当前 style 实际消费;
|
||||
2. chart_icon_image / chart_fill_pattern / chart_line_pattern 常量是否存在于 semantic sprite;
|
||||
3. cm95_unmapped 不视为正式 style layer;
|
||||
4. 输出 PASS/FAIL JSON。
|
||||
|
||||
示例:
|
||||
python .\tools\cm95_mapping_contract_check_v1.py `
|
||||
--mapping .\config\mappings\cm95_to_navsea_v1.yaml `
|
||||
--style D:\path\style.navsea-delivery-full-semantic-unified-20260808.json `
|
||||
--sprite-json D:\path\semantic-sprite\sprite.json
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
SPRITE_FIELDS = {
|
||||
"chart_icon_image",
|
||||
"chart_fill_pattern",
|
||||
"chart_line_pattern",
|
||||
}
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--mapping", required=True)
|
||||
p.add_argument("--style", required=True)
|
||||
p.add_argument("--sprite-json", required=True)
|
||||
p.add_argument("--output", default="cm95_mapping_contract_check_v1.json")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def const_value(v):
|
||||
if isinstance(v, dict) and set(v.keys()) == {"const"}:
|
||||
return v["const"]
|
||||
if isinstance(v, str):
|
||||
return v
|
||||
return None
|
||||
|
||||
|
||||
def collect_sprite_refs(style_fields, path="style_fields"):
|
||||
out = []
|
||||
if not isinstance(style_fields, dict):
|
||||
return out
|
||||
for k, v in style_fields.items():
|
||||
p = f"{path}.{k}"
|
||||
if k in SPRITE_FIELDS:
|
||||
c = const_value(v)
|
||||
if isinstance(c, str) and c:
|
||||
out.append((p, c))
|
||||
if isinstance(v, dict):
|
||||
out.extend(collect_sprite_refs(v, p))
|
||||
elif isinstance(v, list):
|
||||
for i, item in enumerate(v):
|
||||
if isinstance(item, dict):
|
||||
out.extend(
|
||||
collect_sprite_refs(item, f"{p}[{i}]")
|
||||
)
|
||||
return out
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
|
||||
mapping = yaml.safe_load(
|
||||
Path(a.mapping).read_text(encoding="utf-8")
|
||||
)
|
||||
style = json.loads(
|
||||
Path(a.style).read_text(encoding="utf-8")
|
||||
)
|
||||
sprite = json.loads(
|
||||
Path(a.sprite_json).read_text(encoding="utf-8")
|
||||
)
|
||||
|
||||
style_layers = {
|
||||
layer.get("source-layer")
|
||||
for layer in style.get("layers", [])
|
||||
if layer.get("source") == "navsea_delivery"
|
||||
and layer.get("source-layer")
|
||||
}
|
||||
sprite_keys = set(sprite)
|
||||
|
||||
layer_failures = []
|
||||
sprite_failures = []
|
||||
|
||||
for rule in mapping.get("rules", []):
|
||||
rid = rule.get("rule_id")
|
||||
target = rule.get("target_source_layer")
|
||||
|
||||
if (
|
||||
target
|
||||
and target != "cm95_unmapped"
|
||||
and target not in style_layers
|
||||
):
|
||||
layer_failures.append({
|
||||
"rule_id": rid,
|
||||
"target_source_layer": target,
|
||||
})
|
||||
|
||||
for p, key in collect_sprite_refs(
|
||||
rule.get("style_fields", {})
|
||||
):
|
||||
if key not in sprite_keys:
|
||||
sprite_failures.append({
|
||||
"rule_id": rid,
|
||||
"path": p,
|
||||
"sprite_key": key,
|
||||
})
|
||||
|
||||
for i, derived in enumerate(
|
||||
rule.get("derived_outputs", []) or []
|
||||
):
|
||||
layer = derived.get("source_layer")
|
||||
if (
|
||||
layer
|
||||
and layer != "cm95_unmapped"
|
||||
and layer not in style_layers
|
||||
):
|
||||
layer_failures.append({
|
||||
"rule_id": rid,
|
||||
"derived_index": i,
|
||||
"target_source_layer": layer,
|
||||
})
|
||||
|
||||
for p, key in collect_sprite_refs(
|
||||
derived.get("style_fields", {}),
|
||||
f"derived_outputs[{i}].style_fields",
|
||||
):
|
||||
if key not in sprite_keys:
|
||||
sprite_failures.append({
|
||||
"rule_id": rid,
|
||||
"path": p,
|
||||
"sprite_key": key,
|
||||
})
|
||||
|
||||
result = {
|
||||
"mapping": str(Path(a.mapping).resolve()),
|
||||
"style": str(Path(a.style).resolve()),
|
||||
"sprite_json": str(Path(a.sprite_json).resolve()),
|
||||
"style_source_layer_count": len(style_layers),
|
||||
"sprite_key_count": len(sprite_keys),
|
||||
"rule_count": len(mapping.get("rules", [])),
|
||||
"layer_failures": layer_failures,
|
||||
"sprite_failures": sprite_failures,
|
||||
"failure_count": (
|
||||
len(layer_failures) + len(sprite_failures)
|
||||
),
|
||||
}
|
||||
result["overall"] = (
|
||||
"PASS" if result["failure_count"] == 0 else "FAIL"
|
||||
)
|
||||
|
||||
Path(a.output).write_text(
|
||||
json.dumps(result, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
print(
|
||||
f"Rules : {result['rule_count']}"
|
||||
)
|
||||
print(
|
||||
f"Style source layers : {result['style_source_layer_count']}"
|
||||
)
|
||||
print(
|
||||
f"Sprite keys : {result['sprite_key_count']}"
|
||||
)
|
||||
print(
|
||||
f"Layer failures : {len(layer_failures)}"
|
||||
)
|
||||
print(
|
||||
f"Sprite failures : {len(sprite_failures)}"
|
||||
)
|
||||
print(
|
||||
f"OVERALL : {result['overall']}"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
375
tools/cm95_nav_aid_relation_audit_v1.py
Normal file
375
tools/cm95_nav_aid_relation_audit_v1.py
Normal file
@@ -0,0 +1,375 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 / CM93 助航 relation20 全 AOI 审计 v1
|
||||
|
||||
用途
|
||||
====
|
||||
验证选定 PBF AOI(默认 z10/914/385)中 CM93 助航对象的
|
||||
`_cm93_relation20_raw` 是否可以作为 CM95→NavSea `navigation_marks`
|
||||
的稳定合成键。
|
||||
|
||||
重点检查:
|
||||
- LIGHTS 与 BCNLAT / BCNSPP / BOYSPP / RTPBCN / TOWERS / _extgn 等是否共享 relation20;
|
||||
- 同一 relation20 组的坐标是否一致;
|
||||
- 是否存在一个 relation20 对应多个不相干坐标;
|
||||
- LIGHTS 中有多少可以安全合并,有多少必须独立输出;
|
||||
- relation20 缺失情况;
|
||||
- 跨 Cell 不合并。
|
||||
|
||||
本脚本只读 MySQL,不修改 importer/schema。
|
||||
|
||||
默认 AOI:
|
||||
z10/914/385
|
||||
lon 141.328125 .. 141.6796875
|
||||
lat 40.44694705960049 .. 40.71395582628604
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from collections import Counter, defaultdict
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import DictCursor
|
||||
|
||||
|
||||
NAV_CLASSES = {
|
||||
"LIGHTS",
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
"SISTAT",
|
||||
"SISTAW",
|
||||
}
|
||||
|
||||
BASE_CLASSES = {
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
"SISTAT",
|
||||
"SISTAW",
|
||||
}
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password", default=None)
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
|
||||
p.add_argument("--min-lon", type=float, default=141.328125)
|
||||
p.add_argument("--min-lat", type=float, default=40.44694705960049)
|
||||
p.add_argument("--max-lon", type=float, default=141.6796875)
|
||||
p.add_argument("--max-lat", type=float, default=40.71395582628604)
|
||||
|
||||
p.add_argument(
|
||||
"--coord-tolerance-deg",
|
||||
type=float,
|
||||
default=1e-7,
|
||||
help="同 relation20 组坐标最大容差,默认约厘米级~十米级以下的严格检查",
|
||||
)
|
||||
p.add_argument("--output-dir", default=".")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def rel20(attrs):
|
||||
if not isinstance(attrs, dict):
|
||||
return None
|
||||
v = attrs.get("_cm93_relation20_raw")
|
||||
if v is None:
|
||||
return None
|
||||
try:
|
||||
return int(v)
|
||||
except Exception:
|
||||
return str(v)
|
||||
|
||||
|
||||
def coord_distance_deg(a, b):
|
||||
return math.hypot(a[0] - b[0], a[1] - b[1])
|
||||
|
||||
|
||||
def write_csv(path, rows):
|
||||
rows = list(rows)
|
||||
if not rows:
|
||||
path.write_text("", encoding="utf-8-sig")
|
||||
return
|
||||
keys = []
|
||||
seen = set()
|
||||
for row in rows:
|
||||
for k in row:
|
||||
if k not in seen:
|
||||
seen.add(k)
|
||||
keys.append(k)
|
||||
with path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
w = csv.DictWriter(f, fieldnames=keys)
|
||||
w.writeheader()
|
||||
for row in rows:
|
||||
out = {}
|
||||
for k in keys:
|
||||
v = row.get(k)
|
||||
if isinstance(v, (list, dict, tuple)):
|
||||
v = json.dumps(v, ensure_ascii=False, default=str)
|
||||
out[k] = v
|
||||
w.writerow(out)
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
outdir = Path(a.output_dir).resolve()
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host,
|
||||
port=a.port,
|
||||
user=a.user,
|
||||
password=a.password,
|
||||
database=a.database,
|
||||
charset="utf8mb4",
|
||||
cursorclass=DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
)
|
||||
|
||||
rows = []
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
placeholders = ",".join(["%s"] * len(NAV_CLASSES))
|
||||
sql = f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon,
|
||||
f.bbox_min_lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class IN ({placeholders})
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.cell_id,
|
||||
f.native_scale,
|
||||
f.object_class,
|
||||
f.source_record_index
|
||||
"""
|
||||
params = [
|
||||
a.dataset_id,
|
||||
*sorted(NAV_CLASSES),
|
||||
a.min_lon,
|
||||
a.max_lon,
|
||||
a.min_lat,
|
||||
a.max_lat,
|
||||
]
|
||||
cur.execute(sql, params)
|
||||
rows = list(cur.fetchall())
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
for row in rows:
|
||||
attrs = row.get("attributes_json")
|
||||
if isinstance(attrs, str):
|
||||
try:
|
||||
attrs = json.loads(attrs)
|
||||
except Exception:
|
||||
attrs = {}
|
||||
elif attrs is None:
|
||||
attrs = {}
|
||||
row["attributes"] = attrs
|
||||
row["relation20"] = rel20(attrs)
|
||||
row["lon"] = float(row["bbox_min_lon"])
|
||||
row["lat"] = float(row["bbox_min_lat"])
|
||||
row.pop("attributes_json", None)
|
||||
|
||||
groups = defaultdict(list)
|
||||
no_relation = []
|
||||
for row in rows:
|
||||
rel = row["relation20"]
|
||||
if rel is None:
|
||||
no_relation.append(row)
|
||||
else:
|
||||
groups[(int(row["cell_id"]), rel)].append(row)
|
||||
|
||||
group_rows = []
|
||||
light_total = 0
|
||||
light_with_relation = 0
|
||||
light_mergeable = 0
|
||||
light_relation_without_base = 0
|
||||
coord_conflict_groups = 0
|
||||
|
||||
for row in rows:
|
||||
if row["object_class"] == "LIGHTS":
|
||||
light_total += 1
|
||||
if row["relation20"] is not None:
|
||||
light_with_relation += 1
|
||||
|
||||
for (cell_id, relation20), members in sorted(groups.items()):
|
||||
classes = Counter(m["object_class"] for m in members)
|
||||
coords = [(m["lon"], m["lat"]) for m in members]
|
||||
base = coords[0]
|
||||
max_spread = max(coord_distance_deg(base, c) for c in coords)
|
||||
|
||||
has_light = classes["LIGHTS"] > 0
|
||||
base_members = [
|
||||
m for m in members
|
||||
if m["object_class"] in BASE_CLASSES
|
||||
]
|
||||
has_base = bool(base_members)
|
||||
|
||||
if max_spread > a.coord_tolerance_deg:
|
||||
coord_conflict_groups += 1
|
||||
|
||||
if has_light and has_base and max_spread <= a.coord_tolerance_deg:
|
||||
light_mergeable += classes["LIGHTS"]
|
||||
elif has_light and not has_base:
|
||||
light_relation_without_base += classes["LIGHTS"]
|
||||
|
||||
group_rows.append({
|
||||
"cell_id": cell_id,
|
||||
"relation20": relation20,
|
||||
"member_count": len(members),
|
||||
"classes": dict(classes),
|
||||
"has_light": has_light,
|
||||
"has_base_component": has_base,
|
||||
"base_classes": sorted(
|
||||
set(m["object_class"] for m in base_members)
|
||||
),
|
||||
"max_coord_spread_deg": max_spread,
|
||||
"coord_ok": max_spread <= a.coord_tolerance_deg,
|
||||
"members": [
|
||||
{
|
||||
"feature_id": m["feature_id"],
|
||||
"source_record_index": m["source_record_index"],
|
||||
"object_class": m["object_class"],
|
||||
"native_scale": m["native_scale"],
|
||||
"lon": m["lon"],
|
||||
"lat": m["lat"],
|
||||
"attributes": m["attributes"],
|
||||
}
|
||||
for m in members
|
||||
],
|
||||
})
|
||||
|
||||
no_relation_counts = Counter(
|
||||
r["object_class"] for r in no_relation
|
||||
)
|
||||
|
||||
standalone_lights = [
|
||||
r for r in rows
|
||||
if r["object_class"] == "LIGHTS"
|
||||
and (
|
||||
r["relation20"] is None
|
||||
or not any(
|
||||
g["cell_id"] == r["cell_id"]
|
||||
and g["relation20"] == r["relation20"]
|
||||
and g["has_base_component"]
|
||||
and g["coord_ok"]
|
||||
for g in group_rows
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
report = {
|
||||
"version": "v1",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"aoi_bbox": [
|
||||
a.min_lon, a.min_lat, a.max_lon, a.max_lat
|
||||
],
|
||||
"coord_tolerance_deg": a.coord_tolerance_deg,
|
||||
"counts": {
|
||||
"nav_point_rows": len(rows),
|
||||
"relation_groups": len(groups),
|
||||
"rows_without_relation20": len(no_relation),
|
||||
"coord_conflict_groups": coord_conflict_groups,
|
||||
"light_total": light_total,
|
||||
"light_with_relation20": light_with_relation,
|
||||
"light_mergeable_by_relation20": light_mergeable,
|
||||
"light_relation_without_base": light_relation_without_base,
|
||||
"light_standalone_required": len(standalone_lights),
|
||||
},
|
||||
"no_relation_by_class": dict(no_relation_counts),
|
||||
"groups": group_rows,
|
||||
"standalone_lights": standalone_lights,
|
||||
"decision": (
|
||||
"PASS_RELATION20_PRIMARY_KEY"
|
||||
if light_total > 0
|
||||
and light_mergeable > 0
|
||||
and coord_conflict_groups == 0
|
||||
else "REVIEW_RELATION20"
|
||||
),
|
||||
}
|
||||
|
||||
json_path = outdir / "cm95_nav_aid_relation_audit_v1.json"
|
||||
csv_path = outdir / "cm95_nav_aid_relation_groups_v1.csv"
|
||||
txt_path = outdir / "cm95_nav_aid_relation_audit_v1.txt"
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps(report, ensure_ascii=False, indent=2, default=str),
|
||||
encoding="utf-8",
|
||||
)
|
||||
write_csv(csv_path, group_rows)
|
||||
|
||||
lines = [
|
||||
"CM95 / CM93 助航 relation20 全 AOI 审计 v1",
|
||||
"=" * 76,
|
||||
f"NAV point rows : {len(rows)}",
|
||||
f"Relation groups : {len(groups)}",
|
||||
f"Rows without relation20 : {len(no_relation)}",
|
||||
f"Coordinate conflict groups : {coord_conflict_groups}",
|
||||
"",
|
||||
f"LIGHTS total : {light_total}",
|
||||
f"LIGHTS with relation20 : {light_with_relation}",
|
||||
f"LIGHTS mergeable : {light_mergeable}",
|
||||
f"LIGHTS relation no base : {light_relation_without_base}",
|
||||
f"LIGHTS standalone required : {len(standalone_lights)}",
|
||||
"",
|
||||
f"DECISION : {report['decision']}",
|
||||
]
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
print("")
|
||||
print("输出:")
|
||||
print(json_path)
|
||||
print(csv_path)
|
||||
print(txt_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
546
tools/cm95_nav_name_candidate_audit_v1.py
Normal file
546
tools/cm95_nav_name_candidate_audit_v1.py
Normal file
@@ -0,0 +1,546 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 / CM93 助航名称候选审计 v1
|
||||
|
||||
目的
|
||||
====
|
||||
为 CM95→NavSea `navigation_marks.chart_label_text` 找到可审计的 CM95 自有名称来源,
|
||||
不使用 NEWPEC/reference PBF 名称反灌。
|
||||
|
||||
默认检查第一测试 AOI:
|
||||
z10/914/385
|
||||
lon 141.328125 .. 141.6796875
|
||||
lat 40.44694705960049 .. 40.71395582628604
|
||||
默认重点比例尺:
|
||||
1:200000
|
||||
|
||||
候选来源:
|
||||
1. 助航组件自身 OBJNAM / NOBJNM;
|
||||
2. 同 cell、同 native_scale 的 `_texto._texta.text`;
|
||||
3. 同 native_scale、邻近 cell 的 `_texto._texta.text`,仅作为低置信参考。
|
||||
|
||||
关联原则:
|
||||
- 助航组件仍然用 `(cell_id, _cm93_relation20_raw)` 合成;
|
||||
- 本脚本只审计名称,不改变 relation20 合成规则;
|
||||
- 不自动把最近文字当名称;
|
||||
- 输出距离和来源,由下一步确定安全规则。
|
||||
|
||||
输出:
|
||||
cm95_nav_name_candidates_v1.json
|
||||
cm95_nav_name_candidates_v1.csv
|
||||
cm95_nav_name_candidates_v1.txt
|
||||
|
||||
执行:
|
||||
python .\tools\cm95_nav_name_candidate_audit_v1.py `
|
||||
--host 127.0.0.1 `
|
||||
--port 3306 `
|
||||
--user root `
|
||||
--database cm93_chart `
|
||||
--dataset-id 1 `
|
||||
--native-scale 200000
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from collections import defaultdict
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import DictCursor
|
||||
|
||||
|
||||
NAV_CLASSES = {
|
||||
"LIGHTS",
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
"SISTAT",
|
||||
"SISTAW",
|
||||
}
|
||||
|
||||
DIRECT_NAME_KEYS = (
|
||||
"OBJNAM",
|
||||
"NOBJNM",
|
||||
)
|
||||
|
||||
DEFAULT_BBOX = (
|
||||
141.328125,
|
||||
40.44694705960049,
|
||||
141.6796875,
|
||||
40.71395582628604,
|
||||
)
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password", default=None)
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument("--native-scale", type=int, default=200000)
|
||||
p.add_argument("--min-lon", type=float, default=DEFAULT_BBOX[0])
|
||||
p.add_argument("--min-lat", type=float, default=DEFAULT_BBOX[1])
|
||||
p.add_argument("--max-lon", type=float, default=DEFAULT_BBOX[2])
|
||||
p.add_argument("--max-lat", type=float, default=DEFAULT_BBOX[3])
|
||||
p.add_argument(
|
||||
"--radius-m",
|
||||
type=float,
|
||||
default=800.0,
|
||||
help="每个助航对象保存的文字候选搜索半径",
|
||||
)
|
||||
p.add_argument(
|
||||
"--candidate-limit",
|
||||
type=int,
|
||||
default=12,
|
||||
)
|
||||
p.add_argument("--output-dir", default=".")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def json_dict(value: Any) -> dict[str, Any]:
|
||||
if value is None:
|
||||
return {}
|
||||
if isinstance(value, dict):
|
||||
return value
|
||||
if isinstance(value, (bytes, bytearray, memoryview)):
|
||||
value = bytes(value).decode("utf-8", "replace")
|
||||
try:
|
||||
obj = json.loads(value)
|
||||
except Exception:
|
||||
return {}
|
||||
return obj if isinstance(obj, dict) else {}
|
||||
|
||||
|
||||
def relation20(attrs: dict[str, Any]):
|
||||
value = attrs.get("_cm93_relation20_raw")
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
return int(value)
|
||||
except Exception:
|
||||
return str(value)
|
||||
|
||||
|
||||
def texta(attrs: dict[str, Any]):
|
||||
value = attrs.get("_texta")
|
||||
if not isinstance(value, dict):
|
||||
return None, None
|
||||
text = value.get("text")
|
||||
prefix = value.get("prefix")
|
||||
if text is None:
|
||||
return None, prefix
|
||||
text = str(text).strip()
|
||||
return (text or None), prefix
|
||||
|
||||
|
||||
def direct_names(attrs: dict[str, Any]):
|
||||
out = []
|
||||
for key in DIRECT_NAME_KEYS:
|
||||
value = attrs.get(key)
|
||||
if isinstance(value, str) and value.strip():
|
||||
out.append({
|
||||
"field": key,
|
||||
"text": value.strip(),
|
||||
})
|
||||
return out
|
||||
|
||||
|
||||
def haversine_m(lon1, lat1, lon2, lat2):
|
||||
r = 6371008.8
|
||||
p1 = math.radians(lat1)
|
||||
p2 = math.radians(lat2)
|
||||
dp = p2 - p1
|
||||
dl = math.radians(lon2 - lon1)
|
||||
a = (
|
||||
math.sin(dp / 2) ** 2
|
||||
+ math.cos(p1) * math.cos(p2)
|
||||
* math.sin(dl / 2) ** 2
|
||||
)
|
||||
return 2 * r * math.asin(min(1.0, math.sqrt(a)))
|
||||
|
||||
|
||||
def write_csv(path: Path, rows):
|
||||
rows = list(rows)
|
||||
fields = [
|
||||
"cell_id",
|
||||
"source_relative_path",
|
||||
"native_scale",
|
||||
"relation20",
|
||||
"lon",
|
||||
"lat",
|
||||
"component_classes",
|
||||
"component_source_record_indices",
|
||||
"direct_names",
|
||||
"nearest_same_cell_text",
|
||||
"nearest_same_cell_distance_m",
|
||||
"nearest_any_cell_text",
|
||||
"nearest_any_cell_distance_m",
|
||||
"same_cell_candidate_count",
|
||||
"all_candidate_count",
|
||||
"candidate_summary",
|
||||
]
|
||||
with path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
w = csv.DictWriter(f, fieldnames=fields)
|
||||
w.writeheader()
|
||||
for row in rows:
|
||||
out = dict(row)
|
||||
for key in (
|
||||
"component_classes",
|
||||
"component_source_record_indices",
|
||||
"direct_names",
|
||||
"candidate_summary",
|
||||
):
|
||||
out[key] = json.dumps(
|
||||
out.get(key),
|
||||
ensure_ascii=False,
|
||||
separators=(",", ":"),
|
||||
)
|
||||
w.writerow(out)
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
outdir = Path(a.output_dir).resolve()
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host,
|
||||
port=a.port,
|
||||
user=a.user,
|
||||
password=a.password,
|
||||
database=a.database,
|
||||
charset="utf8mb4",
|
||||
cursorclass=DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
)
|
||||
|
||||
nav_rows = []
|
||||
text_rows = []
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
placeholders = ",".join(["%s"] * len(NAV_CLASSES))
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale=%s
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class IN ({placeholders})
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
a.native_scale,
|
||||
*sorted(NAV_CLASSES),
|
||||
a.min_lon,
|
||||
a.max_lon,
|
||||
a.min_lat,
|
||||
a.max_lat,
|
||||
),
|
||||
)
|
||||
nav_rows = list(cur.fetchall())
|
||||
|
||||
# 扩大少量边界,避免 tile 边缘的文字候选被切掉。
|
||||
lat_pad = a.radius_m / 111320.0
|
||||
mid_lat = (a.min_lat + a.max_lat) / 2.0
|
||||
lon_pad = (
|
||||
a.radius_m
|
||||
/ max(1.0, 111320.0 * math.cos(math.radians(mid_lat)))
|
||||
)
|
||||
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale=%s
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class='_texto'
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
a.native_scale,
|
||||
a.min_lon - lon_pad,
|
||||
a.max_lon + lon_pad,
|
||||
a.min_lat - lat_pad,
|
||||
a.max_lat + lat_pad,
|
||||
),
|
||||
)
|
||||
text_rows = list(cur.fetchall())
|
||||
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
for row in nav_rows:
|
||||
row["attributes"] = json_dict(row.pop("attributes_json"))
|
||||
row["relation20"] = relation20(row["attributes"])
|
||||
row["lon"] = float(row["lon"])
|
||||
row["lat"] = float(row["lat"])
|
||||
|
||||
parsed_text = []
|
||||
for row in text_rows:
|
||||
attrs = json_dict(row.pop("attributes_json"))
|
||||
text, prefix = texta(attrs)
|
||||
if not text:
|
||||
continue
|
||||
parsed_text.append({
|
||||
"feature_id": int(row["feature_id"]),
|
||||
"cell_id": int(row["cell_id"]),
|
||||
"source_relative_path": str(row["source_relative_path"]),
|
||||
"source_record_index": int(row["source_record_index"]),
|
||||
"native_scale": int(row["native_scale"]),
|
||||
"lon": float(row["lon"]),
|
||||
"lat": float(row["lat"]),
|
||||
"text": text,
|
||||
"prefix": prefix,
|
||||
})
|
||||
|
||||
groups = defaultdict(list)
|
||||
standalone = []
|
||||
|
||||
for row in nav_rows:
|
||||
rel = row["relation20"]
|
||||
if rel is None:
|
||||
standalone.append([row])
|
||||
else:
|
||||
groups[(int(row["cell_id"]), rel)].append(row)
|
||||
|
||||
nav_groups = list(groups.values()) + standalone
|
||||
|
||||
results = []
|
||||
|
||||
for members in nav_groups:
|
||||
# relation20 组成员已由上一步证明同址;
|
||||
# standalone 则只有一条。
|
||||
lon = sum(m["lon"] for m in members) / len(members)
|
||||
lat = sum(m["lat"] for m in members) / len(members)
|
||||
cell_id = int(members[0]["cell_id"])
|
||||
source_path = str(members[0]["source_relative_path"])
|
||||
rel = members[0]["relation20"]
|
||||
|
||||
strong_names = []
|
||||
for m in members:
|
||||
for n in direct_names(m["attributes"]):
|
||||
strong_names.append({
|
||||
"object_class": m["object_class"],
|
||||
"source_record_index": m["source_record_index"],
|
||||
**n,
|
||||
})
|
||||
|
||||
candidates = []
|
||||
for t in parsed_text:
|
||||
distance = haversine_m(
|
||||
lon,
|
||||
lat,
|
||||
t["lon"],
|
||||
t["lat"],
|
||||
)
|
||||
if distance > a.radius_m:
|
||||
continue
|
||||
candidates.append({
|
||||
**t,
|
||||
"same_cell": t["cell_id"] == cell_id,
|
||||
"distance_m": round(distance, 2),
|
||||
})
|
||||
|
||||
candidates.sort(
|
||||
key=lambda c: (
|
||||
not c["same_cell"],
|
||||
c["distance_m"],
|
||||
c["text"],
|
||||
)
|
||||
)
|
||||
|
||||
same_cell = [
|
||||
c for c in candidates if c["same_cell"]
|
||||
]
|
||||
|
||||
nearest_same = same_cell[0] if same_cell else None
|
||||
nearest_any = (
|
||||
min(candidates, key=lambda c: c["distance_m"])
|
||||
if candidates
|
||||
else None
|
||||
)
|
||||
|
||||
results.append({
|
||||
"cell_id": cell_id,
|
||||
"source_relative_path": source_path,
|
||||
"native_scale": a.native_scale,
|
||||
"relation20": rel,
|
||||
"lon": lon,
|
||||
"lat": lat,
|
||||
"component_classes": [
|
||||
m["object_class"] for m in members
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
int(m["source_record_index"]) for m in members
|
||||
],
|
||||
"direct_names": strong_names,
|
||||
"nearest_same_cell_text": (
|
||||
nearest_same["text"] if nearest_same else None
|
||||
),
|
||||
"nearest_same_cell_distance_m": (
|
||||
nearest_same["distance_m"] if nearest_same else None
|
||||
),
|
||||
"nearest_any_cell_text": (
|
||||
nearest_any["text"] if nearest_any else None
|
||||
),
|
||||
"nearest_any_cell_distance_m": (
|
||||
nearest_any["distance_m"] if nearest_any else None
|
||||
),
|
||||
"same_cell_candidate_count": len(same_cell),
|
||||
"all_candidate_count": len(candidates),
|
||||
"candidate_summary": candidates[: a.candidate_limit],
|
||||
})
|
||||
|
||||
results.sort(
|
||||
key=lambda r: (
|
||||
r["cell_id"],
|
||||
-1 if r["relation20"] is None else r["relation20"],
|
||||
r["lon"],
|
||||
r["lat"],
|
||||
)
|
||||
)
|
||||
|
||||
direct_named = sum(
|
||||
1 for r in results if r["direct_names"]
|
||||
)
|
||||
same_100 = sum(
|
||||
1
|
||||
for r in results
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 100.0
|
||||
)
|
||||
same_250 = sum(
|
||||
1
|
||||
for r in results
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 250.0
|
||||
)
|
||||
|
||||
report = {
|
||||
"schema": "navsea.cm95.nav-name-candidate-audit/v1",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"native_scale": a.native_scale,
|
||||
"aoi_bbox": [
|
||||
a.min_lon,
|
||||
a.min_lat,
|
||||
a.max_lon,
|
||||
a.max_lat,
|
||||
],
|
||||
"search_radius_m": a.radius_m,
|
||||
"counts": {
|
||||
"nav_component_rows": len(nav_rows),
|
||||
"nav_groups": len(results),
|
||||
"texto_rows_with_text": len(parsed_text),
|
||||
"groups_with_direct_OBJNAM_or_NOBJNM": direct_named,
|
||||
"groups_with_same_cell_text_within_100m": same_100,
|
||||
"groups_with_same_cell_text_within_250m": same_250,
|
||||
},
|
||||
"groups": results,
|
||||
"decision": (
|
||||
"DATA_READY_FOR_NAME_ASSOCIATION_REVIEW"
|
||||
if results
|
||||
else "NO_NAV_GROUPS"
|
||||
),
|
||||
}
|
||||
|
||||
json_path = outdir / "cm95_nav_name_candidates_v1.json"
|
||||
csv_path = outdir / "cm95_nav_name_candidates_v1.csv"
|
||||
txt_path = outdir / "cm95_nav_name_candidates_v1.txt"
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps(
|
||||
report,
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
default=str,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
write_csv(csv_path, results)
|
||||
|
||||
lines = [
|
||||
"CM95 / CM93 助航名称候选审计 v1",
|
||||
"=" * 76,
|
||||
f"Native scale : {a.native_scale}",
|
||||
f"Nav component rows : {len(nav_rows)}",
|
||||
f"Nav groups : {len(results)}",
|
||||
f"_texto rows with text : {len(parsed_text)}",
|
||||
f"Groups with direct OBJNAM/NOBJNM : {direct_named}",
|
||||
f"Same-cell text <=100m : {same_100}",
|
||||
f"Same-cell text <=250m : {same_250}",
|
||||
"",
|
||||
"注意:最近文字只是候选,不代表自动确定为助航名称。",
|
||||
"下一步由映射审计决定哪些关系可安全写入 chart_label_text。",
|
||||
]
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
print("")
|
||||
print(json_path)
|
||||
print(csv_path)
|
||||
print(txt_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
285
tools/cm95_nav_name_conflict_audit_v1.py
Normal file
285
tools/cm95_nav_name_conflict_audit_v1.py
Normal file
@@ -0,0 +1,285 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import json
|
||||
from collections import Counter, defaultdict
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
p = argparse.ArgumentParser(
|
||||
description="Audit CM95 navigation composite name conflicts from production trace reports."
|
||||
)
|
||||
p.add_argument("--release-dir", required=True, type=Path)
|
||||
p.add_argument(
|
||||
"--profile",
|
||||
default="delivery",
|
||||
choices=["delivery", "engineering"],
|
||||
)
|
||||
p.add_argument("--output-json", required=True, type=Path)
|
||||
p.add_argument("--output-csv", required=True, type=Path)
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def tile_from_trace_path(trace_path: Path, trace_root: Path) -> str:
|
||||
rel = trace_path.relative_to(trace_root)
|
||||
parts = rel.parts
|
||||
if len(parts) < 3:
|
||||
return rel.as_posix()
|
||||
z, x, y_name = parts[-3], parts[-2], parts[-1]
|
||||
y = y_name.replace(".trace.jsonl", "")
|
||||
return f"{z}/{x}/{y}"
|
||||
|
||||
|
||||
def read_jsonl(path: Path):
|
||||
with path.open("r", encoding="utf-8") as f:
|
||||
for line_no, raw in enumerate(f, 1):
|
||||
raw = raw.strip()
|
||||
if not raw:
|
||||
continue
|
||||
try:
|
||||
obj = json.loads(raw)
|
||||
except json.JSONDecodeError as exc:
|
||||
raise RuntimeError(f"{path}:{line_no}: invalid JSON: {exc}") from exc
|
||||
if isinstance(obj, dict):
|
||||
yield obj
|
||||
|
||||
|
||||
def main() -> int:
|
||||
args = parse_args()
|
||||
release_dir = args.release_dir.resolve()
|
||||
report_root = release_dir / "reports" / args.profile
|
||||
|
||||
if not report_root.exists():
|
||||
raise SystemExit(f"report root not found: {report_root}")
|
||||
|
||||
trace_files = sorted(report_root.rglob("*.trace.jsonl"))
|
||||
report_files = sorted(
|
||||
p for p in report_root.rglob("*.json")
|
||||
if not p.name.endswith(".trace.json")
|
||||
)
|
||||
|
||||
report_conflict_occurrences = 0
|
||||
for path in report_files:
|
||||
try:
|
||||
obj = json.loads(path.read_text(encoding="utf-8"))
|
||||
except Exception:
|
||||
continue
|
||||
report_conflict_occurrences += int(
|
||||
(obj.get("navigation_composites") or {}).get("name_conflict_groups") or 0
|
||||
)
|
||||
|
||||
raw_conflicts: list[dict[str, Any]] = []
|
||||
|
||||
for trace_path in trace_files:
|
||||
tile = tile_from_trace_path(trace_path, report_root)
|
||||
z = int(tile.split("/", 1)[0]) if "/" in tile else None
|
||||
|
||||
for row in read_jsonl(trace_path):
|
||||
if row.get("nav_name_conflict") is not True:
|
||||
continue
|
||||
|
||||
candidates = [
|
||||
str(v) for v in (row.get("nav_name_candidates") or [])
|
||||
if v is not None and str(v) != ""
|
||||
]
|
||||
components = [
|
||||
str(v) for v in (row.get("source_component_ids") or [])
|
||||
if v is not None
|
||||
]
|
||||
|
||||
raw_conflicts.append(
|
||||
{
|
||||
"tile": tile,
|
||||
"zoom": z,
|
||||
"output_id": row.get("output_id"),
|
||||
"output_layer": row.get("output_layer"),
|
||||
"source_id": row.get("source_id"),
|
||||
"relation20": row.get("relation20"),
|
||||
"native_scale": row.get("native_scale"),
|
||||
"mapping_rule_id": row.get("mapping_rule_id"),
|
||||
"mapping_status": row.get("mapping_status"),
|
||||
"nav_name_source": row.get("nav_name_source"),
|
||||
"nav_name_candidates": candidates,
|
||||
"source_component_ids": components,
|
||||
"trace_path": str(trace_path.relative_to(release_dir)).replace("\\", "/"),
|
||||
}
|
||||
)
|
||||
|
||||
unique: dict[str, dict[str, Any]] = {}
|
||||
|
||||
for item in raw_conflicts:
|
||||
output_id = item.get("output_id")
|
||||
if output_id is not None:
|
||||
key = f"output_id:{output_id}"
|
||||
else:
|
||||
key = json.dumps(
|
||||
{
|
||||
"source_id": item.get("source_id"),
|
||||
"relation20": item.get("relation20"),
|
||||
"native_scale": item.get("native_scale"),
|
||||
"components": sorted(item.get("source_component_ids") or []),
|
||||
},
|
||||
sort_keys=True,
|
||||
ensure_ascii=False,
|
||||
)
|
||||
|
||||
if key not in unique:
|
||||
unique[key] = {
|
||||
"key": key,
|
||||
"output_id": item.get("output_id"),
|
||||
"output_layer": item.get("output_layer"),
|
||||
"source_id": item.get("source_id"),
|
||||
"relation20": item.get("relation20"),
|
||||
"native_scale": item.get("native_scale"),
|
||||
"mapping_rule_id": item.get("mapping_rule_id"),
|
||||
"mapping_status": item.get("mapping_status"),
|
||||
"nav_name_candidates": list(item.get("nav_name_candidates") or []),
|
||||
"source_component_ids": list(item.get("source_component_ids") or []),
|
||||
"occurrences": 0,
|
||||
"tiles": [],
|
||||
"zooms": [],
|
||||
"trace_paths": [],
|
||||
}
|
||||
|
||||
u = unique[key]
|
||||
u["occurrences"] += 1
|
||||
|
||||
tile = item["tile"]
|
||||
if tile not in u["tiles"]:
|
||||
u["tiles"].append(tile)
|
||||
|
||||
z = item.get("zoom")
|
||||
if z is not None and z not in u["zooms"]:
|
||||
u["zooms"].append(z)
|
||||
|
||||
tpath = item["trace_path"]
|
||||
if tpath not in u["trace_paths"]:
|
||||
u["trace_paths"].append(tpath)
|
||||
|
||||
# Preserve any candidates/components that differ across repeated tile occurrences.
|
||||
for candidate in item.get("nav_name_candidates") or []:
|
||||
if candidate not in u["nav_name_candidates"]:
|
||||
u["nav_name_candidates"].append(candidate)
|
||||
for component in item.get("source_component_ids") or []:
|
||||
if component not in u["source_component_ids"]:
|
||||
u["source_component_ids"].append(component)
|
||||
|
||||
unique_rows = list(unique.values())
|
||||
|
||||
for row in unique_rows:
|
||||
row["tiles"].sort()
|
||||
row["zooms"].sort()
|
||||
row["trace_paths"].sort()
|
||||
|
||||
unique_rows.sort(
|
||||
key=lambda r: (
|
||||
-(int(r.get("occurrences") or 0)),
|
||||
int(r.get("native_scale") or 0),
|
||||
str(r.get("source_id") or ""),
|
||||
)
|
||||
)
|
||||
|
||||
zoom_occurrences = Counter(
|
||||
int(x["zoom"]) for x in raw_conflicts if x.get("zoom") is not None
|
||||
)
|
||||
scale_unique = Counter(
|
||||
int(x["native_scale"]) for x in unique_rows if x.get("native_scale") is not None
|
||||
)
|
||||
candidate_count_unique = Counter(
|
||||
len(x.get("nav_name_candidates") or []) for x in unique_rows
|
||||
)
|
||||
|
||||
tile_set = {x["tile"] for x in raw_conflicts}
|
||||
|
||||
result = {
|
||||
"schema": "navsea.cm95.nav-name-conflict-audit/v1",
|
||||
"release_dir": str(release_dir),
|
||||
"profile": args.profile,
|
||||
"trace_file_count": len(trace_files),
|
||||
"report_file_count": len(report_files),
|
||||
"report_name_conflict_occurrences": report_conflict_occurrences,
|
||||
"trace_name_conflict_occurrences": len(raw_conflicts),
|
||||
"unique_conflict_outputs": len(unique_rows),
|
||||
"affected_tiles": len(tile_set),
|
||||
"occurrences_by_zoom": dict(sorted(zoom_occurrences.items())),
|
||||
"unique_conflicts_by_native_scale": dict(sorted(scale_unique.items())),
|
||||
"unique_conflicts_by_candidate_count": dict(sorted(candidate_count_unique.items())),
|
||||
"unique_conflicts": unique_rows,
|
||||
}
|
||||
|
||||
args.output_json.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output_json.write_text(
|
||||
json.dumps(result, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
args.output_csv.parent.mkdir(parents=True, exist_ok=True)
|
||||
with args.output_csv.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
writer = csv.DictWriter(
|
||||
f,
|
||||
fieldnames=[
|
||||
"output_id",
|
||||
"source_id",
|
||||
"relation20",
|
||||
"native_scale",
|
||||
"occurrences",
|
||||
"tile_count",
|
||||
"zooms",
|
||||
"nav_name_candidates",
|
||||
"source_component_ids",
|
||||
"mapping_rule_id",
|
||||
"mapping_status",
|
||||
],
|
||||
)
|
||||
writer.writeheader()
|
||||
for row in unique_rows:
|
||||
writer.writerow(
|
||||
{
|
||||
"output_id": row.get("output_id"),
|
||||
"source_id": row.get("source_id"),
|
||||
"relation20": row.get("relation20"),
|
||||
"native_scale": row.get("native_scale"),
|
||||
"occurrences": row.get("occurrences"),
|
||||
"tile_count": len(row.get("tiles") or []),
|
||||
"zooms": "|".join(str(v) for v in row.get("zooms") or []),
|
||||
"nav_name_candidates": " | ".join(row.get("nav_name_candidates") or []),
|
||||
"source_component_ids": " | ".join(row.get("source_component_ids") or []),
|
||||
"mapping_rule_id": row.get("mapping_rule_id"),
|
||||
"mapping_status": row.get("mapping_status"),
|
||||
}
|
||||
)
|
||||
|
||||
print("CM95 navigation name conflict audit")
|
||||
print("=" * 72)
|
||||
print(f"Release : {release_dir}")
|
||||
print(f"Report conflict occurrences : {report_conflict_occurrences}")
|
||||
print(f"Trace conflict occurrences : {len(raw_conflicts)}")
|
||||
print(f"Unique conflict outputs : {len(unique_rows)}")
|
||||
print(f"Affected tiles : {len(tile_set)}")
|
||||
print(f"JSON : {args.output_json}")
|
||||
print(f"CSV : {args.output_csv}")
|
||||
|
||||
if report_conflict_occurrences != len(raw_conflicts):
|
||||
print("")
|
||||
print("WARNING: report count and trace count differ; inspect reports before changing policy.")
|
||||
|
||||
print("")
|
||||
print("Top unique conflicts:")
|
||||
for row in unique_rows[:20]:
|
||||
print(
|
||||
f" output_id={row.get('output_id')} "
|
||||
f"scale={row.get('native_scale')} "
|
||||
f"occ={row.get('occurrences')} "
|
||||
f"tiles={len(row.get('tiles') or [])} "
|
||||
f"relation20={row.get('relation20')} "
|
||||
f"names={row.get('nav_name_candidates')}"
|
||||
)
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
716
tools/cm95_nav_name_multiscale_audit_v2.py
Normal file
716
tools/cm95_nav_name_multiscale_audit_v2.py
Normal file
@@ -0,0 +1,716 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""
|
||||
CM95 / CM93 助航名称多尺度与显式关系审计 v2
|
||||
|
||||
目标
|
||||
====
|
||||
确认 CM95 自身是否存在可安全写入 NavSea
|
||||
`navigation_marks.chart_label_text` 的名称来源。
|
||||
|
||||
重点:
|
||||
1. 同时检查 1:20,000 / 1:50,000 / 1:200,000;
|
||||
2. 优先检查助航对象和 `_texto` 中的显式关系/索引字段;
|
||||
3. 再检查同 Cell 最近文字;
|
||||
4. 不自动把最近文字当名称;
|
||||
5. 不读取或反灌 NEWPEC/reference PBF 名称;
|
||||
6. 只读 MySQL,不修改 importer/schema。
|
||||
|
||||
默认 AOI:
|
||||
z10/914/385
|
||||
lon 141.328125 .. 141.6796875
|
||||
lat 40.44694705960049 .. 40.71395582628604
|
||||
|
||||
输出:
|
||||
- cm95_nav_name_multiscale_audit_v2.json
|
||||
- cm95_nav_name_multiscale_groups_v2.csv
|
||||
- cm95_nav_text_relation_fields_v2.csv
|
||||
- cm95_nav_name_multiscale_audit_v2.txt
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import getpass
|
||||
import json
|
||||
import math
|
||||
from collections import Counter, defaultdict
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pymysql
|
||||
from pymysql.cursors import DictCursor
|
||||
|
||||
|
||||
NAV_CLASSES = {
|
||||
"LIGHTS",
|
||||
"BCNLAT",
|
||||
"BCNSPP",
|
||||
"BOYSPP",
|
||||
"RTPBCN",
|
||||
"TOWERS",
|
||||
"_extgn",
|
||||
"SISTAT",
|
||||
"SISTAW",
|
||||
}
|
||||
|
||||
DEFAULT_SCALES = (20000, 50000, 200000)
|
||||
DIRECT_NAME_KEYS = ("OBJNAM", "NOBJNM")
|
||||
|
||||
RELATION_KEY_HINTS = (
|
||||
"relation",
|
||||
"related",
|
||||
"index",
|
||||
"record",
|
||||
"assoc",
|
||||
"link",
|
||||
"ref",
|
||||
"cm93",
|
||||
)
|
||||
|
||||
DEFAULT_BBOX = (
|
||||
141.328125,
|
||||
40.44694705960049,
|
||||
141.6796875,
|
||||
40.71395582628604,
|
||||
)
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--host", default="127.0.0.1")
|
||||
p.add_argument("--port", type=int, default=3306)
|
||||
p.add_argument("--user", default="root")
|
||||
p.add_argument("--password", default=None)
|
||||
p.add_argument("--database", default="cm93_chart")
|
||||
p.add_argument("--dataset-id", type=int, default=1)
|
||||
p.add_argument(
|
||||
"--scales",
|
||||
default="20000,50000,200000",
|
||||
help="逗号分隔,例如 20000,50000,200000",
|
||||
)
|
||||
p.add_argument("--min-lon", type=float, default=DEFAULT_BBOX[0])
|
||||
p.add_argument("--min-lat", type=float, default=DEFAULT_BBOX[1])
|
||||
p.add_argument("--max-lon", type=float, default=DEFAULT_BBOX[2])
|
||||
p.add_argument("--max-lat", type=float, default=DEFAULT_BBOX[3])
|
||||
p.add_argument("--radius-m", type=float, default=800.0)
|
||||
p.add_argument("--candidate-limit", type=int, default=12)
|
||||
p.add_argument("--output-dir", default=".")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def json_dict(value: Any) -> dict[str, Any]:
|
||||
if value is None:
|
||||
return {}
|
||||
if isinstance(value, dict):
|
||||
return value
|
||||
if isinstance(value, (bytes, bytearray, memoryview)):
|
||||
value = bytes(value).decode("utf-8", "replace")
|
||||
try:
|
||||
obj = json.loads(value)
|
||||
except Exception:
|
||||
return {}
|
||||
return obj if isinstance(obj, dict) else {}
|
||||
|
||||
|
||||
def relation20(attrs: dict[str, Any]):
|
||||
value = attrs.get("_cm93_relation20_raw")
|
||||
if value is None:
|
||||
return None
|
||||
try:
|
||||
return int(value)
|
||||
except Exception:
|
||||
return str(value)
|
||||
|
||||
|
||||
def texta(attrs: dict[str, Any]):
|
||||
value = attrs.get("_texta")
|
||||
if not isinstance(value, dict):
|
||||
return None, None
|
||||
text = value.get("text")
|
||||
prefix = value.get("prefix")
|
||||
if text is None:
|
||||
return None, prefix
|
||||
text = str(text).strip()
|
||||
return (text or None), prefix
|
||||
|
||||
|
||||
def direct_names(attrs: dict[str, Any]):
|
||||
out = []
|
||||
for key in DIRECT_NAME_KEYS:
|
||||
value = attrs.get(key)
|
||||
if isinstance(value, str) and value.strip():
|
||||
out.append({"field": key, "text": value.strip()})
|
||||
return out
|
||||
|
||||
|
||||
def relation_like_fields(attrs: dict[str, Any]):
|
||||
out = {}
|
||||
for key, value in attrs.items():
|
||||
lk = str(key).lower()
|
||||
if any(h in lk for h in RELATION_KEY_HINTS):
|
||||
out[key] = value
|
||||
return out
|
||||
|
||||
|
||||
def haversine_m(lon1, lat1, lon2, lat2):
|
||||
r = 6371008.8
|
||||
p1 = math.radians(lat1)
|
||||
p2 = math.radians(lat2)
|
||||
dp = p2 - p1
|
||||
dl = math.radians(lon2 - lon1)
|
||||
a = (
|
||||
math.sin(dp / 2) ** 2
|
||||
+ math.cos(p1) * math.cos(p2)
|
||||
* math.sin(dl / 2) ** 2
|
||||
)
|
||||
return 2 * r * math.asin(min(1.0, math.sqrt(a)))
|
||||
|
||||
|
||||
def flatten_relation_values(obj: Any):
|
||||
"""用于审计,不解释语义。把标量/list/dict转成可比较字符串集合。"""
|
||||
values = set()
|
||||
|
||||
def walk(v):
|
||||
if v is None:
|
||||
return
|
||||
if isinstance(v, dict):
|
||||
for kk, vv in v.items():
|
||||
values.add(f"{kk}={json.dumps(vv, ensure_ascii=False, sort_keys=True, default=str)}")
|
||||
walk(vv)
|
||||
elif isinstance(v, list):
|
||||
for item in v:
|
||||
walk(item)
|
||||
else:
|
||||
values.add(str(v))
|
||||
|
||||
walk(obj)
|
||||
return values
|
||||
|
||||
|
||||
def write_csv(path: Path, rows, fields):
|
||||
with path.open("w", encoding="utf-8-sig", newline="") as f:
|
||||
w = csv.DictWriter(f, fieldnames=fields)
|
||||
w.writeheader()
|
||||
for row in rows:
|
||||
out = {}
|
||||
for field in fields:
|
||||
value = row.get(field)
|
||||
if isinstance(value, (dict, list, tuple)):
|
||||
value = json.dumps(
|
||||
value,
|
||||
ensure_ascii=False,
|
||||
separators=(",", ":"),
|
||||
default=str,
|
||||
)
|
||||
out[field] = value
|
||||
w.writerow(out)
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
scales = tuple(
|
||||
sorted(
|
||||
{
|
||||
int(x.strip())
|
||||
for x in a.scales.split(",")
|
||||
if x.strip()
|
||||
}
|
||||
)
|
||||
)
|
||||
if not scales:
|
||||
raise SystemExit("scales 不能为空")
|
||||
|
||||
if a.password is None:
|
||||
a.password = getpass.getpass("MySQL password: ")
|
||||
|
||||
outdir = Path(a.output_dir).resolve()
|
||||
outdir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
conn = pymysql.connect(
|
||||
host=a.host,
|
||||
port=a.port,
|
||||
user=a.user,
|
||||
password=a.password,
|
||||
database=a.database,
|
||||
charset="utf8mb4",
|
||||
cursorclass=DictCursor,
|
||||
autocommit=False,
|
||||
connect_timeout=20,
|
||||
read_timeout=900,
|
||||
)
|
||||
|
||||
nav_rows = []
|
||||
text_rows = []
|
||||
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
try:
|
||||
cur.execute("SET SESSION TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
cur.execute("START TRANSACTION READ ONLY")
|
||||
except Exception:
|
||||
cur.execute("START TRANSACTION")
|
||||
|
||||
nav_ph = ",".join(["%s"] * len(NAV_CLASSES))
|
||||
scale_ph = ",".join(["%s"] * len(scales))
|
||||
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale IN ({scale_ph})
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class IN ({nav_ph})
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.native_scale,
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
*scales,
|
||||
*sorted(NAV_CLASSES),
|
||||
a.min_lon,
|
||||
a.max_lon,
|
||||
a.min_lat,
|
||||
a.max_lat,
|
||||
),
|
||||
)
|
||||
nav_rows = list(cur.fetchall())
|
||||
|
||||
lat_pad = a.radius_m / 111320.0
|
||||
mid_lat = (a.min_lat + a.max_lat) / 2.0
|
||||
lon_pad = (
|
||||
a.radius_m
|
||||
/ max(
|
||||
1.0,
|
||||
111320.0 * math.cos(math.radians(mid_lat)),
|
||||
)
|
||||
)
|
||||
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT
|
||||
f.id AS feature_id,
|
||||
f.cell_id,
|
||||
c.source_relative_path,
|
||||
f.source_record_index,
|
||||
f.object_class,
|
||||
f.native_scale,
|
||||
f.bbox_min_lon AS lon,
|
||||
f.bbox_min_lat AS lat,
|
||||
f.attributes_json
|
||||
FROM chart_feature f
|
||||
JOIN chart_cell c ON c.id=f.cell_id
|
||||
WHERE f.dataset_id=%s
|
||||
AND f.native_scale IN ({scale_ph})
|
||||
AND f.geometry_type='POINT'
|
||||
AND f.object_class='_texto'
|
||||
AND f.bbox_min_lon BETWEEN %s AND %s
|
||||
AND f.bbox_min_lat BETWEEN %s AND %s
|
||||
ORDER BY
|
||||
f.native_scale,
|
||||
f.cell_id,
|
||||
f.source_record_index
|
||||
""",
|
||||
(
|
||||
a.dataset_id,
|
||||
*scales,
|
||||
a.min_lon - lon_pad,
|
||||
a.max_lon + lon_pad,
|
||||
a.min_lat - lat_pad,
|
||||
a.max_lat + lat_pad,
|
||||
),
|
||||
)
|
||||
text_rows = list(cur.fetchall())
|
||||
|
||||
conn.rollback()
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
parsed_nav = []
|
||||
for row in nav_rows:
|
||||
attrs = json_dict(row.pop("attributes_json"))
|
||||
parsed_nav.append(
|
||||
{
|
||||
**row,
|
||||
"feature_id": int(row["feature_id"]),
|
||||
"cell_id": int(row["cell_id"]),
|
||||
"source_record_index": int(row["source_record_index"]),
|
||||
"native_scale": int(row["native_scale"]),
|
||||
"lon": float(row["lon"]),
|
||||
"lat": float(row["lat"]),
|
||||
"attributes": attrs,
|
||||
"relation20": relation20(attrs),
|
||||
"direct_names": direct_names(attrs),
|
||||
"relation_fields": relation_like_fields(attrs),
|
||||
}
|
||||
)
|
||||
|
||||
parsed_text = []
|
||||
relation_field_counter = Counter()
|
||||
|
||||
for row in text_rows:
|
||||
attrs = json_dict(row.pop("attributes_json"))
|
||||
text, prefix = texta(attrs)
|
||||
rel_fields = relation_like_fields(attrs)
|
||||
for key in rel_fields:
|
||||
relation_field_counter[
|
||||
(int(row["native_scale"]), str(key))
|
||||
] += 1
|
||||
|
||||
parsed_text.append(
|
||||
{
|
||||
**row,
|
||||
"feature_id": int(row["feature_id"]),
|
||||
"cell_id": int(row["cell_id"]),
|
||||
"source_record_index": int(row["source_record_index"]),
|
||||
"native_scale": int(row["native_scale"]),
|
||||
"lon": float(row["lon"]),
|
||||
"lat": float(row["lat"]),
|
||||
"text": text,
|
||||
"prefix": prefix,
|
||||
"attributes": attrs,
|
||||
"relation_fields": rel_fields,
|
||||
"relation_values": sorted(
|
||||
flatten_relation_values(rel_fields)
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
# relation20 仅在同 cell + 同 scale 内组成助航主组。
|
||||
grouped = defaultdict(list)
|
||||
standalone = []
|
||||
|
||||
for row in parsed_nav:
|
||||
rel = row["relation20"]
|
||||
if rel is None:
|
||||
standalone.append([row])
|
||||
else:
|
||||
grouped[
|
||||
(
|
||||
row["native_scale"],
|
||||
row["cell_id"],
|
||||
rel,
|
||||
)
|
||||
].append(row)
|
||||
|
||||
nav_groups = list(grouped.values()) + standalone
|
||||
|
||||
results = []
|
||||
per_scale = {}
|
||||
|
||||
for members in nav_groups:
|
||||
scale = members[0]["native_scale"]
|
||||
cell_id = members[0]["cell_id"]
|
||||
rel = members[0]["relation20"]
|
||||
lon = sum(m["lon"] for m in members) / len(members)
|
||||
lat = sum(m["lat"] for m in members) / len(members)
|
||||
|
||||
direct = []
|
||||
nav_relation_values = set()
|
||||
for m in members:
|
||||
for n in m["direct_names"]:
|
||||
direct.append(
|
||||
{
|
||||
"object_class": m["object_class"],
|
||||
"source_record_index": m["source_record_index"],
|
||||
**n,
|
||||
}
|
||||
)
|
||||
nav_relation_values |= flatten_relation_values(
|
||||
m["relation_fields"]
|
||||
)
|
||||
|
||||
candidates = []
|
||||
|
||||
# 同比例尺;显式关系优先,同 cell 次之,距离只作证据。
|
||||
for t in parsed_text:
|
||||
if t["native_scale"] != scale or not t["text"]:
|
||||
continue
|
||||
|
||||
distance = haversine_m(
|
||||
lon,
|
||||
lat,
|
||||
t["lon"],
|
||||
t["lat"],
|
||||
)
|
||||
|
||||
explicit_overlap = sorted(
|
||||
nav_relation_values.intersection(
|
||||
set(t["relation_values"])
|
||||
)
|
||||
)
|
||||
|
||||
if distance <= a.radius_m or explicit_overlap:
|
||||
candidates.append(
|
||||
{
|
||||
"feature_id": t["feature_id"],
|
||||
"cell_id": t["cell_id"],
|
||||
"source_relative_path": t["source_relative_path"],
|
||||
"source_record_index": t["source_record_index"],
|
||||
"native_scale": t["native_scale"],
|
||||
"lon": t["lon"],
|
||||
"lat": t["lat"],
|
||||
"text": t["text"],
|
||||
"prefix": t["prefix"],
|
||||
"same_cell": t["cell_id"] == cell_id,
|
||||
"distance_m": round(distance, 2),
|
||||
"explicit_relation_overlap": explicit_overlap,
|
||||
"text_relation_fields": t["relation_fields"],
|
||||
}
|
||||
)
|
||||
|
||||
candidates.sort(
|
||||
key=lambda c: (
|
||||
not bool(c["explicit_relation_overlap"]),
|
||||
not c["same_cell"],
|
||||
c["distance_m"],
|
||||
c["text"],
|
||||
)
|
||||
)
|
||||
|
||||
explicit = [
|
||||
c
|
||||
for c in candidates
|
||||
if c["explicit_relation_overlap"]
|
||||
]
|
||||
same = [c for c in candidates if c["same_cell"]]
|
||||
|
||||
nearest_same = (
|
||||
min(same, key=lambda c: c["distance_m"])
|
||||
if same
|
||||
else None
|
||||
)
|
||||
|
||||
result = {
|
||||
"native_scale": scale,
|
||||
"cell_id": cell_id,
|
||||
"source_relative_path": members[0]["source_relative_path"],
|
||||
"relation20": rel,
|
||||
"lon": lon,
|
||||
"lat": lat,
|
||||
"component_classes": [
|
||||
m["object_class"] for m in members
|
||||
],
|
||||
"component_source_record_indices": [
|
||||
m["source_record_index"] for m in members
|
||||
],
|
||||
"direct_names": direct,
|
||||
"nav_relation_fields": {
|
||||
str(m["source_record_index"]): m["relation_fields"]
|
||||
for m in members
|
||||
if m["relation_fields"]
|
||||
},
|
||||
"explicit_text_candidates": explicit[
|
||||
: a.candidate_limit
|
||||
],
|
||||
"nearest_same_cell_text": (
|
||||
nearest_same["text"] if nearest_same else None
|
||||
),
|
||||
"nearest_same_cell_distance_m": (
|
||||
nearest_same["distance_m"] if nearest_same else None
|
||||
),
|
||||
"same_cell_candidate_count": len(same),
|
||||
"all_candidate_count": len(candidates),
|
||||
"candidate_summary": candidates[
|
||||
: a.candidate_limit
|
||||
],
|
||||
}
|
||||
results.append(result)
|
||||
|
||||
results.sort(
|
||||
key=lambda r: (
|
||||
r["native_scale"],
|
||||
r["cell_id"],
|
||||
-1 if r["relation20"] is None else r["relation20"],
|
||||
r["lon"],
|
||||
r["lat"],
|
||||
)
|
||||
)
|
||||
|
||||
for scale in scales:
|
||||
subset = [r for r in results if r["native_scale"] == scale]
|
||||
per_scale[str(scale)] = {
|
||||
"nav_groups": len(subset),
|
||||
"groups_with_direct_names": sum(
|
||||
1 for r in subset if r["direct_names"]
|
||||
),
|
||||
"groups_with_explicit_text_candidates": sum(
|
||||
1
|
||||
for r in subset
|
||||
if r["explicit_text_candidates"]
|
||||
),
|
||||
"groups_with_same_cell_text_within_50m": sum(
|
||||
1
|
||||
for r in subset
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 50
|
||||
),
|
||||
"groups_with_same_cell_text_within_100m": sum(
|
||||
1
|
||||
for r in subset
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 100
|
||||
),
|
||||
"groups_with_same_cell_text_within_250m": sum(
|
||||
1
|
||||
for r in subset
|
||||
if r["nearest_same_cell_distance_m"] is not None
|
||||
and r["nearest_same_cell_distance_m"] <= 250
|
||||
),
|
||||
}
|
||||
|
||||
relation_rows = [
|
||||
{
|
||||
"native_scale": scale,
|
||||
"field_name": field,
|
||||
"occurrence_count": count,
|
||||
}
|
||||
for (scale, field), count in sorted(
|
||||
relation_field_counter.items()
|
||||
)
|
||||
]
|
||||
|
||||
report = {
|
||||
"schema": "navsea.cm95.nav-name-multiscale-audit/v2",
|
||||
"generated_at": datetime.now().isoformat(timespec="seconds"),
|
||||
"dataset_id": a.dataset_id,
|
||||
"scales": list(scales),
|
||||
"aoi_bbox": [
|
||||
a.min_lon,
|
||||
a.min_lat,
|
||||
a.max_lon,
|
||||
a.max_lat,
|
||||
],
|
||||
"search_radius_m": a.radius_m,
|
||||
"counts": {
|
||||
"nav_component_rows": len(parsed_nav),
|
||||
"nav_groups": len(results),
|
||||
"texto_rows": len(parsed_text),
|
||||
"texto_rows_with_text": sum(
|
||||
1 for t in parsed_text if t["text"]
|
||||
),
|
||||
},
|
||||
"per_scale": per_scale,
|
||||
"text_relation_field_counts": relation_rows,
|
||||
"groups": results,
|
||||
"decision": "READY_FOR_SAFE_NAME_RULE_REVIEW",
|
||||
}
|
||||
|
||||
json_path = (
|
||||
outdir / "cm95_nav_name_multiscale_audit_v2.json"
|
||||
)
|
||||
groups_csv = (
|
||||
outdir / "cm95_nav_name_multiscale_groups_v2.csv"
|
||||
)
|
||||
rel_csv = (
|
||||
outdir / "cm95_nav_text_relation_fields_v2.csv"
|
||||
)
|
||||
txt_path = (
|
||||
outdir / "cm95_nav_name_multiscale_audit_v2.txt"
|
||||
)
|
||||
|
||||
json_path.write_text(
|
||||
json.dumps(
|
||||
report,
|
||||
ensure_ascii=False,
|
||||
indent=2,
|
||||
default=str,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
write_csv(
|
||||
groups_csv,
|
||||
results,
|
||||
[
|
||||
"native_scale",
|
||||
"cell_id",
|
||||
"source_relative_path",
|
||||
"relation20",
|
||||
"lon",
|
||||
"lat",
|
||||
"component_classes",
|
||||
"component_source_record_indices",
|
||||
"direct_names",
|
||||
"nav_relation_fields",
|
||||
"explicit_text_candidates",
|
||||
"nearest_same_cell_text",
|
||||
"nearest_same_cell_distance_m",
|
||||
"same_cell_candidate_count",
|
||||
"all_candidate_count",
|
||||
"candidate_summary",
|
||||
],
|
||||
)
|
||||
|
||||
write_csv(
|
||||
rel_csv,
|
||||
relation_rows,
|
||||
[
|
||||
"native_scale",
|
||||
"field_name",
|
||||
"occurrence_count",
|
||||
],
|
||||
)
|
||||
|
||||
lines = [
|
||||
"CM95 / CM93 助航名称多尺度与显式关系审计 v2",
|
||||
"=" * 82,
|
||||
f"Dataset ID : {a.dataset_id}",
|
||||
f"Scales : {','.join(map(str, scales))}",
|
||||
f"Nav component rows : {len(parsed_nav)}",
|
||||
f"Nav groups : {len(results)}",
|
||||
f"_texto rows : {len(parsed_text)}",
|
||||
"",
|
||||
]
|
||||
|
||||
for scale in scales:
|
||||
s = per_scale[str(scale)]
|
||||
lines += [
|
||||
f"1:{scale}",
|
||||
f" groups : {s['nav_groups']}",
|
||||
f" direct names : {s['groups_with_direct_names']}",
|
||||
f" explicit text relation: {s['groups_with_explicit_text_candidates']}",
|
||||
f" same-cell <= 50m : {s['groups_with_same_cell_text_within_50m']}",
|
||||
f" same-cell <= 100m : {s['groups_with_same_cell_text_within_100m']}",
|
||||
f" same-cell <= 250m : {s['groups_with_same_cell_text_within_250m']}",
|
||||
"",
|
||||
]
|
||||
|
||||
lines += [
|
||||
"注意:",
|
||||
"- 显式关系候选优先于距离候选。",
|
||||
"- 最近文字仍不会被脚本自动写入 chart_label_text。",
|
||||
"- 若 20k/50k/200k 都无安全来源,则该数据源的助航名称保持为空,不从 NEWPEC 反灌。",
|
||||
]
|
||||
txt_path.write_text("\n".join(lines), encoding="utf-8")
|
||||
|
||||
print("\n".join(lines))
|
||||
print("")
|
||||
print(json_path)
|
||||
print(groups_csv)
|
||||
print(rel_csv)
|
||||
print(txt_path)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
112
tools/cm95_pbf_build_reports_audit_v1.py
Normal file
112
tools/cm95_pbf_build_reports_audit_v1.py
Normal file
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from collections import Counter
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def parse_args():
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("--report-root", default="build/pbf-reports")
|
||||
p.add_argument("--profile", choices=["delivery", "engineering"], default="delivery")
|
||||
p.add_argument("--output", default="cm95_pbf_build_reports_audit_v1.json")
|
||||
return p.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
a = parse_args()
|
||||
root = Path(a.report_root) / a.profile
|
||||
files = sorted(
|
||||
p for p in root.rglob("*.json")
|
||||
if not p.name.endswith(".trace.json")
|
||||
)
|
||||
|
||||
layer_counts = Counter()
|
||||
unmapped = Counter()
|
||||
hard_gate = []
|
||||
total_input = 0
|
||||
total_output = 0
|
||||
relation_groups = 0
|
||||
standalone_lights = 0
|
||||
named_from_direct_source = 0
|
||||
name_conflict_groups = 0
|
||||
quantization_fallbacks = 0
|
||||
quantization_omissions = 0
|
||||
quantization_omission_layers = Counter()
|
||||
encoder_dropped_features = []
|
||||
planned_output = 0
|
||||
|
||||
for p in files:
|
||||
obj = json.loads(p.read_text(encoding="utf-8"))
|
||||
total_input += int(obj.get("input_feature_count") or 0)
|
||||
total_output += int(obj.get("output_feature_count") or 0)
|
||||
planned_output += int(obj.get("planned_output_feature_count") or obj.get("output_feature_count") or 0)
|
||||
layer_counts.update(obj.get("output_layer_counts") or {})
|
||||
unmapped.update(obj.get("unmapped_class_counts") or {})
|
||||
nav = obj.get("navigation_composites") or {}
|
||||
relation_groups += int(nav.get("groups") or 0)
|
||||
standalone_lights += int(nav.get("standalone_lights") or 0)
|
||||
named_from_direct_source += int(nav.get("named_from_direct_source") or 0)
|
||||
name_conflict_groups += int(nav.get("name_conflict_groups") or 0)
|
||||
quantization_fallbacks += len(obj.get("quantization_fallbacks") or [])
|
||||
omissions = obj.get("quantization_omissions") or []
|
||||
quantization_omissions += len(omissions)
|
||||
for item in omissions:
|
||||
if isinstance(item, dict):
|
||||
quantization_omission_layers[str(item.get("layer") or "UNKNOWN")] += 1
|
||||
for item in obj.get("encoder_dropped_features") or []:
|
||||
encoder_dropped_features.append({"file": str(p), **item})
|
||||
for item in obj.get("hard_gate_unmapped") or []:
|
||||
hard_gate.append({"file": str(p), **item})
|
||||
|
||||
result = {
|
||||
"schema": "navsea.cm95.build-report-audit/v1",
|
||||
"profile": a.profile,
|
||||
"report_file_count": len(files),
|
||||
"input_rows_considered": total_input,
|
||||
"planned_output_features": planned_output,
|
||||
"output_features": total_output,
|
||||
"output_layer_counts": dict(layer_counts),
|
||||
"unmapped_class_counts": dict(unmapped),
|
||||
"navigation_relation_groups": relation_groups,
|
||||
"standalone_lights": standalone_lights,
|
||||
"nav_named_from_direct_source": named_from_direct_source,
|
||||
"nav_name_conflict_groups": name_conflict_groups,
|
||||
"quantization_fallbacks": quantization_fallbacks,
|
||||
"quantization_omissions": quantization_omissions,
|
||||
"quantization_omission_layers": dict(sorted(quantization_omission_layers.items())),
|
||||
"encoder_dropped_features": encoder_dropped_features,
|
||||
"hard_gate_unmapped": hard_gate,
|
||||
"failure_count": len(hard_gate) + name_conflict_groups + len(encoder_dropped_features) + (1 if planned_output != total_output else 0),
|
||||
"overall": (
|
||||
"PASS"
|
||||
if not hard_gate and name_conflict_groups == 0 and not encoder_dropped_features and planned_output == total_output
|
||||
else "FAIL"
|
||||
),
|
||||
}
|
||||
|
||||
Path(a.output).write_text(
|
||||
json.dumps(result, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
print(f"Reports : {len(files)}")
|
||||
print(f"Input rows : {total_input}")
|
||||
print(f"Planned output : {planned_output}")
|
||||
print(f"Output features : {total_output}")
|
||||
print(f"Navigation composites : {relation_groups}")
|
||||
print(f"Standalone LIGHTS : {standalone_lights}")
|
||||
print(f"Direct nav names : {named_from_direct_source}")
|
||||
print(f"Nav name conflicts : {name_conflict_groups}")
|
||||
print(f"Hard-gate unmapped : {len(hard_gate)}")
|
||||
print(f"Quantization fallback : {quantization_fallbacks}")
|
||||
print(f"Quantization omissions : {quantization_omissions}")
|
||||
print(f"Encoder dropped : {len(encoder_dropped_features)}")
|
||||
print(f"OVERALL : {result['overall']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user