Update getIndexableDocs for geojson handling in carmen.
This commit is contained in:
+25
-24
@@ -602,18 +602,7 @@ MBTiles.prototype.getIndexableDocs = function(pointer, callback) {
|
|||||||
// documents from an MBTiles database without having to know what search
|
// documents from an MBTiles database without having to know what search
|
||||||
// field was used in the past (see comment below).
|
// field was used in the past (see comment below).
|
||||||
if (pointer.table === 'carmen') {
|
if (pointer.table === 'carmen') {
|
||||||
return this._db.all('SELECT c.id AS id, c.text AS text, c.zxy, k.key_json FROM carmen c JOIN keymap k ON c.id = k.key_name LIMIT ? OFFSET ?', pointer.limit, pointer.offset, function(err, rows) {
|
return this._db.all('SELECT c.id AS id, c.text AS text, c.zxy, k.key_json FROM carmen c JOIN keymap k ON c.id = k.key_name LIMIT ? OFFSET ?', pointer.limit, pointer.offset, makedocs);
|
||||||
if (err) return callback(err);
|
|
||||||
var docs = rows.map(function(row) {
|
|
||||||
var doc = JSON.parse(row.key_json);
|
|
||||||
doc._id = row.id;
|
|
||||||
doc._text = row.text;
|
|
||||||
if (row.zxy) doc._zxy = tms2zxy(row.zxy);
|
|
||||||
return doc;
|
|
||||||
});
|
|
||||||
pointer.offset += pointer.limit;
|
|
||||||
return callback(null, docs, pointer);
|
|
||||||
}.bind(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// By default the keymap table contains all indexable documents.
|
// By default the keymap table contains all indexable documents.
|
||||||
@@ -627,18 +616,30 @@ MBTiles.prototype.getIndexableDocs = function(pointer, callback) {
|
|||||||
sql = "SELECT k.key_name AS id, k.key_json, GROUP_CONCAT(zoom_level||'/'||tile_column ||'/'||tile_row,',') AS zxy FROM keymap k JOIN grid_key g ON k.key_name = g.key_name JOIN map m ON g.grid_id = m.grid_id WHERE m.zoom_level=? GROUP BY k.key_name LIMIT ? OFFSET ?;";
|
sql = "SELECT k.key_name AS id, k.key_json, GROUP_CONCAT(zoom_level||'/'||tile_column ||'/'||tile_row,',') AS zxy FROM keymap k JOIN grid_key g ON k.key_name = g.key_name JOIN map m ON g.grid_id = m.grid_id WHERE m.zoom_level=? GROUP BY k.key_name LIMIT ? OFFSET ?;";
|
||||||
args = [info.maxzoom, pointer.limit, pointer.offset];
|
args = [info.maxzoom, pointer.limit, pointer.offset];
|
||||||
}
|
}
|
||||||
this._db.all(sql, args, function(err, rows) {
|
this._db.all(sql, args, makedocs);
|
||||||
if (err) return callback(err);
|
|
||||||
var docs = rows.map(function(row) {
|
|
||||||
var doc = JSON.parse(row.key_json);
|
|
||||||
doc._id = row.id;
|
|
||||||
doc._text = doc.search || doc.name || '';
|
|
||||||
if (row.zxy) doc._zxy = tms2zxy(row.zxy);
|
|
||||||
return doc;
|
|
||||||
});
|
|
||||||
pointer.offset += pointer.limit;
|
|
||||||
return callback(null, docs, pointer);
|
|
||||||
}.bind(this));
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
function makedocs(err, rows) {
|
||||||
|
if (err) return callback(err);
|
||||||
|
var docs = [];
|
||||||
|
for (var i = 0; i < rows.length; i++) {
|
||||||
|
var row = rows[i];
|
||||||
|
var doc = JSON.parse(row.key_json);
|
||||||
|
var text = row.text || doc.search || doc.name || '';
|
||||||
|
if (!('lon' in doc) || !('lat' in doc)) continue;
|
||||||
|
if (!text) continue;
|
||||||
|
doc._id = row.id;
|
||||||
|
doc._text = text;
|
||||||
|
doc._zxy = row.zxy ? tms2zxy(row.zxy) : [];
|
||||||
|
doc._center = [doc.lon, doc.lat];
|
||||||
|
if (doc.bounds) doc._bbox = doc.bounds.split(',').map(function(v) { return parseFloat(v) });
|
||||||
|
delete doc.lon;
|
||||||
|
delete doc.lat;
|
||||||
|
delete doc.bounds;
|
||||||
|
docs.push(doc);
|
||||||
|
}
|
||||||
|
pointer.offset += pointer.limit;
|
||||||
|
return callback(null, docs, pointer);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
BIN
Binary file not shown.
+31
-1
@@ -26,7 +26,7 @@ before(function(done) {
|
|||||||
index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', done);
|
index = new MBTiles(__dirname + '/fixtures/geocoder_data.mbtiles', done);
|
||||||
});
|
});
|
||||||
before(function(done) {
|
before(function(done) {
|
||||||
from = new MBTiles(__dirname + '/fixtures/plain_4.mbtiles', done);
|
from = new MBTiles(__dirname + '/fixtures/geocoder_legacy.mbtiles', done);
|
||||||
});
|
});
|
||||||
before(function(done) {
|
before(function(done) {
|
||||||
to = new MBTiles(tmp + '/indexed.mbtiles', done);
|
to = new MBTiles(tmp + '/indexed.mbtiles', done);
|
||||||
@@ -79,10 +79,40 @@ it('getIndexableDocs', function(done) {
|
|||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(docs.length, 10);
|
assert.equal(docs.length, 10);
|
||||||
assert.deepEqual(pointer, { limit: 10, offset: 10, nogrids: false });
|
assert.deepEqual(pointer, { limit: 10, offset: 10, nogrids: false });
|
||||||
|
assert.deepEqual(docs[0], {
|
||||||
|
AREA: 0,
|
||||||
|
FIPS: 'AA',
|
||||||
|
ISO2: 'AW',
|
||||||
|
ISO3: 'ABW',
|
||||||
|
name: 'Aruba',
|
||||||
|
POP2005: 102897,
|
||||||
|
REGION: 19,
|
||||||
|
SUBREGION: 29,
|
||||||
|
UN: 533,
|
||||||
|
_id: 'ABW',
|
||||||
|
_text: 'Aruba',
|
||||||
|
_zxy: [ '4/4/7' ],
|
||||||
|
_center: [ -69.977, 12.517 ]
|
||||||
|
});
|
||||||
from.getIndexableDocs(pointer, function(err, docs, pointer) {
|
from.getIndexableDocs(pointer, function(err, docs, pointer) {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
assert.equal(docs.length, 10);
|
assert.equal(docs.length, 10);
|
||||||
assert.deepEqual(pointer, { limit: 10, offset: 20, nogrids: false });
|
assert.deepEqual(pointer, { limit: 10, offset: 20, nogrids: false });
|
||||||
|
assert.deepEqual(docs[0], {
|
||||||
|
AREA: 20,
|
||||||
|
FIPS: 'AQ',
|
||||||
|
ISO2: 'AS',
|
||||||
|
ISO3: 'ASM',
|
||||||
|
name: 'American Samoa',
|
||||||
|
POP2005: 64051,
|
||||||
|
REGION: 9,
|
||||||
|
SUBREGION: 61,
|
||||||
|
UN: 16,
|
||||||
|
_id: 'ASM',
|
||||||
|
_text: 'American Samoa',
|
||||||
|
_zxy: [ '4/0/8' ],
|
||||||
|
_center: [ -170.73, -14.318 ]
|
||||||
|
});
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user