如何过滤掉osmfilter的所有设施以及他们拥有的任何其他标签信息?

时间:2015-01-08 11:26:35

标签: openstreetmap osmosis

我设法从OSM下载了一个行星文件,并使用osmconvert将其转换为o5m格式,并从中删除了所有作者信息,以保持较小的文件大小。我试图从全世界的这个数据库中获取每个POI,所以我对城市,城镇,高速公路,方式等不感兴趣,只有设施。

首先,我试图通过使用osmosis实现这一点,因为它似乎设法做我想要的,只是它总是耗尽内存,导致文件太大而无法处理。 (我可以将文件拆分为较小的文件,但如果可能的话我想避免这种情况。)

我尝试使用osmfilter,在那里,我设法过滤掉每个节点,其中有一个名为amenity的标签,但我有几个问题我无法解决:

一个。如果我使用以下命令:

osmfilter planet.o5m -v --keep-tags="amenity=" -o=amenities.osm

它会保留所有节点,并过滤掉每个没有名字的标签。

湾如果我使用这个命令:

osmfilter planet.o5m -v --keep-tags="all amenity=" -o=amenities.osm

它现在过滤掉所有没有amenity标签的节点,但也过滤掉匹配节点中的所有其他标签,其中包含我需要的信息(例如,POI的名称或描述)

℃。如果我使用这个命令:

osmfilter planet.o5m -v --keep-tags="all amenity= all name=" -o=amenities.osm

过滤掉每个在其标签中具有EITHER名称或舒适度的节点,这会留下几个指定的城市或高速公路(我不需要的数据)。

我也尝试用AND运算符分隔它,但它说,在过滤标记时我不能使用AND运算符。知道我怎么能达到预期的效果呢?

结束注意:我正在运行Windows 7系统,因此没有基于Linux的程序可以帮助我:|

2 个答案:

答案 0 :(得分:3)

请尝试--keep=选项而不是--keep-tags选项。后者对文件中保留哪个对象没有影响。

例如:

osmfilter planet.o5m --keep="amenity= and name=" -o=amenities.osm

将仅保留具有舒适标记和名称标记的对象。

请注意,所有依赖对象也将出现在输出文件中。例如,如果存在具有所请求标记的方式对象,则此方式的每个节点也将位于输出文件中。这对于关系及其依赖的方式和节点也是有效的。 如果您不想要此类行为,请添加--ignore-dependencies

可在此处找到更多信息:https://wiki.openstreetmap.org/wiki/Osmfilter

答案 1 :(得分:2)

osmfilter inputfile.osm --keep-nodes="amenity=" --keep-tags="all amenity= name=" --ignore-dependencies -o=outputfile.osm

这正是您所寻找的:

使用标签设置节点(--keep-nodes)

仅保留有关设施和名称的信息( - 保证标签)