CartoDB-SQL-API/app/models/formats/topojson.js
Sandro Santilli 76705a3fd7 Refactor format objects to expose a common stream-able interface
See app/models/formats/README for info
2013-05-28 10:36:15 +02:00

48 lines
1.2 KiB
JavaScript

var pg = require('./pg');
var _ = require('underscore')
var geojson = require('./geojson');
var TopoJSON = require('topojson');
function topojson() { }
topojson.prototype = new pg('topojson');
var p = topojson.prototype;
p.getQuery = function(sql, options) {
var sql = geojson.prototype.getQuery(sql, options);
return sql + ' where ' + options.gn + ' is not null';
};
p.transform = function(result, options, callback) {
toTopoJSON(result, options.gn, options.skipfields, callback);
};
function toTopoJSON(data, gn, skipfields, callback){
geojson.toGeoJSON(data, gn, function(err, geojson) {
if ( err ) {
callback(err, null);
return;
}
var topology = TopoJSON.topology(geojson.features, {
/* TODO: expose option to API for requesting an identifier
"id": function(o) {
console.log("id called with obj: "); console.dir(o);
return o;
},
*/
"quantization": 1e4, // TODO: expose option to API (use existing "dp" for this ?)
"force-clockwise": true,
"property-filter": function(d) {
// TODO: delegate skipfields handling to toGeoJSON
return skipfields.indexOf(d) != -1 ? null : d;
}
});
callback(err, topology);
});
}
module.exports = topojson;