I am trying to create custom mbtile for Cesium consumption.

I was able to create a mbtiles file in QGIS (zoom 0 to 16) using the QTiles plug-in. I tested the generated mbtiles file using mbviewer from mapbox and it worked fine. mbviewer

node cli.js --port 9000 ~/tmp/starpeak_low_res.mbtiles Listening on http://localhost:9000

So to serve it to Cesium, I used mbtiles-server from npm to create a WMTS compatible server. Here is the link to the server mbtiles-server

So in Cesium, all I had to do is add a a new imagery provider:

var high_res = layers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
    url : '',
    layer : 'starpeak_low_res',
    style: 'default',
    format : 'image/jpeg',
    tileMatrixSetID : 'GoogleMapsCompatible',
    maximumLevel: 16

however, it takes a very very very long time for the images to load on Cesium but it's almost instant using mbviewer. The mbtiles file is 200 MB but I assume at different zoom levels only a portion of that file is fetched.

Just to make sure the issue is not with mbtiles-server, I downloaded the free low res sattelite mbtiles files from openmaptiles link here. link. That mbtiles file is served fine it's instant loading at different zoom levels.

for reference I uploaded the mbtiles file here. Credits to NAIP GEOTIFF from earthexplorer.usg.gov generated mbtiles file


Use XYZ Tile Server instead of WMTS. I use several different one's depending on the platform. You can also skip the tile server and upload folder of tiles to S3 Bucket or Standard Wed Server. http://someurl/Z/X/Y.png. https://github.com/naturalatlas/tilestrata or https://github.com/mojodna/tessera

  • Try an existing XYZ Tile server to see the performance. Use the Leaflet Providers to grab the URL of the Tile Servers leaflet-extras.github.io/leaflet-providers/preview for Example ESRI server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/…{z}/{y}/{x}.png or one of my favorite tile.stamen.com/terrain{z}/{x}/{y}.jpg – Geospatial Engineer Jun 8 '18 at 20:19
  • Connect to XYZ tile Server via URL Template Imagery Provider cesiumjs.org/Cesium/Build/Documentation/… – Geospatial Engineer Jun 8 '18 at 20:21
  • Why NOT use Terriajs instead of Cesium. It's easy to add layers via a JSON catalog file. It's based on Cesium – Geospatial Engineer Jun 8 '18 at 20:21
  • ok I will try it with XYZ tile servers, but I wanted to use mbtiles to ease uploading of areas for users. Also I need to host it offline so cannot do S3. I looked at TerriaJS and it seems like it supports vector tiling which I think Cesium doesn't support. I will try that as well. – ArmenB Jun 8 '18 at 20:41
  • Cesium and Terriajs ARE NOT offline Mapping Engines for Mobile Apps. They require a WebServer to run and a Tile Server to serve the MBTILES. You could build that as part of a mobile app webview. But you'd be better off selecting an OpenGL Powered Native Solution like WhirlyGlobe/Maply or MapBox GL Native or Mapbox GL React Native – Geospatial Engineer Jun 12 '18 at 20:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.