pgrouting路由方法无法返回最短路径问题排查求助
pgrouting返回异常最短路径排查步骤
- 校验成本字段赋值逻辑
你提到已将cost与reverse_cost赋值为距离,先执行抽查命令确认字段值量级一致:
SELECT id, km, cost, reverse_cost FROM hh_2po_4pgr LIMIT 10;
osm2po默认生成的km为公里单位,若你误赋值为米级数值或是未处理单向道路的反向成本(单向道路的reverse_cost需设为无穷大而非实际距离),会直接导致成本计算逻辑错乱,出现舍近求远的问题。
- 校验节点连通性
pgr_analyzeGraph仅验证全局拓扑合法性,不代表指定两个节点属于同一连通子图,执行如下查询确认连通性:
SELECT * FROM pgr_connectedComponents( 'SELECT id, source, target, cost FROM hh_2po_4pgr' ) WHERE node IN (232516, 213104);
若两个节点返回的component值不同,说明二者无直接连通路径,pgrouting会搜索全局连通路径,才会返回超长的异常结果。该问题通常是osm2po导入时的过滤规则导致,比如默认仅保留机动车道,而你选的起止点之间只有非机动车道连通。
校验路由函数参数
你调用pgr_astar时第4个参数为FALSE,代表启用单向通行规则。可先将该参数改为TRUE测试双向通行的结果,若结果恢复正常,说明你之前的reverse_cost字段赋值不符合单向道路的规则。校验坐标投影精度
你的路网使用EPSG:4326经纬度坐标系,若成本是直接基于经纬度计算的欧氏距离,会存在距离计算误差。建议将路网投影到下萨克森本地的平面坐标系(如EPSG:25832)后重新计算距离成本,避免距离失真。
内容的提问来源于stack exchange,提问作者Sören Mehlhop
相关产品推荐
相关产品推荐

