Osmosis - 获取所有 Nodes/Ways/Relations 具有相同标签
Osmosis - get all Nodes/Ways/Relations with the same tags
我想获取包含特定标签的所有节点、方式和关系,并且输出文件还必须包含依赖方式和节点。
例如,我想搜索与便利设施的所有关系,不仅要获取关系本身,还要获取相关的方式和节点。对于具有相同标签及其相关节点以及最后所有节点的所有方式都相同。
目前我找到了一个可行的解决方案,但是这个脚本需要很长时间才能处理,因为它有效地读取世界地图文件 3 次,然后合并数据。 我希望有人能给我指出一个更 "straightforward" 的解决方案来提高速度 。
顺便说一句。我已将 java 选项设置为“-Xmx14G -server”,但根据任务管理器,脚本仅使用 8G 内存(机器有 32G RAM)(Windows - 对不起伙计们 ;-))
这是脚本:
set readfile=--read-pbf-fast file=planet-latest.osm.pbf workers=4
set logprogress=--log-progress interval=10
set acceptlorestags=^
place=country,state,region,province,district,county,municipality,island,islet ^
natural=sea,water,wetland,beach,coastline,marsh ^
admin_level=1,2,3,4 ^
water=* ^
wetland=*
call bin\osmosis.bat ^
%readfile% ^
--tf accept-relations ^
%acceptlorestags% ^
--used-way ^
--used-node ^
%logprogress% label="lores_rel" ^
^
%readfile% ^
--tf reject-relations ^
--tf accept-ways ^
%acceptlorestags% ^
--used-node ^
%logprogress% label="lores_way" ^
^
%readfile% ^
--tf reject-relations ^
--tf reject-ways ^
--tf accept-nodes ^
%acceptlorestags% ^
%logprogress% label="lores_node" ^
^
--merge ^
--merge ^
%logprogress% label="map_lores" ^
--mapfile-writer file=map_lores.map type=ram
不应该用锤子来拧螺丝。我切换到 osmfilter,它现在工作得更快了。
完整过程:
将 pbf 转换为 o5m(约 30 分钟):
osmconvert.exe planet-latest.osm.pbf -o=planet-latest.o5m
创建过滤后的 xml 文件(大约 30 分钟):
set source=planet-latest.o5m
set drop2= --drop-tags="source= fixme= created_by="
osmfilter.exe %source% --keep="natural=sea =coastline admin_level=1 =2 =3 =4 place=ocean =sea" %drop2% > map_lowres.osm
转换为 mapsforge:
set osmosis=tag-conf-file=tagmapping.xml zoom-interval-conf=8,5,11,15,12,20
call bin\osmosis.bat --read-xml file=map_lowres.osm --mapfile-writer file=map_lowres.map %osmosis%
请注意,映射文件编写器仍需要数天或数周时间。考虑使用边界框并创建多个地图文件,这比一次处理整个世界要快得多。
我想获取包含特定标签的所有节点、方式和关系,并且输出文件还必须包含依赖方式和节点。
例如,我想搜索与便利设施的所有关系,不仅要获取关系本身,还要获取相关的方式和节点。对于具有相同标签及其相关节点以及最后所有节点的所有方式都相同。
目前我找到了一个可行的解决方案,但是这个脚本需要很长时间才能处理,因为它有效地读取世界地图文件 3 次,然后合并数据。 我希望有人能给我指出一个更 "straightforward" 的解决方案来提高速度 。
顺便说一句。我已将 java 选项设置为“-Xmx14G -server”,但根据任务管理器,脚本仅使用 8G 内存(机器有 32G RAM)(Windows - 对不起伙计们 ;-))
这是脚本:
set readfile=--read-pbf-fast file=planet-latest.osm.pbf workers=4
set logprogress=--log-progress interval=10
set acceptlorestags=^
place=country,state,region,province,district,county,municipality,island,islet ^
natural=sea,water,wetland,beach,coastline,marsh ^
admin_level=1,2,3,4 ^
water=* ^
wetland=*
call bin\osmosis.bat ^
%readfile% ^
--tf accept-relations ^
%acceptlorestags% ^
--used-way ^
--used-node ^
%logprogress% label="lores_rel" ^
^
%readfile% ^
--tf reject-relations ^
--tf accept-ways ^
%acceptlorestags% ^
--used-node ^
%logprogress% label="lores_way" ^
^
%readfile% ^
--tf reject-relations ^
--tf reject-ways ^
--tf accept-nodes ^
%acceptlorestags% ^
%logprogress% label="lores_node" ^
^
--merge ^
--merge ^
%logprogress% label="map_lores" ^
--mapfile-writer file=map_lores.map type=ram
不应该用锤子来拧螺丝。我切换到 osmfilter,它现在工作得更快了。
完整过程:
将 pbf 转换为 o5m(约 30 分钟):
osmconvert.exe planet-latest.osm.pbf -o=planet-latest.o5m
创建过滤后的 xml 文件(大约 30 分钟):
set source=planet-latest.o5m
set drop2= --drop-tags="source= fixme= created_by="
osmfilter.exe %source% --keep="natural=sea =coastline admin_level=1 =2 =3 =4 place=ocean =sea" %drop2% > map_lowres.osm
转换为 mapsforge:
set osmosis=tag-conf-file=tagmapping.xml zoom-interval-conf=8,5,11,15,12,20
call bin\osmosis.bat --read-xml file=map_lowres.osm --mapfile-writer file=map_lowres.map %osmosis%
请注意,映射文件编写器仍需要数天或数周时间。考虑使用边界框并创建多个地图文件,这比一次处理整个世界要快得多。