androidmapboxnutiteq

Load Mbtiles using Nutiteq SDK from Mapbox


I am figuring out the way to load the mbtiles from mapbox using nutiteq SDK. I know how to load the mbtiles offline using this code

// 1. Create tile data source from mbtiles file
MBTilesTileDataSource tileDataSource = new MBTilesTileDataSource("/sdcard/estonia_ntvt.mbtiles");

// 2. Load vector tile styleset
UnsignedCharVector styleBytes = AssetUtils.loadBytes("osmbright.zip");
MBVectorTileStyleSet vectorTileStyleSet = new MBVectorTileStyleSet(styleBytes);

// 3. Create vector tile decoder using the styleset
VectorTileDecoder vectorTileDecoder = new MBVectorTileDecoder(vectorTileStyleSet);

// 4. Create vector tile layer, using previously created data source and decoder
TileLayer vectorTileLayer = new VectorTileLayer(tileDataSource, vectorTileDecoder);

// 5. Add vector tile layer
mapView.getLayers().add(vectorTileLayer);

Is there a way to load it directly from mapbox mbtiles url using Nutiteq SDK?


Solution

  • What do you mean by "mapbox mbtiles url", can you give an example? By mbtiles you mean offline packages?

    I can think of following MapBox URLs:

    a. For MapBox as online raster source see https://developer.nutiteq.com/guides/raster-tile-sources

    b. For MapBox as online vector source you need to define also styling, and it needs a bit more coding:

        // load style file from assets. Nutiteq style is quite well compatible with MapBox Streets, 
        //   even though NT vector tiles are a bit different
        UnsignedCharVector styleBytes = AssetUtils.loadBytes("nutibright-v2.zip");
        if (styleBytes != null){
    
            // Create style set
            MBVectorTileStyleSet vectorTileStyleSet = new MBVectorTileStyleSet(styleBytes);
            MBVectorTileDecoder vectorTileDecoder = new MBVectorTileDecoder(vectorTileStyleSet);
    
            // Create tile data source and layer for vector tiles
            TileDataSource vectorTileDataSource = new HTTPTileDataSource(0, 14, "http://a.tiles.mapbox.com/v4/mapbox.mapbox-streets-v5/{zoom}/{x}/{y}.vector.pbf?access_token=pk...YOUR-MAPBOX-KEY");
            VectorTileLayer baseLayer = new VectorTileLayer(vectorTileDataSource, vectorTileDecoder);
    
            // add layer to map
            mapView.getLayers().add(baseLayer);
    
        }