文件格式轉換
- 轉換結果由目標文件後綴表示
osmconvert norway.pbf >norway.osm
osmconvert region.pbf -o=region.o5m
osmconvert region.o5m -o=region.pbf
osmconvert 20110510_20110511.osc --out-o5c >20110510_20110511.o5c
- 解壓之後利用標準輸入進行使用
bzcat europe.osm.bz2 | osmconvert - -o=europe.o5m
osmconvert norway.pbf | gzip -1 >norway.osm.gz
- 可以利用osmconvert進行gz文件的解壓,功能比較有限,適合osc文件的升級
osmconvert old.o5m daily_updates/2011*.osc.gz -o=new.o5m
osmconvert 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.o5m
osmconvert 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.o5m
osmconvert germany.o5m -B=hamburg.poly --complete-ways -o=hamburg.pbf
- 使地形完整
osmconvert germany.o5m -b=10.5,49,11.5,50 --complex-ways -o=nuernberg.o5m
osmconvert 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.osm
osmconvert planet_old.o5m changefile.osc.gz -o=planet_new.o5m
osmconvert germany_old.o5m changefile.osc -B=germany.poly -o=germany_new.o5m
- 多個更新包更新
osmconvert veryold.osm c1.osc c2.osc c3.osc -o=new.osm
osmconvert day24.o5m c24_25.osc c25_26.osc -o=day26.o5m
osmconvert day01.o5m november/*.osc -o=day30.o5m
搜索兩個文件的不同
osmconvert old.osm new.osm --diff -o=changefile.osc
osmconvert 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-timestamp
2011-08-01T23:50:00Z
osmconvert file_without_timestamp.o5m --out-timestamp
(invalid timestamp)
- 之後分析整個文件
$ osmconvert germany.osm.pbf --out-statistics
timestamp min: 2005-07-05T02:14:17Z
timestamp max: 2011-07-31T19:59:46Z
lon min: -20.0712330
lon max: 21.1441799
lat min: 47.0830289
lat max: 59.9982830
nodes: 78138447
ways: 11342322
relations: 176024
node id min: 1
node id max: 1380816490
way id min: 92
way id max: 123952798
relation id min: 159
relation id max: 1693098
寫入CSV文件
osmconvert shops.osm --all-to-nodes --csv="@id @lon @lat amenity shop name" --csv-headline
@id @lon @lat amenity shop name
21548298 11.6122123 48.6884848 shop bakery Miller
21552613 9.0651970 49.9979332 shop butcher Jaeger
1000000168276611 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 p2
osmconvert 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 file
planet.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
$ date
Sat Dec 29 14:36:19 PST 2012
$ ./osmconvert planet.osm -o=planet-121207.o5m
$ date
Sat 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.osm
real 54m59.172s
user 39m18.091s
sys 5m3.111s
16核 48Gb ram 12*xTB raid5 輸入文件大約360G 輸出文件112G
從地球的o5m中取出德國的o5m文件
./osmconvert planet.o5m -B=germany.poly -o=germany.o5m
5分鐘 i7