6.1 KiB
NavSea Data Classification & Validation Pipeline
Version: v1.0
Goal:
从当前数据库中的 PBF 数据自动:
- 解析 at 字段
- 构建语义属性表
- 构建对象目录
- 自动推导对象类型
- 验证分类正确性
- 统计 tile 密度
- 输出 NavSea 分类报告
所有中间结果写入 MySQL 表。
数据库在 192.168.200.184. root/2chi9ks2 可以建立数据库,也可以使用python代码,必要的时候可以下载所需的包。
TASK 1
Parse AT Attributes
Goal: 解析 properties 表中 k='at' 的 JSON 字符串。
Create Table:
CREATE TABLE IF NOT EXISTS at_attributes (
feature_id BIGINT,
k VARCHAR(100),
v TEXT
);
Logic:
- 查询
SELECT feature_id, v
FROM properties
WHERE k='at';
- v 是 JSON array
Example:
[["レイヤ","航路標識点"],["形状分類","シーバース灯"],["灯色","W (白)"]]
- 解析后写入:
feature_id | k | v
--------------------
2682088 | レイヤ | 航路標識点
2682088 | 形状分類 | シーバース灯
2682088 | 灯色 | W (白)
Implementation:
Python Libraries:
pymysql
json
Output:
table: at_attributes
TASK 2
Build Feature Semantic Table
Goal:
将 feature + vt_layer + at 属性合并。
Create Table:
CREATE TABLE feature_semantic AS
SELECT
f.id AS feature_id,
f.vt_layer,
f.geom_type,
MAX(CASE WHEN a.k='分類' THEN a.v END) AS class_name,
MAX(CASE WHEN a.k='形状分類' THEN a.v END) AS shape_name,
MAX(CASE WHEN a.k='レイヤ' THEN a.v END) AS layer_name
FROM features f
LEFT JOIN at_attributes a
ON f.id = a.feature_id
GROUP BY f.id;
Output table:
feature_semantic
Columns:
feature_id
vt_layer
geom_type
class_name
shape_name
layer_name
TASK 3
Generate Object Catalog
Goal:
统计所有语义对象。
Create Table:
CREATE TABLE object_catalog AS
SELECT
layer_name,
class_name,
shape_name,
vt_layer,
geom_type,
COUNT(*) AS feature_count
FROM feature_semantic
GROUP BY
layer_name,
class_name,
shape_name,
vt_layer,
geom_type;
Output:
object_catalog
Purpose:
得到完整对象目录。
Example:
魚礁 | p施設 | Point | 24683
灯台 | p航路標識群 | Point | 18000
等深線 | L等深線 | Line | 440000
TASK 4
Geometry Consistency Check
Goal:
检查对象是否使用一致 geometry。
Create Table:
CREATE TABLE geometry_consistency AS
SELECT
class_name,
geom_type,
COUNT(*) AS feature_count
FROM feature_semantic
GROUP BY class_name, geom_type;
Output:
geometry_consistency
Purpose:
发现异常对象。
Example anomaly:
灯台 | Polygon
TASK 5
Candidate Object Type Detection
Goal:
自动推导 object_type。
规则优先级:
1 class_name 2 shape_name 3 vt_layer
Create Table:
CREATE TABLE object_type_candidates AS
SELECT
feature_id,
COALESCE(class_name, shape_name, vt_layer) AS object_type,
geom_type
FROM feature_semantic;
Output:
object_type_candidates
TASK 6
Object Type Statistics
Goal:
统计对象数量。
Create Table:
CREATE TABLE object_type_stats AS
SELECT
object_type,
geom_type,
COUNT(*) AS feature_count
FROM object_type_candidates
GROUP BY object_type, geom_type;
Output:
object_type_stats
Purpose:
识别主要对象。
TASK 7
Style Cross Reference
Goal:
分析 style.json。
Extract:
layer_id
source-layer
icon-image
line-color
fill-color
Create Table:
CREATE TABLE style_layers (
layer_id VARCHAR(200),
source_layer VARCHAR(200),
icon VARCHAR(200),
line_color VARCHAR(200),
fill_color VARCHAR(200)
);
Join:
CREATE TABLE style_mapping AS
SELECT
s.layer_id,
s.icon,
o.object_type,
o.geom_type
FROM style_layers s
JOIN object_type_candidates o
ON s.source_layer = o.object_type;
Output:
style_mapping
Purpose:
确认对象 → 图标关系。
TASK 8
Tile Density Analysis
Goal:
统计 tile feature 密度。
Create Table:
CREATE TABLE tile_density AS
SELECT
z,
x,
y,
COUNT(*) AS feature_count
FROM features
GROUP BY z,x,y;
Output:
tile_density
TASK 9
Tile Density Top 100
Create Table:
CREATE TABLE tile_density_top100 AS
SELECT *
FROM tile_density
ORDER BY feature_count DESC
LIMIT 100;
Purpose:
识别高密度 tile。
TASK 10
Spatial Sanity Checks
Goal:
发现明显错误。
Examples:
Navigation lights not point:
CREATE TABLE anomaly_navigation_geom AS
SELECT *
FROM feature_semantic
WHERE class_name='灯台'
AND geom_type!='Point';
Reef not point/polygon:
CREATE TABLE anomaly_reef_geom AS
SELECT *
FROM feature_semantic
WHERE class_name='魚礁'
AND geom_type NOT IN ('Point','Polygon');
TASK 11
NavSea Classification Report
Generate markdown:
navsea_classification_report.md
Content:
Dataset Summary
Total features:
SELECT COUNT(*) FROM features;
Total object types:
SELECT COUNT(DISTINCT object_type)
FROM object_type_candidates;
Top Object Types
SELECT *
FROM object_type_stats
ORDER BY feature_count DESC
LIMIT 50;
Geometry Consistency
geometry_consistency
Style Mapping
style_mapping
Tile Density
tile_density_top100
Final Deliverables
Database Tables:
at_attributes
feature_semantic
object_catalog
geometry_consistency
object_type_candidates
object_type_stats
style_layers
style_mapping
tile_density
tile_density_top100
anomaly_navigation_geom
anomaly_reef_geom
Final Document:
navsea_classification_report.md
Execution
Single command:
python navsea_audit.py
Pipeline:
parse_at
→ semantic_table
→ object_catalog
→ classification
→ validation
→ report
Success Criteria
The system must allow answering:
1 What objects exist 2 How many features each object has 3 What geometry they use 4 How they are styled 5 Whether classification is consistent 6 Whether tile density is reasonable