首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个mbtile文件连接在一起

将两个mbtile文件连接在一起
EN

Stack Overflow用户
提问于 2013-07-19 20:27:33
回答 2查看 2.9K关注 0票数 5

我还没有找到一种方法将两个*.mbtiles文件连接在一起(第一个文件包含从0到16的缩放级别,第二个文件包含缩放级别17)。我使用了不同的sqlite管理器,但不管我如何将database2导出和导入到database1中,我都没有成功-二进制字段总是被严重损坏,以至于无法找回image.png。

有谁知道将两个mbtile文件连接在一起的简单步骤吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-19 20:55:54

如果两个文件具有相同的元数据,并且tiles表实际上是表而不是视图,则只需将其中一个表的数据附加到另一个表中:

代码语言:javascript
运行
复制
/* open database1 as main database, then: */
ATTACH 'database2' AS db2;
INSERT INTO tiles SELECT * FROM db2.tiles;
票数 6
EN

Stack Overflow用户

发布于 2014-06-11 21:25:44

在我的例子中,@CL有一个错误。解决方案:

代码语言:javascript
运行
复制
Error: cannot modify tiles because it is a view

所以我的数据库的模式是不同的:

代码语言:javascript
运行
复制
> .schema

CREATE TABLE grid_key (
    grid_id TEXT,
    key_name TEXT
);
CREATE TABLE grid_utfgrid (
    grid_id TEXT,
    grid_utfgrid BLOB
);
CREATE TABLE images (
    tile_data blob,
    tile_id text
);
CREATE TABLE keymap (
    key_name TEXT,
    key_json TEXT
);
CREATE TABLE map (
   zoom_level INTEGER,
   tile_column INTEGER,
   tile_row INTEGER,
   tile_id TEXT,
   grid_id TEXT
);
CREATE TABLE metadata (
    name text,
    value text
);
CREATE VIEW tiles AS
    SELECT
        map.zoom_level AS zoom_level,
        map.tile_column AS tile_column,
        map.tile_row AS tile_row,
        images.tile_data AS tile_data
    FROM map
    JOIN images ON images.tile_id = map.tile_id;
CREATE VIEW grids AS
    SELECT
        map.zoom_level AS zoom_level,
        map.tile_column AS tile_column,
        map.tile_row AS tile_row,
        grid_utfgrid.grid_utfgrid AS grid
    FROM map
    JOIN grid_utfgrid ON grid_utfgrid.grid_id = map.grid_id;
CREATE VIEW grid_data AS
    SELECT
        map.zoom_level AS zoom_level,
        map.tile_column AS tile_column,
        map.tile_row AS tile_row,
        keymap.key_name AS key_name,
        keymap.key_json AS key_json
    FROM map
    JOIN grid_key ON map.grid_id = grid_key.grid_id
    JOIN keymap ON grid_key.key_name = keymap.key_name;
CREATE UNIQUE INDEX grid_key_lookup ON grid_key (grid_id, key_name);
CREATE UNIQUE INDEX grid_utfgrid_lookup ON grid_utfgrid (grid_id);
CREATE UNIQUE INDEX images_id ON images (tile_id);
CREATE UNIQUE INDEX keymap_lookup ON keymap (key_name);
CREATE UNIQUE INDEX map_index ON map (zoom_level, tile_column, tile_row);
CREATE UNIQUE INDEX name ON metadata (name);

因此,您可以这样调整解决方案:

首先按照您想要的方式更新元数据,例如:

代码语言:javascript
运行
复制
sqlite> UPDATE metadata SET value = '7' WHERE name = 'minzoom';

然后插入瓷砖:

代码语言:javascript
运行
复制
sqlite> INSERT OR REPLACE INTO images SELECT * from db2.images;
sqlite> INSERT OR REPLACE INTO map SELECT * from db2.map;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17746079

复制
相关文章

相似问题

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