2

バックグラウンド

Windows デスクトップ用に取り組んでいるコンパクトなオフライン マップ ソリューション用に、世界用に縮小サイズのベクター mbtiles ファイルを作成しようとしています。そうするために、OsmAnd の縮小サイズのWorld_basemap_2.obfがまさに必要なものであることがわかりましたが、mbtiles OSM 形式であるため、mbtiles を生成できます。obfは、シェープ ファイルから生成された次の OSM ファイルを使用して作成されました。これらはhttp://builder.osmand.net/basemap/で入手できます。

私が抱えている問題は、mbtiles を作成するには、それらを 1 つの OSM ファイルに結合する必要があることです。osm2vectortilesここにある mbtiles を生成するためのガイドhttp://osm2vectortiles.org/docs/own-vector-tiles/

まず、osm ファイルを処理するためにそれらを抽出します。

問題

とフラグを使用osmconvertしてファイルを結合すると、多くの関係とウェイが削除され、ファイルサイズが大幅に異なります。--complete-ways--complex-ways

例:

osmconvert proc_line_tertiary_out.osm --complete-ways --complex-ways -o=tertiary.o5m

ファイルのサイズは 133,691 kb になります

osmconvert tertiary.o5m --complete-ways --complex-ways -o=tertiary.csv

合計13131405個のノード、ウェイ、およびリレーションを含む CSV が生成されます

osmconvert tertiary.o5m proc_line_ferry_out.osm.o5m --complete-ways --complex-nodes -o=combined.o5m

tertiary.o5mproc_line_ferr_out.osm.o5m (上記と同じように生成) とマージし、CSV に変換します。

合計1195239のノード、ウェイ、およびリレーションを含む CSV が生成されます...これは大幅に少なく、非常に懸念されます。2 つのファイルを結合しても、元のファイルよりも少ないノード、ウェイ、およびリレーションを作成するべきではありません。

質問

私は何を間違っていますか?

  • osm ファイルを結合する別の方法はありますか? osmosis(負のノードを処理できないと読んだことがあります。)

  • おそらく複数のosmファイルからmbtilesを生成する別の方法はありますか?

結合しようとしているファイル

  • 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
  • citys.osm.bz2
  • coastline.osm.bz2

OSMConvert

osmconvertと説明する

2 つ以上の地域の統合

特定の条件下では、OSM データ ファイルをマージできます。同じ を持つオブジェクト (ノード、ウェイ、リレーション) を保持している場合id、それらは同じ内容を持っている必要があります。例: ウェイが 2 つの地域ファイル間の地理的境界を越える場合、ウェイ データセットには、関連するファイルの境界内にないノードへの参照であっても、すべてのノード参照が含まれている必要があります。つまり、そのような領域は、オプションを使用して切り取られていてはなりません--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>
4

2 に答える 2

2

MBTiles 形式の複数の OSM2VectorTiles 抽出から既にレンダリングされたベクター タイルをマージ (個々の PBF タイルをコピー) し、これらすべてを 1 つの MBTiles ファイルにマージする方が、ユース ケースにとってより簡単な場合があります。

patchMBUtil パッケージのユーティリティを 使用できます: https://github.com/mapbox/mbutil/blob/master/patch

またはhttps://pypi.python.org/pypi/umimbutilのツール

これら 2 つのユーティリティは、個々のタイルを結合する必要のない個別の領域の基本的な結合のために実行する必要があります。

別の方法として、不要なすべてのタイルを惑星 MBTiles から削除する基本的なスクリプトを作成することもできます。MBTiles は単なる SQLite ファイルなので、基本的な SQL コマンドで実行できるはずです...

PS 誰かがラスター (!!!) MBTiles をマージする必要がある場合は、ラスター タイルを PNG または JPEG タイルに結合することを含め、別のマージ ユーティリティが必要です: https://www.maptiler.com/how-to/merge -mbtiles/は、 http://www.maptiler.com/demo/merge_mbtilesのフォームに入力した後にコマンドラインで使用できます。

于 2016-11-29T19:29:21.453 に答える