道路网络警局等时圈生成问题:修改时间参数结果无变化求助
问题原因与解决方案
核心问题
你的代码存在两个关键错误:
- 定义了计算时间成本的
distance_queryCTE,但完全没有在pgr_drivingDistance调用中使用它,导致实际传入的cost是道路表的默认成本(大概率是道路长度,单位米)。 - 调用
pgr_drivingDistance时传入的终止参数(120、300)是时间秒数,但cost字段却是长度单位,两者不匹配。当120米已经覆盖所有可达道路时,改成300米的结果自然不会变化。
修正后的代码
根据40km/h的速度,重新计算每段道路的行驶时间作为cost参数,再调用pgr_drivingDistance:
SELECT ways.the_geom FROM ( SELECT * FROM pgr_drivingDistance( 'SELECT gid as id, source, target, -- 计算单段道路的行驶时间(秒):长度(米)转公里 ÷ 速度(km/h) × 3600转秒 (length / 1000) / 40 * 3600 AS cost FROM ways', 2338, -- 警局对应的起点节点ID 120 -- 2分钟=120秒,可替换为300/600/900对应5/10/15分钟 ) ) AS route LEFT JOIN ways ON ways.gid = route.edge
额外注意事项
- 确认
ways表的length字段单位是米,如果是公里需调整计算逻辑(去掉/1000)。 - 若道路支持双向通行,需添加
reverse_cost参数保证反向路径被计算:'SELECT gid as id, source, target, (length / 1000) / 40 * 3600 AS cost, (length / 1000) / 40 * 3600 AS reverse_cost FROM ways' - 验证起点节点ID(2338)确实是警局位置对应的网络节点,而非道路ID。
内容的提问来源于stack exchange,提问作者Dardan
相关产品推荐
相关产品推荐

