如何从OSM数据中切割城市子集(任何关系)

一旦我需要从原始OSM数据中获取干净的城市子集(因为它是如此方便,紧凑且美观)。 令我惊讶的是,我没有找到现成的食谱,这就是为什么我花了些力气才能完成此任务的原因。

有鉴于此,我有责任分享自己的经验。

基希讷乌OSM

假设我想获取基希讷乌的子集(为什么?...那里很温暖,我的房子在那儿,我的母亲在那儿)

当然,我们对Planet.osm并不感兴趣,但是有geofabrik ,但是那里的行星被切成相当大的shmatka- http://download.geofabrik.de/europe/moldova.html

因此,城市边界在原始数据中

很容易从关系中得到一个垃圾填埋场,我们可以手工完成,也可以使用任何合适的实用程序来完成,例如这个

III ...现在渗透作用开始发挥作用

我们拥有摩尔多瓦所有地区的渗透和基希讷乌的范围,这足以从原始XML(OSM)文件获取该城市的站点:

osmosis --read-xml file="moldova.osm" --bounding-polygon file="kishinev.poly" --write-xml file="kishinev.osm" 

同样,您可以从PBF(协议缓冲区二进制格式)文件中挖掘数据:

 osmosis --read-pbf file="moldova.osm.pbf" --bounding-polygon file="kishinev.poly" --write-xml file="kishinev.osm" 

您可以在这里阅读更多有关渗透的信息

好吧,需要立即在JOSM中打开完成的子集或将其导入到个人项目中!

基希讷乌JOSM

UPD:


正如zverik指出的那样,使用* osmium-tool *(在扩展坞中 ),上述所有操作都将更加容易
1.下载国家数据集
2.从中提取城市边界
 osmium getid -r -t moldova-latest.osm.pbf r1691801 -o kishinev-boundary.osm 

3.从数据集中提取城市
 osmium extract -p kishinev-boundary-with-tags.osm moldova-latest.osm.pbf -s simple -o kishinev.osm 


注意flak -s简单
这是一种提取策略,其中只有三种:
1. -s 简单 -沿边界修整道路
2. -s complete_ways-不修剪边界道路( 默认
3. -s smart-提取边境道路依存关系

输出文件的格式由命令中的扩展名决定。

OSMIUM是一种非常强大,方便且有用的工具, 易于使用。

Source: https://habr.com/ru/post/zh-CN463251/


All Articles