Ошибка декодирования тайлов в файле Bundle MBTiles с использованием CartoDB SDK

Я создаю свои.mbtiles следуя этим шагам

  1. Я использую стиль osm-carto и исходники из geofabrik для создания моей карты
  2. Я использую редактор Kosmtik, чтобы увидеть карту и плагин (kosmtik-mbtiles-exporter) для экспорта.mbtiles

это мой быстрый код для загрузки моего файла.mbtiles

override func viewDidLoad() {
    super.viewDidLoad()

    map = NTMapView()
    map.frame = view.bounds

    //Need to add as a subview,
    view.addSubview(map)

    // Get base projection from mapView
    let projection = map.getOptions().getBaseProjection();

    // Create a local vector data source
    let source: NTTileDataSource? = createTileDataSource()
    let baseLayer = NTCartoOnlineVectorTileLayer(style: .CARTO_BASEMAP_STYLE_VOYAGER)
    let decoder: NTVectorTileDecoder? = baseLayer?.getTileDecoder()

    let layer = NTVectorTileLayer(dataSource: source, decoder: decoder)
    map?.getLayers()?.add(layer)

    map.getOptions().setPanningMode(NTPanningMode.PANNING_MODE_STICKY)

}

func createTileDataSource() -> NTTileDataSource {
    let name: String = "cuba.output"
    let format : String = "mbtiles"
    // file-based local offline datasource
    let source: String? = Bundle.main.path(forResource: name, ofType: format)
    let vectorTileDataSource: NTTileDataSource? = NTMBTilesTileDataSource(minZoom: 0, maxZoom: 14, path: source)
    return vectorTileDataSource!
}}

Но при запуске приложения выдают эту ошибку

18 сентября 12:53:00 WeGoCuba[1547]: MBTilesTileDataSource::loadTile: загрузка MapTile [x=0, y=0, zoom=0, frameNr=0, id=0]

18 сентября 12:53:00 WeGoCuba[1547]: MBVectorTileDecoder::decodeTile: исключение при декодировании: неизвестный тип pbf

18 сентября 12:53:00 WeGoCuba[1547]: VectorTileLayer::FetchTask: не удалось декодировать плитку

Почему это ошибка? Файл.mbtiles неправильный? Если это так, вы могли бы дать шаги для создания правильного?

1 ответ

Решение

Кажется, что с kosmtik вы получаете растровые, а не векторные. Их можно легко добавить на карту с помощью следующего, но они предварительно стилизованы, как любой источник растровых данных.

MBTilesTileDataSource mbTileDataSource = new MBTilesTileDataSource(0, 18, path); // mbtiles file has to be in storage!
RasterTileLayer mbTileRasterLayer = new RasterTileLayer(mbTileDataSource);
mapView.getLayers().add(mbTileRasterLayer);
Другие вопросы по тегам