在第一部分中,我们从大型数据集中切出了一个有条件的城市,只保留了其中有地址的数据。这些地址被解释为属于该城市。那些。确切知道他们在哪个国家,哪个地区等等。但是,如果我们需要的地址不是一个地区,而是整个地区甚至几个国家,该怎么办?你怎么知道他来自哪里?
尽管在OpenStreetMap中可以在每个房屋的哪个国家,地区以及更远的层次上指明它,但是在俄罗斯使用的是一种缩写方法-即 只有街道和门牌号码。所有关于地址构造的猴子工作都将由计算机为我们完成。当然,如果所有必要的数据都在他手中,他将更快,更正确地进行此操作。
训练
我将在Saransk或更确切地说在其市区中进行试验-通过用矩形将其切出,并覆盖以下内容:下边框(45 54),上边框(45.5 54.3)。我将转储中的剪切保存为pbf格式,因为可以使用以下工具:
osmconvert -b=45,54,45.5,54.3 RU-local.o5m -o=SaranskGO.pbf
现在,整个想法是将标签添加到所有建筑物中,并为其添加地址。这将通过将房屋的几何形状输入到沉降轮廓中来计算。为此,我们需要用于渗透的OsmAreaTag插件(作者对此插件进行了更详细的描述)。作者在此处发布了插件的编译版本。渗透本身可以从github上获取。这是一个Java应用程序,因此很清楚,如果没有它,它将无法正常工作。
安装插件
为了使渗透能看到osmareatag插件,它必须位于当前目录的plugins文件夹中,这有点不方便。因此,可以将其放置在用户的主目录中,对于Windows,它将c:\Users\<>\.openstreetmap\osmosis\plugins
位于c:\Users\<>\AppData\Roaming\openstreetmap\osmosis\plugins
。在那里解压缩插件档案的内容,osmareatag-1.3.zip文件夹应位于plugins文件夹中。
制定规则
在这里,我将告诉您一些有关如何使用此插件的理论。这是基本配置文件的示例:
<?xml version="1.0" encoding="UTF-8"?>
<tag-processing>
<area id="national-boundary" cache-file="national-boundary.idx">
<match type="relation">
<tag k="boundary" v="administrative"/>
<tag k="admin_level" v="2"/>
</match>
</area>
<transform>
<name>Country</name>
<match>
<tag k="building" v=".*"/>
<tag k="addr:housenumber" v=".*"/>
<inside area="national-boundary"/>
</match>
<output>
<add-tag k="addr:country" v="${ISO3166-1}" context-area="national-boundary"/>
</output>
</transform>
</tag-processing>
— . area
id
, , . match
, OSM, . , .. . cache-file
OSM . - , - , . , .
— , transform
. match
, : inside
, area
.
, output
, , , , , national-boundary
ISO3166-1
. , .
, , , . . , , .
:
<?xml version="1.0" encoding="UTF-8"?>
<tag-processing>
<area id="place">
<match>
<tag k="place" v="city|town|village|hamlet|isolated_dwelling|allotments"/>
</match>
</area>
<transform>
<name>Place</name>
<match>
<tag k="building" v=".*"/>
<tag k="addr:housenumber" v=".*"/>
<inside area="place"/>
</match>
<output>
<add-tag k="addr:city-auto" v="${name}" context-area="place"/>
</output>
</transform>
</tag-processing>
addr:city-auto
, , OSM. osm-xml, . :
call osmosis-0.48.3\bin\osmosis.bat --read-pbf SaranskGO.pbf --lp --tag-area-content file=tag-building-addr-place.xml --write-xml SaranskGO.place.osm
tag-building-addr-place.xml
- , .
.. - , . , . . .
<way id="103738775" version="2" timestamp="2019-09-20T18:28:15Z" uid="10124028" user="MarinaAR" changeset="74731679">
<nd ref="1197639591"/>
<nd ref="1197639690"/>
<nd ref="1197639206"/>
<nd ref="1197639237"/>
<nd ref="1197639591"/>
<tag k="building" v="yes"/>
<tag k="addr:city" v=""/>
<tag k="addr:street" v=" "/>
<tag k="addr:housenumber" v="5"/>
<tag k="addr:city-auto" v=""/>
</way>
, . , , , CSV, QGIS. OSM, OSM , .. - . CSV.
可以看出,整个村庄的名称不正确。这只是定居点名义的垃圾。这是萨兰斯克市和同名城市的混乱,其中包括多个定居点。反之亦然,在村庄名称的地方输入农村住区的名称。在城市本身的领土上,您可以看到几十个打错名字的地方。就像我之前说过的:将这项业务留给机器,您可能会犯错,一个人会犯错。
现在,仅分配了结算的名称。对于绑定到国家的定居点和地区可以类推。