diff --git a/.gitignore b/.gitignore index b33eac6..7dc54af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules test/fixtures/non_existent.mbtiles +test/fixtures/empty.mbtiles +test/fixtures/output diff --git a/lib/zxystream.js b/lib/zxystream.js index 0c993f4..c557ddd 100644 --- a/lib/zxystream.js +++ b/lib/zxystream.js @@ -31,7 +31,10 @@ ZXYStream.prototype._read = function() { // Prepare sql statement if (!stream.statement) { - stream.statement = this.source._db.prepare('SELECT zoom_level AS z, tile_column AS x, tile_row AS y FROM ' + this.table, function(err) { + var query = 'SELECT zoom_level AS z, tile_column AS x, tile_row AS y FROM ' + this.table; + if (this.table === 'map') query += ' WHERE tile_id is not null'; + + stream.statement = this.source._db.prepare(query, function(err) { if (err && err.code === 'SQLITE_ERROR' && /no such table/.test(err.message)) return stream.push(null); return stream._read(); }); diff --git a/test/fixtures/some-empty-tiles.mbtiles b/test/fixtures/some-empty-tiles.mbtiles new file mode 100644 index 0000000..61657b5 Binary files /dev/null and b/test/fixtures/some-empty-tiles.mbtiles differ diff --git a/test/zxystream.js b/test/zxystream.js index b568ae2..3512842 100644 --- a/test/zxystream.js +++ b/test/zxystream.js @@ -145,3 +145,20 @@ tape('zxystream empty zxystream', function(assert) { assert.end(); }); }); + +tape('zxystream ignores map coords without tile_ids', function(assert) { + new MBTiles(__dirname + '/fixtures/some-empty-tiles.mbtiles', function(err, src) { + if (err) throw err; + var stream = src.createZXYStream(); + var called = 0; + stream.on('data', function(lines) { + lines.toString().split('\n').forEach(function(coord) { + if (coord) called++; + }); + }); + stream.on('end', function() { + assert.equal(called, 11, 'found correct number of tiles'); + assert.end(); + }); + }); +});