渗透 - 从OSM数据中删除业务以进行地理编码使用

时间:2015-05-27 09:57:20

标签: gis geocoding openstreetmap nominatim osmosis

我正在尝试设置Nominatim数据库以进行地址地理编码。数据库将由komoot的Photon使用,但我想这不是那么重要的信息。

问题是osm xml / pbf文件不仅包含地址,还包含其他一些东西,如酒吧,各种办公室等等,我正试图删除。

这个想法是用这样的东西'直到我得到所需的结果集:

osmosis  --read-xml us-northeast-latest.osm.bz2 \
    --tf reject-nodes landuse=* \
    --tf reject-nodes amenity=* \
    --tf reject-nodes office=*  \
    --tf reject-nodes shop=* \
    --tf reject-nodes place=house  \
    --write-xml output.osm

但是,在导入生成的文件后,我仍然会在搜索结果中获取这些节点(应该已被排除):

{
    properties: {
        osm_key: "office",
        osm_value: "ngo",
        extent: [
            -73.9494926,
            40.6998938,
            -73.9482012,
            40.6994192
        ],
        street: "Flushing Avenue",
        name: "Public Lab NYC",
        state: "New York",
        osm_id: 250328718,
        osm_type: "W",
        housenumber: "630",
        postcode: "11206",
        city: "New York City",
        country: "United States of America"
    },
    type: "Feature",
    geometry: {
        type: "Point",
        coordinates: [
            -73.9490215989286,
            40.699639649999995
        ]
    }
}

注意osm_key和值。

我不确定我在这里做错了什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

我认为你对OSM的elementstags已经足够熟悉了。

删除包含特定标记节点(或方式关系)绝对不是您想要的。相反,您希望删除特定的标记或仅保留特定的标记并删除其他所有内容 - 而不是删除完整的对象。

要了解这两者之间的区别,您必须知道addresses in OSM以两种不同的方式建模。它们可以通过单独的地址节点建模,也可以附加到现有的功能,例如建筑物,商店,餐馆等。第二种方式是这里的重要部分,您的方法将丢弃所有这些地址。

因此,您希望保留元素,即使它们是"只是"商店或餐馆因为他们仍然可以包含地址。但是您可以从这些元素中删除所有非地址标记,并删除所有不包含任何地址标记的元素。这应该可以通过渗透来实现,但是我对渗透不够熟悉,无法为您提供所需的参数。

然而,我不确定这是不是一个好主意,因为多个对象可以共享同一个名称。想象一下,一条河,一座山峰,一个小村庄和一个大村庄都有着相同的名字。如果您决定放弃区分河流与山峰和小村庄所需的所有其他标签,那么在尝试确定从搜索结果列表中选择的名称时,您将遇到麻烦。