UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

161 lines (160 loc) 5.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var extend = function (child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; var image_pool_1 = require("./image_pool"); var tile_utils_1 = require("./tile_utils"); var logging_1 = require("core/logging"); var p = require("core/properties"); var model_1 = require("../../model"); exports.TileSource = (function (superClass) { extend(TileSource, superClass); TileSource.prototype.type = 'TileSource'; TileSource.define({ url: [p.String, ''], tile_size: [p.Number, 256], max_zoom: [p.Number, 30], min_zoom: [p.Number, 0], extra_url_vars: [p.Any, {}], attribution: [p.String, ''], x_origin_offset: [p.Number], y_origin_offset: [p.Number], initial_resolution: [p.Number] }); TileSource.prototype.initialize = function (options) { TileSource.__super__.initialize.call(this, options); return this.normalize_case(); }; function TileSource(options) { if (options == null) { options = {}; } TileSource.__super__.constructor.apply(this, arguments); this.utils = new tile_utils_1.ProjectionUtils(); this.pool = new image_pool_1.ImagePool(); this.tiles = {}; this.normalize_case(); } TileSource.prototype.string_lookup_replace = function (str, lookup) { var key, result_str, value; result_str = str; for (key in lookup) { value = lookup[key]; result_str = result_str.replace('{' + key + '}', value.toString()); } return result_str; }; TileSource.prototype.normalize_case = function () { 'Note: should probably be refactored into subclasses.'; var url; url = this.url; url = url.replace('{x}', '{X}'); url = url.replace('{y}', '{Y}'); url = url.replace('{z}', '{Z}'); url = url.replace('{q}', '{Q}'); url = url.replace('{xmin}', '{XMIN}'); url = url.replace('{ymin}', '{YMIN}'); url = url.replace('{xmax}', '{XMAX}'); url = url.replace('{ymax}', '{YMAX}'); return this.url = url; }; TileSource.prototype.update = function () { var key, ref, results, tile; logging_1.logger.debug("TileSource: tile cache count: " + (Object.keys(this.tiles).length)); ref = this.tiles; results = []; for (key in ref) { tile = ref[key]; tile.current = false; results.push(tile.retain = false); } return results; }; TileSource.prototype.tile_xyz_to_key = function (x, y, z) { var key; key = x + ":" + y + ":" + z; return key; }; TileSource.prototype.key_to_tile_xyz = function (key) { var c; return (function () { var i, len, ref, results; ref = key.split(':'); results = []; for (i = 0, len = ref.length; i < len; i++) { c = ref[i]; results.push(parseInt(c)); } return results; })(); }; TileSource.prototype.sort_tiles_from_center = function (tiles, tile_extent) { var center_x, center_y, txmax, txmin, tymax, tymin; txmin = tile_extent[0], tymin = tile_extent[1], txmax = tile_extent[2], tymax = tile_extent[3]; center_x = (txmax - txmin) / 2 + txmin; center_y = (tymax - tymin) / 2 + tymin; tiles.sort(function (a, b) { var a_distance, b_distance; a_distance = Math.sqrt(Math.pow(center_x - a[0], 2) + Math.pow(center_y - a[1], 2)); b_distance = Math.sqrt(Math.pow(center_x - b[0], 2) + Math.pow(center_y - b[1], 2)); return a_distance - b_distance; }); return tiles; }; TileSource.prototype.prune_tiles = function () { var key, ref, ref1, results, tile; ref = this.tiles; for (key in ref) { tile = ref[key]; tile.retain = tile.current || tile.tile_coords[2] < 3; if (tile.current) { this.retain_neighbors(tile); this.retain_children(tile); this.retain_parents(tile); } } ref1 = this.tiles; results = []; for (key in ref1) { tile = ref1[key]; if (!tile.retain) { results.push(this.remove_tile(key)); } else { results.push(void 0); } } return results; }; TileSource.prototype.remove_tile = function (key) { var tile; tile = this.tiles[key]; if (tile != null) { this.pool.push(tile.img); return delete this.tiles[key]; } }; TileSource.prototype.get_image_url = function (x, y, z) { var image_url; image_url = this.string_lookup_replace(this.url, this.extra_url_vars); return image_url.replace("{X}", x).replace('{Y}', y).replace("{Z}", z); }; TileSource.prototype.retain_neighbors = function (reference_tile) { throw new Error("Not Implemented"); }; TileSource.prototype.retain_parents = function (reference_tile) { throw new Error("Not Implemented"); }; TileSource.prototype.retain_children = function (reference_tile) { throw new Error("Not Implemented"); }; TileSource.prototype.tile_xyz_to_quadkey = function (x, y, z) { throw new Error("Not Implemented"); }; TileSource.prototype.quadkey_to_tile_xyz = function (quadkey) { throw new Error("Not Implemented"); }; return TileSource; })(model_1.Model);