日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

osmconvert转换OpenStreetMap pbf文件至osm等格式矢量

發布時間:2024/3/7 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 osmconvert转换OpenStreetMap pbf文件至osm等格式矢量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

osmconvert可用于轉換和處理OpenStreetMap文件。它掌握的功能少于常用的Osmosis:例如,無法使用osmconvert訪問數據庫。但是,程序運行速度更快,并提供一些特殊功能(-?all-?to-nodes, -?complete-multipolygons和--out-statistics)。

目錄

?[隱藏]?

  • 1下載
    • 1.1二進制文件
      • 1.1.1Linux
      • 1.1.2Windows
    • 1.2來源
  • 2啟動程序
  • 3程序說明
    • 3.1轉換文件
      • 3.1.1具有非標準lon / lat粒度的PBF輸入文件
    • 3.2應用地理邊界
      • 3.2.1基于經度和緯度的剪輯
      • 3.2.2基于多邊形的剪切
      • 3.2.3剪切OSM更改文件?
      • 3.2.4保持跨境方式的完整性
      • 3.2.5保持跨境多邊形完整
      • 3.2.6保持跨境界限完整
      • 3.2.7排除對邊界外對象的引用
      • 3.2.8合并兩個或多個地理區域
      • 3.2.9特殊情況:剪切輪廓數據
    • 3.3從輸出文件中排除信息或內容
      • 3.3.1處理作者信息
      • 3.3.2排除某些OSM對象類型
      • 3.3.3處理方式和關系并將其轉換為節點
    • 3.4修改標簽
      • 3.4.1修改值
      • 3.4.2修改密鑰
      • 3.4.3添加新標簽
    • 3.5更新OSM文件
    • 3.6檢索兩個OSM文件之間的差異
    • 3.7設置文件時間戳
    • 3.8檢索統計數據
    • 3.9編寫CSV文件
    • 3.10組合功能
    • 3.11并行處理
    • 3.12參數文件
    • 3.13技術細節
      • 3.13.1臨時文件
      • 3.13.2內存管理
      • 3.13.3測試輸出
  • 4基準
    • 4.1Planet .pbf - > .o5m
    • 4.2行星.osm - > .o5m
    • 4.3Planet .osm - > clipped .osm
    • 4.4行星.o5m - >德國.o5m

下載

像往常一樣:在法律允許的范圍內,沒有保修。

二進制

Linux的

  • Linux 32位二進制文??件
  • Linux 64位二進制文??件
  • osmctools Debian包,安裝運行:apt install osmctools

視窗

  • 用于Windows 32位的二進制文件(也與Win 64一起運行)
  • 用于Windows 64位的二進制文件(請參閱限制)
  • 用于Windows 64位的二進制文件(具有大文件支持)

限制:Windows版本(下載的二進制文件)并沒有大文件,如planet.osm(大于2GB)使用--complete-方式,--complete-multipolygons或--complete-邊界選項時工作例如,Windows 64位版本失敗,命令為“osmconvert planet.osm.pbf -b = 17.7,59.15,18.4,59.5 -o = stockholm.osm --complete-ways --drop-version --verbose” 。使用Linux 64位版本完全相同的命令。這似乎是由于在簽名的32位范圍之外尋找文件位置的問題引起的,這是當前鏈接到Windows二進制文件的zlib庫的限制。

DIY:如果你想構建自己的64位二進制文??件沒有限制,你必須使用標志_LARGEFILE64_SOURCE = 1_LFS64_LARGEFILE = 1構建最新的zlib?。并確保,這種類型的z_off64_t被定義為__int64在zconf.h

資源

  • 源代碼(常規版)(需要鏈接zlib(即cc osmconvert.c -lz -o osmconvert)
    • (上一個源代碼)
    • (下一個源代碼(如果有))
    • 下載并構建一次運行: ??wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
  • osmctools git存儲庫

如果找不到“zlib.h”錯誤:安裝zlib1g-dev

啟動程序

Windows用戶可以通過雙擊可執行文件啟動osmconvert。

所有平臺的用戶都可以從命令行啟動osmconvert。只需執行osmconvert就可以啟動一個友好的,交互式的基于文本的界面,引導用戶完成使用該程序的過程。osmconvert的全部功能在交互模式下不可用。高級用戶可以通過傳遞標志來繞過交互式界面,如下所示:

osmconvert --help

程序說明

要獲得詳細說明,請使用該程序的內置幫助功能:

osmconvert --help

此調用將顯示簡要參數概述:

osmconvert -h

以下章節演示了最重要的程序功能。

轉換文件

可以在這些數據格式之間進行轉換:

  • .osm
  • 的.osc
  • .osc.gz
  • .osh
  • .o5m
  • .o5c
  • .pbf

如果要將程序的輸出路由到標準輸出,則必須告訴程序應使用哪種數據格式:

--out-osm(默認值), -?out-osc, -?out-osh, -?out-o5m, -?out-o5c或--out-pbf。

如果通過應用-o =選項提供輸出文件的名稱,osmconvert將通過評估文件擴展名來確定數據格式。兩種方式的示例:

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文件。該程序將自己識別gzip壓縮,因此您不需要關心哪個輸入文件是gzip壓縮的,哪個不是。內置的解壓縮算法沒有專門的解壓縮程序那么強大,但是如果你想通過使用一些新下載的壓縮.osc文件更新OSM文件,這個功能非常有用。例子:

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

PBF輸入具有非標準lon / lat粒度的文件

osmconvert期望PBF文件使用標準的OpenStreetMap粒度,即100納米級。使用滲透可以生成具有不同粒度的PBF文件。如果要求轉換具有不同粒度的文件,則osmconvert將給出錯誤:“節點nanodegrees必須為100:10000”。使用非標準粒度讀取文件的解決方案是使用--pbf-granularity = <val>選項。

應用地理邊界

基于經度和緯度的剪輯

提供地理坐標是定義應提取的地理區域的最簡單方法。一些在線地圖連續顯示鼠標光標的地理坐標。例如:Osmarenderer地圖,公共交通地圖。

要定義此限制準矩形,您需要提供其西南角和東北角(WSEN)的坐標。例如:

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

邊界多邊形文件的格式可以在OSM Wiki中找到:?這里。您不需要嚴格遵守格式描述,但需要確保每行坐標都以空格開頭。

osmconvert能夠在一個文件中處理單獨的多邊形,如果已經正確定義,它甚至會考慮多邊形中的“孤島”。

剪輯OSM更改文件?

建議不要應用地理邊框來更改文件。由于只有節點攜帶地理位置,因此程序不知道如何處理相關節點不在同一文件中的方式和關系。因此,這些方式和關系將從文件中排除。這通常不是你想要完成的。

保持跨境方式完整

一些應用程序要求線(所謂的方式)保持完整,即使它們部分位于定義的地理區域之外。這可以通過應用選項--complete-ways來完成。例子:

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

如果您的操作系統是32位Windows,則此選項以及接下來兩節中描述的選項將輸入文件的大小限制為2 GiB。由于輸入文件需要讀取兩次或三次,程序必須在此文件中“跳轉”。不幸的是,目前使用的鏈接庫不支持32位Windows的長跳轉。Linux沒有這樣的限制(32位和64位版本都沒有)。

同樣,對于本節和以下兩節,建議使用.o5m作為輸入文件的數據格式。原因是.pbf文件通常在內部壓縮,因此讀取速度比.o5m文件慢得多。

通過Osmupdate命令沒有--complete -...選項可用。

保持跨境多邊形完整

越來越多的河流,森林和湖泊區域不僅被一條封閉線包圍,而且還被幾條連線所包圍。所謂的多重多邊形用于邏輯連接這些物理連接的線路。每條線都有一個角色,取決于位置:周圍邊界的“外部”或排除區域的“內部”(例如湖中的島嶼)。

當應用地理邊界時,osmconvert可以考慮這些多邊形并保持它們完整,即使邊界內只有一小部分多邊形區域。要指示程序執行此操作,請選擇選項--complete-multipolygons。例子:

osmconvert germany.o5m -b = 10.5,49,11.5,50 --complete-multipolygons -o = nuernberg.o5m osmconvert germany.o5m -B = hamburg.poly --complete-multipolygons -o = hamburg.pbf

請注意上一節末尾的三個評論。

直到2016年,這個選項被命名為--complex-ways。

保持跨境界限完整

為確保邊界保持不變,即使某些路徑對象位于應用的地理邊界之外,也請使用--complete-boundaries選項。例子:

osmconvert germany.o5m -b = 10.5,49,11.5,50 --complete-boundaries -o = nuernberg.o5m osmconvert germany.o5m -B = hamburg.poly --complete-boundaries -o = hamburg.pbf

請注意以上兩節的三個評論。

排除對邊界外對象的引用

如果您需要刪除由于位于地理邊界之外而被排除的節點的引用,請使用選項--drop-broken-refs?(可能有助于將數據導入OSM Map Composer或JOSM)。

合并兩個或多個地理區域

在某些情況下,可以合并OSM數據文件。如果它們擁有具有相同id的對象(節點,方式,關系),則它們必須具有相同的內容。例如:如果某種方式跨越兩個區域文件之間的地理邊界,則數據集的方式必須包含每個節點引用,甚至是對不在相關文件邊框內的節點的引用。即,不能使用選項--drop-brokenrefs刪除這樣的區域?。地理合并的示例:

osmconvert austria.o5m germany.o5m switzerland.o5m -o = dach.o5m osmconvert north_america.osm south_america.osm -o = americas.osm

特殊情況:剪切輪廓數據

請參閱此處:如何渲染沒有人工制品的Garmin countour圖層

從輸出文件中排除信息或內容

處理作者信息

對于大多數應用程序,不需要作者標簽。如果您決定排除用戶名,用戶ID,變更集和對象時間戳信息,請添加命令行選項--drop-author。例如:

osmconvert --drop-author a.pbf -o = a.osm

通常,從.osm或.o5m文件中刪除作者信息時不會遇到任何問題,但是不建議使用.pbf文件執行此操作,因為大多數程序無法處理此格式更改。

如果您需要稍后重新獲取作者信息,那么讓我們說因為后續程序依賴于這種格式,您可以使用選項--fake-author重新生成它們。當然,新的作者信息將只是符合格式描述的替換值,僅此而已。

排除某些OSM對象類型

如有必要,您可以刪除文件的整個部分:

--drop節點 --drop-方式 --drop-關系

程序osmfilter提供更精細的過濾功能。

處理方式和關系并將它們轉換為節點

如果文件僅包含最原始對象類型的對象:節點,則有時后續處理會更容易。osmconvert提供了一個刪除每個方式和每個關系的函數,并創建一個節點作為每個節點的替代。每個節點的經度和緯度都設置為已刪除對象的地理中心。如果刪除的對象是非封閉方式,則將取其節點的一個位置而不是中心。已刪除對象的每個標記都將復制到該節點。作為新節點的id,采用的方式(resp。關系)id增加10?15(分別為2 * 10?15)。例如:

osmconvert hamburg.pbf --all-to-nodes -o = hamburg_nodes.osm

所述--object型偏移=選項允許用戶改變ID偏移,從10?15到一個不同的值。

選項--add-bbox-tags將為已轉換為節點的每種方式和關系提供邊界框。這些邊界框將顯示為標記。例如(倫敦地區):

<tag k =“bBox”v =“ - 0.5000,51.0000,0.5000,52.0000”/>

修改標簽

有時更改某些標記以使進一步的數據處理更容易。

修改值

您可以指定要修改的值。例如:

./osmconvert a.o5m --modify-tags =“highway = primary to = tertiary highway = secondary to = tertiary”-o = all_streets_are_small.o5m

這將使所有主要和次要道路成為第三道路。

修改密鑰

密鑰也可以修改:

./osmconvert a.o5m --modify-node-tags =“amenity = fire_hydrant to emergency = fire_hydrant”-o = new_hydrant_syntax.o5m

添加新標簽

與osmfilter的過濾類似,osmconvert的標簽修改允許進行比較。因此,如果這有助于簡化數據的后續處理,則可以添加冗余標記:

./osmconvert a.o5m --modify-tags =“maxspeed <= 20 add speed_category = slow”-o = speed_categories.o5m

沒有檢查是否已有具有相同鍵名的標簽。如有必要,使用osmfilter的標簽過濾功能來防止可能的碰撞。

更新OSM文件

如果您有OSM數據文件(.osm,.o5m或.pbf),則可以將其與一個或多個OSM更改文件(.osc或.o5c)合并以進行更新。例如,你有一個planet.osm文件或昨天的區域germany.o5m文件,你可以從今天早上開始應用每日更改文件,以獲得最新的planet.osm,resp。germany.o5m文件。語法是這樣的:

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 11月/ * .osc -o = day30.o5m

更改文件中的OSM對象必須是唯一的。這意味著,每個節點,方式或關系只需要出現一次。每分鐘和每小時更改文件可能包含多個版本的OSM對象,因此您將收到警告消息。如果指定選項--merge-versions,則可以組合每個對象的所有版本。然后,只有每個對象的最新版本將保留在文件中。

要自動更新OSM文件或創建累積.osc文件,請參閱osmupdate。

檢索兩個OSM文件之間的差異

您可以通過比較兩個.osm或.o5m文件來創建.osc或.o5c更改文件。例如:

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

其他操作(如應用區域邊框)不允許在同一次運行中。兩個文件必須按對象類型和id排序。除非版本號為1,否則創建的對象將在輸出文件中顯示為“已修改”。

在計算文件差異時,osmconvert依賴于要比較的對象的版本號。如果版本號不可用或者對象應按內容進行比較,您可以通過應用選項--diff-contents(僅適用于.o5m文件)來命令程序執行此操作。

如果要刪除對象,則僅存儲其id(和作者數據)。事實證明,不存儲對象的內容是有用的,因為它無論如何都會被刪除。但是,有些程序會出于正式原因預期節點的經度和緯度值,即使它們所做的唯一操作是刪除這些值。選項--fake-lonlat可幫助您創建此類正式所需的替換值。

設置文件時間戳

通常,OSM文件具有文件時間戳,允許您確定文件的實際情況。在文件轉換期間,osmconvert將保留此時間戳。不過,它可以由你調整。例如:

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

檢索統計數據

有不同的方法來獲取OSM文件的元數據或統計數據。首先,您可以使用--out-timestamp選項讀取文件的時間戳(最后的Z代表Zulu):

osmconvert file_with_timestamp.o5m --out-timestamp 2011-08-01T23:50:00Z osmconvert file_without_timestamp.o5m --out-timestamp (時間戳無效)

其次,您可以分析整個文件并創建一組統計數據:

$ osmconvert germany.osm.pbf --out-statistics 時間戳最小值:2005-07-05T02:14:17Z 時間戳最大值:2011-07-31T19:59:46Z Lon min:-20.0712330 lon max:21.1441799 年分:47.0830289 年最高:59.9982830 節點:78138447 方式:11342322 關系:176024 node id min:1 node id max:1380816490 方式id min:92 方式id max:123952798 關系id min:159 relation id max:1693098

編寫CSV文件

要獲取以字符分隔的列表,您可以將“.csv”定義為輸出格式。這可以通過使用-o =選項來完成,例如-o = my_table.csv或通過定義其中一個csv相關選項: -?out-csv, -?cvv =, -?cvv-headline, -?cvv- separator =。

該表將有三個以制表符分隔的列:對象類型名稱,ID,名稱。要更改列分隔符或選擇不同的列集,請使用--csv-separator =?resp。所述--csv =選項。使用--help選項可顯示有關此主題的更多信息。例如(結合選項--all-to-nodes):

osmconvert shops.osm --all-to-nodes --csv =“@ id @lon @lat amenity shop name”--csv-headline @id @lon @lat amenity商店名稱 21548298 11.6122123 48.6884848店面包店米勒 21552613 9.0651970 49.9979332商店屠夫耶格 1000000168276611 6.6058085 51.4556093商店藥店AllForYou

列將由系統默認大小的制表符分隔。如果要將數據寫入文件,建議使用-o = somefilename.csv。

結合功能

可以組合大多數先前引入的功能。因此,例如,您可以更新.osm文件并在一次傳遞中限制其區域:

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

并行處理

osmconvert本身不支持并行處理。但是,您可以使用操作系統的功能并在命令行中輸入此類說明。在您想要處理多個.pbf文件的情況下,這可能也很有用,因為osmconvert目前無法同時讀取多個.pbf文件。例如:

osmconvert region1.pbf --out-o5m | osmconvert - region2.pbf -o = all.pbf

在此示例中,第一個進程將讀取.pbf文件“region1.pbf”并將其輸出為o5m格式化為標準輸出。第二個進程將從標準輸入讀取此數據,將其與其他區域文件“region2.pbf”合并,并將其寫入文件“all.pbf”。您將在第二個osmconvert命令中識別減號:它建議程序從標準輸入讀取數據。該管道操作符?“|”?將第一個命令的標準輸出連接到第二個命令的標準輸入。

您還可以通過創建所謂的命名管道來使用多個管道。不幸的是,這可能不適用于Windows。在Linux上,有mkfifo命令來創建管道。這些管道的處理方式與文件相同。在此示例中,將創建三個進程以合并三個.pbf文件:

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

&符運算符將分別為該命令創建一個后臺進程。該行中的最后一個命令仍保留在前臺,并將收集兩個后臺進程生成的數據。

或者,許多Unix shell提供了一種稱為Process Substitution的技術,它基本上為您自動創建命名管道,而不需要使用mkfifo。與上述命令等價的是:

osmconvert <(osmconvert a.pbf --out-o5m)<(osmconvert b.pbf --out-o5m)c.pbf -o = all.pbf

參數文件

如果指定復雜操作,命令行參數可能會變長。請改用參數文件,并使用--parameter-file =引用此文件。例如:

osmconvert --parameter-file = my_parameters

文件“my_parameters”:

//詳細 -v // 輸入文件 planet.o5m //邊界框 -b = 8.123,10.123,9.456,11.456 --complete-方式 // 輸出文件 -o = region.o5m

空行用于分隔參數。參數中的換行符將轉換為空格。以“?//??”?開頭的行被視為注釋,因此被程序忽略。

技術細節

臨時文件

要執行某些操作,osmconvert需要創建臨時文件。這些文件很小 - 與要處理的OSM文件相比。他們的名字都以“osmconvert_tempfile”開頭,以數字結尾。您可以更改文件名的左側部分,包括路徑。例如:

osmconvert germany.pbf -B = n.poly -t = / media / hd70 / temp -o = nuernberg.o5m

內存管理

有三個選項可以影響程序的內存管理: -?hash-memory =, -?max-refs =和--max-objects =。請參閱幫助選項顯示的詳細說明:

osmconvert --help

測試輸出

有時候獲得一些關于程序目前正在做什么的信息是很好的。您可以通過應用此選項激活詳細模式:-v。使用-v = 2,您將獲得更詳細的輸出,但可能會有點令人困惑。

基準

Planet .pbf - > .o5m

一個快速的,因為Osmconvert并不是唯一一個訪問磁盤,我沒想到運行'時間':

16GB內存,7200rpmdisk。

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

約。12分鐘。

Planet .osm - > .o5m

$ date 太平洋標準時間12月29日星期六14:36:19 $ ./osmconvert planet.osm -o = planet-121207.o5m $ date 太平洋標準時間12月29日星期六18:34:16$ ls -lah ... -rw ------- 1名工作人員32G 12月29日18:34 planet-121207.o5m -rw-r - r-- 1位用戶工作人員319G 12月7日02:41 planet.osm ...

所以....在一個16GB i7上使用planet.osm在USB 3外置高清上大約4小時。原來這是一個有缺陷的USB3驅動器......

Planet .osm - > clipped .osm

$ time ./osmconvert planet-130123.osm -b = -144.20,-50.90 -o = to_subset.osm真正的54m59.172s 用戶39m18.091s sys 5m3.111s

在16核服務器上配備48GB內存,12x2TB raid5。使用單個cpu線程限制性能。輸入planet.osm為~360GB,輸出子集為~112GB。

Planet .o5m - >德國.o5m

使用Geofabrik的德國多邊形從Planet文件中提取德國:

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

約。在i7 cpu的計算機上使用5個核心,僅使用1個核心。

總結

以上是生活随笔為你收集整理的osmconvert转换OpenStreetMap pbf文件至osm等格式矢量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。