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

如何从OpenStreetMap的osm.pbf文件中提取街道名称

提取OSM街道名称的实现方法

OSM中街道属于way类型要素,核心判定依据是要素携带highway标签,街道名称存储在同要素的name(或对应语言的name:xx)标签下,按以下步骤处理即可准确提取:

步骤1:锁定道路类要素

首先排除node(点位)、relation(关系)类要素,同时排除没有highway标签的非道路way(比如建筑边界、用地边界、水系岸线等):

# 提取所有带highway标签的道路way的唯一ID
road_way_ids = df_osm[
    (df_osm["type"] == "way") &
    (df_osm["tagkey"] == "highway")
]["id"].unique()

# 筛选出所有道路way关联的全部标签
road_tag_records = df_osm[df_osm["id"].isin(road_way_ids)]

步骤2:宽表转换提取属性

把长表格式的标签记录透视为每行对应一个道路要素的宽表,方便提取属性:

# 标签行转列,每个道路way为单独一行
road_attrs = road_tag_records.pivot(
    index=["id"],
    columns="tagkey",
    values="tagvalue"
).reset_index()

步骤3:过滤得到有名称的街道

从宽表中提取有名称的道路,可按需按道路等级筛选需要的街道类型:

# 过滤掉无名称的道路,提取核心字段
named_streets = road_attrs.dropna(subset=["name"])[
    ["id", "highway", "name"]
].drop_duplicates(subset=["id"])

精度优化注意事项

  • 道路类型过滤:常规城市公开街道一般对应highway字段值为residential(居住区道路)、primary/secondary/tertiary(各级城市干道)、pedestrian(步行街)、living_street(生活街道),可按需排除不需要的类型:比如motorway/motorway_link(高速及匝道)、service(内部服务通道)、cycleway(专用自行车道)、footway(步行小径)、steps(台阶)、path(郊野野径)。
  • 多语言名称适配:如果需要特定语言的街道名,可直接提取对应标签,比如中文名称取name:zh字段、英文名称取name:en字段,不必强制使用默认name字段。
  • 避坑提醒:不要直接筛选tagkey == 'name'的记录,建筑、POI点位、公交站、站点等大量非街道要素都携带name标签,必须先通过「way类型+存在highway标签」的规则锁定道路实体,再提取名称,避免混入无关数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:51:56