UNPKG

terriajs

Version:

Geospatial data visualization platform.

76 lines (61 loc) 2.68 kB
'use strict'; /*global require*/ var L = require('leaflet'); var CesiumMath = require('terriajs-cesium/Source/Core/Math'); var CesiumEvent = require('terriajs-cesium/Source/Core/Event'); var Cartographic = require('terriajs-cesium/Source/Core/Cartographic'); var pollToPromise = require('../Core/pollToPromise'); var MapboxVectorCanvasTileLayer = L.GridLayer.extend({ initialize: function(imageryProvider, options) { this.imageryProvider = imageryProvider; options.tileSize = 256; this.errorEvent = new CesiumEvent(); this.initialized = false; this._usable = false; this._delayedUpdate = undefined; this._zSubtract = 0; this._previousCredits = []; var that = this; this._ipReady = pollToPromise(function() { return that.imageryProvider.ready; }); L.GridLayer.prototype.initialize.call(this, options); }, createTile: function(tilePoint, done) { var canvas = L.DomUtil.create('canvas', 'leaflet-tile'); var size = this.getTileSize(); canvas.width = size.x; canvas.height = size.y; var that = this; this._ipReady.then(function() { var n = that.imageryProvider.tilingScheme.getNumberOfXTilesAtLevel(tilePoint.z); return that.imageryProvider._requestImage(CesiumMath.mod(tilePoint.x, n), tilePoint.y, tilePoint.z, canvas); }).then(function (canvas) { done(undefined, canvas); }); return canvas; // Not yet drawn on, but Leaflet requires the tile }, getFeaturePickingCoords: function(map, longitudeRadians, latitudeRadians) { var ll = new Cartographic(CesiumMath.negativePiToPi(longitudeRadians), latitudeRadians, 0.0); var level = Math.round(map.getZoom()); var that = this; return pollToPromise(function() { return that.imageryProvider.ready; }).then(function() { var tilingScheme = that.imageryProvider.tilingScheme; var coords = tilingScheme.positionToTileXY(ll, level); return { x: coords.x, y: coords.y, level: level }; }); }, pickFeatures: function(x, y, level, longitudeRadians, latitudeRadians) { var that = this; return pollToPromise(function() { return that.imageryProvider.ready; }).then(function() { return that.imageryProvider.pickFeatures(x, y, level, longitudeRadians, latitudeRadians); }); }, }); module.exports = MapboxVectorCanvasTileLayer;