繁体   English   中英

如何合并两个 Mbtiles?

[英]How can I merge two Mbtiles?

我通过 QGIS 创建了 2 个 Mbtiles:1) 一个 Mbtile 是从 0 到 10 缩放并且是整个世界的地图,2) 另一个是从 0 到 17 缩放并且是一个国家的详细地图。

我想合并这两个 Mbtiles,并让详细国家/地区的 Mbtile 与整个世界的 Mbtile 重叠。 合并的结果也是从缩放 0 到 17(整个世界将在缩放 10 时消失,但国家将保留到缩放 17)。

我应该使用什么程序/方法? 是否可以通过 QGIS 合并它们?

我使用 Python 来合并 MBTiles 文件。 请务必更新 matadata 表,注意最小最大缩放。 它们只是具有独特扩展名的 sqlite 数据库。

此示例不包括数据验证。 我没有测试这个例子——因为它是从我批处理 QGIS 输出的地方删除的。

使用 QGIS 的 python 接口以外的 IDE 问题较小。 不需要任何特定于 QGIS 或 PyQGIS 的东西。

import sqlite3 as sqlite

def processOneSource(srcDB, dstDB):
    # create_index_sql = "CREATE UNIQUE INDEX tile_index on tiles (zoom_level, tile_column, tile_row);"
    # dstDB.connection.execute(create_index_sql)
    # the index forces an error if there is already a tile for the same zxy

    sqlite_insert_blob_query = """ INSERT INTO tiles (zoom_level, tile_column, tile_row, tile_data) VALUES (?, ?, ?, ?)"""

    tiles = srcDB.connection.execute('select zoom_level, tile_column, tile_row, tile_data from tiles;')

    for t in tiles:
        z = t[0]
        x = t[1]
        y = t[2]
        data = t[3]

        # example of how you might include exclude tiles
        if not (z == 12 or z == 13 or z == 14 or z == 15 or z == 16):
            continue

        print(str((t[0], t[1], t[2])))

        data_tuple = (t[0], t[1], t[2], t[3])
        try:
            dstDB.connection.execute(sqlite_insert_blob_query, data_tuple)
        except Exception as e:
            print(e)

    dstDB.commit()


if __name__ == '__main__':
    srcDB = sqlite.connect("path_to_yourfilename")
    dstDB = sqlite.connect("path_to_yourfilename")
    processOneSource(srcDB, dstDB)

您可以使用tile-join ,它有一堆标志,因此您可以自定义输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM