From 27aea1cf4880549bf83338c9f85697fe82fb4e2b Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 14 Aug 2015 15:57:05 +0300 Subject: [PATCH] return null on invalid/non-existing tiles --- README.md | 6 +++++- src/index.js | 6 +++++- test/test-get-tile.js | 14 +++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f1ae345..a7a2104 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,11 @@ npm run build-min # minified production build ### Changelog -##### 2.1.3 (Aug 14, 2015) +##### 2.1.4 (Aug 14, 2015) + +- Improved `getTile` to always return `null` on non-existing or invalid tiles. + +##### 2.1.3 (Aug 13, 2015) - Added `solidChildren` option that includes children of solid filled square tiles in the index (off by default). - Added back solid tile heuristics (not tiling solid filled square tiles further). diff --git a/src/index.js b/src/index.js index 8e5a7b1..7af87ba 100644 --- a/src/index.js +++ b/src/index.js @@ -175,6 +175,8 @@ GeoJSONVT.prototype.getTile = function (z, x, y) { parent = this.tiles[toID(z0, x0, y0)]; } + if (!parent) return null; + if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0); // if we found a parent tile containing the original geometry, we can drill down from it @@ -186,11 +188,13 @@ GeoJSONVT.prototype.getTile = function (z, x, y) { if (debug > 1) console.timeEnd('drilling down'); } + if (!this.tiles[id]) return null; + return transformTile(this.tiles[id], extent); }; function transformTile(tile, extent) { - if (!tile || tile.transformed) return tile; + if (tile.transformed) return tile; var z2 = tile.z2, tx = tile.x, diff --git a/test/test-get-tile.js b/test/test-get-tile.js index 08f1a6c..8d31e7c 100644 --- a/test/test-get-tile.js +++ b/test/test-get-tile.js @@ -17,16 +17,16 @@ test('getTile: us-states.json', function (t) { console.log = function () {}; var index = geojsonvt(getJSON('us-states.json'), {debug: 2}); - var tile1 = index.getTile(7, 37, 48).features, - tile2 = index.getTile(9, 148, 192).features, - tile3 = index.getTile(11, 592, 768).features; - console.log = log; - t.same(tile1, getJSON('us-states-z7-37-48.json'), 'z7-37-48'); + t.same(index.getTile(7, 37, 48).features, getJSON('us-states-z7-37-48.json'), 'z7-37-48'); + + t.same(index.getTile(9, 148, 192).features, square, 'z9-148-192 (clipped square)'); + t.same(index.getTile(11, 592, 768).features, square, 'z11-592-768 (clipped square)'); + + t.equal(index.getTile(11, 800, 400), null, 'non-existing tile'); + t.equal(index.getTile(-5, 123.25, 400.25), null, 'invalid tile'); - t.same(tile2, square, 'z9-148-192 (clipped square)'); - t.same(tile3, square, 'z11-592-768 (clipped square)'); t.end(); });