我设法从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的程序可以帮助我:|
答案 0 :(得分:3)
请尝试--keep=
选项而不是--keep-tags
选项。后者对文件中保留哪个对象没有影响。
例如:
osmfilter planet.o5m --keep="amenity= and name=" -o=amenities.osm
将仅保留具有舒适标记和名称标记的对象。
请注意,所有依赖对象也将出现在输出文件中。例如,如果存在具有所请求标记的方式对象,则此方式的每个节点也将位于输出文件中。这对于关系及其依赖的方式和节点也是有效的。
如果您不想要此类行为,请添加--ignore-dependencies
答案 1 :(得分:2)
osmfilter inputfile.osm --keep-nodes="amenity=" --keep-tags="all amenity= name=" --ignore-dependencies -o=outputfile.osm
这正是您所寻找的:
使用标签设置节点(--keep-nodes)
仅保留有关设施和名称的信息( - 保证标签)