ワンクリックで
shanxi-resilience-pgrouting
陕交控项目专用 pgRouting 路网优化工具 - 基于 PostgreSQL + PostGIS + pgRouting 构建高速路网拓扑,支持最短路径、Top N 路径、排除节点查询等高性能路径分析功能
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
陕交控项目专用 pgRouting 路网优化工具 - 基于 PostgreSQL + PostGIS + pgRouting 构建高速路网拓扑,支持最短路径、Top N 路径、排除节点查询等高性能路径分析功能
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
陕交控项目专用路网路径查询工具 - 提供相邻节点查询、最短路径、Top N 替代路径、排除节点查询等功能,支持递归 CTE 和 pgRouting 两种实现方式
陕交控项目专用数据导入工具 - 处理收费单元路径、收费站信息、收费路段等基础数据的Excel/CSV多版本导入,严格遵循数据字典,自动生成建表语句和导入脚本
陕交控项目专用文档更新工具 - 自动更新会话记录、业务逻辑记录、表口径总表等项目文档,保持文档与代码同步
陕交控项目专用 Git 操作管理 - 规范化的提交、分支管理、GitHub 协作流程,包含常用 Git 操作命令模板和最佳实践
陕交控项目批量处理并行化工具 - 将单进程 ETL/统计任务改造为多进程并行模式,含 CSV 分区读取、fork-safe DB、ON CONFLICT 累加、mini-batch 即时刷盘等完整模式
陕交控项目专用SQL生成工具 - 按照项目规范生成DDL/DML/SQL检查语句,支持数据仓库分层(DIM/DWD/DWS/ADS),自动添加中文注释和版本字段
| name | shanxi-resilience-pgrouting |
| description | 陕交控项目专用 pgRouting 路网优化工具 - 基于 PostgreSQL + PostGIS + pgRouting 构建高速路网拓扑,支持最短路径、Top N 路径、排除节点查询等高性能路径分析功能 |
执行本 Skill 前,必须先阅读 docs/数据表说明.md,重点关注以下表的字段定义和查询示例:
dwd_tom_noderelation — 路网拓扑结构明细表(源数据)dwd_tom_network_edges — pgRouting 边表dwd_tom_network_vertices — pgRouting 节点映射表dim_tom_noderelation_version — 路网版本配置表禁止凭记忆假设字段名(如 enRoadNodeId vs enroadnodeid),必须以 docs/数据表说明.md 中的数据字典为准。
本 Skill 用于高速路网拓扑结构的 pgRouting 性能优化,支持收费单元的上一个/下一个单元查询,以及两收费单元间的路径查询。
dwd_tom_noderelation 转换为 pgRouting 格式dwd_tom_network_verticesdwd_tom_network_edges| 函数名 | 功能 | 性能 | 算法 |
|---|---|---|---|
find_shortest_path_pgr | 单条最短路径 | ~22ms | Dijkstra |
find_top_n_paths_pgr | Top N 路径 | ~81ms | 贪婪算法 |
find_shortest_path_excluding | 排除节点查询 | - | Dijkstra |
get_next_sections | 获取下一个节点 | - | SQL |
get_prev_sections | 获取上一个节点 | - | SQL |
原理: 每次找最短路径,然后禁用该路径经过的节点,重复 N 次
SQL 排除条件:
NOT (source = ANY(v_exclude_nodes) OR target = ANY(v_exclude_nodes))
ALL,是 ANYdwd_tom_network_vertices (
id BIGSERIAL PRIMARY KEY, -- pgRouting 节点ID
original_node_id VARCHAR(32), -- 原始节点ID
version_yyyyMM VARCHAR(6), -- 版本年月
node_type INT, -- 节点类型
node_name VARCHAR(100) -- 节点名称
)
dwd_tom_network_edges (
id BIGSERIAL PRIMARY KEY, -- pgRouting 边ID
source BIGINT, -- 起点节点
target BIGINT, -- 终点节点
cost FLOAT, -- 正向代价(里程)
reverse_cost FLOAT, -- 反向代价(1e9单向路网)
version_yyyyMM VARCHAR(6), -- 版本年月
original_enRoadNodeId VARCHAR(32), -- 原始入口节点
original_exRoadNodeId VARCHAR(32), -- 原始出口节点
miles INT -- 里程(米)
)
uv run python scripts/build_tom_network_pgr.py
SELECT * FROM find_shortest_path_pgr(
'G007061003000210', -- 起点
'G004061002000910', -- 终点
'202512' -- 版本
);
SELECT * FROM find_top_n_paths_pgr(
'G007061003000210',
'G004061002000910',
'202512',
5
);
SELECT * FROM find_shortest_path_excluding(
'G007061003000210',
'G004061002000910',
'202512',
ARRAY['G007061003000420'] -- 排除的节点
);
-- 获取下一个节点
SELECT * FROM get_next_sections('G007061003000210', '202512');
-- 获取上一个节点
SELECT * FROM get_prev_sections('G007061003000210', '202512');
| 文件路径 | 说明 |
|---|---|
sql/ddl/dwd/create_dwd_tom_network_pgr.sql | pgRouting 表结构 |
sql/pgrouting/build_tom_network_topology.sql | 拓扑构建函数 |
sql/pgrouting/query_functions_pgr.sql | 最短路径函数 |
sql/pgrouting/query_top_n_paths_pgr.sql | Top N 路径函数 |
sql/pgrouting/query_functions_excluding.sql | 排除节点函数 |
sql/pgrouting/helper_functions.sql | 辅助函数 |
scripts/build_tom_network_pgr.py | 拓扑构建脚本 |
| 查询类型 | 递归CTE | pgRouting | 提升 |
|---|---|---|---|
| 30节点最短路径 | ~30s | ~22ms | 1300x |
| Top 5 路径 | >5min | ~81ms | 3700x |
A: 检查排除条件是否使用了 ALL,应该使用 ANY:
-- 错误:两边端点同时被禁用
WHERE source = ALL(v_exclude_nodes) AND target = ALL(v_exclude_nodes)
-- 正确:任意一端被禁用
WHERE NOT (source = ANY(v_exclude_nodes) OR target = ANY(v_exclude_nodes))
A: pgRouting 3.3.1 不支持 KSP,使用贪婪算法作为替代方案。
A: 路网中存在环路,贪婪算法可能找到绕路很长的替代路径,这是正常现象。
skill: shanxi-resilience-pgrouting
G007061003000210,终点 G004061002000910