首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎样才能合并两个Mbtiles?

我怎样才能合并两个Mbtiles?
EN

Stack Overflow用户
提问于 2022-09-15 09:54:37
回答 1查看 53关注 0票数 0

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

我想合并这两块瓷砖,并让详细的国家的Mbtile与整个世界的Mbtile重叠。此外,合并的结果是从缩放0到17 (整个世界将消失在变焦10,但国家将一直到放大17)。

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

EN

回答 1

Stack Overflow用户

发布于 2022-11-07 20:27:55

我使用Python合并MBTiles文件。一定要更新matadata,注意最小最大缩放。它们只是一个具有独特扩展的sqlite数据库。

此示例不包括数据验证。我没有测试这个例子--因为它被从QGIS的批处理输出中去掉了。

除了使用QGIS的python接口之外,使用IDE的问题较少。不需要任何特定于QGIS或PyQGIS的内容。

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73729052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档