2

背景

我正在尝试为世界制作一个缩小尺寸的矢量 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 文件。

问题

当我使用and标志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 ......这要少得多,而且非常令人担忧。合并两个文件不应产生比原始文件更少的节点、路径和关系。

问题

我究竟做错了什么?

  • 有没有另一种方法来组合 osm 文件?(我读过osmosis不能处理负节点。)

  • 是否有另一种方法来生成 mbtiles,可能来自多个 osm 文件?

试图合并的文件

  • 点数.osm.bz2
  • polygon_aeroway_military_tourism.osm.bz2
  • 多边形湖水.osm.bz2
  • 多边形自然土地使用.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
  • 城市.osm.bz2
  • 海岸线.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>
4

2 回答 2

2

您的用例可能更容易合并来自多个 OSM2VectorTiles 提取的 MBTiles 格式的已渲染矢量切片(复制单个 PBF 切片) - 并将所有这些合并到一个 MBTiles 文件中。

您可以使用patchMBUtil 包中的实用程序: https ://github.com/mapbox/mbutil/blob/master/patch

或者来自https://pypi.python.org/pypi/umimbutil的工具

这两个实用程序应该运行用于不同区域的基本合并,其中单个图块不需要组合在一起。

或者-您可以编写一个基本脚本,从 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 回答
2

选项--complete-ways--complex-ways用于在应用边框时使用。如果您没有裁剪 OSM 数据(选项 -b 或 -B),最好不要使用--complete-ways--complex-ways,除非您确定它们对您的数据做了什么。至少我不是。

使用 osmconvert 合并 OSM 数据的选择方式是:

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

在 OSM Wiki 中有一些关于 osmconvert 的更多信息:

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

于 2016-11-30T13:20:21.263 回答