首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从osm.pbf文件中OpenStreetMap中获取街道名称

如何从osm.pbf文件中OpenStreetMap中获取街道名称
EN

Stack Overflow用户
提问于 2022-06-02 02:59:44
回答 1查看 257关注 0票数 1

您可以从这里下载任何数据集https://download.geofabrik.de/australia-oceania.html

这是我的密码

代码语言:javascript
复制
import osmium as osm
import pandas as pd

class OSMHandler(osm.SimpleHandler):
    def __init__(self):
        osm.SimpleHandler.__init__(self)
        self.osm_data = []

    def tag_inventory(self, elem, elem_type):
        for tag in elem.tags:
            self.osm_data.append([elem_type, 
                                   elem.id, 
                                   elem.version,
                                   elem.visible,
                                   pd.Timestamp(elem.timestamp),
                                   elem.uid,
                                   elem.user,
                                   elem.changeset,
                                   len(elem.tags),
                                   tag.k, 
                                   tag.v])

    def node(self, n):
        self.tag_inventory(n, "node")

    def way(self, w):
        self.tag_inventory(w, "way")

    def relation(self, r):
        self.tag_inventory(r, "relation")

osmhandler = OSMHandler()
# scan the input file and fills the handler list accordingly
osmhandler.apply_file("/DATA/user/nabih/pitcairn-islands-latest.osm.pbf")

# transform the list into a pandas DataFrame
data_colnames = ['type', 'id', 'version', 'visible', 'ts', 'uid',
                 'user', 'chgset', 'ntags', 'tagkey', 'tagvalue']
df_osm = pd.DataFrame(osmhandler.osm_data, columns=data_colnames)

这是df_osm

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-02 07:14:01

街道名称是name元素的highway键的值(请参阅https://wiki.openstreetmap.org/wiki/Map_features#Highway中所有可能的公路类型,您可能希望在查询中进一步过滤它)。然后,您可以自联接所有highway行及其在id上的name行。

代码语言:javascript
复制
df_osm.loc[df_osm.tagkey=='highway', ['id', 'tagvalue']].merge(
    df_osm.loc[df_osm.tagkey=='name', ['id', 'tagvalue']],
    on='id', suffixes=['_kind', '_name'])

pitcairn-islands-latest.osm.pbf结果

代码语言:javascript
复制
           id tagvalue_kind            tagvalue_name
0  1034153953   residential                Main Road
1  1034161481   residential  Hill of Difficulty Road

如果还想包含国家名称,可以用df_osm.tagkey=='name'替换为df_osm.tagkey.str.startswith('name')。有关详细信息和其他可能的名称,请参见https://wiki.openstreetmap.org/wiki/Key:name

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72470174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档