diff options
-rw-r--r-- | src/nodejs/no1.js | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/src/nodejs/no1.js b/src/nodejs/no1.js index d846276..1b71766 100644 --- a/src/nodejs/no1.js +++ b/src/nodejs/no1.js @@ -1,13 +1,29 @@ - var clutch = require('clutch'); var pg = require('pg'); var builder = require('xmlbuilder'); + +// load config var config = require('./config.json'); +process.argv.forEach( + function (val,index, array){ + if(val=="-c"){ + path = array[index+1]; + if( path[0] != '/'){ + path = __dirname + '/' + path; + } + config = require(path); + } + }); +var connectionString = config['connectionString']; +//set up logger +var log4js = require('log4js')(); //note the need to call the function +//log4js.addAppender(log4js.fileAppender('osm-xapi.log'), 'cheese'); -var connectionString = config['connectionString']; -console.log("server starting..."); -console.log("Connection String: " + connectionString); +var logger = log4js.getLogger('global'); +logger.setLevel('ALL'); + +logger.info("server starting..."); function toISO8601(date) { //2007-03-31T00:09:22+01:00 @@ -33,12 +49,12 @@ function toISO8601(date) { ].join(''); } 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(" + + 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(" + + 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));"; } @@ -57,14 +73,14 @@ function nodeBboxHandler(req, res, key, value, left, bottom, right, top) { 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() { //console.log("end event\n"); if(success) { @@ -78,17 +94,17 @@ function nodeBboxHandler(req, res, key, value, left, bottom, right, top) { //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("<xml>"); } - + console.log(row); - + var node = builder.begin('node') .att('id', row.id) .att('timetamp', toISO8601(row.tstamp)) @@ -102,7 +118,7 @@ function nodeBboxHandler(req, res, key, value, left, bottom, right, top) { node.ele('tag') .att('k',escape(temp[x])) .att('v',escape(temp[x+1])); - } + } res.write(builder.toString({ pretty: true })); }); @@ -137,13 +153,13 @@ function wayBboxHandler(req, res, key, value, left, bottom, right, top) { var success = false; //console.log(createWayBboxQuery(key, value, left, bottom, right, top)); var query = client.query(createWayBboxQuery(key, value, left, bottom, right, top)); - + query.on('error', function(err) { console.log(err); res.writeHead(404,{}); res.end(); }); - + query.on('end', function() { if(success) { if(count == 0) { @@ -159,7 +175,7 @@ function wayBboxHandler(req, res, key, value, left, bottom, right, top) { //perhaps write 404? } }); - + query.on('row', function(row) { if(!success) { success = true; @@ -195,10 +211,10 @@ function wayBboxHandler(req, res, key, value, left, bottom, right, top) { } res.write(builder.toString({pretty:'true'})); }); - + //console.log(createNodesForWayQuery(row.nodes)); } - + var way = builder.begin('way') .att('id', row.id) .att('timetamp', toISO8601(row.tstamp)) @@ -211,19 +227,19 @@ function wayBboxHandler(req, res, key, value, left, bottom, right, top) { .att('k',escape(temp[x])) .att('v',escape(temp[x+1])); } - + var temp = row.nodes.replace("{","").replace("}","").split(","); for(var x=0;x<temp.length;x++) way.ele('nd') .att('ref',temp[x]); - + res.write(builder.toString({pretty:'true'})); }); - }); + }); } function relationWorldHandler(req, res, key, value) { - + res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(' key:' +key +' value:'+value+'!\n'); } @@ -246,4 +262,4 @@ myRoutes = clutch.route404([ var http = require('http'); http.createServer(myRoutes).listen(config.port, config.host); -console.log("Started server at " + config.host + ":" + config.port ); +logger.info("Started server at " + config.host + ":" + config.port ); |