From bfd5c54fa42a9b1dd43d122dd21f9070be87000e Mon Sep 17 00:00:00 2001 From: Christian Paul Date: Sat, 23 Dec 2017 01:24:23 -0800 Subject: [PATCH] Decaffeinate remaining methods of the Tile class --- src/Tile.coffee | 153 ------------------------------------------------ src/Tile.js | 38 ++++++------ 2 files changed, 17 insertions(+), 174 deletions(-) delete mode 100644 src/Tile.coffee diff --git a/src/Tile.coffee b/src/Tile.coffee deleted file mode 100644 index 2408ec9..0000000 --- a/src/Tile.coffee +++ /dev/null @@ -1,153 +0,0 @@ -### - termap - Terminal Map Viewer - by Michael Strassburger - - Handling of and access to single VectorTiles -### - -VectorTile = require('@mapbox/vector-tile').VectorTile -Protobuf = require 'pbf' -Promise = require 'bluebird' -zlib = require 'zlib' -rbush = require 'rbush' -x256 = require 'x256' -earcut = require 'earcut' - -config = require "./config" -utils = require "./utils" - -class Tile - layers: {} - - constructor: (@styler) -> - - load: (buffer) -> - @_unzipIfNeeded buffer - .then (buffer) => @_loadTile buffer - .then => @_loadLayers() - .then => this - - _loadTile: (buffer) -> - @tile = new VectorTile new Protobuf buffer - - _unzipIfNeeded: (buffer) -> - new Promise (resolve, reject) => - if @_isGzipped buffer - zlib.gunzip buffer, (err, data) -> - return reject err if err - resolve data - else - resolve buffer - - _isGzipped: (buffer) -> - buffer.slice(0,2).indexOf(Buffer.from([0x1f, 0x8b])) is 0 - - _loadLayers: () -> - layers = {} - colorCache = {} - - for name, layer of @tile.layers - nodes = [] - #continue if name is "water" - for i in [0...layer.length] - # TODO: caching of similar attributes to avoid looking up the style each time - #continue if @styler and not @styler.getStyleFor layer, feature - - feature = layer.feature i - feature.properties.$type = type = [undefined, "Point", "LineString", "Polygon"][feature.type] - - if @styler - style = @styler.getStyleFor name, feature - continue unless style - - color = - style.paint['line-color'] or - style.paint['fill-color'] or - style.paint['text-color'] - - # TODO: style zoom stops handling - if color instanceof Object - color = color.stops[0][1] - - colorCode = colorCache[color] or colorCache[color] = x256 utils.hex2rgb color - - # TODO: monkey patching test case for tiles with a reduced extent 4096 / 8 -> 512 - # use feature.loadGeometry() again as soon as we got a 512 extent tileset - geometries = feature.loadGeometry() #@_reduceGeometry feature, 8 - - sort = feature.properties.localrank or feature.properties.scalerank - label = if style.type is "symbol" - feature.properties["name_"+config.language] or - feature.properties.name_en or - feature.properties.name or - feature.properties.house_num - else - undefined - - if style.type is "fill" - nodes.push @_addBoundaries true, -# id: feature.id - layer: name - style: style - label: label - sort: sort - points: geometries - color: colorCode - - else - - for points in geometries - nodes.push @_addBoundaries false, -# id: feature.id - layer: name - style: style - label: label - sort: sort - points: points - color: colorCode - - - tree = rbush 18 - tree.load nodes - - layers[name] = - extent: layer.extent - tree: tree - - @layers = layers - - _addBoundaries: (deep, data) -> - minX = Infinity - maxX = -Infinity - minY = Infinity - maxY = -Infinity - - for p in (if deep then data.points[0] else data.points) - minX = p.x if p.x < minX - maxX = p.x if p.x > maxX - minY = p.y if p.y < minY - maxY = p.y if p.y > maxY - - data.minX = minX - data.maxX = maxX - data.minY = minY - data.maxY = maxY - data - - _reduceGeometry: (feature, factor) -> - for points, i in feature.loadGeometry() - reduced = [] - last = null - for point in points - p = - x: Math.floor point.x/factor - y: Math.floor point.y/factor - - if last and last.x is p.x and last.y is p.y - continue - - reduced.push last = p - - reduced - -module.exports = Tile diff --git a/src/Tile.js b/src/Tile.js index 58ecc7f..15b701d 100644 --- a/src/Tile.js +++ b/src/Tile.js @@ -53,12 +53,11 @@ class Tile { } _loadLayers() { - var color, colorCache, colorCode, k, layers, len, nodes, points, style, tree; - layers = {}; - colorCache = {}; + const layers = {}; + const colorCache = {}; for (const name in this.tile.layers) { const layer = this.tile.layers[name]; - nodes = []; + const nodes = []; //continue if name is 'water' for (let i = 0; i < layer.length; i++) { // TODO: caching of similar attributes to avoid looking up the style each time @@ -66,13 +65,14 @@ class Tile { const feature = layer.feature(i); feature.properties.$type = [undefined, 'Point', 'LineString', 'Polygon'][feature.type]; + let style; if (this.styler) { style = this.styler.getStyleFor(name, feature); if (!style) { continue; } } - color = ( + let color = ( style.paint['line-color'] || style.paint['fill-color'] || style.paint['text-color'] @@ -81,7 +81,7 @@ class Tile { if (color instanceof Object) { color = color.stops[0][1]; } - colorCode = colorCache[color] || (colorCache[color] = x256(utils.hex2rgb(color))); + const colorCode = colorCache[color] || (colorCache[color] = x256(utils.hex2rgb(color))); // TODO: monkey patching test case for tiles with a reduced extent 4096 / 8 -> 512 // use feature.loadGeometry() again as soon as we got a 512 extent tileset const geometries = feature.loadGeometry(); //@_reduceGeometry feature, 8 @@ -98,10 +98,9 @@ class Tile { color: colorCode, })); } else { - for (k = 0, len = geometries.length; k < len; k++) { - points = geometries[k]; + for (const points of geometries) { nodes.push(this._addBoundaries(false, { - // id: feature.id + //id: feature.id, layer: name, style, label, @@ -112,11 +111,11 @@ class Tile { } } } - tree = rbush(18); + const tree = rbush(18); tree.load(nodes); layers[name] = { extent: layer.extent, - tree: tree, + tree, }; } return this.layers = layers; @@ -142,16 +141,13 @@ class Tile { } _reduceGeometry(feature, factor) { - var i, j, k, last, len, len1, p, point, points, reduced, ref, results; - ref = feature.loadGeometry(); - results = []; - for (i = j = 0, len = ref.length; j < len; i = ++j) { - points = ref[i]; - reduced = []; - last = null; - for (k = 0, len1 = points.length; k < len1; k++) { - point = points[k]; - p = { + const results = []; + const geometries = feature.loadGeometry(); + for (const points of geometries) { + const reduced = []; + let last; + for (const point of points) { + const p = { x: Math.floor(point.x / factor), y: Math.floor(point.y / factor) };