我正在尝试设置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和值。
我不确定我在这里做错了什么。任何帮助将不胜感激。
答案 0 :(得分:3)
我认为你对OSM的elements和tags已经足够熟悉了。
删除包含特定标记的节点(或方式或关系)绝对不是您想要的。相反,您希望删除特定的标记或仅保留特定的标记并删除其他所有内容 - 而不是删除完整的对象。
要了解这两者之间的区别,您必须知道addresses in OSM以两种不同的方式建模。它们可以通过单独的地址节点建模,也可以附加到现有的功能,例如建筑物,商店,餐馆等。第二种方式是这里的重要部分,您的方法将丢弃所有这些地址。
因此,您希望保留元素,即使它们是"只是"商店或餐馆因为他们仍然可以包含地址。但是您可以从这些元素中删除所有非地址标记,并删除所有不包含任何地址标记的元素。这应该可以通过渗透来实现,但是我对渗透不够熟悉,无法为您提供所需的参数。
然而,我不确定这是不是一个好主意,因为多个对象可以共享同一个名称。想象一下,一条河,一座山峰,一个小村庄和一个大村庄都有着相同的名字。如果您决定放弃区分河流与山峰和小村庄所需的所有其他标签,那么在尝试确定从搜索结果列表中选择的名称时,您将遇到麻烦。