使用osmconvert转换pbf文件至osm文件

来源:互联网 发布:淘宝怎么买枪暗号 编辑:程序博客网 时间:2024/06/06 16:55

文件格式转换

  • 转换结果由目标文件后缀表示
osmconvert norway.pbf >norway.osmosmconvert region.pbf -o=region.o5mosmconvert region.o5m -o=region.pbfosmconvert 20110510_20110511.osc --out-o5c >20110510_20110511.o5c
  • 解压之后利用标准输入进行使用
bzcat europe.osm.bz2 | osmconvert - -o=europe.o5mosmconvert norway.pbf | gzip -1 >norway.osm.gz
  • 可以利用osmconvert进行gz文件的解压,功能比较有限,适合osc文件的升级
osmconvert old.o5m daily_updates/2011*.osc.gz -o=new.o5mosmconvert daily_updates/2011*.osc.gz --merge-versions --out-osc | gzip > cumulative.osc.gz

指定边界

  • 可以指定要转换的地图的边界
osmconvert germany.pbf -b=10.5,49,11.5,50 -o=nuernberg.o5mosmconvert ontario.osm -b=-75.8,45.19,-75.7,45.23 -o=ott.osm
  • 利用边界指定文件,可以时边界更细致化
osmconvert germany.pbf -B=hamburg.poly -o=hamburg.pbf
  • 有道路信息越过边界的话,可以使用–complete使它完整
osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-ways -o=nuernberg.o5mosmconvert germany.o5m -B=hamburg.poly --complete-ways -o=hamburg.pbf
  • 使地形完整
osmconvert germany.o5m -b=10.5,49,11.5,50 --complex-ways -o=nuernberg.o5mosmconvert germany.o5m -B=hamburg.poly --complex-ways -o=hamburg.pbf

去除部分信息

  • 将节点中的作者信息丢弃
osmconvert --drop-author a.pbf -o=a.osm
  • 除去地图中的某种类型
--drop-nodes--drop-ways--drop-relations
  • 将所有ways和relations转化为modes
osmconvert hamburg.pbf --all-to-nodes -o=hamburg_nodes.osm
  • 改变id偏移
--object-type-offset=
  • 对于没有转化为node的way和relation 添加tags
--add-bbox-tags

修改tag

  • 改变tag的value
./osmconvert a.o5m --modify-tags="highway=primary to =tertiary highway=secondary to =tertiary" -o=all_streets_are_small.o5m
  • 改变tag的key
./osmconvert a.o5m --modify-node-tags="amenity=fire_hydrant to emergency=fire_hydrant" -o=new_hydrant_syntax.o5m
  • 增加新的tags
./osmconvert a.o5m --modify-tags="maxspeed<=20 add speed_category=slow" -o=speed_categories.o5m

更新osm文件

  • 单个osc文件更新
osmconvert planet_old.osm changefile.osc -o=planet_new.osmosmconvert planet_old.o5m changefile.osc.gz -o=planet_new.o5mosmconvert germany_old.o5m changefile.osc -B=germany.poly -o=germany_new.o5m
  • 多个更新包更新
osmconvert veryold.osm c1.osc c2.osc c3.osc -o=new.osmosmconvert day24.o5m c24_25.osc c25_26.osc -o=day26.o5mosmconvert day01.o5m november/*.osc -o=day30.o5m

搜索两个文件的不同

osmconvert old.osm new.osm --diff -o=changefile.oscosmconvert old.o5m new.o5m --diff -o=changefile.o5c

设置文件的时间戳

osmconvert hamburg.o5m --timestamp=2011-08-01T23:50:00Z -o=hamburg.o5m

得到统计数据

  • 首先得到时间戳
osmconvert file_with_timestamp.o5m --out-timestamp2011-08-01T23:50:00Zosmconvert file_without_timestamp.o5m --out-timestamp(invalid timestamp)
  • 之后分析整个文件
$ osmconvert germany.osm.pbf --out-statisticstimestamp min: 2005-07-05T02:14:17Ztimestamp max: 2011-07-31T19:59:46Zlon min: -20.0712330lon max: 21.1441799lat min: 47.0830289lat max: 59.9982830nodes: 78138447ways: 11342322relations: 176024node id min: 1node id max: 1380816490way id min: 92way id max: 123952798relation id min: 159relation id max: 1693098

写入CSV文件

osmconvert shops.osm --all-to-nodes --csv="@id @lon @lat amenity shop name" --csv-headline@id @lon @lat amenity shop name21548298 11.6122123 48.6884848 shop bakery Miller21552613 9.0651970 49.9979332 shop butcher Jaeger1000000168276611 6.6058085 51.4556093 shop drugstore AllForYou

组合功能

osmconvert day24.osm -B=p.poly c24_25.osc -o=day25.osm

并行处理

  • 处理多个pbf文件
osmconvert region1.pbf --out-o5m | osmconvert - region2.pbf -o=all.pbf
  • 管道操作,windows上不行,linux可以
mkfifo p1 p2osmconvert a.pbf --out-o5m -o=p1 & osmconvert osmconvert b.pbf --out-o5m -o=p2 & osmconvert p1 p2 c.pbf -o=all.pbf
  • 和上面那条命令等价
osmconvert <(osmconvert a.pbf --out-o5m) <(osmconvert b.pbf --out-o5m) c.pbf -o=all.pbf

参数过长,可以使用参数文件

osmconvert --parameter-file=my_parameters

my_parameters

// verbose-v// input fileplanet.o5m// bounding box-b=8.123,10.123,9.456,11.456--complex-ways// output file-o=region.o5m

技术细节

  • 临时文件处理
osmconvert germany.pbf -B=n.poly -t=/media/hd70/temp -o=nuernberg.o5m
  • 内存管理
 --hash-memory=, --max-refs= and --max-objects=
  • 测试输出信息
-v-v=2 //更详细

测试

16Gb ram 7200rpmdisk

./osmconvert planet-latest.osm.pbf -o=planet-latest.o5m

大约12分钟


整个地球的osm转化为o5m

$ dateSat Dec 29 14:36:19 PST 2012$ ./osmconvert planet.osm -o=planet-121207.o5m$ dateSat Dec 29 18:34:16 PST 2012$ ls -lah...-rw------- 1 user staff 32G Dec 29 18:34 planet-121207.o5m-rw-r--r-- 1 user staff 319G Dec 7 02:41 planet.osm...

大约4个小时 16Gb i7


$time ./osmconvert planet-130123.osm -b=-144,20,-50,90 -o=na_subset.osmreal 54m59.172suser 39m18.091ssys 5m3.111s

16核 48Gb ram 12*xTB raid5 输入文件大约360G 输出文件112G


从地球的o5m中取出德国的o5m文件

./osmconvert planet.o5m -B=germany.poly -o=germany.o5m

5分钟 i7

0 0
原创粉丝点击