2013-07-19 5 views
3

두 개의 * .mbtiles 파일을 함께 결합하는 방법을 찾지 못했습니다. (처음에는 0-16의 확대/축소 수준과 두 번째 확대/축소 수준 17이 포함되어 있습니다.) 다른 sqlite 관리자와 작업하고 있었지만 database2로 database2를 어떻게 가져오고 가져 왔는지 모를 일도 없었습니다. 이진 필드는 항상 심하게 손상되어 image.png을 얻을 수 없었습니다.두 개의 mbtiles 파일을 결합합니다.

누구나 2 개의 mbtiles 파일을 결합하는 간단한 절차를 알고 있습니까?

답변

6

두 파일은 같은 메타 데이터를 가지고 있고, tiles 테이블이 실제로 테이블이 아닌 뷰를하는 경우, 당신은 단순히 다른 테이블에 하나의 데이터를 추가 할 수있는 경우 : 내가 가진 내 경우

/* open database1 as main database, then: */ 
ATTACH 'database2' AS db2; 
INSERT INTO tiles SELECT * FROM db2.tiles; 
+0

작동, thx :) – user2362608

+0

어떻게 리눅스 명령 줄에서 수행 할 수 있습니까? 어떤 아이디어? –

+0

오류 :보기이기 때문에 타일을 수정할 수 없습니다. – toutpt

1

@CL에 오류가 있습니다. 솔루션 : 예를 들어,

먼저 메타 데이터를 원하는 방식으로 업데이트 :

> .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); 

그래서 당신이 솔루션이 방법을 적용 할 수 있습니다

Error: cannot modify tiles because it is a view 

그래서 내 데이터베이스의 스키마가 다른 :

sqlite> UPDATE metadata SET value = '7' WHERE name = 'minzoom'; 

그런 다음 타일을 삽입 :

sqlite> INSERT OR REPLACE INTO images SELECT * from db2.images; 
sqlite> INSERT OR REPLACE INTO map SELECT * from db2.map; 
관련 문제