# 空间感知知识图谱设计 ## 设计结论 城市知识图谱不能只存经纬度。new2 的空间能力采用组合方案: ```text H3 网格索引 + PostGIS 半径过滤 + 路径规划精排 + KG 语义过滤 ``` 各层职责: | 层 | 方法 | 作用 | |---|---|---| | 空间组织 | H3 | 把城市切成多分辨率网格,快速召回附近候选 | | 空间过滤 | PostGIS | 用 `ST_DWithin` 做圆形半径过滤,用 `ST_Distance` 算直线距离 | | 可达距离 | 高德路径规划 / pgRouting | 计算真实步行、驾车、骑行距离与耗时 | | 语义推荐 | KG | 结合 Concept、Event、Relation、Evidence 解释为什么推荐 | ## 查询流程 ```text 用户经纬度 + 查询半径 + 语义意图 -> 计算用户 H3 cell -> 取本 cell + 邻居 cells -> 查询候选 Place -> PostGIS 过滤圆内 POI -> 对 topK 调用路径规划 -> 图谱语义过滤和排序 -> 生成可解释回答 ``` ## 图谱关系 ```text (:Place)-[:IN_CELL {resolution}]->(:GeoCell) (:GeoCell)-[:PARENT_CELL]->(:GeoCell) (:GeoCell)-[:ADJACENT_TO]->(:GeoCell) (:Place)-[:LOCATED_IN]->(:Area) (:Place)-[:HAS_CONCEPT]->(:Concept) (:Place)-[:HAS_EVENT]->(:Event) (:Place)-[:SUPPORTED_BY]->(:Evidence) ``` ## 为什么不全量生成 NEAR 如果有 50,000 个 POI,两两关系约为: ```text 50,000 * 49,999 / 2 = 1,249,975,000 ``` 全量 `NEAR` 会导致关系爆炸,而且真实路径距离还会随道路、入口、施工、交通方式变化。正确方式是: ```text 常用推荐场景:缓存高价值 route_metrics 实时查询场景:H3/PostGIS 先缩小候选,再对 topK 算路径 ``` ## 旧项目实测结果 旧项目 FalkorDB 中有效 Place/POI 为 24,868 个。测试点为 `106.7135, 26.5744`,半径 1km。 ```text 全量扫描中位耗时:7.072 ms H3 召回 + 距离过滤中位耗时:0.273 ms 相似度排序中位耗时:0.656 ms H3 覆盖率:100% 加速比:约 25.9 倍 ``` 详见: - `docs/reports/spatial_retrieval_benchmark_result.md` - `docs/reports/spatial_kg_recommendation_evidence.png`