加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

openstreetmap – 如何从OSM XML行星文件中提取层次化的城市/州/

发布时间:2020-12-16 07:52:18 所属栏目:百科 来源:网络整理
导读:我想编写一个解析OpenStreetMap(OSM) XML文件的脚本,并以层次的方式构建城镇数据库.我希望生成的数据集具有在美国可能是这样的层次结构: USA - California - San Francisco County - San Francisco 也许在英国是这样的: United Kingdom - England - Middle
我想编写一个解析OpenStreetMap(OSM) XML文件的脚本,并以层次的方式构建城镇数据库.我希望生成的数据集具有在美国可能是这样的层次结构:
USA -> California -> San Francisco County -> San Francisco

也许在英国是这样的:

United Kingdom -> England -> Middlesex -> London -> Soho

输出将是一个JSON文档,用于描述OSM文件中所有城市的层次结构,其结构如上所述.

我使用Python和“imposm”解析器库,我可以加载和解析文件没有问题;我的问题是对OSM数据的结构缺乏了解:我不知道如何知道OSM数据中的节点之间的父/子关系.例如,如果我找到“Soho”的节点,我该怎么把它重新连接到“威斯敏斯特城”,“大伦敦”,“米德尔塞克斯”和“英格兰”的节点?

我知道一些节点有一个“is_in”标签可能会给出一些这样的信息,但是

A)这是不一致的
B)似乎是一个自由格式的文本字段,而不是指向OSM节点的链接(即is_in:“威斯敏斯特城市”不给我任何链接到威斯敏斯特节点).

如果您有任何建议如何分层地链接这些节点,请让我知道.

基本上OSM中的一切都是“自由”的.有标签的公约,但不能保证人们会坚持.所以你需要做一些数据清理和后处理来获得一切.

对于父子关系,除OSM之外没有硬连线关系:

>一个或多个方式使用节点
>节点是一个或多个关系的成员
一种方式是一个或多个关系的成员
关系是一个或多个关系的成员

OSM关系可用于定义层次关系,但是这些关系的定义非常通用.语义基于约定(通常在OSM Wiki页面上描述).

如果你正在寻找一个“is_in”的关系,我想你将需要使用几何方法建立它.不幸的是,您不能真正依靠OSM标记.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读