You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用osm2pgsql导入OSM数据后,边界框查询缺失限行规则

解决方案

1. 核心问题:OSM限行规则的存储方式

OSM中绝大多数限行规则(如禁止左转、禁止直行、禁止驶入等)并非直接附着在道路way节点上,而是以**关系(relation)**的形式存储,关系类型标记为restriction。你当前的配置仅导入了节点和道路上的restriction标签,完全遗漏了关系型限行规则,这是结果缺失的主要原因。

2. 调整导入配置

传统样式文件(default.style)方案

在default.style中添加关系类型的限行规则映射:

relation   restriction                    text         relation
relation   restriction:conditional        text         relation

你的导入命令已包含-G参数,会生成存储关系数据的planet_osm_rels表,无需修改导入命令,但必须重新导入数据才能生效。

Flex模式Lua脚本方案

若使用你修改的兼容模式Lua脚本,需补充关系处理逻辑:

  • 在process_relation函数中,判断tags.type == 'restriction'
  • 将restriction、restriction:conditional等标签以及关系中的from/to/via成员信息存储到专门的关系表,或关联到道路表
  • 确保脚本正确解析关系成员的类型和ID,建立道路与限行规则的关联

3. 修改查询逻辑

由于限行规则主要存储在关系表中,查询时需要关联planet_osm_rels、planet_osm_members和planet_osm_line表:

SELECT DISTINCT r.tags->'restriction', r.tags->'restriction:conditional'
FROM planet_osm_rels r
JOIN planet_osm_members m ON r.osm_id = m.rel_id
JOIN planet_osm_line l ON m.member_id = l.osm_id
WHERE r.tags->'type' = 'restriction'
AND l.highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'unclassified',
                  'residential', 'motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link')
AND ST_Intersects(l.way, ST_Transform(ST_MakeEnvelope(10.91492, 47.41136, 13.41705, 49.07207, 4326), 3857));

4. 验证步骤

  • 重新导入OSM数据,确保新配置生效
  • 检查planet_osm_rels表中是否存在type='restriction'的记录
  • 对比外部工具的结果,确认限行规则类型已完整覆盖

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:14:59