2016-11-29 206 views
1

背景如何合併保留所有節點,方式,關係信息的osm文件?

我試圖使世界縮小大小的矢量mbtiles文件緊湊型離線地圖解決方案,我正在爲Windows桌面。爲此,我發現OsmAnd的尺寸縮小World_basemap_2.obf正是我所需要的,但是在mbtiles osm格式中,我可以生成一個mbtiles。 obf是使用從形狀文件生成的以下osm文件創建的。他們可在http://builder.osmand.net/basemap/

我的問題是,爲了使一個mbtiles他們需要合併成一個osm文件osm2vectortiles指南,以生成這裏發現的一個mbtiles http://osm2vectortiles.org/docs/own-vector-tiles/

首先我解壓縮它們以處理osm文件。

問題

當我使用osmconvert使用--complete-方式和--complex-方式標誌了很多關係和方式來組合這些文件被刪除,文件大小是非常不同的。

對於離:

osmconvert proc_line_tertiary_out.osm --complete-方式--complex-方式-o = tertiary.o5m

- 結果在一個文件中的大小

osmconvert叔133691 KB .o5m --complete-方式--complex-方式-o = tertiary.csv

- 結果與總的節點,方式和關係

一個csv 210

osmconvert tertiary.o5m proc_line_ferry_out.osm.o5m --complete-方式--complex節點-o = combined.o5m

合併與proc_line_ferr_out.osm.o5m tertiary.o5m(產生與上述相同的示出)並轉換到csv

- 結果在CSV與總節點,方式和關係......這是顯著少,是非常令人擔憂的。合併兩個文件不應該使原始文件的節點,方式和關係更少。

問題

我在做什麼錯?

是否有結合OSM文件的另一種方式?(反滲透我讀過不能消極應對的節點)

是否有產生mbtiles,可能來自多個OSM文件的另一種方式?

文件試圖結合

points.osm.bz2

polygon_aeroway_military_tourism.osm.bz2

polygon_lake_water.osm。BZ2

polygon_natural_landuse.osm.bz2

proc_line_admin_level_out.osm.bz2

proc_line_ferry_out.osm.bz2

proc_line_motorway_out.osm.bz2

proc_line_primary_out.osm.bz2

proc_line_railway_out.osm.bz2

proc_line_secondary_out.osm.bz2

proc_line_tertiary_out.osm.bz2

proc_line_trunk_out.osm.bz2

cities.osm.bz2

coastline.osm.bz2

OSMConvert

osmconvert解釋說

合併兩個或多個地理區域 在某些情況下,OSM數據文件可以合併。如果他們持有具有相同ID的對象(節點,方式,關係),則它們必須具有相同的內容。例如:如果某種方式跨越兩個區域文件之間的地理邊界,則數據集的路徑必須包含每個節點引用,即使是對不在相關文件邊界內的節點的引用。也就是說,這樣一個區域一定不能使用選項--drop-brokenrefs刪除。

這是否意味着我不能做我想做的事情?我想保留所有節點,方式和關係,即使這些文件沒有共同點。

嘗試

osmconvert polygon_aeroway_military_tourism.osm polygon_natural_landuse.osm -o = result.osm

結果

<?xml version='1.0' encoding='UTF-8'?> 
<osm version="0.6" generator="osmconvert 0.7T"> 
    <node id="-10000000000001" lat="-1.0015443" lon="-80.5349586"/> 
    <way id="-100000001" version="1"> 
     <nd ref="-10000000000001"/> 
     <nd ref="-10000000000002"/> 
     <nd ref="-10000000000003"/> 
     <nd ref="-10000000000004"/> 
     <nd ref="-10000000000005"/> 
     <nd ref="-10000000000006"/> 
     <nd ref="-10000000000007"/> 
     <nd ref="-10000000000008"/> 
     <nd ref="-10000000000009"/> 
     <nd ref="-10000000000010"/> 
     <nd ref="-10000000000011"/> 
     <nd ref="-10000000000012"/> 
     <nd ref="-10000000000013"/> 
     <nd ref="-10000000000014"/> 
     <nd ref="-10000000000015"/> 
     <nd ref="-10000000000016"/> 
     <nd ref="-10000000000017"/> 
     <nd ref="-10000000000018"/> 
     <nd ref="-10000000000019"/> 
     <nd ref="-10000000000020"/> 
     <nd ref="-10000000000021"/> 
     <nd ref="-10000000000022"/> 
     <nd ref="-10000000000023"/> 
     <nd ref="-10000000000024"/> 
     <nd ref="-10000000000025"/> 
     <nd ref="-10000000000026"/> 
     <nd ref="-10000000000027"/> 
     <nd ref="-10000000000028"/> 
     <nd ref="-10000000000029"/> 
     <nd ref="-10000000000030"/> 
     <nd ref="-10000000000031"/> 
     <nd ref="-10000000000032"/> 
     <nd ref="-10000000000033"/> 
     <nd ref="-10000000000034"/> 
     <nd ref="-10000000000035"/> 
     <nd ref="-10000000000036"/> 
     <nd ref="-10000000000037"/> 
     <nd ref="-10000000000038"/> 
     <nd ref="-10000000000039"/> 
     <nd ref="-10000000000040"/> 
     <nd ref="-10000000000041"/> 
     <nd ref="-10000000000042"/> 
     <nd ref="-10000000000043"/> 
     <nd ref="-10000000000044"/> 
     <nd ref="-10000000000045"/> 
     <nd ref="-10000000000046"/> 
     <nd ref="-10000000000047"/> 
     <nd ref="-10000000000048"/> 
     <nd ref="-10000000000049"/> 
     <nd ref="-10000000000050"/> 
     <nd ref="-10000000000051"/> 
     <nd ref="-10000000000001"/> 
    </way> 
</osm> 

回答

2

選項- 完整路線- 複合路線用於應用邊界時。如果你沒有限OSM數據(選項-b或-B)最好不要使用--complete-方式也不--complex-方式除非您確信他們做什麼與您的數據。至少我不是。

選擇使用osmconvert合併OSM數據的方式是這樣的:

osmconvert input1.o5m input2.o5m input3.o5m -o=output.o5m 

有一個在OSM維基約osmconvert一些進一步的信息:

https://wiki.openstreetmap.org/wiki/Osmconvert

+0

簡單的錯誤,我不敢相信我忽略了它。非常感謝。 – longlostbro

+0

我應該知道其他限制嗎?當我結合polygon_aeroway_military_tourism.osm - 17340節點/方法/關係和polygon_natural_landuse.osm - 8711704節點/方法/關係的綜合結果變成 - 3節點/方法/關係 – longlostbro

+0

我增加了更多的信息,以我的問題。我對osmconvert的解釋是它在合併時不能保留所有的節點和關係,只有那些共同的。 – longlostbro

1

這可能是更容易爲你的使用情況已經合併以MBTiles格式從多個OSM2VectorTiles提取物中提取矢量圖塊(複製單獨的PBF圖塊) - 並將所有這些合併到一個si ngle MBTiles文件。

您可以使用patch實用工具MBUtil包: https://github.com/mapbox/mbutil/blob/master/patch

或者從https://pypi.python.org/pypi/umimbutil

工具這兩個工具的程序應該爲不同領域的基本合併,其中個別瓷磚不需要結合在一起運行。

另類 - 你可以寫一個基本的腳本,從地球上移除MBTiles你不需要的所有瓷磚。MBTiles只是SQLite文件,所以這應該可以通過基本的SQL命令來實現...

P.S. 如果某人需要合併光柵(!!!)MBTiles包括PNG或JPEG瓦片光柵瓦片的組合在一起,那麼就需要一個不同的合併實用程序:https://www.maptiler.com/how-to/merge-mbtiles/上的命令行merge_mbtiles提供http://www.maptiler.com/demo/

填充形式後
+0

謝謝你,我不知道你可以合併mbtiles。現在唯一的問題是,當我嘗試時,需要幾周時間才能從osm文件生成一個mbtiles。至於從planet.mbtiles中刪除數據,我曾嘗試過,但有這麼多的交易和抽真空如此龐大的數據集,估計需要很長時間。 – longlostbro

相關問題