L.TileLayer.MBTilesPlugin = L.TileLayer.extend(
{
mbTilesPlugin : null,
mbTilesMetadata : null,
base64Prefix : null,
createTile: function (coords, done) {
var tile = document.createElement('img');
L.DomEvent.on(tile, 'load', L.bind(this._tileOnLoad, this, done, tile));
L.DomEvent.on(tile, 'error', L.bind(this._tileOnError, this, done, tile));
if (this.options.crossOrigin) {
tile.crossOrigin = '';
}
tile.alt = '';
tile.setAttribute('role', 'presentation');
tile.src = this.getTileUrl(coords,tile);
return tile;
},
initialize: function(mbTilesPlugin, options, callback)
{
try {
console.log("initialize");
this.mbTilesPlugin = mbTilesPlugin;
L.Util.setOptions(this, options);
var tileLayer = this;
var minZoom = 0;
var maxZoom = 0;
console.log("initialize2");
mbTilesPlugin.getMinZoom(function(result)
{
console.log("getMinZoom");
minZoom = result.min_zoom;
console.log(result);
console.log("getMinZoom --" + minZoom + "--");
mbTilesPlugin.getMaxZoom(function(result)
{
console.log("getMaxZoom");
maxZoom = result.max_zoom;
console.log("getMaxZoom --" + maxZoom + "--");
mbTilesPlugin.getMetadata(function(result)
{
console.log("getMetadata");
mbTilesMetadata = result;
console.log(result);
L.Util.setOptions(tileLayer,
{
minZoom: minZoom,
maxZoom: maxZoom
});
if (mbTilesMetadata.format)
{
base64Prefix = "data:image/" + mbTilesMetadata.format + ";base64,";
console.log("base64Prefix --" + base64Prefix + "--");
}
else
{
// assuming that tiles are in png as default format ...
base64Prefix = "data:image/png;base64,";
console.log("base64Prefix --" + base64Prefix + "--");
}
callback(tileLayer);
});
});
});
} catch(e) {
console.log("initialize "+e.message);
}
},
getTileUrl: function (tilePoint, tile)
{
try {
var z = tilePoint.z;
var x = tilePoint.x;
var y = this._globalTileRange.max.y - tilePoint.y;
console.log("getTileUrl");
console.log(this.mbTilesPlugin);
console.log("-----");
this.mbTilesPlugin.getTile({z: z, x: x, y: y},
function(result)
{
tile.src = base64Prefix + result.tile_data;
},
function(error)
{
console.log("failed to load tile " + JSON.stringify(error));
});
} catch(e) {
console.log("getTileUrl "+e.message)
};
return L.Util.emptyImageUrl;
}
});