var clutch = require('clutch'); var pg = require('pg') var builder = require('xmlbuilder') var connectionString = "pg://user:password@host/database"; function createDateString(date) { //2006-09-11T16:28:25+01:00 time format date = Date(date); return date.getUTCFullYear() + "-" + date.getUTCDate() + "-" + date.getUTCDate() + "T"; } function createWayBboxQuery(key, value, left, bottom, right, top) { return "SELECT id,tstamp,version,changeset_id, nodes, user_id, hstore_to_array(tags) as tags FROM ways WHERE (tags @> hstore('" + key + "','" + value + "') AND linestring && st_setsrid(st_makebox2d(st_setsrid(st_makepoint(" + left + "," + bottom + "),4326), st_setsrid(st_makepoint(" + right + "," + top + "),4326)),4326));"; } function createNodeBboxQuery(key, value, left, bottom, right, top) { return "SELECT id, user_id,tstamp,version,changeset_id, hstore_to_array(tags) as tags, X(geom) as lat, Y(geom) as lon FROM nodes WHERE (tags @> hstore('" + key + "','" + value + "') AND geom && st_setsrid(st_makebox2d(st_setsrid(st_makepoint(" + left + "," + bottom + "),4326), st_setsrid(st_makepoint(" + right + "," + top + "),4326)),4326));"; } function createNodesForWayQuery(nodes) { return "SELECT id, tstamp, version, changeset_id, hstore_to_array(tags) as tags, X(geom) as lat, Y(geom) as lon FROM nodes WHERE id = ANY('" + nodes + "');"; } function nodeWorldHandler(req, res, key, value) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(' key:' +key +' value:'+value+'\n'); } function nodeBboxHandler(req, res, key, value, left, bottom, right, top) { pg.connect(connectionString, function(err,client) { if (err) { console.log(err); res.writeHead(404,{}); res.end('\n'); } else { //console.log(createNodeBboxQuery(key, value, left, bottom, right, top)); var success = false; var query = client.query(createNodeBboxQuery(key, value, left, bottom, right, top)); query.on('error', function(err) { console.log(err); res.writeHead(404,{}); res.end('\n'); }); query.on('end', function() { if(success) { res.write(""); res.end(); } else { //perhaps write 404? is error also raised? } }); query.on('row', function(row) { if(!success) { success = true; res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(""); } console.log(row); var node = builder.begin('node') .att('id', row.id) .att('timetamp', row.tstamp) .att('version', row.version) .att('changeset', row.changeset_id) .att('lat', row.lat) .att('lon', row.lon); var temp = row.tags.replace("{","").replace("}","").split(","); for(var x=0;x"); res.end(); //problem!!! } else { res.end(); //perhaps write 404? } }); query.on('row', function(row) { if(!success) { success = true; res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(""); } //console.log(row); if(row.nodes != '{}') { var subquery = client.query(createNodesForWayQuery(row.nodes)); subquery.on('error',function(err) {}); subquery.on('row', function(row) { console.log(row); var node = builder.begin('node') .att('id', row.id) .att('timetamp', row.tstamp) .att('version', row.version) .att('changeset', row.changeset_id) .att('lat', row.lat) .att('lon', row.lon); var temp = row.tags.replace("{","").replace("}","").split(","); for(var x=0;x