Implementation of the ol.source.TileUTFGridTile_#getData method
This commit is contained in:
@@ -1,14 +1,16 @@
|
|||||||
goog.provide('ol.source.TileUTFGrid');
|
goog.provide('ol.source.TileUTFGrid');
|
||||||
|
|
||||||
|
goog.require('goog.asserts')
|
||||||
goog.require('goog.net.Jsonp');
|
goog.require('goog.net.Jsonp');
|
||||||
goog.require('ol.Attribution');
|
goog.require('ol.Attribution');
|
||||||
goog.require('ol.Tile');
|
goog.require('ol.Tile');
|
||||||
|
goog.require('ol.TileCache')
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.TileUrlFunction');
|
goog.require('ol.TileUrlFunction');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
|
goog.require('ol.source.State')
|
||||||
goog.require('ol.source.Tile');
|
goog.require('ol.source.Tile');
|
||||||
goog.require('ol.tilegrid.TileGrid');
|
|
||||||
goog.require('ol.tilegrid.XYZ');
|
goog.require('ol.tilegrid.XYZ');
|
||||||
|
|
||||||
|
|
||||||
@@ -62,16 +64,18 @@ ol.source.TileUTFGrid.prototype.expireCache = function(usedTiles) {
|
|||||||
* @param {ol.Coordinate} coordinate Coordinate.
|
* @param {ol.Coordinate} coordinate Coordinate.
|
||||||
* @param {number} resolution Resolution.
|
* @param {number} resolution Resolution.
|
||||||
* @param {function(Object)} callback Info callback.
|
* @param {function(Object)} callback Info callback.
|
||||||
|
* @api
|
||||||
*/
|
*/
|
||||||
ol.source.TileUTFGrid.prototype.getFeatureInfo = function(
|
ol.source.TileUTFGrid.prototype.getFeatureInfo = function(
|
||||||
coordinate, resolution, callback) {
|
coordinate, resolution, callback) {
|
||||||
if (!goog.isNull(this.tileGrid)) {
|
if (!goog.isNull(this.tileGrid)) {
|
||||||
var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(
|
var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(
|
||||||
coordinate, resolution);
|
coordinate, resolution);
|
||||||
var tileCoordKey = this.getKeyZXY.apply(this, tileCoord);
|
var tileCoordKey = this.getKeyZXY.apply(this, tileCoord);
|
||||||
if (this.tileCache.containsKey(tileCoordKey)) {
|
if (this.tileCache.containsKey(tileCoordKey)) {
|
||||||
var tile = /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));
|
var tile = /** @type {!ol.source.TileUTFGridTile_} */
|
||||||
callback(tile.getData());
|
(this.tileCache.get(tileCoordKey));
|
||||||
|
callback(tile.getData(coordinate));
|
||||||
} else {
|
} else {
|
||||||
//TODO: async?
|
//TODO: async?
|
||||||
}
|
}
|
||||||
@@ -152,7 +156,8 @@ ol.source.TileUTFGrid.prototype.getTile =
|
|||||||
var tile = new ol.source.TileUTFGridTile_(
|
var tile = new ol.source.TileUTFGridTile_(
|
||||||
tileCoord,
|
tileCoord,
|
||||||
goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY,
|
goog.isDef(tileUrl) ? ol.TileState.IDLE : ol.TileState.EMPTY,
|
||||||
goog.isDef(tileUrl) ? tileUrl : '');
|
goog.isDef(tileUrl) ? tileUrl : '',
|
||||||
|
this.tileGrid.getTileCoordExtent(tileCoord));
|
||||||
this.tileCache.set(tileCoordKey, tile);
|
this.tileCache.set(tileCoordKey, tile);
|
||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
@@ -177,9 +182,10 @@ ol.source.TileUTFGrid.prototype.useTile = function(z, x, y) {
|
|||||||
* @param {ol.TileCoord} tileCoord Tile coordinate.
|
* @param {ol.TileCoord} tileCoord Tile coordinate.
|
||||||
* @param {ol.TileState} state State.
|
* @param {ol.TileState} state State.
|
||||||
* @param {string} src Image source URI.
|
* @param {string} src Image source URI.
|
||||||
|
* @param {ol.Extent} extent Extent of the tile.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.source.TileUTFGridTile_ = function(tileCoord, state, src) {
|
ol.source.TileUTFGridTile_ = function(tileCoord, state, src, extent) {
|
||||||
|
|
||||||
goog.base(this, tileCoord, state);
|
goog.base(this, tileCoord, state);
|
||||||
|
|
||||||
@@ -191,7 +197,25 @@ ol.source.TileUTFGridTile_ = function(tileCoord, state, src) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {?Object}
|
* @type {ol.Extent}
|
||||||
|
*/
|
||||||
|
this.extent_ = extent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {?Array.<string>}
|
||||||
|
*/
|
||||||
|
this.grid_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {?Array.<string>}
|
||||||
|
*/
|
||||||
|
this.keys_ = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {?Object.<string, Object>|undefined}
|
||||||
*/
|
*/
|
||||||
this.data_ = null;
|
this.data_ = null;
|
||||||
};
|
};
|
||||||
@@ -205,10 +229,37 @@ ol.source.TileUTFGridTile_.prototype.getImage = goog.nullFunction;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {Object}
|
* @param {ol.Coordinate} coordinate Coordinate.
|
||||||
|
* @return {Object|undefined}
|
||||||
*/
|
*/
|
||||||
ol.source.TileUTFGridTile_.prototype.getData = function() { //TODO: coordinate
|
ol.source.TileUTFGridTile_.prototype.getData = function(coordinate) {
|
||||||
return this.data_;
|
if (goog.isNull(this.grid_) || goog.isNull(this.keys_) ||
|
||||||
|
goog.isNull(this.data_)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
var xRelative = (coordinate[0] - this.extent_[0]) /
|
||||||
|
(this.extent_[2] - this.extent_[0]);
|
||||||
|
var yRelative = (coordinate[1] - this.extent_[1]) /
|
||||||
|
(this.extent_[3] - this.extent_[1]);
|
||||||
|
|
||||||
|
var row = this.grid_[Math.floor((1 - yRelative) * this.grid_.length)];
|
||||||
|
|
||||||
|
if (!goog.isString(row)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
var code = row.charCodeAt(Math.floor(xRelative * row.length));
|
||||||
|
if (code >= 93) code--;
|
||||||
|
if (code >= 35) code--;
|
||||||
|
code -= 32;
|
||||||
|
|
||||||
|
var key = this.keys_[code];
|
||||||
|
|
||||||
|
if (!goog.isDefAndNotNull(key)) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.data_[key];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -230,11 +281,13 @@ ol.source.TileUTFGridTile_.prototype.handleError_ = function() {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Object} json
|
* @param {!UTFGridJSON} json
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.source.TileUTFGridTile_.prototype.handleLoad_ = function(json) {
|
ol.source.TileUTFGridTile_.prototype.handleLoad_ = function(json) {
|
||||||
this.data_ = json;
|
this.grid_ = json.grid;
|
||||||
|
this.keys_ = json.keys;
|
||||||
|
this.data_ = json.data;
|
||||||
|
|
||||||
this.state = ol.TileState.EMPTY;
|
this.state = ol.TileState.EMPTY;
|
||||||
this.changed();
|
this.changed();
|
||||||
|
|||||||
Reference in New Issue
Block a user