2017-10-19 3 views
0

-zg--drop-densest-as-needed을 추가 매개 변수로 사용하여 Tippecanoe를 사용하여 mbtiles 파일을 생성했습니다. 파일을 Mapbox Studio에 업로드했는데 Studio에서나 모바일 앱에서 타일을로드 할 때 모두 잘 작동합니다.Tippecanoe로 생성 된 mbtiles의 좌표가 올바르지 않음

그런 다음 Go에서 매우 기본적인 HTTP 서버를 사용하여 타일을 자체 호스팅 할 때 내 운을 시험했습니다. 타일이 SQLite에서 PostgreSQL 데이터베이스로 전송되었습니다 (Go + PSQL이 앱의 기존 스택 임).

몇 가지 이유로 줌 레벨에 따라 기능이 이동합니다. 레벨 1에서 미국에 있어야하는 데이터는 남극에 있으며, 줌 레벨 2에서는 칠레 해안에서 떨어져 있습니다. 제대로 작동하는 유일한 레벨은 레벨이 0 인 타일로 하나뿐입니다.

샌프란시스코에서 확대/축소 수준 11 : 타일 327, 행 791을 요청한 타일을 확인했습니다. 거기에 데이터가 있지만 .mbtiles 파일에는이 행/열 조합에 대한 타일이 없습니다.

mbtiles에서 수행해야 할 추가 작업이 z/x/y를 사용하여 데이터베이스에서 찾는 것 외에 있습니까? 또는 앱 측에서 구성 할 항목이 있습니까?

서버 코드 : 안드로이드에

row := db.QueryRow(` 
    SELECT tile_data FROM tiles 
    WHERE 
     zoom_level = $1 
     AND tile_column = $2 
     AND tile_row = $3 
    `, 
    z, x, y, 
) 

:

map.addSource(
     VectorSource(
       "tiles", 
       TileSet("2.2.0", "http://my.local.server:4000/tiles/{z}/{x}/{y}.mvt?key=2448A697EACDDC41432AAD9A1833E") 
     ) 
) 

나는 VectorSource의이 centermbtiles 메타 데이터에서 발견 bounds하지만 아무것도 변경하지 않은 설정했습니다.

답변

0

그래서 기존 서버 구현을 조사한 결과 mbtiles가 Y 좌표가 뒤집힌 TMS 형식으로 저장 되었기 때문에 오프셋이 발생합니다. Mapbox 자신의 Node implementation에서

:

// Flip Y coordinate because MBTiles files are TMS. 
y = (1 << z) - 1 - y; 

1 << z 주어진 줌 레벨에 대한 행의 수, 또는 두 그래서 우리는 단지 적절한 타일을 얻기 위해 XYZ 형식에서 Y 변환해야 z의 지수

XYZ vs TMS에 대한 자세한 내용은 here을 참조하십시오.