Я создал файл mbtiles
, используя Tippecanoe, только с -zg
и --drop-densest-as-needed
в качестве дополнительных параметров. Я загрузил файл в Mapbox Studio, и все работает хорошо, как в Studio, так и при загрузке тайлов через мобильное приложение.
Затем я попытал счастья в самостоятельном размещении плиток, используя очень простой HTTP-сервер в Go. Тайлы были перенесены из SQLite в базу данных PostgreSQL (причина этого — Go + PSQL — существующий стек для приложения).
По какой-то причине функции смещаются в зависимости от уровня масштабирования. На уровне 1 данные, которые должны быть в США, находятся в Антарктике, на уровне масштабирования 2 — у побережья Чили и т. д. Правильно работает только уровень 0, поскольку есть только одна плитка.
Я проверил, какие плитки запрашивал Mapbox, когда был в Сан-Франциско для уровня масштабирования 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,
)
На Android:
map.addSource(
VectorSource(
"tiles",
TileSet("2.2.0", "http://my.local.server:4000/tiles/{z}/{x}/{y}.mvt?key=2448A697EACDDC41432AAD9A1833E")
)
)
Я попытался установить center
и bounds
VectorSource
, найденные в метаданных mbtiles
, но это ничего не изменило.