var stream = require("stream"); function isInBbox(position, bbox) { if(position.lat > bbox.top || position.lat < bbox.bottom) return false; if(bbox.right < bbox.left) // bbox spans over lon = 180 return (position.lon > bbox.left || position.lon < bbox.right); else return (position.lon > bbox.left && position.lon < bbox.right); } function filterStream(inStream, filterFunction) { var ret = new stream.Readable({ objectMode: true }); inStream.on("data", function(data) { var data = filterFunction(data); if(data != null) ret.push(data); }).on("end", function() { ret.push(); }).on("error", function(err) { ret.emit("error", err); }); ret._read = function() { }; return ret; } function extend(obj1, obj2) { for(var i=1; i