Update getIndexableDocs for geojson handling in carmen.

This commit is contained in:
Young Hahn
2013-12-13 03:31:50 -05:00
parent 9d378dc261
commit da8cc54128
3 changed files with 56 additions and 25 deletions

View File

@@ -602,18 +602,7 @@ MBTiles.prototype.getIndexableDocs = function(pointer, callback) {
// documents from an MBTiles database without having to know what search
// field was used in the past (see comment below).
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) {
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));
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);
}
// 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 ?;";
args = [info.maxzoom, pointer.limit, pointer.offset];
}
this._db.all(sql, args, function(err, rows) {
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));
this._db.all(sql, args, makedocs);
}.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);
};
};