我通过QGIS创建了2张地图: 1)一张从缩放0到10,是全世界的地图,2)另一张从0到17,是一个国家的详细地图。
我想合并这两块瓷砖,并让详细的国家的Mbtile与整个世界的Mbtile重叠。此外,合并的结果是从缩放0到17 (整个世界将消失在变焦10,但国家将一直到放大17)。
我应该使用什么程序/方法?是否有可能通过QGIS合并它们?
发布于 2022-11-07 20:27:55
我使用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)
https://stackoverflow.com/questions/73729052
复制相似问题