├── test ├── mykdb │ ├── LOCK │ ├── 000025.log │ ├── CURRENT │ ├── 000017.ldb │ ├── 000022.ldb │ ├── MANIFEST-000024 │ ├── LOG │ └── LOG.old ├── createstream.js └── mapathon.txt ├── examples ├── kinesis │ ├── .gitignore │ ├── sample.env │ ├── package.json │ ├── bin │ │ ├── ops-kinesis.js │ │ └── ops-simulator.js │ └── index.js ├── README.md ├── websockets │ ├── README.md │ ├── websocket-server.js │ └── index.html └── simple │ └── index.js ├── .gitignore ├── index.js ├── bin ├── planet-stream-simulator.js ├── ps-splitter.js └── planet-stream.js ├── lib ├── utils │ ├── logger.js │ ├── splitter.js │ ├── kue_cleanup.js │ └── kinesis.js ├── test_meta_stream.js ├── test_augmented_diff_stream.js ├── streams │ ├── DataStream.js │ ├── AugmentedDiffStream.js │ ├── MetaStream.js │ └── ReplicationStream.js ├── parsers │ ├── MetaParser.js │ ├── DataParser.js │ └── AugmentedDiffParser.js ├── planetstream.js └── simulator.js ├── AUTHORS.txt ├── docker-compose.yml ├── Dockerfile ├── package.json ├── LICENSE └── README.md /test/mykdb/LOCK: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/mykdb/000025.log: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/kinesis/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | -------------------------------------------------------------------------------- /test/mykdb/CURRENT: -------------------------------------------------------------------------------- 1 | MANIFEST-000024 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.rdb 3 | *.log 4 | 5 | -------------------------------------------------------------------------------- /examples/README.md: -------------------------------------------------------------------------------- 1 | # Examples: 2 | 3 | 1. Pushing to Websockets -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib/planetstream'); 2 | -------------------------------------------------------------------------------- /examples/kinesis/sample.env: -------------------------------------------------------------------------------- 1 | 2 | AWS_REGION=us-east-1 3 | STREAM_NAME=osmsim 4 | -------------------------------------------------------------------------------- /test/mykdb/000017.ldb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developmentseed/planet-stream/HEAD/test/mykdb/000017.ldb -------------------------------------------------------------------------------- /test/mykdb/000022.ldb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developmentseed/planet-stream/HEAD/test/mykdb/000022.ldb -------------------------------------------------------------------------------- /test/mykdb/MANIFEST-000024: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/developmentseed/planet-stream/HEAD/test/mykdb/MANIFEST-000024 -------------------------------------------------------------------------------- /bin/planet-stream-simulator.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // OSM Planet Stream simulator 4 | 5 | require('../'); 6 | -------------------------------------------------------------------------------- /lib/utils/logger.js: -------------------------------------------------------------------------------- 1 | module.exports = function (msg) { 2 | console.log('[' + new Date().toISOString() + ':info]', msg) 3 | } 4 | -------------------------------------------------------------------------------- /AUTHORS.txt: -------------------------------------------------------------------------------- 1 | Authors ordered by first contribution 2 | 3 | Marc Farra 4 | Matthew Hanson -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | redis: 2 | image: redis 3 | ports: 4 | - '6379' 5 | app: 6 | build: . 7 | environment: 8 | - LOG_LEVEL='debug' 9 | links: 10 | - redis -------------------------------------------------------------------------------- /lib/test_meta_stream.js: -------------------------------------------------------------------------------- 1 | var MetaStream = require('./streams/MetaStream.js'); 2 | 3 | var meta_stream = MetaStream({pollFreq: 5000}); 4 | 5 | meta_stream.stream.onValue(console.log); 6 | -------------------------------------------------------------------------------- /test/mykdb/LOG: -------------------------------------------------------------------------------- 1 | 2015/09/15-11:59:03.594947 700000611000 Recovering log #23 2 | 2015/09/15-11:59:03.596912 700000611000 Delete type=0 #23 3 | 2015/09/15-11:59:03.597481 700000611000 Delete type=3 #21 4 | -------------------------------------------------------------------------------- /lib/test_augmented_diff_stream.js: -------------------------------------------------------------------------------- 1 | var AugStream = require('./streams/AugmentedDiffStream.js'); 2 | 3 | var aug_stream = AugStream(); 4 | 5 | aug_stream.stream 6 | .map(JSON.parse) 7 | .onValue(function (data) {console.log(data)}); 8 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:6.0 2 | 3 | ADD package.json /tmp/package.json 4 | RUN cd /tmp && npm install 5 | RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/ 6 | 7 | WORKDIR /opt/app 8 | ADD . /opt/app 9 | 10 | CMD ["./bin/planet-stream.js"] 11 | -------------------------------------------------------------------------------- /test/mykdb/LOG.old: -------------------------------------------------------------------------------- 1 | 2015/09/15-00:20:30.804107 700000611000 Recovering log #20 2 | 2015/09/15-00:20:30.812902 700000611000 Level-0 table #22: started 3 | 2015/09/15-00:20:30.825792 700000611000 Level-0 table #22: 757703 bytes OK 4 | 2015/09/15-00:20:30.826745 700000611000 Delete type=0 #20 5 | 2015/09/15-00:20:30.827164 700000611000 Delete type=3 #19 6 | -------------------------------------------------------------------------------- /examples/kinesis/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "osm-planet-stream kinesis", 3 | "version": "0.1.0", 4 | "description": "Add planet-stream data to AWS Kinesis", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Matthew Hanson ", 10 | "license": "BSD-3-Clause", 11 | "dependencies": { 12 | "dotenv": "2.2.0", 13 | "aws-sdk": "2.2.33", 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /examples/websockets/README.md: -------------------------------------------------------------------------------- 1 | # Websockets Example 2 | 3 | Emits the planet stream through a websocket server 4 | 5 | 1. Start a [redis](http://redis.io/) server (for now works only with redis default port) 6 | 7 | 2. Install `node` dependencies 8 | ``` 9 | npm install 10 | ``` 11 | 12 | 3. Start the websocket server 13 | ``` 14 | node websocket-server.js 15 | ``` 16 | 17 | 4. Visit `localhost:8000` using a web browser. Data might take about a minute to propagate from OSM to the browser. 18 | -------------------------------------------------------------------------------- /lib/utils/splitter.js: -------------------------------------------------------------------------------- 1 | var R = require('ramda'); 2 | 3 | // Takes a changeset from the stream and splits it 4 | // into an array of changesets 5 | module.exports = function (changeset, limit) { 6 | if (!R.has('elements', changeset) || limit < 1 || changeset.elements.length <= 1) { 7 | return [changeset]; 8 | } 9 | var numElements = changeset.elements.length; 10 | 11 | var multiElements = R.splitEvery(limit, changeset.elements); 12 | 13 | // For each elementList, create a new changeset 14 | // with the same metadata as the original 15 | return R.map(function (elementList) { 16 | var obj = {}; 17 | obj.metadata = changeset.metadata; 18 | obj.elements = elementList; 19 | return obj; 20 | }, multiElements); 21 | } -------------------------------------------------------------------------------- /test/createstream.js: -------------------------------------------------------------------------------- 1 | var AWS = require('aws-sdk'); 2 | var kinesalite = require('kinesalite'); 3 | 4 | var kinesaliteServer = kinesalite({path: './mykdb'}); 5 | // Listen on port 4567 6 | kinesaliteServer.listen(4567, function (err) { 7 | if (err) throw err; 8 | console.log('Kinesalite started on port 4567'); 9 | }); 10 | AWS.config.region = 'us-west-1'; 11 | var kinesis = new AWS.Kinesis({endpoint: 'http://localhost:4567'}); 12 | kinesis.listStreams(function (err, data) { 13 | console.log(data); 14 | if (err) console.log(err); 15 | if (data.StreamNames[0] !== 'test') { 16 | kinesis.createStream({StreamName: 'test', ShardCount: 1}, function (err, data) { 17 | if (err) console.log(err); 18 | else console.log(data); 19 | }); 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /examples/kinesis/bin/ops-kinesis.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Read and test kinesis streams 4 | 5 | // load environemntal variables 6 | require('dotenv').config() 7 | 8 | kinesis = require('../lib/utils/kinesis.js'); 9 | 10 | kinesis.DescribeStream(process.env.STREAM_NAME).then(console.log); 11 | 12 | /* 13 | kinesis.GetRecords(stream, 10000).then(function(result) { 14 | result.forEach(function(record) { 15 | console.log(JSON.stringify(record)); 16 | }) 17 | }); 18 | */ 19 | 20 | /* 21 | kinesis.getShardIterator(stream.StreamName, function(err, data) { 22 | if (err) console.log(err, err.stack); 23 | else console.log(data); 24 | }) 25 | */ 26 | 27 | 28 | 29 | /* 30 | kinesis.stream({name: 'osmsim'}).on('data', function (data) { 31 | console.log(data.Data.toString()); 32 | }); 33 | 34 | */ 35 | -------------------------------------------------------------------------------- /lib/streams/DataStream.js: -------------------------------------------------------------------------------- 1 | var ReplicationStream = require('./ReplicationStream.js'); 2 | var parser = require('../parsers/DataParser.js'); 3 | var request = require('request'); 4 | 5 | function DataStream () { 6 | function getDataState (that, callback) { 7 | request.get(that.baseURL + '/state.txt', function (err, response, body) { 8 | if (err) callback(err); 9 | else { 10 | var sequenceRe = /sequenceNumber=(\d+)/g; 11 | var matches = body.match(sequenceRe); 12 | callback(null, Number(matches[0].split('=')[1])); 13 | } 14 | }); 15 | } 16 | return new ReplicationStream({ 17 | replicationSequence: getDataState, 18 | baseURL: 'http://planet.osm.org/replication/minute', 19 | filetype: '.osc.gz', 20 | parser: parser 21 | }); 22 | } 23 | 24 | module.exports = DataStream; 25 | -------------------------------------------------------------------------------- /examples/websockets/websocket-server.js: -------------------------------------------------------------------------------- 1 | var planetStream = require('../../'); 2 | var app = require('http').createServer(handler); 3 | var io = require('socket.io')(app); 4 | var fs = require('fs'); 5 | 6 | app.listen(8000); 7 | 8 | function handler (req, res) { 9 | fs.readFile(__dirname + '/index.html', 10 | function (err, data) { 11 | if (err) { 12 | res.writeHead(500); 13 | return res.end('Error loading index.html'); 14 | } 15 | 16 | res.writeHead(200); 17 | res.end(data); 18 | }); 19 | } 20 | 21 | var diffs = planetStream(); 22 | 23 | var buildings = diffs 24 | .map(JSON.parse) 25 | .filter(function (x) { 26 | return x.action === 'create' && x.type === 'way' && 27 | x.tags.building; 28 | }); 29 | 30 | buildings.onValue(function (x) { 31 | console.log(x); 32 | io.emit('buildings', x); 33 | }); 34 | -------------------------------------------------------------------------------- /examples/simple/index.js: -------------------------------------------------------------------------------- 1 | var planetStream = require('../../'); 2 | var diffs = planetStream(); 3 | var R = require('ramda'); 4 | 5 | function getHashtags (str) { 6 | var wordlist = str.split(' '); 7 | var hashlist = []; 8 | wordlist.forEach(function (word) { 9 | if (word.startsWith('#') && !R.contains(word, hashlist)) { 10 | word = word.trim(); 11 | word = word.replace(/,\s*$/, ''); 12 | hashlist.push(word); 13 | } 14 | }); 15 | return hashlist; 16 | } 17 | 18 | var tracked = ['#hotosm-project-1257', '#huracanpatricia']; 19 | 20 | diffs.map(JSON.parse) 21 | .filter(function (data) { 22 | if (!data.metadata.comment) { 23 | return false; 24 | } 25 | var hashtags = getHashtags(data.metadata.comment); 26 | var intersection = R.intersection(hashtags, tracked); 27 | return intersection.length > 0; 28 | }) 29 | .onValue(function (data) { 30 | console.log(data.metadata); 31 | }); 32 | -------------------------------------------------------------------------------- /bin/ps-splitter.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Test this code using the following 4 | // cat test/mapathon.txt | bin/ps-splitter.js --limit=20 5 | 6 | var argv = require('minimist')(process.argv.slice(2)); 7 | var split = require('split'); 8 | var through = require('through'); 9 | var splitter = require('../lib/utils/splitter.js'); 10 | var limit = argv.limit || 20; 11 | 12 | // Map changeset to changesets and push downstream 13 | var tr = through(function (line) { 14 | if (line.length === 0) return; 15 | var changeset = JSON.parse(line); 16 | 17 | var changesets = splitter(changeset, limit); 18 | 19 | changesets.forEach(function (changeset) { 20 | this.queue(JSON.stringify(changeset) + '\n'); 21 | }.bind(this)) 22 | }, function () { 23 | this.queue(null); 24 | }); 25 | 26 | // Read in stdin and pipe to line processor 27 | process.stdin 28 | .pipe(split()) 29 | .pipe(tr) 30 | .pipe(process.stdout); 31 | 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "planet-stream", 3 | "version": "0.4.0", 4 | "description": "Join OSM metadata and data in one stream", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "bin/planet-stream.js", 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [ 11 | "osm", 12 | "openstreetmap", 13 | "stream" 14 | ], 15 | "bin": { 16 | "planet-stream": "bin/planet-stream.js" 17 | }, 18 | "author": "Development Seed", 19 | "license": "BSD-3-Clause", 20 | "dependencies": { 21 | "chance": "^0.8.0", 22 | "ioredis": "^1.7.5", 23 | "kefir": "3.2.0", 24 | "kue": "^0.11.1", 25 | "log": "^1.4.0", 26 | "minimist": "^1.2.0", 27 | "moment": "^2.11.1", 28 | "node-expat": "2.3.10", 29 | "ramda": "0.19.1", 30 | "request": "^2.61.0", 31 | "request-promise": "2.0.0", 32 | "shortid": "^2.2.2", 33 | "through": "^2.3.8" 34 | }, 35 | "devDependencies": { 36 | "split": "^1.0.0", 37 | "through": "^2.3.8" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /examples/kinesis/bin/ops-simulator.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // simulator 4 | var Simulator = require('../lib/simulator.js'); 5 | var simulation = new Simulator(); 6 | 7 | kinesis = require('../lib/kinesis.js') 8 | 9 | var streamName = 'osmsim'; 10 | 11 | 12 | function loopy() { 13 | var x = 0; 14 | while(x < 10) { 15 | data = simulation.randomChangeset(); 16 | kinesis.AddDataToStream(streamName, data); 17 | x = x + 1; 18 | console.log('Added ' + data); 19 | } 20 | } 21 | 22 | // add random data to stream 23 | function randomData() { 24 | data = simulation.randomChangeset() 25 | // put data into kinesis 26 | } 27 | 28 | 29 | console.log('Stream Status'); 30 | kinesis.StreamStatus(streamName).then(console.log); 31 | 32 | // kinesis 33 | console.log('Creating stream ' + streamName); 34 | kinesis.CreateStream(streamName) 35 | //.then( loopy ) 36 | .then( kinesis.ListStreams().then( console.log ) ); 37 | 38 | 39 | loopy(); 40 | 41 | // create stream 42 | //kinesis.CreateStream('osm-sim-test').then( randomData ); 43 | 44 | 45 | // delete stream 46 | //kinesis.DeleteStream().then(); -------------------------------------------------------------------------------- /lib/parsers/MetaParser.js: -------------------------------------------------------------------------------- 1 | var K = require('kefir'); 2 | var expat = require('node-expat'); 3 | 4 | /* Converts osm changeset file to a stream 5 | * of JSON objects 6 | * String -> Stream JSON 7 | */ 8 | function MetaParser (xmlData) { 9 | var xmlParser = new expat.Parser('UTF-8'); 10 | var _tempAttrs = {}; 11 | return K.stream(function (emitter) { 12 | function endTag (symbol, attrs) { 13 | if (symbol === 'changeset') { 14 | emitter.emit(new Buffer(JSON.stringify(_tempAttrs) + '\n'), 'utf8'); 15 | } 16 | if (symbol === 'osm') { 17 | emitter.end(); 18 | } 19 | } 20 | 21 | function startTag (symbol, attrs) { 22 | if (symbol === 'changeset') { 23 | if (attrs) { 24 | _tempAttrs = attrs; 25 | } 26 | } 27 | if (symbol === 'tag' && _tempAttrs && _tempAttrs.open === 'false') { 28 | _tempAttrs[attrs.k] = attrs.v; 29 | } 30 | } 31 | 32 | xmlParser.on('startElement', startTag); 33 | xmlParser.on('endElement', endTag); 34 | xmlParser.on('error', emitter.error); 35 | 36 | xmlParser.write(xmlData); 37 | }); 38 | } 39 | 40 | module.exports = MetaParser; 41 | -------------------------------------------------------------------------------- /lib/utils/kue_cleanup.js: -------------------------------------------------------------------------------- 1 | var kue = require('kue'); 2 | 3 | /* 4 | * Log and remove 5 | */ 6 | function jobRemove(id, reason) { 7 | kue.Job.get( id, function ( err, job ) { 8 | if ( err ) return; 9 | job.remove( function ( err ) { 10 | if ( err ) throw err; 11 | log.info(`Job ${job.id} removed : changeset ${job.data.id} [${reason}]`); 12 | } ); 13 | } ); 14 | } 15 | 16 | module.exports = function (queue) { 17 | [ 18 | [ 'failed', 30 * 24 * 60 * 60 * 1000 ], // 30 days 19 | [ 'active', 1 * 24 * 60 * 60 * 1000 ], // 1 day 20 | [ 'complete', 30 * 24 * 60 * 60 * 1000 ] // 30 days 21 | ].forEach(function (item) { 22 | var job_list = item[0]; 23 | var max_age = item[1]; 24 | 25 | queue[job_list](function(err, ids) { 26 | if (!ids) return; 27 | 28 | ids.forEach(function (id, index) { 29 | kue.Job.get(id, function (err, job) { 30 | if (err || !job) return; 31 | 32 | var created_at = new Date(parseInt(job.created_at)); 33 | var age = parseInt(new Date().getTime() - created_at); 34 | 35 | if (age > max_age) { 36 | jobRemove(job, job_list); 37 | } 38 | }); 39 | }); 40 | }); 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /bin/planet-stream.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // start planet-stream 4 | var argv = require('minimist')(process.argv.slice(2)); 5 | 6 | var R = require('ramda'); 7 | var planetstream = require('../')({ 8 | limit: argv.limit, 9 | host: process.env.REDIS_PORT_6379_TCP_ADDR || process.env.REDIS_HOST || '127.0.0.1', 10 | port: process.env.REDIS_PORT_6379_TCP_PORT || process.env.REDIS_PORT || 6379 11 | }); 12 | 13 | 14 | // parse comments into hashtag list 15 | function getHashtags (str) { 16 | if (!str) return []; 17 | var wordlist = str.split(' '); 18 | var hashlist = []; 19 | wordlist.forEach(function (word) { 20 | if (word.startsWith('#') && !R.contains(word, hashlist)) { 21 | word = word.trim(); 22 | word = word.replace(/,\s*$/, ''); 23 | hashlist.push(word); 24 | } 25 | }); 26 | return hashlist; 27 | } 28 | 29 | // Filter out records that have no metadata 30 | planetstream.map(JSON.parse) 31 | .filter(function (data) { 32 | if (argv['hashtags']) { 33 | if (data.metadata && data.metadata.comment) { 34 | return getHashtags(data.metadata.comment).length > 0; 35 | } 36 | } else { 37 | return data.hasOwnProperty('metadata'); 38 | } 39 | }) 40 | // print out record 41 | .onValue(function (obj) { 42 | var payload = JSON.stringify(obj); 43 | console.log(payload); 44 | }); 45 | -------------------------------------------------------------------------------- /examples/websockets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 24 | 25 | 26 | 27 |
28 |
29 | 58 | 59 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) Development Seed 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | are permitted provided that the following conditions are met: 6 | 7 | - Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | - Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | - Neither the name of Development Seed nor the names of its contributors may 15 | be used to endorse or promote products derived from this software without 16 | specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /examples/kinesis/index.js: -------------------------------------------------------------------------------- 1 | // OSM Planet Stream service 2 | 3 | // load environemntal variables 4 | require('dotenv').config() 5 | 6 | var planetStream = require('../'); 7 | var kinesis = require('./lib/utils/kinesis.js'); 8 | var R = require('ramda'); 9 | 10 | var tracked = ['#missingmaps']; 11 | 12 | 13 | // start planet-stream 14 | var diffs = planetStream(); 15 | 16 | // parse comments into hashtag list 17 | function getHashtags (str) { 18 | if (!str) return []; 19 | var wordlist = str.split(' '); 20 | var hashlist = []; 21 | wordlist.forEach(function (word) { 22 | if (word.startsWith('#') && !R.contains(word, hashlist)) { 23 | word = word.trim(); 24 | word = word.replace(/,\s*$/, ''); 25 | hashlist.push(word); 26 | } 27 | }); 28 | return hashlist; 29 | } 30 | 31 | // filter data for hashtags 32 | diffs.map(JSON.parse) 33 | .filter(function (data) { 34 | if (!data.metadata || !data.metadata.comment) { 35 | return false; 36 | } 37 | var hashtags = R.map(R.toLower, getHashtags(data.metadata.comment)); 38 | // var intersection = R.intersection(hashtags, tracked); 39 | // return intersection.length > 0; 40 | return hashtags.length > 0; 41 | }) 42 | // add a complete record to kinesis 43 | .onValue(function (obj) { 44 | var data = JSON.stringify(obj) 45 | if (obj.metadata) { 46 | var dataParams = { 47 | Data: data, 48 | PartitionKey: obj.metadata.id, 49 | StreamName: process.env.STREAM_NAME 50 | }; 51 | kinesis.kin.putRecord(dataParams, function (err, data) { 52 | if (err) console.error(err); 53 | else console.log(data); 54 | }); 55 | } else { 56 | console.log('No metadata for ' + obj); 57 | } 58 | }); 59 | -------------------------------------------------------------------------------- /lib/streams/AugmentedDiffStream.js: -------------------------------------------------------------------------------- 1 | var K = require('kefir'); 2 | var request = require('request-promise'); 3 | var R = require('ramda'); 4 | var AugmentedDiffParser = require('../parsers/AugmentedDiffParser.js'); 5 | 6 | /* Function that takes an options object and returns 7 | * an augmented diff stream with an associated 'current state' 8 | */ 9 | function AugmentedDiffStream (opts) { 10 | opts = opts || {}; 11 | 12 | var pollFreq = opts.pollFreq || 60 * 1000; 13 | var state_param = opts.state_param || '_status'; 14 | var id_param = opts.id_param || '?id='; 15 | var log = opts.log; 16 | 17 | var base_url = opts.base_url || 'http://overpass-api.de/api/augmented_diff'; 18 | 19 | // State property 20 | var state = K.fromPoll(pollFreq, function () { 21 | log.info('Polling Overpass'); 22 | return K.fromPromise(request(base_url + state_param)); 23 | }) 24 | .flatMap() 25 | .map(function (x) { return Number(x); }) 26 | .skipDuplicates() 27 | .toProperty(R.always(0)); 28 | 29 | // Stream of URls 30 | var urlStrings = state 31 | .changes() 32 | .map(function (x) { return base_url + id_param + x; }) 33 | .map(function (x) { 34 | log.info('Retrieving ' + x + ' from Overpass'); 35 | return x; 36 | }); 37 | 38 | var parsedData = urlStrings 39 | .flatMap(function (x) { 40 | return K.fromPromise(request(x)); 41 | }) 42 | .map(function (x) { 43 | log.info('Data length: ' + x.length); 44 | return x; 45 | }) 46 | .flatMapConcat(AugmentedDiffParser) 47 | .map(R.toString); 48 | 49 | return {state: state, stream: parsedData}; 50 | } 51 | 52 | module.exports = AugmentedDiffStream; 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # planet-stream 2 | 3 | OSM Planet Stream creates a readable `stream` that combines the metadata from [planet.osm.org](http://planet.osm.org) with the [Augmented Diff API](https://wiki.openstreetmap.org/wiki/Overpass_API/Augmented_Diffs). 4 | 5 | 6 | ## Usage 7 | 8 | ### Standalone 9 | 10 | Planet stream uses [redis](http://redis.io) as a backing cache to merge the data from OSM and Overpass. To run standalone, you can either use your own redis server or use the provided Dockerfile. 11 | 12 | #### Docker 13 | 14 | After cloning the repository: 15 | 16 | ``` 17 | docker-compose run -d app 18 | ``` 19 | 20 | TO output data that contains hashtags in the `comment` field 21 | 22 | ``` 23 | docker-compose run -d app bin/planet-stream.js --hashtags 24 | ``` 25 | 26 | STDOUT/STDERR will be available using `docker logs -f [container_name]` 27 | 28 | #### NPM 29 | 30 | 1. Start a [redis](http://redis.io/) server (for now works only with redis default port) 31 | 32 | 2. Install 33 | ``` 34 | npm install -g planet-stream 35 | ``` 36 | 37 | 3. Start 38 | ``` 39 | planet-stream [-v] [--hashtags] 40 | ``` 41 | 42 | Options: 43 | - -v : verbose logging (for debugging) 44 | - --hashtags : only output changesets that contain a 'hashtag' in the comment 45 | 46 | ### Library 47 | 48 | You can include Planet Stream as a library in your own code. `npm install planet-stream` 49 | 50 | ```js 51 | var planet = require('planet-stream')({ 52 | 'port': 6379, 53 | 'host': '127.0.0.1' 54 | }); 55 | 56 | planet.onValue(function (data) { 57 | console.log(data); 58 | }) 59 | ``` 60 | 61 | 62 | ## Simulator 63 | Included in the repo is a simulator for generating test data that has the same schema as `planet-stream` (useful for debugging downstream apps without waiting for OSM) 64 | ``` 65 | bin/ops-simulator.js 66 | ``` 67 | -------------------------------------------------------------------------------- /lib/parsers/DataParser.js: -------------------------------------------------------------------------------- 1 | var expat = require('node-expat'); 2 | var through = require('through'); 3 | 4 | function DataParser () { 5 | var xmlParser = new expat.Parser('UTF-8'); 6 | var currentAction = ''; 7 | var currentElement = {}; 8 | var stream = through(function (data) { 9 | if (data.length > 0) xmlParser.write(data); 10 | }); 11 | 12 | function isChangeTag (symbol) { 13 | return (symbol === 'create' || symbol === 'modify' || 14 | symbol === 'delete'); 15 | } 16 | 17 | function isElement (symbol) { 18 | return (symbol === 'node' || symbol === 'way' || symbol === 'relation'); 19 | } 20 | 21 | function endTag (symbol, attrs) { 22 | if (isElement(symbol)) { 23 | stream.queue(new Buffer(JSON.stringify(currentElement) + '\n'), 'utf8'); 24 | } 25 | } 26 | 27 | function startTag (symbol, attrs) { 28 | if (isChangeTag(symbol)) { 29 | currentAction = symbol; 30 | } 31 | 32 | if (isElement(symbol)) { 33 | currentElement = attrs; 34 | currentElement.action = currentAction; 35 | 36 | // If processing first element in an action, 37 | // set changeset id to first element 'changeset' attribute 38 | if (currentAction.changeset === -1) { 39 | currentAction.changeset = attrs.changeset; 40 | } 41 | currentElement.type = symbol; 42 | currentElement.tags = {}; 43 | 44 | if (symbol === 'way') { currentElement.nodes = []; } 45 | if (symbol === 'relation') { currentElement.members = []; } 46 | } 47 | 48 | if (symbol === 'tag' && currentElement) { 49 | currentElement.tags[attrs.k] = attrs.v; 50 | } 51 | 52 | if (symbol === 'nd' && currentElement && currentElement.type === 'way') { 53 | currentElement.nodes.push(attrs['ref']); 54 | } 55 | 56 | if (symbol === 'member' && currentElement && 57 | currentElement.type === 'relation') { 58 | currentElement.members.push(attrs); 59 | } 60 | } 61 | 62 | xmlParser.on('startElement', startTag); 63 | xmlParser.on('endElement', endTag); 64 | xmlParser.on('error', console.log); 65 | 66 | return stream; 67 | } 68 | 69 | module.exports = DataParser; 70 | 71 | -------------------------------------------------------------------------------- /lib/streams/MetaStream.js: -------------------------------------------------------------------------------- 1 | var K = require('kefir'); 2 | var request = require('request-promise'); 3 | var R = require('ramda'); 4 | var zlib = require('zlib'); 5 | var MetaParser = require('../parsers/MetaParser.js'); 6 | 7 | /* Takes a number representing the state and 8 | * outputs in the format xxx/xxx/xxx with zero 9 | * padding on the left 10 | * Number -> String 11 | */ 12 | function toDirectory (stateNumber) { 13 | // Pad with zeroes 14 | var stateStr = stateNumber.toString(); 15 | var numZeros = 9 - stateStr.length; 16 | var zeros = R.repeat(0, numZeros); 17 | var pipe = R.pipe( 18 | R.split(''), 19 | R.concat(zeros), 20 | R.join(''), 21 | R.splitEvery(3), 22 | R.join('/')); 23 | return pipe(stateStr); 24 | } 25 | 26 | /* Maps a state text file to a state number 27 | * String -> Number 28 | */ 29 | function getState (stateTextFile) { 30 | return Number(stateTextFile.substr(stateTextFile.length - 8)); 31 | } 32 | 33 | function MetaStream (opts) { 34 | opts = opts || {}; 35 | 36 | var base_url = opts.base_url || 'http://planet.osm.org/replication/changesets'; 37 | var pollFreq = opts.pollFreq || 30 * 1000; 38 | var state_param = opts.state_param || '/state.yaml'; 39 | var log = opts.log; 40 | 41 | // State property 42 | var state = K.fromPoll(pollFreq, function () { 43 | log.info('Polling OSM planet'); 44 | return K.fromPromise(request(base_url + state_param)); 45 | }) 46 | .flatMap() 47 | .map(getState) 48 | .skipDuplicates() 49 | .toProperty(R.always(0)); 50 | 51 | // Stream of URls 52 | var urlStrings = state 53 | .changes() 54 | .map(toDirectory) 55 | .map(function (x) { 56 | var fname = base_url + '/' + x + '.osm.gz'; 57 | log.info('Retrieving ' + fname + ' from planet'); 58 | return fname; 59 | }); 60 | 61 | // Stream of JSON objects 62 | var parsedData = urlStrings.flatMap(function (x) { 63 | return K.fromPromise(request({encoding: null, uri: x})); 64 | }) 65 | .map(zlib.unzipSync) 66 | .map(R.toString) 67 | .map(function (x) { 68 | log.info('Metadata length: ' + x.length); 69 | return x; 70 | }) 71 | .flatMap(MetaParser) 72 | .map(R.toString); 73 | 74 | return {state: state, stream: parsedData}; 75 | } 76 | 77 | module.exports = MetaStream; 78 | 79 | -------------------------------------------------------------------------------- /lib/utils/kinesis.js: -------------------------------------------------------------------------------- 1 | // kinesis helper functions 2 | 3 | var Promise = require('bluebird'); 4 | var shortid = require('shortid'); 5 | 6 | var AWS = require('aws-sdk'); 7 | AWS.config.region = process.env.AWS_REGION; 8 | kin = new AWS.Kinesis() 9 | pkinesis = Promise.promisifyAll(kin); 10 | 11 | 12 | function ListStreams() { 13 | return pkinesis.listStreamsAsync().then(function(result) { 14 | return result.StreamNames; 15 | }); 16 | }; 17 | 18 | function DescribeStream(name) { 19 | return pkinesis.describeStreamAsync({StreamName: name}).then(function(result) { 20 | return result.StreamDescription; 21 | }); 22 | } 23 | 24 | function StreamStatus(name) { 25 | return pkinesis.describeStreamAsync({StreamName: name}, function(err, data) { 26 | if (err) return "NOSTREAM"; 27 | }).then(function(result) { 28 | return result.StreamDescription.StreamStatus; 29 | }); 30 | }; 31 | 32 | 33 | // create new stream, return once active 34 | function CreateStream(name) { 35 | return ListStreams().then( function(names) { 36 | console.log('createstream', names); 37 | console.log(names); 38 | 39 | if (names.indexOf(name) == -1) { 40 | pkinesis.createStreamAsync({StreamName: name, ShardCount: 1}, function (err, data) { 41 | if (err) console.error(err); 42 | else console.log(data); 43 | }); 44 | } 45 | }); 46 | 47 | } 48 | 49 | 50 | // Remove stream 51 | function DeleteStream(name) { 52 | 53 | } 54 | 55 | // add data to stream - does not need to be synchronous 56 | function AddDataToStream(name, data) { 57 | var pid = shortid.generate(); 58 | var dataParams = { 59 | Data: JSON.stringify(data), 60 | PartitionKey: pid, 61 | StreamName: name 62 | }; 63 | 64 | pkinesis.putRecord(dataParams, function (err, data) { 65 | if (err) console.error(err); 66 | }); 67 | 68 | } 69 | 70 | function GetRecords(name, num) { 71 | params = {ShardId: 'shardId-000000000000', ShardIteratorType: 'TRIM_HORIZON', StreamName: name} 72 | return pkinesis.getShardIteratorAsync(params).then(function(result) { 73 | var ishard = result.ShardIterator 74 | return pkinesis.getRecordsAsync({ShardIterator: result.ShardIterator, Limit: num}).then(function(result) { 75 | var data = [] 76 | result.Records.forEach(function(record) { 77 | var payload = new Buffer(record.Data, 'base64').toString('utf8') 78 | data.push(JSON.parse(payload)) 79 | }) 80 | return data 81 | }) 82 | }) 83 | } 84 | 85 | module.exports = { 86 | ListStreams,DescribeStream,StreamStatus,CreateStream,DeleteStream,AddDataToStream,GetRecords,kin 87 | }; -------------------------------------------------------------------------------- /lib/parsers/AugmentedDiffParser.js: -------------------------------------------------------------------------------- 1 | var K = require('kefir'); 2 | var R = require('ramda'); 3 | var expat = require('node-expat'); 4 | 5 | /* Converts osm changeset file to a stream 6 | * of JSON objects 7 | * String -> Stream JSON 8 | */ 9 | function AugmentedDiffParser (xmlData) { 10 | var xmlParser = new expat.Parser('UTF-8'); 11 | var currentAction = ''; 12 | var currentElement = {}; 13 | var oldElement = {}; 14 | var currentMode = ''; 15 | var changesetMap = {}; 16 | return K.stream(function (emitter) { 17 | 18 | function isElement (symbol) { 19 | return (symbol === 'node' || symbol === 'way' || symbol === 'relation'); 20 | } 21 | 22 | function endTag (symbol, attrs) { 23 | if (symbol === 'action') { 24 | var changeset = currentElement.changeset; 25 | if (changesetMap[changeset]) { 26 | changesetMap[changeset].push(currentElement); 27 | } else { 28 | changesetMap[changeset] = [currentElement]; 29 | } 30 | } 31 | if (symbol === 'osm') { 32 | for (var key in changesetMap) { 33 | emitter.emit(new Buffer(JSON.stringify({ 34 | 'changeset': key, 35 | 'elements': changesetMap[key] 36 | })), 'utf8'); 37 | } 38 | emitter.end(); 39 | } 40 | } 41 | 42 | function startTag (symbol, attrs) { 43 | if (symbol === 'action') { 44 | currentAction = attrs.type; 45 | } 46 | if (symbol === 'new' || symbol === 'old') { 47 | currentMode = symbol; 48 | } 49 | if (isElement(symbol)) { 50 | if (currentMode === 'new' && (currentAction === 'modify' || 51 | currentAction === 'delete')) { 52 | oldElement = R.clone(currentElement); 53 | currentElement = attrs; 54 | currentElement.old = oldElement; 55 | } else { 56 | currentElement = attrs; 57 | } 58 | currentElement.action = currentAction; 59 | currentElement.type = symbol; 60 | currentElement.tags = {}; 61 | if (symbol === 'way') {currentElement.nodes = []; } 62 | if (symbol === 'relation') {currentElement.members = []; } 63 | } 64 | if (symbol === 'tag' && currentElement) { 65 | currentElement.tags[attrs.k] = attrs.v; 66 | } 67 | 68 | if (symbol === 'nd' && currentElement && currentElement.type === 'way') { 69 | currentElement.nodes.push(attrs); 70 | } 71 | if (symbol === 'member' && currentElement && currentElement.type === 'relation') { 72 | currentElement.members.push(attrs); 73 | } 74 | } 75 | 76 | xmlParser.on('startElement', startTag); 77 | xmlParser.on('endElement', endTag); 78 | xmlParser.on('error', emitter.error); 79 | xmlParser.write(xmlData); 80 | }); 81 | } 82 | 83 | module.exports = AugmentedDiffParser; 84 | 85 | -------------------------------------------------------------------------------- /lib/streams/ReplicationStream.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | var zlib = require('zlib'); 3 | var request = require('request'); 4 | var Readable = require('stream').Readable; 5 | var util = require('util'); 6 | 7 | util.inherits(ReplicationStream, Readable); 8 | 9 | function ReplicationStream (opts) { 10 | if (!(this instanceof ReplicationStream)) return new ReplicationStream(opts); 11 | 12 | opts = opts || {}; 13 | Readable.call(this, opts); 14 | 15 | this.state = 0; 16 | this.delay = opts.delay || 60000; 17 | this.baseURL = opts.baseURL; 18 | this.started = false; 19 | this.parser = opts.parser; 20 | this.filetype = opts.filetype; 21 | this.getReplicationSequence = opts.replicationSequence; 22 | } 23 | 24 | ReplicationStream.prototype._read = function () { 25 | var that = this; 26 | if (!this.started) { 27 | that.getReplicationSequence(that, function (err, sequence) { 28 | if (err) throw new Error(err); 29 | that.state = sequence; 30 | that.run(); 31 | that.started = true; 32 | }); 33 | } 34 | }; 35 | 36 | ReplicationStream.prototype.run = function () { 37 | var that = this; 38 | 39 | function wait () { 40 | setTimeout(function () { next(); }, that.delay); 41 | } 42 | 43 | function next () { 44 | // Add padding to state 45 | var stateStr = that.state.toString().split('').reverse(); 46 | var diff = 9 - stateStr.length; 47 | for (var i = 0; i < diff; i++) { stateStr.push('0'); } 48 | stateStr = stateStr.join(''); 49 | 50 | // XML Parser can only process one document stream 51 | // We need to recreate it every time 52 | var xmlParser = that.parser(); 53 | 54 | function getNextFile () { 55 | // Create request URL in the format xxx/xxx/xxx 56 | var url = ''; 57 | for (i = 0; i < (stateStr.length / 3); i++) { 58 | url += stateStr[i * 3] + stateStr[i * 3 + 1] + stateStr[i * 3 + 2] + '/'; 59 | } 60 | 61 | var nodata = true; 62 | var ss = request.get(that.baseURL + url.split('').reverse().join('') + 63 | that.filetype) 64 | .pipe(zlib.createUnzip()) 65 | .on('data', function (data) { 66 | nodata = (data.length === 0) && nodata; 67 | }) 68 | .on('end', function () { 69 | if (nodata) { 70 | next(); 71 | ss.end(); 72 | } 73 | }) 74 | .pipe(xmlParser) 75 | .on('data', function (data) { 76 | that.push(data); 77 | }) 78 | .on('end', next) 79 | .on('error', function (err) { 80 | throw new Error('from parser', err); 81 | }); 82 | } 83 | 84 | that.getReplicationSequence(that, function (err, sequence) { 85 | if (err) throw new Error(err); 86 | if (sequence >= that.state) { 87 | getNextFile(); 88 | that.state += 1; 89 | } else { 90 | wait(); 91 | } 92 | }); 93 | } 94 | 95 | next(); 96 | }; 97 | 98 | module.exports = ReplicationStream; 99 | 100 | -------------------------------------------------------------------------------- /lib/planetstream.js: -------------------------------------------------------------------------------- 1 | var MetaStream = require('./streams/MetaStream.js'); 2 | var DataStream = require('./streams/AugmentedDiffStream.js'); 3 | var Redis = require('ioredis'); 4 | var K = require('kefir'); 5 | var splitter = require('./utils/splitter.js'); 6 | var kue_cleanup = require('./utils/kue_cleanup.js'); 7 | var kue = require('kue'); 8 | var EventEmitter = require('events'); 9 | 10 | function PlanetStream (opts) { 11 | if (!(this instanceof PlanetStream)) return new PlanetStream(opts); 12 | 13 | // initialize logger 14 | var Log = require('log'); 15 | var log = new Log(process.env.LOG_LEVEL || 'info'); 16 | opts.log = log; 17 | 18 | var host = opts.host || '127.0.0.1'; 19 | var port = opts.port || 6379; 20 | 21 | var redis = new Redis(port, host); 22 | var metaStream = MetaStream(opts); 23 | var dataStream = DataStream(opts); 24 | var metaPipeline = redis.pipeline(); 25 | 26 | /* 27 | * Create the job queue 28 | */ 29 | var queue = kue.createQueue({ 30 | prefix: 'q', 31 | redis: { 32 | port: port, 33 | host: host 34 | }, 35 | jobEvents: false 36 | }); 37 | 38 | /* 39 | * Queue Maintenance 40 | */ 41 | queue.on('error', function (err) { 42 | log.error(err); 43 | }); 44 | 45 | setInterval(function() { 46 | log.debug('Running queue cleanup'); 47 | kue_cleanup(queue); 48 | }, 5 * 60 * 60 * 1000); // Run queue cleanup every 5 minutes 49 | 50 | /* 51 | * When metadata comes in, add it to the cache 52 | */ 53 | 54 | metaStream.stream.map(JSON.parse).onValue(function (data) { 55 | log.debug('Batching before redis metadata: ' + data.id); 56 | metaPipeline.set(data.id, JSON.stringify(data)); 57 | metaPipeline.expire(data.id, 180000); // Expire after three hours 58 | }); 59 | 60 | // When stream stops for 2 seconds, output data to redis 61 | metaStream.stream.debounce(2000).onValue(function () { 62 | log.info('Adding metadata to redis'); 63 | metaPipeline.exec(function (err) {if (err) log.error(err); }); 64 | metaPipeline = redis.pipeline(); 65 | }); 66 | 67 | /* 68 | * When data comes in from overpass, create jobs to associate 69 | * metadata. Jobs are delayed 1 minute and have exponential backoff 70 | * with an expiry of 1 hour. 71 | */ 72 | 73 | dataStream.stream.map(JSON.parse).onValue(function (data) { 74 | log.debug('Creating job for changeset ' + data.changeset + ' data'); 75 | 76 | // Add the elements to redis and create a job 77 | redis.set('data:' + data.changeset, JSON.stringify(data.elements)) 78 | .then(function () { 79 | return redis.expire('data:' + data.changeset, 180000); 80 | }) 81 | .then(function () { 82 | queue.create('overpass', { 83 | id: data.changeset, 84 | title: data.changeset 85 | }) 86 | .delay(60000) 87 | .attempts(8) 88 | .backoff({'type': 'exponential'}) // Keep the job for 2 hours 89 | .save(); 90 | }) 91 | ; 92 | }); 93 | 94 | /* 95 | * Checks if the metadata is in redis 96 | */ 97 | function findMetadata(id, job) { 98 | return redis.get(id).then(function (result) { 99 | job.log('[metadata found]: ' + result); 100 | if (result && result.match(/.*user.*/)) { // If the result is metadata, it has a user field 101 | return JSON.parse(result); 102 | } 103 | else { 104 | throw(new Error('metadata not found')); 105 | } 106 | }); 107 | } 108 | 109 | /* 110 | * Process an item from the queue and send into the result stream 111 | * Once metadata is found, emit the 'metadata' event which the stream 112 | * subscribes to 113 | */ 114 | class PlanetStreamEmitter extends EventEmitter {} 115 | const ps_emitter = new PlanetStreamEmitter(); 116 | 117 | queue.process('overpass', function (job, done) { 118 | var changeset_id = job.data.id; 119 | log.debug(`processing ${changeset_id}`); 120 | return findMetadata(changeset_id, job) 121 | .then(function (metadata) { 122 | redis.get('data:' + metadata.id).then(function(data) { 123 | var fullChangeset = {}; 124 | fullChangeset.metadata = metadata; 125 | fullChangeset.elements = JSON.parse(data) || []; 126 | log.debug('Parsing full changeset complete'); 127 | ps_emitter.emit('changeset', fullChangeset); 128 | done(null, changeset_id); 129 | }); 130 | }) 131 | .catch( function (err) { 132 | done(err); 133 | }); 134 | }); 135 | 136 | 137 | /* 138 | * Stream that subscribes to the metadata event 139 | * When the event is triggered, grab data from redis, combine it 140 | * and send it to the stream 141 | */ 142 | var changesets = K.fromEvents(ps_emitter, 'changeset'); 143 | 144 | if (opts && opts.limit) { 145 | return changesets.map(function (changeset) { 146 | return splitter(changeset, opts.limit); 147 | }).flatten().map(JSON.stringify); 148 | } 149 | 150 | return changesets.map(JSON.stringify); 151 | 152 | } 153 | 154 | module.exports = PlanetStream; 155 | -------------------------------------------------------------------------------- /lib/simulator.js: -------------------------------------------------------------------------------- 1 | var Chance = require('chance'); 2 | var chance = new Chance(); 3 | var R = require('ramda'); 4 | var moment = require('moment'); 5 | var fs = require('fs'); 6 | var path = require('path'); 7 | 8 | // Global 9 | var thingsToDo = ['highway', 'river', 'building', 'amenity']; 10 | var amenities = ['hospital', 'drinking_water', 'clinic', 'school', 'bus_station', 'pharmacy']; 11 | var actions = ['create', 'modify']; 12 | var geojsonLayer = fs.readFileSync(path.join(__dirname, 'country_points.json')); 13 | var countries = JSON.parse(geojsonLayer).features; 14 | 15 | function Simulation () { 16 | this.users = R.times(createUser, 20); 17 | this.ref = chance.integer({min: 1, max: 1000000000}); 18 | this.centers = R.times(mapathon, 10); 19 | this.timestamp = moment(); 20 | } 21 | 22 | // Creates a user 23 | function createUser () { 24 | var stripWhitespace = R.compose(R.join(''), R.split(' ')); 25 | return { 26 | user: stripWhitespace(chance.name()), 27 | uid: chance.integer({min: 1, max: 100000000}), 28 | strength: chance.integer({min: 1, max: 20}), 29 | timestamp: moment(), 30 | consistency: chance.pick(['days', 'months', 'hours']) 31 | } 32 | } 33 | 34 | // Changeset stub 35 | function stub () { 36 | return { 37 | metadata: {}, 38 | elements: [] 39 | }; 40 | } 41 | 42 | function mapathon () { 43 | var country = chance.pick(countries); 44 | return {lat: country.geometry.coordinates[1], lon: country.geometry.coordinates[0], hashtag: chance.hashtag()}; 45 | } 46 | 47 | // Creates a node at a max of 3 deg from center 48 | Simulation.prototype.editNode = function (opts) { 49 | if (!opts.center) throw Error('node needs a center'); 50 | var center = opts.center; 51 | var lat = opts.lat || chance.floating({min: -0.03, max: 0.03}); 52 | var lon = opts.lon || chance.floating({min: -0.03, max: 0.03}); 53 | var node = R.map(R.toString, { 54 | id: this.ref, 55 | lat: center.lat + lat, 56 | lon: center.lon + lon 57 | }); 58 | this.ref += 1; 59 | node.timestamp = this.timestamp.toISOString(); 60 | node.type = 'node'; 61 | node.action = opts.action || 'create'; 62 | return node; 63 | }; 64 | 65 | // Creates a way 66 | Simulation.prototype.editWay = function (opts) { 67 | var center = opts.center; 68 | if (!center) throw Error('way needs a center'); 69 | var action = opts.action; 70 | var n = chance.natural({min: 4, max: 25}); 71 | var lat = chance.floating({min: -0.003, max: 0.003}); 72 | var lon = chance.floating({min: -0.003, max: 0.003}); 73 | var elements = []; 74 | 75 | var dlat = chance.floating({min: -0.00003, max: 0.00003}); 76 | var dlon = chance.floating({min: -0.00003, max: 0.00003}); 77 | 78 | for (var i = 1; i <= n; i++) { 79 | lat = lat + dlat; 80 | lon = lon + dlon; 81 | dlat = dlat + chance.floating({min: -0.00001, max: 0.00001}); 82 | dlon = dlon + chance.floating({min: -0.00001, max: 0.00001}); 83 | elements.push(this.editNode({center: center, 84 | lon: lon, 85 | lat: lat, 86 | action: action})); 87 | } 88 | var refs = elements.map(function (element) { 89 | return { 90 | ref: element.id, 91 | lat: element.lat, 92 | lon: element.lon 93 | }; 94 | }); 95 | 96 | var way = { 97 | timestamp: elements[0].timestamp, 98 | action: action, 99 | type: 'way', 100 | nodes: refs 101 | }; 102 | 103 | // Return the nodes along with the way 104 | if (action === 'create') { 105 | return R.concat([way], elements); 106 | } else { 107 | return [way]; 108 | } 109 | }; 110 | 111 | Simulation.prototype.editHighway = function (changeset, opts) { 112 | var elements = this.editWay(R.pick(['action', 'center'], opts)); 113 | elements[0].tags = { 114 | 'highway': 'yes' 115 | }; 116 | changeset.elements = R.concat(changeset.elements, elements); 117 | return changeset; 118 | }; 119 | 120 | Simulation.prototype.editRiver = function (changeset, opts) { 121 | var elements = this.editWay(R.pick(['action', 'center'], opts)); 122 | elements[0].tags = { 123 | 'waterway': 'river' 124 | }; 125 | changeset.elements = R.concat(changeset.elements, elements); 126 | return changeset; 127 | }; 128 | 129 | Simulation.prototype.editAmenity = function (changeset, opts) { 130 | var element = this.editNode(R.pick(['action', 'center'], opts)); 131 | element.tags = { 132 | 'amenity': chance.pick(amenities) 133 | }; 134 | changeset.elements.push(element); 135 | return changeset; 136 | }; 137 | 138 | // Creates a closed way for buildings 139 | Simulation.prototype.editClosedWay = function (opts) { 140 | var center = opts.center; 141 | if (!center) throw Error('way needs a center'); 142 | var action = opts.action; 143 | var lat = chance.floating({min: 0.01, max: 0.02}); 144 | var lon = chance.floating({min: 0.01, max: 0.02}); 145 | var elements = []; 146 | var prec = 0.0001 * chance.natural({min: 1, max: 5}); 147 | elements.push(this.editNode({center: center, lon: lon, lat: lat, action: action})); 148 | elements.push(this.editNode({center: center, lon: lon + prec, lat: lat, action: action})); 149 | elements.push(this.editNode({center: center, lon: lon + prec, lat: lat + prec, action: action})); 150 | elements.push(this.editNode({center: center, lon: lon, lat: lat + prec, action: action})); 151 | elements.push(this.editNode({center: center, lon: lon, lat: lat, action: action})); 152 | var refs = elements.map(function (element) { 153 | return { 154 | ref: element.id, 155 | lat: element.lat, 156 | lon: element.lon 157 | }; 158 | }); 159 | 160 | var way = { 161 | timestamp: elements[0].timestamp, 162 | action: action, 163 | type: 'way', 164 | nodes: refs 165 | }; 166 | 167 | // Return the nodes along with the way 168 | if (action === 'create') { 169 | return R.concat([way], elements); 170 | } else { 171 | return [way]; 172 | } 173 | }; 174 | 175 | Simulation.prototype.editBuilding = function (changeset, opts) { 176 | var elements = this.editClosedWay(R.pick(['action', 'center'], opts)); 177 | elements[0].tags = { 178 | 'building': 'yes' 179 | }; 180 | changeset.elements = R.concat(changeset.elements, elements); 181 | return changeset; 182 | }; 183 | 184 | Simulation.prototype.randomChangeset = function () { 185 | var changeset = stub(); 186 | var user = chance.pick(this.users); 187 | this.timestamp = user.timestamp; 188 | user.timestamp = user.timestamp.add(chance.natural({min: 1, max: 10}), user.consistency); 189 | var center = chance.weighted(this.centers, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); 190 | 191 | var user = chance.pick(this.users); 192 | changeset.metadata.user = user.user; 193 | changeset.metadata.uid = user.uid; 194 | changeset.metadata.id = this.ref; 195 | 196 | changeset.metadata.created_at = this.timestamp; 197 | changeset.metadata.closed_at = this.timestamp; 198 | 199 | // changeset pseudo bounding box 200 | changeset.metadata.min_lon = center.lon; 201 | changeset.metadata.max_lon = center.lon; 202 | changeset.metadata.min_lat = center.lat; 203 | changeset.metadata.max_lat = center.lat; 204 | 205 | this.ref += 1; 206 | changeset.metadata.comment = center.hashtag; 207 | 208 | for (var i = 0; i < chance.natural({min: 1, max: 24}); i++) { 209 | // Pick a thing to do 210 | var thing = chance.pick(thingsToDo); 211 | var opts = {action: chance.pick(actions), center: center}; 212 | switch (thing) { 213 | case 'highway': 214 | changeset = this.editHighway(changeset, opts); 215 | break; 216 | case 'river': 217 | changeset = this.editRiver(changeset, opts); 218 | break; 219 | case 'building': 220 | changeset = this.editBuilding(changeset, opts); 221 | break; 222 | case 'amenity': 223 | changeset = this.editAmenity(changeset, opts); 224 | break; 225 | default: 226 | break; 227 | } 228 | } 229 | return changeset; 230 | }; 231 | 232 | module.exports = Simulation; 233 | -------------------------------------------------------------------------------- /test/mapathon.txt: -------------------------------------------------------------------------------- 1 | {"metadata":{"user":"AlbertaFranklin","uid":23158241,"id":480996609,"created_at":"2016-01-28T21:49:44.238Z","closed_at":"2016-01-28T21:49:44.238Z","min_lon":77.25000280651165,"max_lon":77.25000280651165,"min_lat":38.42614158024821,"max_lat":38.42614158024821,"comment":"#genzodbeb"},"elements":[{"timestamp":"2016-01-28T21:49:44.238Z","action":"modify","type":"way","nodes":[{"ref":"480996610","lat":"38.42674158024821","lon":"77.25010280651165"},{"ref":"480996611","lat":"38.42674158024821","lon":"77.25010280651165"},{"ref":"480996612","lat":"38.42674158024821","lon":"77.25010280651165"},{"ref":"480996613","lat":"38.42674158024821","lon":"77.25010280651165"},{"ref":"480996614","lat":"38.42674158024821","lon":"77.25650280651165"},{"ref":"480996615","lat":"38.426841580248215","lon":"77.24990280651164"},{"ref":"480996616","lat":"38.42694158024821","lon":"77.24980280651164"},{"ref":"480996617","lat":"38.427041580248215","lon":"77.24970280651165"},{"ref":"480996618","lat":"38.42714158024821","lon":"77.24960280651165"},{"ref":"480996619","lat":"38.427241580248214","lon":"77.24960280651165"},{"ref":"480996620","lat":"38.42734158024821","lon":"77.24960280651165"},{"ref":"480996621","lat":"38.427441580248214","lon":"77.24960280651165"},{"ref":"480996622","lat":"38.42754158024821","lon":"77.24960280651165"},{"ref":"480996623","lat":"38.42764158024821","lon":"77.24960280651165"},{"ref":"480996624","lat":"38.42774158024822","lon":"77.24960280651165"},{"ref":"480996625","lat":"38.42784158024821","lon":"77.24960280651165"},{"ref":"480996626","lat":"38.427941580248216","lon":"77.24960280651165"},{"ref":"480996627","lat":"38.42804158024821","lon":"77.24960280651165"},{"ref":"480996628","lat":"38.42804158024821","lon":"77.24960280651165"},{"ref":"480996629","lat":"38.42804158024821","lon":"77.24960280651165"},{"ref":"480996630","lat":"38.427941580248216","lon":"77.24950280651164"},{"ref":"480996631","lat":"38.42784158024821","lon":"77.24940280651164"}],"tags":{"waterway":"river"}},{"timestamp":"2016-01-28T21:49:44.238Z","action":"create","type":"way","nodes":[{"ref":"480996632","lat":"38.42324158024822","lon":"77.25140280651165"},{"ref":"480996633","lat":"38.42314158024821","lon":"77.25140280651165"},{"ref":"480996634","lat":"38.42304158024821","lon":"77.25140280651165"},{"ref":"480996635","lat":"38.422941580248214","lon":"77.25150280651164"},{"ref":"480996636","lat":"38.42284158024821","lon":"77.25160280651164"},{"ref":"480996637","lat":"38.422741580248214","lon":"77.25170280651164"},{"ref":"480996638","lat":"38.42264158024821","lon":"77.25180280651165"},{"ref":"480996639","lat":"38.422541580248215","lon":"77.25190280651165"},{"ref":"480996640","lat":"38.42244158024821","lon":"77.25190280651165"},{"ref":"480996641","lat":"38.422341580248215","lon":"77.25190280651165"},{"ref":"480996642","lat":"38.42224158024821","lon":"77.25190280651165"},{"ref":"480996643","lat":"38.422141580248216","lon":"77.25190280651165"},{"ref":"480996644","lat":"38.421941580248216","lon":"77.25190280651165"},{"ref":"480996645","lat":"38.42174158024822","lon":"77.25190280651165"},{"ref":"480996646","lat":"38.42164158024821","lon":"77.25190280651165"},{"ref":"480996647","lat":"38.421441580248214","lon":"77.25190280651165"},{"ref":"480996648","lat":"38.421241580248214","lon":"77.25190280651165"},{"ref":"480996649","lat":"38.42114158024821","lon":"77.25190280651165"},{"ref":"480996650","lat":"38.421041580248215","lon":"77.25190280651165"},{"ref":"480996651","lat":"38.42094158024821","lon":"77.25190280651165"},{"ref":"480996652","lat":"38.420841580248215","lon":"77.25190280651165"}],"tags":{"highway":"yes"}},{"id":"480996632","lat":"38.42324158024822","lon":"77.25140280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996633","lat":"38.42314158024821","lon":"77.25140280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996634","lat":"38.42304158024821","lon":"77.25140280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996635","lat":"38.422941580248214","lon":"77.25150280651164","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996636","lat":"38.42284158024821","lon":"77.25160280651164","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996637","lat":"38.422741580248214","lon":"77.25170280651164","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996638","lat":"38.42264158024821","lon":"77.25180280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996639","lat":"38.422541580248215","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996640","lat":"38.42244158024821","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996641","lat":"38.422341580248215","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996642","lat":"38.42224158024821","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996643","lat":"38.422141580248216","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996644","lat":"38.421941580248216","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996645","lat":"38.42174158024822","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996646","lat":"38.42164158024821","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996647","lat":"38.421441580248214","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996648","lat":"38.421241580248214","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996649","lat":"38.42114158024821","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996650","lat":"38.421041580248215","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996651","lat":"38.42094158024821","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996652","lat":"38.420841580248215","lon":"77.25190280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996653","lat":"38.42304158024821","lon":"77.27210280651164","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create","tags":{"amenity":"school"}},{"timestamp":"2016-01-28T21:49:44.238Z","action":"create","type":"way","nodes":[{"ref":"480996654","lat":"38.42784158024821","lon":"77.25060280651165"},{"ref":"480996655","lat":"38.42774158024822","lon":"77.25060280651165"},{"ref":"480996656","lat":"38.42764158024821","lon":"77.25060280651165"},{"ref":"480996657","lat":"38.427441580248214","lon":"77.25060280651165"},{"ref":"480996658","lat":"38.427241580248214","lon":"77.25060280651165"}],"tags":{"highway":"yes"}},{"id":"480996654","lat":"38.42784158024821","lon":"77.25060280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996655","lat":"38.42774158024822","lon":"77.25060280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996656","lat":"38.42764158024821","lon":"77.25060280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996657","lat":"38.427441580248214","lon":"77.25060280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"id":"480996658","lat":"38.427241580248214","lon":"77.25060280651165","timestamp":"2016-01-28T21:49:44.238Z","type":"node","action":"create"},{"timestamp":"2016-01-28T21:49:44.238Z","action":"modify","type":"way","nodes":[{"ref":"480996659","lat":"38.427041580248215","lon":"77.25260280651165"},{"ref":"480996660","lat":"38.42714158024821","lon":"77.25250280651164"},{"ref":"480996661","lat":"38.42714158024821","lon":"77.25240280651164"},{"ref":"480996662","lat":"38.42714158024821","lon":"77.25230280651165"},{"ref":"480996663","lat":"38.42714158024821","lon":"77.25220280651165"},{"ref":"480996664","lat":"38.42714158024821","lon":"77.25210280651164"}],"tags":{"highway":"yes"}},{"timestamp":"2016-01-28T21:49:44.238Z","action":"modify","type":"way","nodes":[{"ref":"480996665","lat":"38.443141580248216","lon":"77.26460280651165"},{"ref":"480996666","lat":"38.443141580248216","lon":"77.26490280651164"},{"ref":"480996667","lat":"38.44344158024821","lon":"77.26490280651164"},{"ref":"480996668","lat":"38.44344158024821","lon":"77.26460280651165"},{"ref":"480996669","lat":"38.443141580248216","lon":"77.26460280651165"}],"tags":{"building":"yes"}}]} 2 | {"metadata":{"user":"BillPittman","uid":56252655,"id":480996670,"created_at":"2016-01-28T21:49:44.461Z","closed_at":"2016-01-28T21:49:44.461Z","min_lon":133.8800345450195,"max_lon":133.8800345450195,"min_lat":-23.700996481523703,"max_lat":-23.700996481523703,"comment":"#ci"},"elements":[{"timestamp":"2016-01-28T21:49:44.461Z","action":"modify","type":"way","nodes":[{"ref":"480996671","lat":"-23.700796481523703","lon":"133.8790345450195"},{"ref":"480996672","lat":"-23.700796481523703","lon":"133.8790345450195"},{"ref":"480996673","lat":"-23.700696481523703","lon":"133.8790345450195"},{"ref":"480996674","lat":"-23.700596481523704","lon":"133.8790345450195"},{"ref":"480996675","lat":"-23.700496481523704","lon":"133.8790345450195"},{"ref":"480996676","lat":"-23.700396481523704","lon":"133.8790345450195"},{"ref":"480996677","lat":"-23.700296481523704","lon":"133.8790345450195"},{"ref":"480996678","lat":"-23.7001964815237","lon":"133.8790345450195"},{"ref":"480996679","lat":"-23.7000964815237","lon":"133.8790345450195"}],"tags":{"highway":"yes"}},{"timestamp":"2016-01-28T21:49:44.461Z","action":"create","type":"way","nodes":[{"ref":"480996680","lat":"-23.7029964815237","lon":"133.87793454501949"},{"ref":"480996681","lat":"-23.7029964815237","lon":"133.8778345450195"},{"ref":"480996682","lat":"-23.7028964815237","lon":"133.8777345450195"},{"ref":"480996683","lat":"-23.702796481523702","lon":"133.8776345450195"},{"ref":"480996684","lat":"-23.702696481523702","lon":"133.8775345450195"},{"ref":"480996685","lat":"-23.702596481523702","lon":"133.8774345450195"},{"ref":"480996686","lat":"-23.702496481523703","lon":"133.8773345450195"},{"ref":"480996687","lat":"-23.702396481523703","lon":"133.8772345450195"},{"ref":"480996688","lat":"-23.702296481523703","lon":"133.8771345450195"},{"ref":"480996689","lat":"-23.702296481523703","lon":"133.8770345450195"},{"ref":"480996690","lat":"-23.702196481523703","lon":"133.8769345450195"},{"ref":"480996691","lat":"-23.702096481523704","lon":"133.8768345450195"},{"ref":"480996692","lat":"-23.701996481523704","lon":"133.8767345450195"},{"ref":"480996693","lat":"-23.701896481523704","lon":"133.8766345450195"},{"ref":"480996694","lat":"-23.701796481523704","lon":"133.8765345450195"},{"ref":"480996695","lat":"-23.7016964815237","lon":"133.8764345450195"},{"ref":"480996696","lat":"-23.7015964815237","lon":"133.8763345450195"},{"ref":"480996697","lat":"-23.7014964815237","lon":"133.87623454501949"},{"ref":"480996698","lat":"-23.701296481523702","lon":"133.8761345450195"},{"ref":"480996699","lat":"-23.701096481523702","lon":"133.8760345450195"},{"ref":"480996700","lat":"-23.700996481523703","lon":"133.8759345450195"},{"ref":"480996701","lat":"-23.700896481523703","lon":"133.8758345450195"},{"ref":"480996702","lat":"-23.700796481523703","lon":"133.8757345450195"},{"ref":"480996703","lat":"-23.700696481523703","lon":"133.8756345450195"},{"ref":"480996704","lat":"-23.700596481523704","lon":"133.8756345450195"}],"tags":{"waterway":"river"}},{"id":"480996680","lat":"-23.7029964815237","lon":"133.87793454501949","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996681","lat":"-23.7029964815237","lon":"133.8778345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996682","lat":"-23.7028964815237","lon":"133.8777345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996683","lat":"-23.702796481523702","lon":"133.8776345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996684","lat":"-23.702696481523702","lon":"133.8775345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996685","lat":"-23.702596481523702","lon":"133.8774345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996686","lat":"-23.702496481523703","lon":"133.8773345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996687","lat":"-23.702396481523703","lon":"133.8772345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996688","lat":"-23.702296481523703","lon":"133.8771345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996689","lat":"-23.702296481523703","lon":"133.8770345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996690","lat":"-23.702196481523703","lon":"133.8769345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996691","lat":"-23.702096481523704","lon":"133.8768345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996692","lat":"-23.701996481523704","lon":"133.8767345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996693","lat":"-23.701896481523704","lon":"133.8766345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996694","lat":"-23.701796481523704","lon":"133.8765345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996695","lat":"-23.7016964815237","lon":"133.8764345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996696","lat":"-23.7015964815237","lon":"133.8763345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996697","lat":"-23.7014964815237","lon":"133.87623454501949","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996698","lat":"-23.701296481523702","lon":"133.8761345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996699","lat":"-23.701096481523702","lon":"133.8760345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996700","lat":"-23.700996481523703","lon":"133.8759345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996701","lat":"-23.700896481523703","lon":"133.8758345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996702","lat":"-23.700796481523703","lon":"133.8757345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996703","lat":"-23.700696481523703","lon":"133.8756345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996704","lat":"-23.700596481523704","lon":"133.8756345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996705","lat":"-23.723596481523703","lon":"133.8958345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"modify","tags":{"amenity":"drinking_water"}},{"timestamp":"2016-01-28T21:49:44.461Z","action":"create","type":"way","nodes":[{"ref":"480996706","lat":"-23.698296481523702","lon":"133.8786345450195"},{"ref":"480996707","lat":"-23.698296481523702","lon":"133.8785345450195"},{"ref":"480996708","lat":"-23.698296481523702","lon":"133.8785345450195"},{"ref":"480996709","lat":"-23.698296481523702","lon":"133.8785345450195"},{"ref":"480996710","lat":"-23.698296481523702","lon":"133.8785345450195"},{"ref":"480996711","lat":"-23.698296481523702","lon":"133.8785345450195"},{"ref":"480996712","lat":"-23.6983964815237","lon":"133.8785345450195"},{"ref":"480996713","lat":"-23.6985964815237","lon":"133.8785345450195"},{"ref":"480996714","lat":"-23.698796481523704","lon":"133.8785345450195"}],"tags":{"waterway":"river"}},{"id":"480996706","lat":"-23.698296481523702","lon":"133.8786345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996707","lat":"-23.698296481523702","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996708","lat":"-23.698296481523702","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996709","lat":"-23.698296481523702","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996710","lat":"-23.698296481523702","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996711","lat":"-23.698296481523702","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996712","lat":"-23.6983964815237","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996713","lat":"-23.6985964815237","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"},{"id":"480996714","lat":"-23.698796481523704","lon":"133.8785345450195","timestamp":"2016-01-28T21:49:44.461Z","type":"node","action":"create"}]} 3 | {"metadata":{"id":"36866539","created_at":"2016-01-28T21:53:06Z","closed_at":"2016-01-28T21:53:09Z","open":"false","num_changes":"114","user":"Alex-7","uid":"667422","min_lat":"45.8483628","max_lat":"45.9546233","min_lon":"29.3353925","max_lon":"29.4745499","comments_count":"0","source":"Ukraine - Orthophotomaps 2012, Mapbox","created_by":"JOSM/1.5 (9329 en)","comment":"landuse, natural, buildings"},"elements":[{"id":"3815507709","lat":"45.8622352","lon":"29.4208552","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","old":{"id":"3815507709","lat":"45.8623311","lon":"29.4209240","version":"1","timestamp":"2015-11-03T13:19:50Z","changeset":"35055715","uid":"667422","user":"Alex-7","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"3815507710","lat":"45.8625265","lon":"29.4209617","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","old":{"id":"3815507710","lat":"45.8626384","lon":"29.4210305","version":"1","timestamp":"2015-11-03T13:19:50Z","changeset":"35055715","uid":"667422","user":"Alex-7","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"3974719921","lat":"45.9481089","lon":"29.3542177","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","old":{"id":"3974719921","lat":"45.9479704","lon":"29.3541347","version":"1","timestamp":"2016-01-28T21:22:50Z","changeset":"36865972","uid":"667422","user":"Alex-7","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"3974767484","lat":"45.8483628","lon":"29.3724212","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767485","lat":"45.8484758","lon":"29.3593095","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767486","lat":"45.8521269","lon":"29.3783717","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767487","lat":"45.8521380","lon":"29.3712528","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767488","lat":"45.8522068","lon":"29.3838795","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767489","lat":"45.8522387","lon":"29.3851417","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767490","lat":"45.8522707","lon":"29.3805060","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767491","lat":"45.8522977","lon":"29.3712032","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767492","lat":"45.8523986","lon":"29.3715559","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767493","lat":"45.8542289","lon":"29.3584819","version":"1","timestamp":"2016-01-28T21:53:06Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767494","lat":"45.8554195","lon":"29.3706379","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767495","lat":"45.8559016","lon":"29.3582385","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767496","lat":"45.8572126","lon":"29.3581249","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767497","lat":"45.8577777","lon":"29.3695003","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767498","lat":"45.8578368","lon":"29.3698852","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767499","lat":"45.8580441","lon":"29.3694561","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767500","lat":"45.8581167","lon":"29.3580113","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767501","lat":"45.8582407","lon":"29.3695744","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767502","lat":"45.8583605","lon":"29.3694236","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767503","lat":"45.8583789","lon":"29.3697164","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767504","lat":"45.8584057","lon":"29.3579346","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767505","lat":"45.8593324","lon":"29.3577561","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767506","lat":"45.8649608","lon":"29.3856236","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767507","lat":"45.8649831","lon":"29.3860339","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767508","lat":"45.8660314","lon":"29.3673333","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767509","lat":"45.8660788","lon":"29.3669408","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767510","lat":"45.8662233","lon":"29.3672009","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767511","lat":"45.8665946","lon":"29.3573889","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767512","lat":"45.8666212","lon":"29.3568960","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767513","lat":"45.8667369","lon":"29.3573993","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767514","lat":"45.9236203","lon":"29.4461004","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767515","lat":"45.9264174","lon":"29.3680918","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767516","lat":"45.9265336","lon":"29.3676666","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767517","lat":"45.9269548","lon":"29.4651898","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767518","lat":"45.9272940","lon":"29.4319463","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767519","lat":"45.9282940","lon":"29.4597956","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767520","lat":"45.9290965","lon":"29.3582889","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767521","lat":"45.9300662","lon":"29.3696085","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767522","lat":"45.9303548","lon":"29.3695090","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767523","lat":"45.9306246","lon":"29.4499029","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767524","lat":"45.9310706","lon":"29.3677164","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767525","lat":"45.9311511","lon":"29.4502413","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767526","lat":"45.9312784","lon":"29.3673181","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767527","lat":"45.9313509","lon":"29.3594197","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767528","lat":"45.9316880","lon":"29.3591992","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767529","lat":"45.9322942","lon":"29.3675006","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767530","lat":"45.9328449","lon":"29.4349743","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767531","lat":"45.9328714","lon":"29.3665048","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767532","lat":"45.9334371","lon":"29.3651936","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767533","lat":"45.9335987","lon":"29.3610275","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767534","lat":"45.9336218","lon":"29.3606790","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767535","lat":"45.9337262","lon":"29.3605112","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767536","lat":"45.9337320","lon":"29.3602420","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767537","lat":"45.9339550","lon":"29.4359132","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767538","lat":"45.9339796","lon":"29.3613263","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767539","lat":"45.9340693","lon":"29.4363123","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767540","lat":"45.9341989","lon":"29.3616251","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767541","lat":"45.9342913","lon":"29.3625213","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767542","lat":"45.9345631","lon":"29.4363455","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767543","lat":"45.9347023","lon":"29.3472654","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767544","lat":"45.9373797","lon":"29.3559930","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767545","lat":"45.9377952","lon":"29.3618685","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767546","lat":"45.9381054","lon":"29.4542082","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767547","lat":"45.9384690","lon":"29.4544007","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767548","lat":"45.9385625","lon":"29.4512741","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767549","lat":"45.9386378","lon":"29.3623001","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767550","lat":"45.9387257","lon":"29.4514619","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767551","lat":"45.9388727","lon":"29.4501943","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767552","lat":"45.9390522","lon":"29.4498892","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767553","lat":"45.9391039","lon":"29.4503011","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767554","lat":"45.9391572","lon":"29.3597772","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767555","lat":"45.9391847","lon":"29.4515459","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974767556","lat":"45.9392149","lon":"29.3592129","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768457","lat":"45.9392318","lon":"29.4491615","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768458","lat":"45.9393347","lon":"29.4503840","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768459","lat":"45.9393765","lon":"29.3624495","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768460","lat":"45.9395582","lon":"29.4491381","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768461","lat":"45.9396810","lon":"29.4491558","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768462","lat":"45.9398541","lon":"29.4518778","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768463","lat":"45.9405005","lon":"29.4495210","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768464","lat":"45.9416313","lon":"29.4402889","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768465","lat":"45.9417586","lon":"29.4403259","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768466","lat":"45.9423775","lon":"29.3614868","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768467","lat":"45.9451820","lon":"29.3616196","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768468","lat":"45.9456019","lon":"29.4583509","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768469","lat":"45.9461053","lon":"29.3614868","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768470","lat":"45.9476864","lon":"29.3544494","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768471","lat":"45.9479980","lon":"29.3546818","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768472","lat":"45.9488563","lon":"29.4444587","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"3974768473","lat":"45.9491102","lon":"29.4446247","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"node","tags":{}},{"id":"381437090","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","old":{"id":"381437090","version":"1","timestamp":"2015-11-20T09:14:54Z","changeset":"35456683","uid":"667422","user":"Alex-7","action":"modify","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3846373480","lat":"45.8667552","lon":"29.3570491"},{"ref":"3846373479","lat":"45.8652340","lon":"29.3860800"},{"ref":"3846373483","lat":"45.8696972","lon":"29.3867291"},{"ref":"3846373484","lat":"45.8698215","lon":"29.3831916"},{"ref":"3846373486","lat":"45.8745329","lon":"29.3798163"},{"ref":"3846373485","lat":"45.8744651","lon":"29.3764898"},{"ref":"3846373491","lat":"45.8751995","lon":"29.3556866"},{"ref":"3846373490","lat":"45.8750526","lon":"29.3556866"},{"ref":"3846373481","lat":"45.8668950","lon":"29.3569361"},{"ref":"3846373480","lat":"45.8667552","lon":"29.3570491"}]},"action":"modify","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3846373480","lat":"45.8667552","lon":"29.3570491"},{"ref":"3974767513","lat":"45.8667369","lon":"29.3573993"},{"ref":"3974767510","lat":"45.8662233","lon":"29.3672009"},{"ref":"3846373479","lat":"45.8652340","lon":"29.3860800"},{"ref":"3846373483","lat":"45.8696972","lon":"29.3867291"},{"ref":"3846373484","lat":"45.8698215","lon":"29.3831916"},{"ref":"3846373486","lat":"45.8745329","lon":"29.3798163"},{"ref":"3846373485","lat":"45.8744651","lon":"29.3764898"},{"ref":"3846373491","lat":"45.8751995","lon":"29.3556866"},{"ref":"3846373490","lat":"45.8750526","lon":"29.3556866"},{"ref":"3846373481","lat":"45.8668950","lon":"29.3569361"},{"ref":"3846373480","lat":"45.8667552","lon":"29.3570491"}]},{"id":"394470959","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767546","lat":"45.9381054","lon":"29.4542082"},{"ref":"3568496039","lat":"45.9379089","lon":"29.4546330"},{"ref":"3568496019","lat":"45.9309423","lon":"29.4507494"},{"ref":"3568496005","lat":"45.9272537","lon":"29.4653463"},{"ref":"3974767517","lat":"45.9269548","lon":"29.4651898"},{"ref":"3974767519","lat":"45.9282940","lon":"29.4597956"},{"ref":"3642062929","lat":"45.9281586","lon":"29.4596548"},{"ref":"3642062930","lat":"45.9284314","lon":"29.4586743"},{"ref":"3642062931","lat":"45.9305269","lon":"29.4506703"},{"ref":"3642062932","lat":"45.9305393","lon":"29.4503673"},{"ref":"3974767523","lat":"45.9306246","lon":"29.4499029"},{"ref":"3974767525","lat":"45.9311511","lon":"29.4502413"},{"ref":"3974767546","lat":"45.9381054","lon":"29.4542082"}]},{"id":"394470960","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974768473","lat":"45.9491102","lon":"29.4446247"},{"ref":"3568496073","lat":"45.9496446","lon":"29.4444910"},{"ref":"3568496066","lat":"45.9459482","lon":"29.4590836"},{"ref":"3568496064","lat":"45.9456396","lon":"29.4589163"},{"ref":"3568496042","lat":"45.9383304","lon":"29.4548635"},{"ref":"3568496039","lat":"45.9379089","lon":"29.4546330"},{"ref":"3974767546","lat":"45.9381054","lon":"29.4542082"},{"ref":"3974767550","lat":"45.9387257","lon":"29.4514619"},{"ref":"3974767553","lat":"45.9391039","lon":"29.4503011"},{"ref":"3974768458","lat":"45.9393347","lon":"29.4503840"},{"ref":"3974767555","lat":"45.9391847","lon":"29.4515459"},{"ref":"3974767547","lat":"45.9384690","lon":"29.4544007"},{"ref":"3974768468","lat":"45.9456019","lon":"29.4583509"},{"ref":"3974768473","lat":"45.9491102","lon":"29.4446247"}]},{"id":"394470961","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767523","lat":"45.9306246","lon":"29.4499029"},{"ref":"3974767525","lat":"45.9311511","lon":"29.4502413"},{"ref":"3974767542","lat":"45.9345631","lon":"29.4363455"},{"ref":"3974767539","lat":"45.9340693","lon":"29.4363123"},{"ref":"3974767523","lat":"45.9306246","lon":"29.4499029"}]},{"id":"394470962","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767500","lat":"45.8581167","lon":"29.3580113"},{"ref":"3974767504","lat":"45.8584057","lon":"29.3579346"},{"ref":"3974767499","lat":"45.8580441","lon":"29.3694561"},{"ref":"3974767497","lat":"45.8577777","lon":"29.3695003"},{"ref":"3974767500","lat":"45.8581167","lon":"29.3580113"}]},{"id":"394470963","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767506","lat":"45.8649608","lon":"29.3856236"},{"ref":"3974767507","lat":"45.8649831","lon":"29.3860339"},{"ref":"3846373479","lat":"45.8652340","lon":"29.3860800"},{"ref":"3974767510","lat":"45.8662233","lon":"29.3672009"},{"ref":"3974767508","lat":"45.8660314","lon":"29.3673333"},{"ref":"3974767506","lat":"45.8649608","lon":"29.3856236"}]},{"id":"394470964","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3815507718","lat":"45.8658230","lon":"29.4077659"},{"ref":"3815507717","lat":"45.8655714","lon":"29.4074327"},{"ref":"3815507716","lat":"45.8655306","lon":"29.4077839"},{"ref":"3815507709","lat":"45.8622352","lon":"29.4208552"},{"ref":"3815507710","lat":"45.8625265","lon":"29.4209617"},{"ref":"3815507718","lat":"45.8658230","lon":"29.4077659"}]},{"id":"394470966","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767492","lat":"45.8523986","lon":"29.3715559"},{"ref":"3974767491","lat":"45.8522977","lon":"29.3712032"},{"ref":"3974767497","lat":"45.8577777","lon":"29.3695003"},{"ref":"3974767498","lat":"45.8578368","lon":"29.3698852"},{"ref":"3974767494","lat":"45.8554195","lon":"29.3706379"},{"ref":"3974767492","lat":"45.8523986","lon":"29.3715559"}]},{"id":"394470967","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974768471","lat":"45.9479980","lon":"29.3546818"},{"ref":"3974719921","lat":"45.9481089","lon":"29.3542177"},{"ref":"3974719903","lat":"45.9351842","lon":"29.3471195"},{"ref":"3974719902","lat":"45.9347932","lon":"29.3469673"},{"ref":"3974767543","lat":"45.9347023","lon":"29.3472654"},{"ref":"3974768470","lat":"45.9476864","lon":"29.3544494"},{"ref":"3974768471","lat":"45.9479980","lon":"29.3546818"}]},{"id":"394470969","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767513","lat":"45.8667369","lon":"29.3573993"},{"ref":"3974767511","lat":"45.8665946","lon":"29.3573889"},{"ref":"3974767509","lat":"45.8660788","lon":"29.3669408"},{"ref":"3974767502","lat":"45.8583605","lon":"29.3694236"},{"ref":"3974767501","lat":"45.8582407","lon":"29.3695744"},{"ref":"3974767503","lat":"45.8583789","lon":"29.3697164"},{"ref":"3974767508","lat":"45.8660314","lon":"29.3673333"},{"ref":"3974767510","lat":"45.8662233","lon":"29.3672009"},{"ref":"3974767513","lat":"45.8667369","lon":"29.3573993"}]},{"id":"394470970","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767518","lat":"45.9272940","lon":"29.4319463"},{"ref":"3642062926","lat":"45.9268758","lon":"29.4316604"},{"ref":"3642062918","lat":"45.9233335","lon":"29.4457782"},{"ref":"3642062917","lat":"45.9232458","lon":"29.4461816"},{"ref":"3642062919","lat":"45.9235459","lon":"29.4465702"},{"ref":"3642062932","lat":"45.9305393","lon":"29.4503673"},{"ref":"3974767523","lat":"45.9306246","lon":"29.4499029"},{"ref":"3974767514","lat":"45.9236203","lon":"29.4461004"},{"ref":"3974767518","lat":"45.9272940","lon":"29.4319463"}]},{"id":"394470971","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"natural":"wood"},"nodes":[{"ref":"3974767527","lat":"45.9313509","lon":"29.3594197"},{"ref":"3974767534","lat":"45.9336218","lon":"29.3606790"},{"ref":"3974767535","lat":"45.9337262","lon":"29.3605112"},{"ref":"3974767536","lat":"45.9337320","lon":"29.3602420"},{"ref":"3974767528","lat":"45.9316880","lon":"29.3591992"},{"ref":"3974767543","lat":"45.9347023","lon":"29.3472654"},{"ref":"3974719902","lat":"45.9347932","lon":"29.3469673"},{"ref":"3974719900","lat":"45.9345510","lon":"29.3467775"},{"ref":"3603423958","lat":"45.9313605","lon":"29.3592967"},{"ref":"3974767527","lat":"45.9313509","lon":"29.3594197"}]},{"id":"394470973","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767489","lat":"45.8522387","lon":"29.3851417"},{"ref":"3974767506","lat":"45.8649608","lon":"29.3856236"},{"ref":"3974767508","lat":"45.8660314","lon":"29.3673333"},{"ref":"3974767503","lat":"45.8583789","lon":"29.3697164"},{"ref":"3974767498","lat":"45.8578368","lon":"29.3698852"},{"ref":"3974767494","lat":"45.8554195","lon":"29.3706379"},{"ref":"3974767492","lat":"45.8523986","lon":"29.3715559"},{"ref":"3974767486","lat":"45.8521269","lon":"29.3783717"},{"ref":"3974767490","lat":"45.8522707","lon":"29.3805060"},{"ref":"3974767488","lat":"45.8522068","lon":"29.3838795"},{"ref":"3974767489","lat":"45.8522387","lon":"29.3851417"}]},{"id":"394470975","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767525","lat":"45.9311511","lon":"29.4502413"},{"ref":"3974767546","lat":"45.9381054","lon":"29.4542082"},{"ref":"3974767550","lat":"45.9387257","lon":"29.4514619"},{"ref":"3974767548","lat":"45.9385625","lon":"29.4512741"},{"ref":"3974767551","lat":"45.9388727","lon":"29.4501943"},{"ref":"3974767552","lat":"45.9390522","lon":"29.4498892"},{"ref":"3974768457","lat":"45.9392318","lon":"29.4491615"},{"ref":"3974768460","lat":"45.9395582","lon":"29.4491381"},{"ref":"3974768464","lat":"45.9416313","lon":"29.4402889"},{"ref":"3974767542","lat":"45.9345631","lon":"29.4363455"},{"ref":"3974767525","lat":"45.9311511","lon":"29.4502413"}]},{"id":"394470976","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974768471","lat":"45.9479980","lon":"29.3546818"},{"ref":"3974768469","lat":"45.9461053","lon":"29.3614868"},{"ref":"3974768467","lat":"45.9451820","lon":"29.3616196"},{"ref":"3974768466","lat":"45.9423775","lon":"29.3614868"},{"ref":"3974768459","lat":"45.9393765","lon":"29.3624495"},{"ref":"3974767549","lat":"45.9386378","lon":"29.3623001"},{"ref":"3974767545","lat":"45.9377952","lon":"29.3618685"},{"ref":"3974767554","lat":"45.9391572","lon":"29.3597772"},{"ref":"3974767556","lat":"45.9392149","lon":"29.3592129"},{"ref":"3974767544","lat":"45.9373797","lon":"29.3559930"},{"ref":"3974767536","lat":"45.9337320","lon":"29.3602420"},{"ref":"3974767528","lat":"45.9316880","lon":"29.3591992"},{"ref":"3974767543","lat":"45.9347023","lon":"29.3472654"},{"ref":"3974768470","lat":"45.9476864","lon":"29.3544494"},{"ref":"3974768471","lat":"45.9479980","lon":"29.3546818"}]},{"id":"394470978","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767515","lat":"45.9264174","lon":"29.3680918"},{"ref":"3974767521","lat":"45.9300662","lon":"29.3696085"},{"ref":"3974767522","lat":"45.9303548","lon":"29.3695090"},{"ref":"3974767524","lat":"45.9310706","lon":"29.3677164"},{"ref":"3974767526","lat":"45.9312784","lon":"29.3673181"},{"ref":"3974767529","lat":"45.9322942","lon":"29.3675006"},{"ref":"3974767531","lat":"45.9328714","lon":"29.3665048"},{"ref":"3974767532","lat":"45.9334371","lon":"29.3651936"},{"ref":"3974767541","lat":"45.9342913","lon":"29.3625213"},{"ref":"3974767540","lat":"45.9341989","lon":"29.3616251"},{"ref":"3974767538","lat":"45.9339796","lon":"29.3613263"},{"ref":"3974767533","lat":"45.9335987","lon":"29.3610275"},{"ref":"3974767534","lat":"45.9336218","lon":"29.3606790"},{"ref":"3974767527","lat":"45.9313509","lon":"29.3594197"},{"ref":"3974767520","lat":"45.9290965","lon":"29.3582889"},{"ref":"3974767516","lat":"45.9265336","lon":"29.3676666"},{"ref":"3974767515","lat":"45.9264174","lon":"29.3680918"}]},{"id":"394470980","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767537","lat":"45.9339550","lon":"29.4359132"},{"ref":"3974767539","lat":"45.9340693","lon":"29.4363123"},{"ref":"3974767523","lat":"45.9306246","lon":"29.4499029"},{"ref":"3974767514","lat":"45.9236203","lon":"29.4461004"},{"ref":"3974767518","lat":"45.9272940","lon":"29.4319463"},{"ref":"3974767530","lat":"45.9328449","lon":"29.4349743"},{"ref":"3974767537","lat":"45.9339550","lon":"29.4359132"}]},{"id":"394470982","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767504","lat":"45.8584057","lon":"29.3579346"},{"ref":"3974767499","lat":"45.8580441","lon":"29.3694561"},{"ref":"3974767502","lat":"45.8583605","lon":"29.3694236"},{"ref":"3974767509","lat":"45.8660788","lon":"29.3669408"},{"ref":"3974767511","lat":"45.8665946","lon":"29.3573889"},{"ref":"3974767512","lat":"45.8666212","lon":"29.3568960"},{"ref":"3974767505","lat":"45.8593324","lon":"29.3577561"},{"ref":"3974767504","lat":"45.8584057","lon":"29.3579346"}]},{"id":"394470983","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767500","lat":"45.8581167","lon":"29.3580113"},{"ref":"3974767497","lat":"45.8577777","lon":"29.3695003"},{"ref":"3974767491","lat":"45.8522977","lon":"29.3712032"},{"ref":"3974767487","lat":"45.8521380","lon":"29.3712528"},{"ref":"3974767484","lat":"45.8483628","lon":"29.3724212"},{"ref":"3974767485","lat":"45.8484758","lon":"29.3593095"},{"ref":"3974767493","lat":"45.8542289","lon":"29.3584819"},{"ref":"3974767495","lat":"45.8559016","lon":"29.3582385"},{"ref":"3974767496","lat":"45.8572126","lon":"29.3581249"},{"ref":"3974767500","lat":"45.8581167","lon":"29.3580113"}]},{"id":"394470985","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866539","uid":"667422","user":"Alex-7","action":"create","type":"way","tags":{"landuse":"farmland"},"nodes":[{"ref":"3974767547","lat":"45.9384690","lon":"29.4544007"},{"ref":"3974768468","lat":"45.9456019","lon":"29.4583509"},{"ref":"3974768473","lat":"45.9491102","lon":"29.4446247"},{"ref":"3974768472","lat":"45.9488563","lon":"29.4444587"},{"ref":"3974768465","lat":"45.9417586","lon":"29.4403259"},{"ref":"3974768461","lat":"45.9396810","lon":"29.4491558"},{"ref":"3974768463","lat":"45.9405005","lon":"29.4495210"},{"ref":"3974768462","lat":"45.9398541","lon":"29.4518778"},{"ref":"3974767555","lat":"45.9391847","lon":"29.4515459"},{"ref":"3974767547","lat":"45.9384690","lon":"29.4544007"}]}]} 4 | {"metadata":{"id":"36866544","created_at":"2016-01-28T21:53:23Z","closed_at":"2016-01-28T21:53:24Z","open":"false","num_changes":"10","user":"borislavpenkov","uid":"498104","min_lat":"43.404037","max_lat":"43.4094148","min_lon":"23.227338","max_lon":"23.2302786","comments_count":"0","comment":"От Борислав Пенков!","locale":"bg-BG","host":"https://www.openstreetmap.org/id","imagery_used":"Bing","created_by":"iD 1.8.5"},"elements":[{"id":"3974768589","lat":"43.4083976","lon":"23.2297926","version":"1","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","action":"create","type":"node","tags":{}},{"id":"3974768590","lat":"43.4083971","lon":"23.2298732","version":"1","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","action":"create","type":"node","tags":{}},{"id":"3974768591","lat":"43.4083990","lon":"23.2295680","version":"1","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","action":"create","type":"node","tags":{}},{"id":"3974768592","lat":"43.4083983","lon":"23.2297095","version":"1","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","action":"create","type":"node","tags":{}},{"id":"180791716","version":"9","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","old":{"id":"180791716","version":"8","timestamp":"2016-01-28T21:51:06Z","changeset":"36866499","uid":"498104","user":"borislavpenkov","action":"modify","type":"way","tags":{"highway":"secondary","lanes":"2","maxspeed":"50","oneway":"yes","surface":"asphalt"},"nodes":[{"ref":"773939893","lat":"43.4041113","lon":"23.2293726"},{"ref":"1912357929","lat":"43.4044216","lon":"23.2295411"},{"ref":"1912357924","lat":"43.4045870","lon":"23.2295830"},{"ref":"1912357922","lat":"43.4056237","lon":"23.2296313"},{"ref":"1912364500","lat":"43.4065509","lon":"23.2296805"},{"ref":"1912357905","lat":"43.4071397","lon":"23.2297117"},{"ref":"3974761429","lat":"43.4075611","lon":"23.2297315"},{"ref":"1912357926","lat":"43.4080269","lon":"23.2296779"},{"ref":"1912357928","lat":"43.4089285","lon":"23.2297547"}]},"action":"modify","type":"way","tags":{"highway":"secondary","lanes":"2","maxspeed":"50","oneway":"yes","surface":"asphalt"},"nodes":[{"ref":"773939893","lat":"43.4041113","lon":"23.2293726"},{"ref":"1912357929","lat":"43.4044216","lon":"23.2295411"},{"ref":"1912357924","lat":"43.4045870","lon":"23.2295830"},{"ref":"1912357922","lat":"43.4056237","lon":"23.2296313"},{"ref":"1912364500","lat":"43.4065509","lon":"23.2296805"},{"ref":"1912357905","lat":"43.4071397","lon":"23.2297117"},{"ref":"3974761429","lat":"43.4075611","lon":"23.2297315"},{"ref":"1912357926","lat":"43.4080269","lon":"23.2296779"},{"ref":"3974768592","lat":"43.4083983","lon":"23.2297095"},{"ref":"3974768588","lat":"43.4088331","lon":"23.2297466"},{"ref":"1912357928","lat":"43.4089285","lon":"23.2297547"}]},{"id":"394465376","version":"3","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","old":{"id":"394465376","version":"2","timestamp":"2016-01-28T21:49:31Z","changeset":"36866470","uid":"498104","user":"borislavpenkov","action":"modify","type":"way","tags":{"highway":"pedestrian"},"nodes":[{"ref":"3974723864","lat":"43.4083990","lon":"23.2295680"},{"ref":"3974763472","lat":"43.4084019","lon":"23.2294613"},{"ref":"3974723858","lat":"43.4084128","lon":"23.2290582"},{"ref":"3974723859","lat":"43.4084456","lon":"23.2274319"}]},"action":"modify","type":"way","tags":{"highway":"pedestrian"},"nodes":[{"ref":"3974768591","lat":"43.4083990","lon":"23.2295680"},{"ref":"3974763472","lat":"43.4084019","lon":"23.2294613"},{"ref":"3974723858","lat":"43.4084128","lon":"23.2290582"},{"ref":"3974723859","lat":"43.4084456","lon":"23.2274319"}]},{"id":"394465377","version":"2","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","old":{"id":"394465377","version":"1","timestamp":"2016-01-28T21:26:49Z","changeset":"36866047","uid":"498104","user":"borislavpenkov","action":"modify","type":"way","tags":{"building":"yes"},"nodes":[{"ref":"3974723860","lat":"43.4081049","lon":"23.2298508"},{"ref":"3974723861","lat":"43.4080914","lon":"23.2301834"},{"ref":"3974723862","lat":"43.4086319","lon":"23.2302249"},{"ref":"3974723863","lat":"43.4086454","lon":"23.2298923"},{"ref":"3974723860","lat":"43.4081049","lon":"23.2298508"}]},"action":"modify","type":"way","tags":{"building":"yes"},"nodes":[{"ref":"3974723860","lat":"43.4081049","lon":"23.2298508"},{"ref":"3974723861","lat":"43.4080914","lon":"23.2301834"},{"ref":"3974723862","lat":"43.4086319","lon":"23.2302249"},{"ref":"3974723863","lat":"43.4086454","lon":"23.2298923"},{"ref":"3974768590","lat":"43.4083971","lon":"23.2298732"},{"ref":"3974723860","lat":"43.4081049","lon":"23.2298508"}]},{"id":"394470435","version":"2","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","old":{"id":"394470435","version":"1","timestamp":"2016-01-28T21:46:47Z","changeset":"36866419","uid":"498104","user":"borislavpenkov","action":"modify","type":"way","tags":{"highway":"pedestrian"},"nodes":[{"ref":"3974760203","lat":"43.4082061","lon":"23.2297753"},{"ref":"3974760204","lat":"43.4088335","lon":"23.2298320"}]},"action":"modify","type":"way","tags":{"highway":"pedestrian"},"nodes":[{"ref":"3974757081","lat":"43.4081676","lon":"23.2297966"},{"ref":"3974760203","lat":"43.4082061","lon":"23.2297753"},{"ref":"3974768589","lat":"43.4083976","lon":"23.2297926"},{"ref":"3974760204","lat":"43.4088335","lon":"23.2298320"},{"ref":"3974768588","lat":"43.4088331","lon":"23.2297466"}]},{"id":"394470992","version":"1","timestamp":"2016-01-28T21:53:24Z","changeset":"36866544","uid":"498104","user":"borislavpenkov","action":"create","type":"way","tags":{"highway":"pedestrian"},"nodes":[{"ref":"3974768592","lat":"43.4083983","lon":"23.2297095"},{"ref":"3974768589","lat":"43.4083976","lon":"23.2297926"},{"ref":"3974768590","lat":"43.4083971","lon":"23.2298732"}]}]} 5 | {"metadata":{"id":"36866540","created_at":"2016-01-28T21:53:06Z","open":"true","num_changes":"119","user":"Robak","uid":"38465","min_lat":"52.8965744","max_lat":"53.056831","min_lon":"20.6256315","max_lon":"20.90573","comments_count":"0"},"elements":[{"id":"476186663","lat":"53.0166199","lon":"20.7529301","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"476186663","lat":"53.0168700","lon":"20.7544900","version":"1","timestamp":"2009-08-29T02:04:32Z","changeset":"2296514","uid":"20587","user":"balrog-kun","action":"modify","type":"node","tags":{"source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"}},"action":"modify","type":"node","tags":{"source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"}},{"id":"476212425","lat":"52.9976098","lon":"20.8869043","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"476212425","lat":"52.9976100","lon":"20.8868400","version":"1","timestamp":"2009-08-29T02:28:04Z","changeset":"2296568","uid":"20587","user":"balrog-kun","action":"modify","type":"node","tags":{"source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/PRZASNYSZ.ulice.txt)"}},"action":"modify","type":"node","tags":{"source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/PRZASNYSZ.ulice.txt)"}},{"id":"1885628880","lat":"52.9998516","lon":"20.8651891","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"1885628880","lat":"52.9999874","lon":"20.8652047","version":"1","timestamp":"2012-08-27T17:14:11Z","changeset":"12882112","uid":"792353","user":"eshabe","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"1885629384","lat":"52.9999427","lon":"20.8640401","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"1885629384","lat":"53.0001056","lon":"20.8640739","version":"1","timestamp":"2012-08-27T17:14:19Z","changeset":"12882112","uid":"792353","user":"eshabe","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"3974768194","lat":"53.0230698","lon":"20.7732162","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768195","lat":"53.0216501","lon":"20.7582602","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768196","lat":"53.0205491","lon":"20.7589479","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768197","lat":"53.0194042","lon":"20.7579383","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768198","lat":"53.0275438","lon":"20.7657496","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768199","lat":"53.0276476","lon":"20.7703419","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768200","lat":"53.0251736","lon":"20.7659635","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768201","lat":"53.0267716","lon":"20.7708460","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768202","lat":"53.0127652","lon":"20.7400222","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768203","lat":"53.0266319","lon":"20.7666287","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768204","lat":"53.0185264","lon":"20.7569083","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768205","lat":"53.0160495","lon":"20.7353926","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768206","lat":"52.9729074","lon":"20.6745763","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768207","lat":"53.0252510","lon":"20.7653841","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768208","lat":"52.9952341","lon":"20.8508286","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768209","lat":"52.9898627","lon":"20.8468908","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768210","lat":"53.0270107","lon":"20.7699429","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768211","lat":"52.9942745","lon":"20.8465381","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768212","lat":"53.0100838","lon":"20.7316956","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768213","lat":"53.0179675","lon":"20.7560297","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768214","lat":"53.0104840","lon":"20.7342705","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768215","lat":"53.0150071","lon":"20.7372904","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768216","lat":"53.0105060","lon":"20.7341214","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768217","lat":"53.0213661","lon":"20.7583889","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768218","lat":"52.9950623","lon":"20.8502932","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768219","lat":"53.0266575","lon":"20.7712767","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768220","lat":"53.0104672","lon":"20.7339283","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768221","lat":"53.0283323","lon":"20.7676996","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768222","lat":"52.9964442","lon":"20.8866640","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768223","lat":"52.9923889","lon":"20.8214112","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768224","lat":"53.0168742","lon":"20.7360944","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768225","lat":"53.0270062","lon":"20.7714352","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768226","lat":"53.0208756","lon":"20.7715425","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768227","lat":"53.0270965","lon":"20.7710704","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768228","lat":"52.9752849","lon":"20.6726451","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768229","lat":"53.0169645","lon":"20.7350644","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768230","lat":"53.0167613","lon":"20.7342320","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768231","lat":"53.0115168","lon":"20.7418021","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768232","lat":"53.0132467","lon":"20.7355151","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768233","lat":"53.0159706","lon":"20.7334766","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768234","lat":"53.0139180","lon":"20.7334122","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768235","lat":"53.0102865","lon":"20.7334991","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768236","lat":"53.0144176","lon":"20.7338853","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768237","lat":"53.0286286","lon":"20.7678948","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768238","lat":"53.0100799","lon":"20.7329627","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768239","lat":"52.9904941","lon":"20.8466229","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768240","lat":"52.9939669","lon":"20.8450145","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768241","lat":"53.0119132","lon":"20.7420607","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768242","lat":"53.0100154","lon":"20.7327266","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768243","lat":"53.0289032","lon":"20.7668003","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768244","lat":"52.9712450","lon":"20.6750473","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768245","lat":"53.0255865","lon":"20.7646331","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768246","lat":"53.0209144","lon":"20.7592258","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768247","lat":"53.0258764","lon":"20.7739673","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768248","lat":"53.0182037","lon":"20.7364806","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768249","lat":"52.9947653","lon":"20.8492847","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768250","lat":"52.9947266","lon":"20.7111188","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768251","lat":"53.0211983","lon":"20.7590112","version":"1","timestamp":"2016-01-28T21:53:07Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768252","lat":"53.0145893","lon":"20.7331332","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768253","lat":"52.9941066","lon":"20.8451863","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768254","lat":"52.9761680","lon":"20.6722149","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768255","lat":"53.0258666","lon":"20.7645698","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768256","lat":"53.0169775","lon":"20.7540974","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768557","lat":"53.0222825","lon":"20.7727870","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768558","lat":"53.0238829","lon":"20.7720146","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768559","lat":"52.9914301","lon":"20.8206758","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768560","lat":"52.9939530","lon":"20.8438991","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768561","lat":"52.9946103","lon":"20.7109900","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768562","lat":"53.0241630","lon":"20.7690115","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768563","lat":"52.9757501","lon":"20.6724735","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768564","lat":"53.0155536","lon":"20.7340355","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768565","lat":"52.9724810","lon":"20.6747480","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768566","lat":"53.0179417","lon":"20.7377048","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768567","lat":"53.0225148","lon":"20.7676586","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768568","lat":"52.9952173","lon":"20.8506580","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768569","lat":"53.0278409","lon":"20.7645053","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768570","lat":"53.0222825","lon":"20.7678732","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768571","lat":"53.0264474","lon":"20.7671447","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768572","lat":"53.0134570","lon":"20.7345245","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768573","lat":"53.0121752","lon":"20.7418665","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768574","lat":"53.0235216","lon":"20.7732591","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768575","lat":"53.0131822","lon":"20.7390556","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768576","lat":"53.0210692","lon":"20.7592258","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768577","lat":"53.0160351","lon":"20.7361802","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768578","lat":"52.9738164","lon":"20.6739744","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768579","lat":"53.0214952","lon":"20.7582173","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768580","lat":"53.0158893","lon":"20.7367607","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768581","lat":"52.9944075","lon":"20.8477172","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768582","lat":"53.0120590","lon":"20.7420596","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768583","lat":"53.0172059","lon":"20.7545705","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768584","lat":"52.9749018","lon":"20.6729659","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768585","lat":"53.0274510","lon":"20.7661384","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768586","lat":"52.9947304","lon":"20.7099375","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"3974768587","lat":"53.0136001","lon":"20.7346499","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"node","tags":{}},{"id":"39713346","version":"2","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"39713346","version":"1","timestamp":"2009-08-29T03:11:12Z","changeset":"2296702","uid":"20587","user":"balrog-kun","action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476186569","lat":"53.0154330","lon":"20.7365269"},{"ref":"476186527","lat":"53.0145500","lon":"20.7381100"},{"ref":"476186597","lat":"53.0140100","lon":"20.7378600"},{"ref":"476186656","lat":"53.0138200","lon":"20.7379600"},{"ref":"476186653","lat":"53.0134500","lon":"20.7386500"},{"ref":"476186661","lat":"53.0134600","lon":"20.7392200"},{"ref":"476186663","lat":"53.0168700","lon":"20.7544900"},{"ref":"476186591","lat":"53.0180800","lon":"20.7566900"}]},"action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476186569","lat":"53.0154330","lon":"20.7365269"},{"ref":"3974768215","lat":"53.0150071","lon":"20.7372904"},{"ref":"476186527","lat":"53.0145500","lon":"20.7381100"},{"ref":"476186597","lat":"53.0140100","lon":"20.7378600"},{"ref":"476186656","lat":"53.0138200","lon":"20.7379600"},{"ref":"476186653","lat":"53.0134500","lon":"20.7386500"},{"ref":"476186661","lat":"53.0134600","lon":"20.7392200"},{"ref":"476186663","lat":"53.0166199","lon":"20.7529301"},{"ref":"476186591","lat":"53.0168103","lon":"20.7536951"},{"ref":"3974768256","lat":"53.0169775","lon":"20.7540974"},{"ref":"3974768583","lat":"53.0172059","lon":"20.7545705"},{"ref":"3974768213","lat":"53.0179675","lon":"20.7560297"},{"ref":"3974768204","lat":"53.0185264","lon":"20.7569083"},{"ref":"3974768197","lat":"53.0194042","lon":"20.7579383"},{"ref":"3974768196","lat":"53.0205491","lon":"20.7589479"},{"ref":"3974768246","lat":"53.0209144","lon":"20.7592258"},{"ref":"3974768576","lat":"53.0210692","lon":"20.7592258"},{"ref":"3974768251","lat":"53.0211983","lon":"20.7590112"},{"ref":"3974768217","lat":"53.0213661","lon":"20.7583889"},{"ref":"3974768579","lat":"53.0214952","lon":"20.7582173"},{"ref":"3974768195","lat":"53.0216501","lon":"20.7582602"},{"ref":"3974768569","lat":"53.0278409","lon":"20.7645053"}]},{"id":"39716652","version":"5","timestamp":"2016-01-28T21:53:10Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"39716652","version":"4","timestamp":"2015-07-08T17:38:33Z","changeset":"32501229","uid":"950182","user":"RitterR","action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476188975","lat":"53.0249477","lon":"20.7720855"},{"ref":"476188973","lat":"53.0260147","lon":"20.7727738"},{"ref":"3246088002","lat":"53.0258346","lon":"20.7743278"},{"ref":"3246088003","lat":"53.0258458","lon":"20.7749457"},{"ref":"476189001","lat":"53.0259472","lon":"20.7755823"},{"ref":"476188600","lat":"53.0272533","lon":"20.7801996"},{"ref":"3641211310","lat":"53.0273343","lon":"20.7805098"},{"ref":"3246088004","lat":"53.0296007","lon":"20.7857591"},{"ref":"476197024","lat":"53.0307500","lon":"20.7881700"},{"ref":"476197065","lat":"53.0314508","lon":"20.7892402"},{"ref":"476195974","lat":"53.0319136","lon":"20.7899535"},{"ref":"3285006403","lat":"53.0344125","lon":"20.7942717"},{"ref":"3641211318","lat":"53.0362865","lon":"20.7976956"},{"ref":"3285006407","lat":"53.0373637","lon":"20.7996637"},{"ref":"3285006412","lat":"53.0376362","lon":"20.8000404"},{"ref":"476225284","lat":"53.0391592","lon":"20.8021456"}]},"action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476188975","lat":"53.0249477","lon":"20.7720855"},{"ref":"476188973","lat":"53.0260147","lon":"20.7727738"},{"ref":"3974768247","lat":"53.0258764","lon":"20.7739673"},{"ref":"3246088002","lat":"53.0258346","lon":"20.7743278"},{"ref":"3246088003","lat":"53.0258458","lon":"20.7749457"},{"ref":"476189001","lat":"53.0259472","lon":"20.7755823"},{"ref":"476188600","lat":"53.0272533","lon":"20.7801996"},{"ref":"3641211310","lat":"53.0273343","lon":"20.7805098"},{"ref":"3246088004","lat":"53.0296007","lon":"20.7857591"},{"ref":"476197024","lat":"53.0307500","lon":"20.7881700"},{"ref":"476197065","lat":"53.0314508","lon":"20.7892402"},{"ref":"476195974","lat":"53.0319136","lon":"20.7899535"},{"ref":"3285006403","lat":"53.0344125","lon":"20.7942717"},{"ref":"3641211318","lat":"53.0362865","lon":"20.7976956"},{"ref":"3285006407","lat":"53.0373637","lon":"20.7996637"},{"ref":"3285006412","lat":"53.0376362","lon":"20.8000404"},{"ref":"476225284","lat":"53.0391592","lon":"20.8021456"}]},{"id":"39718718","version":"5","timestamp":"2016-01-28T21:53:10Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"39718718","version":"4","timestamp":"2015-09-08T21:29:39Z","changeset":"33894721","uid":"2098272","user":"maraf24","action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476185451","lat":"52.9825646","lon":"20.8258428"},{"ref":"2563203067","lat":"52.9834169","lon":"20.8250153"},{"ref":"476185537","lat":"52.9842613","lon":"20.8243511"},{"ref":"476191149","lat":"52.9857500","lon":"20.8237400"},{"ref":"476185409","lat":"52.9864300","lon":"20.8234000"},{"ref":"3735126054","lat":"52.9882580","lon":"20.8224784"},{"ref":"476185421","lat":"52.9912100","lon":"20.8209900"},{"ref":"476191143","lat":"52.9922308","lon":"20.8195324"},{"ref":"476185535","lat":"52.9920390","lon":"20.8177257"},{"ref":"476185533","lat":"52.9920480","lon":"20.8162730"},{"ref":"476185419","lat":"52.9974087","lon":"20.8141431"},{"ref":"3285000666","lat":"52.9977604","lon":"20.8139936"},{"ref":"476210269","lat":"52.9981203","lon":"20.8136267"},{"ref":"3285000665","lat":"52.9993472","lon":"20.8120502"},{"ref":"476185414","lat":"52.9999709","lon":"20.8109829"}]},"action":"modify","type":"way","tags":{"highway":"residential","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"476185451","lat":"52.9825646","lon":"20.8258428"},{"ref":"2563203067","lat":"52.9834169","lon":"20.8250153"},{"ref":"476185537","lat":"52.9842613","lon":"20.8243511"},{"ref":"476191149","lat":"52.9857500","lon":"20.8237400"},{"ref":"476185409","lat":"52.9864300","lon":"20.8234000"},{"ref":"3735126054","lat":"52.9882580","lon":"20.8224784"},{"ref":"476185421","lat":"52.9912100","lon":"20.8209900"},{"ref":"3974768559","lat":"52.9914301","lon":"20.8206758"},{"ref":"476191143","lat":"52.9922308","lon":"20.8195324"},{"ref":"476185535","lat":"52.9920390","lon":"20.8177257"},{"ref":"476185533","lat":"52.9920480","lon":"20.8162730"},{"ref":"476185419","lat":"52.9974087","lon":"20.8141431"},{"ref":"3285000666","lat":"52.9977604","lon":"20.8139936"},{"ref":"476210269","lat":"52.9981203","lon":"20.8136267"},{"ref":"3285000665","lat":"52.9993472","lon":"20.8120502"},{"ref":"476185414","lat":"52.9999709","lon":"20.8109829"}]},{"id":"201557116","version":"4","timestamp":"2016-01-28T21:53:10Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"201557116","version":"3","timestamp":"2013-08-28T23:17:48Z","changeset":"17563824","uid":"950182","user":"RitterR","action":"modify","type":"way","tags":{"boundary":"administrative"},"nodes":[{"ref":"2120105904","lat":"52.9960599","lon":"20.8548475"},{"ref":"2120105906","lat":"52.9960818","lon":"20.8548276"},{"ref":"2120105901","lat":"52.9958872","lon":"20.8525943"},{"ref":"2120105895","lat":"52.9954295","lon":"20.8515434"},{"ref":"2120105891","lat":"52.9952862","lon":"20.8512780"},{"ref":"2120105889","lat":"52.9951436","lon":"20.8510542"},{"ref":"2120105887","lat":"52.9947765","lon":"20.8500034"},{"ref":"2120105885","lat":"52.9945638","lon":"20.8492864"},{"ref":"2120105883","lat":"52.9944868","lon":"20.8489498"},{"ref":"2120105879","lat":"52.9943125","lon":"20.8483708"},{"ref":"2120105875","lat":"52.9940491","lon":"20.8470984"},{"ref":"2120105873","lat":"52.9939924","lon":"20.8467618"},{"ref":"2120105872","lat":"52.9939581","lon":"20.8444104"},{"ref":"2120105870","lat":"52.9939509","lon":"20.8436916"},{"ref":"2120105877","lat":"52.9942031","lon":"20.8426348"},{"ref":"2120105890","lat":"52.9951728","lon":"20.8380175"},{"ref":"2120105897","lat":"52.9955195","lon":"20.8363846"},{"ref":"2120105899","lat":"52.9957602","lon":"20.8353945"},{"ref":"2120105903","lat":"52.9960209","lon":"20.8339663"},{"ref":"2120105909","lat":"52.9962759","lon":"20.8326857"},{"ref":"2120105915","lat":"52.9965567","lon":"20.8317479"},{"ref":"2120105919","lat":"52.9968375","lon":"20.8309624"},{"ref":"2120105921","lat":"52.9969177","lon":"20.8305673"},{"ref":"2120105881","lat":"52.9944536","lon":"20.8316955"},{"ref":"2120105862","lat":"52.9886015","lon":"20.8246613"},{"ref":"2120105861","lat":"52.9877433","lon":"20.8250577"},{"ref":"2120105859","lat":"52.9831194","lon":"20.8272437"},{"ref":"2120105857","lat":"52.9828893","lon":"20.8274049"},{"ref":"2120105855","lat":"52.9821845","lon":"20.8247292"},{"ref":"2120105854","lat":"52.9817135","lon":"20.8229315"},{"ref":"2120105852","lat":"52.9813790","lon":"20.8222029"},{"ref":"2120105850","lat":"52.9798579","lon":"20.8200766"},{"ref":"2120105846","lat":"52.9788546","lon":"20.8206858"},{"ref":"2120105838","lat":"52.9777074","lon":"20.8215817"},{"ref":"2120105828","lat":"52.9772363","lon":"20.8219341"},{"ref":"2115692694","lat":"52.9742494","lon":"20.8230165"}]},"action":"modify","type":"way","tags":{"boundary":"administrative"},"nodes":[{"ref":"2120105904","lat":"52.9960599","lon":"20.8548475"},{"ref":"2120105906","lat":"52.9960818","lon":"20.8548276"},{"ref":"2120105901","lat":"52.9958872","lon":"20.8525943"},{"ref":"2120105895","lat":"52.9954295","lon":"20.8515434"},{"ref":"2120105891","lat":"52.9952862","lon":"20.8512780"},{"ref":"2120105889","lat":"52.9951436","lon":"20.8510542"},{"ref":"2120105887","lat":"52.9947765","lon":"20.8500034"},{"ref":"2120105885","lat":"52.9945638","lon":"20.8492864"},{"ref":"2120105883","lat":"52.9944868","lon":"20.8489498"},{"ref":"2120105879","lat":"52.9943125","lon":"20.8483708"},{"ref":"2120105875","lat":"52.9940491","lon":"20.8470984"},{"ref":"2120105873","lat":"52.9939924","lon":"20.8467618"},{"ref":"3974768240","lat":"52.9939669","lon":"20.8450145"},{"ref":"2120105872","lat":"52.9939581","lon":"20.8444104"},{"ref":"3974768560","lat":"52.9939530","lon":"20.8438991"},{"ref":"2120105870","lat":"52.9939509","lon":"20.8436916"},{"ref":"2120105877","lat":"52.9942031","lon":"20.8426348"},{"ref":"2120105890","lat":"52.9951728","lon":"20.8380175"},{"ref":"2120105897","lat":"52.9955195","lon":"20.8363846"},{"ref":"2120105899","lat":"52.9957602","lon":"20.8353945"},{"ref":"2120105903","lat":"52.9960209","lon":"20.8339663"},{"ref":"2120105909","lat":"52.9962759","lon":"20.8326857"},{"ref":"2120105915","lat":"52.9965567","lon":"20.8317479"},{"ref":"2120105919","lat":"52.9968375","lon":"20.8309624"},{"ref":"2120105921","lat":"52.9969177","lon":"20.8305673"},{"ref":"2120105881","lat":"52.9944536","lon":"20.8316955"},{"ref":"2120105862","lat":"52.9886015","lon":"20.8246613"},{"ref":"2120105861","lat":"52.9877433","lon":"20.8250577"},{"ref":"2120105859","lat":"52.9831194","lon":"20.8272437"},{"ref":"2120105857","lat":"52.9828893","lon":"20.8274049"},{"ref":"2120105855","lat":"52.9821845","lon":"20.8247292"},{"ref":"2120105854","lat":"52.9817135","lon":"20.8229315"},{"ref":"2120105852","lat":"52.9813790","lon":"20.8222029"},{"ref":"2120105850","lat":"52.9798579","lon":"20.8200766"},{"ref":"2120105846","lat":"52.9788546","lon":"20.8206858"},{"ref":"2120105838","lat":"52.9777074","lon":"20.8215817"},{"ref":"2120105828","lat":"52.9772363","lon":"20.8219341"},{"ref":"2115692694","lat":"52.9742494","lon":"20.8230165"}]},{"id":"314834922","version":"4","timestamp":"2016-01-28T21:53:12Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"314834922","version":"3","timestamp":"2015-10-12T16:00:00Z","changeset":"34593510","uid":"3068531","user":"pawel66031","action":"modify","type":"way","tags":{"highway":"tertiary","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"3208776437","lat":"53.0268958","lon":"20.7222794"},{"ref":"476185445","lat":"53.0224355","lon":"20.7267449"},{"ref":"3782081938","lat":"53.0220031","lon":"20.7272492"},{"ref":"3782081937","lat":"53.0216353","lon":"20.7277534"},{"ref":"476185422","lat":"53.0208754","lon":"20.7290543"},{"ref":"476186365","lat":"53.0194200","lon":"20.7317600"},{"ref":"3782081936","lat":"53.0191264","lon":"20.7321523"},{"ref":"476188151","lat":"53.0187537","lon":"20.7324875"},{"ref":"476188167","lat":"53.0164592","lon":"20.7344965"},{"ref":"476188165","lat":"53.0162107","lon":"20.7348291"},{"ref":"476186593","lat":"53.0158332","lon":"20.7361488"},{"ref":"3782081935","lat":"53.0157283","lon":"20.7364465"},{"ref":"476186347","lat":"53.0155750","lon":"20.7365779"},{"ref":"476186569","lat":"53.0154330","lon":"20.7365269"},{"ref":"3782081934","lat":"53.0146278","lon":"20.7355506"},{"ref":"476186594","lat":"53.0131551","lon":"20.7342599"},{"ref":"3782081931","lat":"53.0130532","lon":"20.7342476"},{"ref":"476187147","lat":"53.0129531","lon":"20.7343185"},{"ref":"476186878","lat":"53.0122580","lon":"20.7360654"},{"ref":"3782081932","lat":"53.0121467","lon":"20.7361733"},{"ref":"476186857","lat":"53.0120263","lon":"20.7361455"},{"ref":"476187133","lat":"53.0104172","lon":"20.7345958"},{"ref":"476188132","lat":"53.0102244","lon":"20.7345311"},{"ref":"476186385","lat":"53.0100261","lon":"20.7346666"},{"ref":"476188149","lat":"53.0089967","lon":"20.7357613"},{"ref":"476188172","lat":"53.0059282","lon":"20.7390199"},{"ref":"3782081933","lat":"53.0057090","lon":"20.7391413"},{"ref":"476186399","lat":"53.0053116","lon":"20.7393252"},{"ref":"3783469060","lat":"53.0024772","lon":"20.7405283"},{"ref":"476186572","lat":"53.0015189","lon":"20.7409533"},{"ref":"2547155691","lat":"53.0011145","lon":"20.7412928"},{"ref":"3783469061","lat":"53.0010046","lon":"20.7415884"},{"ref":"476186525","lat":"53.0008999","lon":"20.7422274"},{"ref":"476186581","lat":"53.0004172","lon":"20.7461604"},{"ref":"3783469062","lat":"53.0001812","lon":"20.7482525"},{"ref":"476186397","lat":"52.9999800","lon":"20.7503500"},{"ref":"476186357","lat":"52.9998200","lon":"20.7518355"},{"ref":"3783469063","lat":"52.9997849","lon":"20.7521987"},{"ref":"476186574","lat":"52.9998130","lon":"20.7525582"},{"ref":"3092394883","lat":"53.0001864","lon":"20.7545599"},{"ref":"476186383","lat":"53.0002275","lon":"20.7549168"},{"ref":"476186568","lat":"53.0001643","lon":"20.7560244"},{"ref":"3092394882","lat":"53.0001106","lon":"20.7565756"},{"ref":"3092394881","lat":"53.0000127","lon":"20.7570060"},{"ref":"476186595","lat":"52.9997663","lon":"20.7576517"},{"ref":"3092394880","lat":"52.9996462","lon":"20.7580821"},{"ref":"476186580","lat":"52.9996300","lon":"20.7584800"},{"ref":"476186566","lat":"52.9996431","lon":"20.7594154"},{"ref":"476186358","lat":"52.9999779","lon":"20.7617461"},{"ref":"476186533","lat":"52.9999053","lon":"20.7625282"},{"ref":"3092394879","lat":"52.9996368","lon":"20.7639770"},{"ref":"476191451","lat":"52.9992457","lon":"20.7654445"},{"ref":"476186523","lat":"52.9987267","lon":"20.7671339"},{"ref":"476188153","lat":"52.9986322","lon":"20.7673155"},{"ref":"476187945","lat":"52.9985342","lon":"20.7673890"},{"ref":"3092394877","lat":"52.9972547","lon":"20.7678667"},{"ref":"476187969","lat":"52.9969400","lon":"20.7680900"},{"ref":"476188478","lat":"52.9956500","lon":"20.7692800"},{"ref":"476186391","lat":"52.9950200","lon":"20.7699300"},{"ref":"2547155687","lat":"52.9946073","lon":"20.7708069"},{"ref":"476186643","lat":"52.9940343","lon":"20.7724607"},{"ref":"476186390","lat":"52.9929309","lon":"20.7734929"}]},"action":"modify","type":"way","tags":{"highway":"tertiary","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"3208776437","lat":"53.0268958","lon":"20.7222794"},{"ref":"476185445","lat":"53.0224355","lon":"20.7267449"},{"ref":"3782081938","lat":"53.0220031","lon":"20.7272492"},{"ref":"3782081937","lat":"53.0216353","lon":"20.7277534"},{"ref":"476185422","lat":"53.0208754","lon":"20.7290543"},{"ref":"476186365","lat":"53.0194200","lon":"20.7317600"},{"ref":"3782081936","lat":"53.0191264","lon":"20.7321523"},{"ref":"476188151","lat":"53.0187537","lon":"20.7324875"},{"ref":"3974768230","lat":"53.0167613","lon":"20.7342320"},{"ref":"476188167","lat":"53.0164592","lon":"20.7344965"},{"ref":"476188165","lat":"53.0162107","lon":"20.7348291"},{"ref":"3974768205","lat":"53.0160495","lon":"20.7353926"},{"ref":"476186593","lat":"53.0158332","lon":"20.7361488"},{"ref":"3782081935","lat":"53.0157283","lon":"20.7364465"},{"ref":"476186347","lat":"53.0155750","lon":"20.7365779"},{"ref":"476186569","lat":"53.0154330","lon":"20.7365269"},{"ref":"3782081934","lat":"53.0146278","lon":"20.7355506"},{"ref":"3974768587","lat":"53.0136001","lon":"20.7346499"},{"ref":"3974768572","lat":"53.0134570","lon":"20.7345245"},{"ref":"476186594","lat":"53.0131551","lon":"20.7342599"},{"ref":"3782081931","lat":"53.0130532","lon":"20.7342476"},{"ref":"476187147","lat":"53.0129531","lon":"20.7343185"},{"ref":"476186878","lat":"53.0122580","lon":"20.7360654"},{"ref":"3782081932","lat":"53.0121467","lon":"20.7361733"},{"ref":"476186857","lat":"53.0120263","lon":"20.7361455"},{"ref":"476187133","lat":"53.0104172","lon":"20.7345958"},{"ref":"476188132","lat":"53.0102244","lon":"20.7345311"},{"ref":"476186385","lat":"53.0100261","lon":"20.7346666"},{"ref":"476188149","lat":"53.0089967","lon":"20.7357613"},{"ref":"476188172","lat":"53.0059282","lon":"20.7390199"},{"ref":"3782081933","lat":"53.0057090","lon":"20.7391413"},{"ref":"476186399","lat":"53.0053116","lon":"20.7393252"},{"ref":"3783469060","lat":"53.0024772","lon":"20.7405283"},{"ref":"476186572","lat":"53.0015189","lon":"20.7409533"},{"ref":"2547155691","lat":"53.0011145","lon":"20.7412928"},{"ref":"3783469061","lat":"53.0010046","lon":"20.7415884"},{"ref":"476186525","lat":"53.0008999","lon":"20.7422274"},{"ref":"476186581","lat":"53.0004172","lon":"20.7461604"},{"ref":"3783469062","lat":"53.0001812","lon":"20.7482525"},{"ref":"476186397","lat":"52.9999800","lon":"20.7503500"},{"ref":"476186357","lat":"52.9998200","lon":"20.7518355"},{"ref":"3783469063","lat":"52.9997849","lon":"20.7521987"},{"ref":"476186574","lat":"52.9998130","lon":"20.7525582"},{"ref":"3092394883","lat":"53.0001864","lon":"20.7545599"},{"ref":"476186383","lat":"53.0002275","lon":"20.7549168"},{"ref":"476186568","lat":"53.0001643","lon":"20.7560244"},{"ref":"3092394882","lat":"53.0001106","lon":"20.7565756"},{"ref":"3092394881","lat":"53.0000127","lon":"20.7570060"},{"ref":"476186595","lat":"52.9997663","lon":"20.7576517"},{"ref":"3092394880","lat":"52.9996462","lon":"20.7580821"},{"ref":"476186580","lat":"52.9996300","lon":"20.7584800"},{"ref":"476186566","lat":"52.9996431","lon":"20.7594154"},{"ref":"476186358","lat":"52.9999779","lon":"20.7617461"},{"ref":"476186533","lat":"52.9999053","lon":"20.7625282"},{"ref":"3092394879","lat":"52.9996368","lon":"20.7639770"},{"ref":"476191451","lat":"52.9992457","lon":"20.7654445"},{"ref":"476186523","lat":"52.9987267","lon":"20.7671339"},{"ref":"476188153","lat":"52.9986322","lon":"20.7673155"},{"ref":"476187945","lat":"52.9985342","lon":"20.7673890"},{"ref":"3092394877","lat":"52.9972547","lon":"20.7678667"},{"ref":"476187969","lat":"52.9969400","lon":"20.7680900"},{"ref":"476188478","lat":"52.9956500","lon":"20.7692800"},{"ref":"476186391","lat":"52.9950200","lon":"20.7699300"},{"ref":"2547155687","lat":"52.9946073","lon":"20.7708069"},{"ref":"476186643","lat":"52.9940343","lon":"20.7724607"},{"ref":"476186390","lat":"52.9929309","lon":"20.7734929"}]},{"id":"318212539","version":"3","timestamp":"2016-01-28T21:53:11Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"318212539","version":"2","timestamp":"2014-12-21T14:11:44Z","changeset":"27609734","uid":"378154","user":"rosomak","action":"modify","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3246081390","lat":"53.0487225","lon":"20.7648037"},{"ref":"3246081393","lat":"53.0483940","lon":"20.7652833"},{"ref":"3246081394","lat":"53.0481896","lon":"20.7657448"},{"ref":"3246081395","lat":"53.0480582","lon":"20.7661819"},{"ref":"3246081396","lat":"53.0474888","lon":"20.7694605"},{"ref":"3246081397","lat":"53.0473574","lon":"20.7698734"},{"ref":"3246081398","lat":"53.0470508","lon":"20.7702134"},{"ref":"3246081399","lat":"53.0468464","lon":"20.7703349"},{"ref":"3246081400","lat":"53.0454740","lon":"20.7709906"},{"ref":"3246081401","lat":"53.0443059","lon":"20.7717192"},{"ref":"3246081402","lat":"53.0437803","lon":"20.7719135"},{"ref":"3246081403","lat":"53.0428020","lon":"20.7715573"},{"ref":"3246081404","lat":"53.0423543","lon":"20.7712334"},{"ref":"3246081405","lat":"53.0414198","lon":"20.7702944"},{"ref":"3246081406","lat":"53.0400959","lon":"20.7695172"},{"ref":"3246081407","lat":"53.0397454","lon":"20.7693877"},{"ref":"3246081408","lat":"53.0377984","lon":"20.7689991"},{"ref":"3246081409","lat":"53.0373895","lon":"20.7690315"},{"ref":"3246081410","lat":"53.0369806","lon":"20.7693229"},{"ref":"3246081411","lat":"53.0353110","lon":"20.7704797"},{"ref":"3246081412","lat":"53.0349304","lon":"20.7708692"},{"ref":"3246081413","lat":"53.0347693","lon":"20.7719405"},{"ref":"3246091629","lat":"53.0277127","lon":"20.7672915"},{"ref":"3246081414","lat":"53.0272476","lon":"20.7669905"}]},"action":"modify","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3246081390","lat":"53.0487225","lon":"20.7648037"},{"ref":"3246081393","lat":"53.0483940","lon":"20.7652833"},{"ref":"3246081394","lat":"53.0481896","lon":"20.7657448"},{"ref":"3246081395","lat":"53.0480582","lon":"20.7661819"},{"ref":"3246081396","lat":"53.0474888","lon":"20.7694605"},{"ref":"3246081397","lat":"53.0473574","lon":"20.7698734"},{"ref":"3246081398","lat":"53.0470508","lon":"20.7702134"},{"ref":"3246081399","lat":"53.0468464","lon":"20.7703349"},{"ref":"3246081400","lat":"53.0454740","lon":"20.7709906"},{"ref":"3246081401","lat":"53.0443059","lon":"20.7717192"},{"ref":"3246081402","lat":"53.0437803","lon":"20.7719135"},{"ref":"3246081403","lat":"53.0428020","lon":"20.7715573"},{"ref":"3246081404","lat":"53.0423543","lon":"20.7712334"},{"ref":"3246081405","lat":"53.0414198","lon":"20.7702944"},{"ref":"3246081406","lat":"53.0400959","lon":"20.7695172"},{"ref":"3246081407","lat":"53.0397454","lon":"20.7693877"},{"ref":"3246081408","lat":"53.0377984","lon":"20.7689991"},{"ref":"3246081409","lat":"53.0373895","lon":"20.7690315"},{"ref":"3246081410","lat":"53.0369806","lon":"20.7693229"},{"ref":"3246081411","lat":"53.0353110","lon":"20.7704797"},{"ref":"3246081412","lat":"53.0349304","lon":"20.7708692"},{"ref":"3246081413","lat":"53.0347693","lon":"20.7719405"},{"ref":"3974768237","lat":"53.0286286","lon":"20.7678948"},{"ref":"3974768221","lat":"53.0283323","lon":"20.7676996"},{"ref":"3246091629","lat":"53.0277127","lon":"20.7672915"},{"ref":"3246081414","lat":"53.0272476","lon":"20.7669905"}]},{"id":"318213516","version":"2","timestamp":"2016-01-28T21:53:10Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"318213516","version":"1","timestamp":"2014-12-21T14:11:44Z","changeset":"27609734","uid":"378154","user":"rosomak","action":"modify","type":"way","tags":{"highway":"residential"},"nodes":[{"ref":"476188973","lat":"53.0260147","lon":"20.7727738"},{"ref":"3246091628","lat":"53.0265090","lon":"20.7718377"},{"ref":"3246091629","lat":"53.0277127","lon":"20.7672915"}]},"action":"modify","type":"way","tags":{"highway":"residential"},"nodes":[{"ref":"476188973","lat":"53.0260147","lon":"20.7727738"},{"ref":"3246091628","lat":"53.0265090","lon":"20.7718377"},{"ref":"3974768219","lat":"53.0266575","lon":"20.7712767"},{"ref":"3974768201","lat":"53.0267716","lon":"20.7708460"},{"ref":"3974768210","lat":"53.0270107","lon":"20.7699429"},{"ref":"3246091629","lat":"53.0277127","lon":"20.7672915"}]},{"id":"361260396","version":"2","timestamp":"2016-01-28T21:53:11Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"361260396","version":"1","timestamp":"2015-07-19T11:37:20Z","changeset":"32731226","uid":"163896","user":"Zbigniew_Czernik","action":"modify","type":"way","tags":{"highway":"secondary","ref":"617"},"nodes":[{"ref":"476219634","lat":"52.9057600","lon":"20.6491600"},{"ref":"1841257497","lat":"52.9065307","lon":"20.6499703"},{"ref":"1841257499","lat":"52.9108332","lon":"20.6532580"},{"ref":"2558227689","lat":"52.9151126","lon":"20.6563518"},{"ref":"1841257500","lat":"52.9163469","lon":"20.6572441"},{"ref":"1841257504","lat":"52.9180031","lon":"20.6578747"},{"ref":"1841257510","lat":"52.9190278","lon":"20.6585009"},{"ref":"2323247062","lat":"52.9191835","lon":"20.6587472"},{"ref":"1841257515","lat":"52.9196076","lon":"20.6594177"},{"ref":"476195575","lat":"52.9202100","lon":"20.6607800"},{"ref":"476195928","lat":"52.9202900","lon":"20.6609600"},{"ref":"1841257521","lat":"52.9248719","lon":"20.6712133"},{"ref":"2335468651","lat":"52.9250917","lon":"20.6717058"},{"ref":"1841257524","lat":"52.9252256","lon":"20.6721489"},{"ref":"3423234293","lat":"52.9259642","lon":"20.6759418"},{"ref":"1841257526","lat":"52.9289740","lon":"20.6925250"},{"ref":"476185381","lat":"52.9302236","lon":"20.6995411"},{"ref":"2424685433","lat":"52.9306842","lon":"20.7017527"},{"ref":"1841257537","lat":"52.9312526","lon":"20.7039859"},{"ref":"1841257544","lat":"52.9333484","lon":"20.7113633"},{"ref":"2424685435","lat":"52.9343948","lon":"20.7139525"},{"ref":"476188244","lat":"52.9355400","lon":"20.7164300"},{"ref":"1841257548","lat":"52.9376611","lon":"20.7207654"},{"ref":"476188247","lat":"52.9386400","lon":"20.7221800"},{"ref":"476188594","lat":"52.9394100","lon":"20.7232600"},{"ref":"476189070","lat":"52.9410457","lon":"20.7255732"},{"ref":"1841257549","lat":"52.9414588","lon":"20.7261526"},{"ref":"2335865453","lat":"52.9441155","lon":"20.7298976"},{"ref":"1841257553","lat":"52.9458896","lon":"20.7324223"},{"ref":"1841257558","lat":"52.9463127","lon":"20.7329347"},{"ref":"1841257564","lat":"52.9469447","lon":"20.7333964"},{"ref":"476189053","lat":"52.9520209","lon":"20.7363481"},{"ref":"1841257569","lat":"52.9525584","lon":"20.7368522"},{"ref":"1841257573","lat":"52.9553010","lon":"20.7403197"},{"ref":"1841257574","lat":"52.9585207","lon":"20.7442831"},{"ref":"1841257578","lat":"52.9600907","lon":"20.7463973"},{"ref":"1841257584","lat":"52.9603922","lon":"20.7469645"},{"ref":"1841257594","lat":"52.9606968","lon":"20.7477791"},{"ref":"476191257","lat":"52.9609802","lon":"20.7493295"},{"ref":"476187920","lat":"52.9614760","lon":"20.7518793"},{"ref":"2335898497","lat":"52.9632140","lon":"20.7603053"},{"ref":"1841257600","lat":"52.9638050","lon":"20.7632516"},{"ref":"2335898499","lat":"52.9650984","lon":"20.7696983"},{"ref":"2335898501","lat":"52.9652846","lon":"20.7706263"},{"ref":"1841257604","lat":"52.9658867","lon":"20.7736277"},{"ref":"1841257607","lat":"52.9662138","lon":"20.7750309"},{"ref":"1841257614","lat":"52.9686834","lon":"20.7836589"},{"ref":"2335900329","lat":"52.9694607","lon":"20.7865580"},{"ref":"1888058717","lat":"52.9694774","lon":"20.7866232"},{"ref":"1841257621","lat":"52.9712869","lon":"20.7933782"},{"ref":"2338222025","lat":"52.9739796","lon":"20.8036782"},{"ref":"1841257649","lat":"52.9768293","lon":"20.8145755"},{"ref":"476185595","lat":"52.9771767","lon":"20.8157979"},{"ref":"1841257657","lat":"52.9774963","lon":"20.8165106"},{"ref":"2424685492","lat":"52.9777608","lon":"20.8168898"},{"ref":"2424685498","lat":"52.9786145","lon":"20.8181142"},{"ref":"2424685510","lat":"52.9797091","lon":"20.8196667"},{"ref":"476185376","lat":"52.9799643","lon":"20.8200359"},{"ref":"1841257664","lat":"52.9807125","lon":"20.8210654"},{"ref":"1841257669","lat":"52.9815453","lon":"20.8222820"},{"ref":"1841257676","lat":"52.9818614","lon":"20.8230888"},{"ref":"1841257687","lat":"52.9822862","lon":"20.8246285"},{"ref":"476185451","lat":"52.9825646","lon":"20.8258428"},{"ref":"2424685513","lat":"52.9839251","lon":"20.8310617"},{"ref":"1841257692","lat":"52.9842541","lon":"20.8323239"},{"ref":"1841257697","lat":"52.9848822","lon":"20.8345306"},{"ref":"1841257706","lat":"52.9853876","lon":"20.8356460"},{"ref":"476195708","lat":"52.9858600","lon":"20.8368100"},{"ref":"1841257712","lat":"52.9870529","lon":"20.8394811"},{"ref":"1841257718","lat":"52.9883874","lon":"20.8427077"},{"ref":"476187316","lat":"52.9888341","lon":"20.8442109"},{"ref":"1841257740","lat":"52.9893656","lon":"20.8459343"},{"ref":"1841257757","lat":"52.9894983","lon":"20.8462244"},{"ref":"1841257769","lat":"52.9900978","lon":"20.8473209"},{"ref":"2120105864","lat":"52.9929551","lon":"20.8523102"}]},"action":"modify","type":"way","tags":{"highway":"secondary","ref":"617"},"nodes":[{"ref":"476219634","lat":"52.9057600","lon":"20.6491600"},{"ref":"1841257497","lat":"52.9065307","lon":"20.6499703"},{"ref":"1841257499","lat":"52.9108332","lon":"20.6532580"},{"ref":"2558227689","lat":"52.9151126","lon":"20.6563518"},{"ref":"1841257500","lat":"52.9163469","lon":"20.6572441"},{"ref":"1841257504","lat":"52.9180031","lon":"20.6578747"},{"ref":"1841257510","lat":"52.9190278","lon":"20.6585009"},{"ref":"2323247062","lat":"52.9191835","lon":"20.6587472"},{"ref":"1841257515","lat":"52.9196076","lon":"20.6594177"},{"ref":"476195575","lat":"52.9202100","lon":"20.6607800"},{"ref":"476195928","lat":"52.9202900","lon":"20.6609600"},{"ref":"1841257521","lat":"52.9248719","lon":"20.6712133"},{"ref":"2335468651","lat":"52.9250917","lon":"20.6717058"},{"ref":"1841257524","lat":"52.9252256","lon":"20.6721489"},{"ref":"3423234293","lat":"52.9259642","lon":"20.6759418"},{"ref":"1841257526","lat":"52.9289740","lon":"20.6925250"},{"ref":"476185381","lat":"52.9302236","lon":"20.6995411"},{"ref":"2424685433","lat":"52.9306842","lon":"20.7017527"},{"ref":"1841257537","lat":"52.9312526","lon":"20.7039859"},{"ref":"1841257544","lat":"52.9333484","lon":"20.7113633"},{"ref":"2424685435","lat":"52.9343948","lon":"20.7139525"},{"ref":"476188244","lat":"52.9355400","lon":"20.7164300"},{"ref":"1841257548","lat":"52.9376611","lon":"20.7207654"},{"ref":"476188247","lat":"52.9386400","lon":"20.7221800"},{"ref":"476188594","lat":"52.9394100","lon":"20.7232600"},{"ref":"476189070","lat":"52.9410457","lon":"20.7255732"},{"ref":"1841257549","lat":"52.9414588","lon":"20.7261526"},{"ref":"2335865453","lat":"52.9441155","lon":"20.7298976"},{"ref":"1841257553","lat":"52.9458896","lon":"20.7324223"},{"ref":"1841257558","lat":"52.9463127","lon":"20.7329347"},{"ref":"1841257564","lat":"52.9469447","lon":"20.7333964"},{"ref":"476189053","lat":"52.9520209","lon":"20.7363481"},{"ref":"1841257569","lat":"52.9525584","lon":"20.7368522"},{"ref":"1841257573","lat":"52.9553010","lon":"20.7403197"},{"ref":"1841257574","lat":"52.9585207","lon":"20.7442831"},{"ref":"1841257578","lat":"52.9600907","lon":"20.7463973"},{"ref":"1841257584","lat":"52.9603922","lon":"20.7469645"},{"ref":"1841257594","lat":"52.9606968","lon":"20.7477791"},{"ref":"476191257","lat":"52.9609802","lon":"20.7493295"},{"ref":"476187920","lat":"52.9614760","lon":"20.7518793"},{"ref":"2335898497","lat":"52.9632140","lon":"20.7603053"},{"ref":"1841257600","lat":"52.9638050","lon":"20.7632516"},{"ref":"2335898499","lat":"52.9650984","lon":"20.7696983"},{"ref":"2335898501","lat":"52.9652846","lon":"20.7706263"},{"ref":"1841257604","lat":"52.9658867","lon":"20.7736277"},{"ref":"1841257607","lat":"52.9662138","lon":"20.7750309"},{"ref":"1841257614","lat":"52.9686834","lon":"20.7836589"},{"ref":"2335900329","lat":"52.9694607","lon":"20.7865580"},{"ref":"1888058717","lat":"52.9694774","lon":"20.7866232"},{"ref":"1841257621","lat":"52.9712869","lon":"20.7933782"},{"ref":"2338222025","lat":"52.9739796","lon":"20.8036782"},{"ref":"1841257649","lat":"52.9768293","lon":"20.8145755"},{"ref":"476185595","lat":"52.9771767","lon":"20.8157979"},{"ref":"1841257657","lat":"52.9774963","lon":"20.8165106"},{"ref":"2424685492","lat":"52.9777608","lon":"20.8168898"},{"ref":"2424685498","lat":"52.9786145","lon":"20.8181142"},{"ref":"2424685510","lat":"52.9797091","lon":"20.8196667"},{"ref":"476185376","lat":"52.9799643","lon":"20.8200359"},{"ref":"1841257664","lat":"52.9807125","lon":"20.8210654"},{"ref":"1841257669","lat":"52.9815453","lon":"20.8222820"},{"ref":"1841257676","lat":"52.9818614","lon":"20.8230888"},{"ref":"1841257687","lat":"52.9822862","lon":"20.8246285"},{"ref":"476185451","lat":"52.9825646","lon":"20.8258428"},{"ref":"2424685513","lat":"52.9839251","lon":"20.8310617"},{"ref":"1841257692","lat":"52.9842541","lon":"20.8323239"},{"ref":"1841257697","lat":"52.9848822","lon":"20.8345306"},{"ref":"1841257706","lat":"52.9853876","lon":"20.8356460"},{"ref":"476195708","lat":"52.9858600","lon":"20.8368100"},{"ref":"1841257712","lat":"52.9870529","lon":"20.8394811"},{"ref":"1841257718","lat":"52.9883874","lon":"20.8427077"},{"ref":"476187316","lat":"52.9888341","lon":"20.8442109"},{"ref":"1841257740","lat":"52.9893656","lon":"20.8459343"},{"ref":"1841257757","lat":"52.9894983","lon":"20.8462244"},{"ref":"3974768209","lat":"52.9898627","lon":"20.8468908"},{"ref":"1841257769","lat":"52.9900978","lon":"20.8473209"},{"ref":"2120105864","lat":"52.9929551","lon":"20.8523102"}]},{"id":"370172614","version":"2","timestamp":"2016-01-28T21:53:11Z","changeset":"36866540","uid":"38465","user":"Robak","old":{"id":"370172614","version":"1","timestamp":"2015-09-11T11:44:23Z","changeset":"33955477","uid":"2844322","user":"Olga | Yanosik","action":"modify","type":"way","tags":{"addr:city":"Grudusk","highway":"secondary","ref":"544","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"3738966154","lat":"53.0212464","lon":"20.8109158"},{"ref":"1842433579","lat":"53.0213353","lon":"20.8081834"},{"ref":"3641211304","lat":"53.0214051","lon":"20.8036942"},{"ref":"1842433580","lat":"53.0214606","lon":"20.8001284"},{"ref":"3092394899","lat":"53.0213595","lon":"20.7989264"},{"ref":"1842433574","lat":"53.0205796","lon":"20.7939973"},{"ref":"3092394898","lat":"53.0203617","lon":"20.7923858"},{"ref":"476185390","lat":"53.0200958","lon":"20.7896599"},{"ref":"3092394897","lat":"53.0200540","lon":"20.7888522"},{"ref":"3246088014","lat":"53.0200859","lon":"20.7880351"},{"ref":"1842433569","lat":"53.0203554","lon":"20.7858558"},{"ref":"1842433576","lat":"53.0210640","lon":"20.7799065"},{"ref":"1842433578","lat":"53.0214050","lon":"20.7781208"},{"ref":"1842433582","lat":"53.0221352","lon":"20.7753750"},{"ref":"3246091633","lat":"53.0224090","lon":"20.7747672"},{"ref":"1842433584","lat":"53.0226418","lon":"20.7744571"},{"ref":"1842433585","lat":"53.0241408","lon":"20.7730936"},{"ref":"3246091632","lat":"53.0246735","lon":"20.7724864"},{"ref":"476188975","lat":"53.0249477","lon":"20.7720855"},{"ref":"3246091631","lat":"53.0251998","lon":"20.7712908"},{"ref":"476188990","lat":"53.0258288","lon":"20.7685416"},{"ref":"1842433586","lat":"53.0260660","lon":"20.7679949"},{"ref":"3246091630","lat":"53.0263082","lon":"20.7677122"},{"ref":"476188957","lat":"53.0269237","lon":"20.7674429"},{"ref":"476189003","lat":"53.0270986","lon":"20.7672921"},{"ref":"3246081414","lat":"53.0272476","lon":"20.7669905"},{"ref":"476195985","lat":"53.0279400","lon":"20.7640900"},{"ref":"476195732","lat":"53.0281100","lon":"20.7627400"},{"ref":"3392152669","lat":"53.0284323","lon":"20.7557273"},{"ref":"3246093087","lat":"53.0285174","lon":"20.7544461"},{"ref":"3393923838","lat":"53.0285517","lon":"20.7539342"},{"ref":"3393923841","lat":"53.0286095","lon":"20.7530710"},{"ref":"1842433587","lat":"53.0286770","lon":"20.7520620"},{"ref":"2564847574","lat":"53.0288811","lon":"20.7486683"},{"ref":"476185696","lat":"53.0299115","lon":"20.7320750"}]},"action":"modify","type":"way","tags":{"addr:city":"Grudusk","highway":"secondary","ref":"544","source":"http://ump.waw.pl/ retrieved 12:40:28 08/23/09 (UMP-Ciechanow/src/inne.ulice.txt)"},"nodes":[{"ref":"3738966154","lat":"53.0212464","lon":"20.8109158"},{"ref":"1842433579","lat":"53.0213353","lon":"20.8081834"},{"ref":"3641211304","lat":"53.0214051","lon":"20.8036942"},{"ref":"1842433580","lat":"53.0214606","lon":"20.8001284"},{"ref":"3092394899","lat":"53.0213595","lon":"20.7989264"},{"ref":"1842433574","lat":"53.0205796","lon":"20.7939973"},{"ref":"3092394898","lat":"53.0203617","lon":"20.7923858"},{"ref":"476185390","lat":"53.0200958","lon":"20.7896599"},{"ref":"3092394897","lat":"53.0200540","lon":"20.7888522"},{"ref":"3246088014","lat":"53.0200859","lon":"20.7880351"},{"ref":"1842433569","lat":"53.0203554","lon":"20.7858558"},{"ref":"1842433576","lat":"53.0210640","lon":"20.7799065"},{"ref":"1842433578","lat":"53.0214050","lon":"20.7781208"},{"ref":"1842433582","lat":"53.0221352","lon":"20.7753750"},{"ref":"3246091633","lat":"53.0224090","lon":"20.7747672"},{"ref":"1842433584","lat":"53.0226418","lon":"20.7744571"},{"ref":"1842433585","lat":"53.0241408","lon":"20.7730936"},{"ref":"3246091632","lat":"53.0246735","lon":"20.7724864"},{"ref":"476188975","lat":"53.0249477","lon":"20.7720855"},{"ref":"3246091631","lat":"53.0251998","lon":"20.7712908"},{"ref":"476188990","lat":"53.0258288","lon":"20.7685416"},{"ref":"1842433586","lat":"53.0260660","lon":"20.7679949"},{"ref":"3246091630","lat":"53.0263082","lon":"20.7677122"},{"ref":"476188957","lat":"53.0269237","lon":"20.7674429"},{"ref":"476189003","lat":"53.0270986","lon":"20.7672921"},{"ref":"3246081414","lat":"53.0272476","lon":"20.7669905"},{"ref":"3974768585","lat":"53.0274510","lon":"20.7661384"},{"ref":"3974768198","lat":"53.0275438","lon":"20.7657496"},{"ref":"3974768569","lat":"53.0278409","lon":"20.7645053"},{"ref":"476195985","lat":"53.0279400","lon":"20.7640900"},{"ref":"476195732","lat":"53.0281100","lon":"20.7627400"},{"ref":"3392152669","lat":"53.0284323","lon":"20.7557273"},{"ref":"3246093087","lat":"53.0285174","lon":"20.7544461"},{"ref":"3393923838","lat":"53.0285517","lon":"20.7539342"},{"ref":"3393923841","lat":"53.0286095","lon":"20.7530710"},{"ref":"1842433587","lat":"53.0286770","lon":"20.7520620"},{"ref":"2564847574","lat":"53.0288811","lon":"20.7486683"},{"ref":"476185696","lat":"53.0299115","lon":"20.7320750"}]},{"id":"394470965","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768231","lat":"53.0115168","lon":"20.7418021"},{"ref":"3974768241","lat":"53.0119132","lon":"20.7420607"},{"ref":"3974768582","lat":"53.0120590","lon":"20.7420596"},{"ref":"3974768573","lat":"53.0121752","lon":"20.7418665"},{"ref":"3974768202","lat":"53.0127652","lon":"20.7400222"},{"ref":"3974768575","lat":"53.0131822","lon":"20.7390556"},{"ref":"476186653","lat":"53.0134500","lon":"20.7386500"}]},{"id":"394470968","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"landuse":"residential"},"nodes":[{"ref":"3246091632","lat":"53.0246735","lon":"20.7724864"},{"ref":"3974768558","lat":"53.0238829","lon":"20.7720146"},{"ref":"3974768574","lat":"53.0235216","lon":"20.7732591"},{"ref":"3974768194","lat":"53.0230698","lon":"20.7732162"},{"ref":"3974768557","lat":"53.0222825","lon":"20.7727870"},{"ref":"3974768226","lat":"53.0208756","lon":"20.7715425"},{"ref":"3974768570","lat":"53.0222825","lon":"20.7678732"},{"ref":"3974768567","lat":"53.0225148","lon":"20.7676586"},{"ref":"3974768562","lat":"53.0241630","lon":"20.7690115"},{"ref":"3974768200","lat":"53.0251736","lon":"20.7659635"},{"ref":"3974768571","lat":"53.0264474","lon":"20.7671447"},{"ref":"3974768203","lat":"53.0266319","lon":"20.7666287"},{"ref":"3974768207","lat":"53.0252510","lon":"20.7653841"},{"ref":"3974768245","lat":"53.0255865","lon":"20.7646331"},{"ref":"3974768255","lat":"53.0258666","lon":"20.7645698"},{"ref":"3974768585","lat":"53.0274510","lon":"20.7661384"},{"ref":"3974768198","lat":"53.0275438","lon":"20.7657496"},{"ref":"3974768243","lat":"53.0289032","lon":"20.7668003"},{"ref":"3974768237","lat":"53.0286286","lon":"20.7678948"},{"ref":"3974768221","lat":"53.0283323","lon":"20.7676996"},{"ref":"3974768199","lat":"53.0276476","lon":"20.7703419"},{"ref":"3974768210","lat":"53.0270107","lon":"20.7699429"},{"ref":"3974768201","lat":"53.0267716","lon":"20.7708460"},{"ref":"3974768227","lat":"53.0270965","lon":"20.7710704"},{"ref":"3974768225","lat":"53.0270062","lon":"20.7714352"},{"ref":"3974768219","lat":"53.0266575","lon":"20.7712767"},{"ref":"3246091628","lat":"53.0265090","lon":"20.7718377"},{"ref":"476188973","lat":"53.0260147","lon":"20.7727738"},{"ref":"3974768247","lat":"53.0258764","lon":"20.7739673"},{"ref":"1842433585","lat":"53.0241408","lon":"20.7730936"},{"ref":"3246091632","lat":"53.0246735","lon":"20.7724864"}]},{"id":"394470972","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768222","lat":"52.9964442","lon":"20.8866640"},{"ref":"476212425","lat":"52.9976098","lon":"20.8869043"}]},{"id":"394470974","version":"1","timestamp":"2016-01-28T21:53:08Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"landuse":"forest"},"nodes":[{"ref":"3974768211","lat":"52.9942745","lon":"20.8465381"},{"ref":"3974768581","lat":"52.9944075","lon":"20.8477172"},{"ref":"3974768249","lat":"52.9947653","lon":"20.8492847"},{"ref":"3974768218","lat":"52.9950623","lon":"20.8502932"},{"ref":"3974768568","lat":"52.9952173","lon":"20.8506580"},{"ref":"3974768208","lat":"52.9952341","lon":"20.8508286"},{"ref":"2120105889","lat":"52.9951436","lon":"20.8510542"},{"ref":"1870286373","lat":"52.9949375","lon":"20.8504949"},{"ref":"2120105887","lat":"52.9947765","lon":"20.8500034"},{"ref":"2120105885","lat":"52.9945638","lon":"20.8492864"},{"ref":"2120105883","lat":"52.9944868","lon":"20.8489498"},{"ref":"2120105879","lat":"52.9943125","lon":"20.8483708"},{"ref":"2120105875","lat":"52.9940491","lon":"20.8470984"},{"ref":"2120105873","lat":"52.9939924","lon":"20.8467618"},{"ref":"3974768240","lat":"52.9939669","lon":"20.8450145"},{"ref":"2120105872","lat":"52.9939581","lon":"20.8444104"},{"ref":"3974768560","lat":"52.9939530","lon":"20.8438991"},{"ref":"3974768253","lat":"52.9941066","lon":"20.8451863"},{"ref":"3974768211","lat":"52.9942745","lon":"20.8465381"}]},{"id":"394470977","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768212","lat":"53.0100838","lon":"20.7316956"},{"ref":"3974768242","lat":"53.0100154","lon":"20.7327266"},{"ref":"3974768238","lat":"53.0100799","lon":"20.7329627"},{"ref":"3974768235","lat":"53.0102865","lon":"20.7334991"},{"ref":"3974768220","lat":"53.0104672","lon":"20.7339283"},{"ref":"3974768216","lat":"53.0105060","lon":"20.7341214"},{"ref":"3974768214","lat":"53.0104840","lon":"20.7342705"},{"ref":"476188132","lat":"53.0102244","lon":"20.7345311"}]},{"id":"394470979","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"2335912931","lat":"52.9913769","lon":"20.7277490"},{"ref":"2115971218","lat":"52.9924292","lon":"20.7200838"}]},{"id":"394470981","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"476208936","lat":"52.9682113","lon":"20.6754184"},{"ref":"3974768244","lat":"52.9712450","lon":"20.6750473"},{"ref":"3974768565","lat":"52.9724810","lon":"20.6747480"},{"ref":"3974768206","lat":"52.9729074","lon":"20.6745763"},{"ref":"3974768578","lat":"52.9738164","lon":"20.6739744"},{"ref":"3974768584","lat":"52.9749018","lon":"20.6729659"},{"ref":"3974768228","lat":"52.9752849","lon":"20.6726451"},{"ref":"3974768563","lat":"52.9757501","lon":"20.6724735"},{"ref":"3974768254","lat":"52.9761680","lon":"20.6722149"},{"ref":"476205428","lat":"52.9779800","lon":"20.6710600"}]},{"id":"394470984","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768223","lat":"52.9923889","lon":"20.8214112"},{"ref":"3974768559","lat":"52.9914301","lon":"20.8206758"}]},{"id":"394470986","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768586","lat":"52.9947304","lon":"20.7099375"},{"ref":"3974768561","lat":"52.9946103","lon":"20.7109900"},{"ref":"3974768250","lat":"52.9947266","lon":"20.7111188"},{"ref":"2335912990","lat":"53.0012311","lon":"20.7153275"}]},{"id":"394470987","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"landuse":"residential"},"nodes":[{"ref":"3974768248","lat":"53.0182037","lon":"20.7364806"},{"ref":"3974768224","lat":"53.0168742","lon":"20.7360944"},{"ref":"3974768229","lat":"53.0169645","lon":"20.7350644"},{"ref":"3974768205","lat":"53.0160495","lon":"20.7353926"},{"ref":"476188165","lat":"53.0162107","lon":"20.7348291"},{"ref":"476188167","lat":"53.0164592","lon":"20.7344965"},{"ref":"3974768230","lat":"53.0167613","lon":"20.7342320"},{"ref":"3974768233","lat":"53.0159706","lon":"20.7334766"},{"ref":"3974768564","lat":"53.0155536","lon":"20.7340355"},{"ref":"3974768252","lat":"53.0145893","lon":"20.7331332"},{"ref":"3974768236","lat":"53.0144176","lon":"20.7338853"},{"ref":"3974768234","lat":"53.0139180","lon":"20.7334122"},{"ref":"3974768572","lat":"53.0134570","lon":"20.7345245"},{"ref":"3974768587","lat":"53.0136001","lon":"20.7346499"},{"ref":"3974768232","lat":"53.0132467","lon":"20.7355151"},{"ref":"3974768215","lat":"53.0150071","lon":"20.7372904"},{"ref":"476186569","lat":"53.0154330","lon":"20.7365269"},{"ref":"476186347","lat":"53.0155750","lon":"20.7365779"},{"ref":"3782081935","lat":"53.0157283","lon":"20.7364465"},{"ref":"476186593","lat":"53.0158332","lon":"20.7361488"},{"ref":"3974768577","lat":"53.0160351","lon":"20.7361802"},{"ref":"3974768580","lat":"53.0158893","lon":"20.7367607"},{"ref":"3974768566","lat":"53.0179417","lon":"20.7377048"},{"ref":"3974768248","lat":"53.0182037","lon":"20.7364806"}]},{"id":"394470988","version":"1","timestamp":"2016-01-28T21:53:09Z","changeset":"36866540","uid":"38465","user":"Robak","action":"create","type":"way","tags":{"highway":"track"},"nodes":[{"ref":"3974768209","lat":"52.9898627","lon":"20.8468908"},{"ref":"3974768239","lat":"52.9904941","lon":"20.8466229"},{"ref":"3974768240","lat":"52.9939669","lon":"20.8450145"},{"ref":"3974768253","lat":"52.9941066","lon":"20.8451863"},{"ref":"3974768211","lat":"52.9942745","lon":"20.8465381"}]}]} 6 | {"metadata":{"id":"36866543","created_at":"2016-01-28T21:53:20Z","closed_at":"2016-01-28T21:53:23Z","open":"false","num_changes":"16","user":"Delon_123","uid":"3501101","min_lat":"46.587754","max_lat":"46.6719107","min_lon":"125.0627472","max_lon":"125.1228455","comments_count":"0","source":"Bing","created_by":"JOSM/1.5 (9229 en)","comment":"Road alignment to aerial imagery."},"elements":[{"id":"2678729438","visible":"false","version":"2","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"2678729438","lat":"46.6254161","lon":"125.0932800","version":"1","timestamp":"2014-02-18T14:04:05Z","changeset":"20637229","uid":"103866","user":"ClausHansen","action":"delete","type":"node","tags":{}},"action":"delete","type":"node","tags":{}},{"id":"2678792250","lat":"46.6253546","lon":"125.0926836","version":"2","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"2678792250","lat":"46.6254434","lon":"125.0927210","version":"1","timestamp":"2014-02-18T15:00:31Z","changeset":"20637229","uid":"103866","user":"ClausHansen","action":"modify","type":"node","tags":{}},"action":"modify","type":"node","tags":{}},{"id":"3974765026","lat":"46.6252415","lon":"125.0939269","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"3974765027","lat":"46.6253972","lon":"125.0932611","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"3974765028","lat":"46.6254254","lon":"125.0924536","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"3974765029","lat":"46.6254854","lon":"125.0917994","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"3974765030","lat":"46.6258050","lon":"125.0928973","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"3974765031","lat":"46.6258303","lon":"125.0922298","version":"1","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","action":"create","type":"node","tags":{}},{"id":"224189348","version":"7","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"224189348","version":"6","timestamp":"2014-02-18T20:48:41Z","changeset":"20645014","uid":"103866","user":"ClausHansen","action":"modify","type":"way","tags":{"highway":"primary","name":"北一快速路","oneway":"yes"},"nodes":[{"ref":"2330120057","lat":"46.6255649","lon":"125.0933417"},{"ref":"2330124955","lat":"46.6256435","lon":"125.0928147"}]},"action":"modify","type":"way","tags":{"highway":"primary","name":"北一快速路","oneway":"yes"},"nodes":[{"ref":"2330120057","lat":"46.6255649","lon":"125.0933417"},{"ref":"2330124955","lat":"46.6256505","lon":"125.0928147"}]},{"id":"250283941","version":"9","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"250283941","version":"8","timestamp":"2016-01-28T21:38:19Z","changeset":"36866264","uid":"3501101","user":"Delon_123","action":"modify","type":"way","tags":{"highway":"secondary","motorroad":"yes","oneway":"yes"},"nodes":[{"ref":"3250413325","lat":"46.6689571","lon":"125.1119034"},{"ref":"3250413343","lat":"46.6664133","lon":"125.1113480"},{"ref":"2567695407","lat":"46.6646933","lon":"125.1110233"},{"ref":"3250413304","lat":"46.6631305","lon":"125.1106130"},{"ref":"3250413317","lat":"46.6617446","lon":"125.1101540"},{"ref":"3250413346","lat":"46.6605278","lon":"125.1096699"},{"ref":"3250413340","lat":"46.6589593","lon":"125.1090071"},{"ref":"2567695395","lat":"46.6514348","lon":"125.1052979"},{"ref":"2567695391","lat":"46.6475741","lon":"125.1033854"},{"ref":"2567695383","lat":"46.6402479","lon":"125.0998799"},{"ref":"2679449386","lat":"46.6303197","lon":"125.0950767"},{"ref":"2330124955","lat":"46.6256435","lon":"125.0928147"},{"ref":"2679362862","lat":"46.6255136","lon":"125.0927539"},{"ref":"2678792250","lat":"46.6254434","lon":"125.0927210"},{"ref":"2567695254","lat":"46.6201966","lon":"125.0902642"},{"ref":"2567695226","lat":"46.6130448","lon":"125.0869153"},{"ref":"2330177286","lat":"46.6089147","lon":"125.0848142"},{"ref":"2567695212","lat":"46.6082122","lon":"125.0844401"},{"ref":"3974747857","lat":"46.6038396","lon":"125.0820544"},{"ref":"3250396347","lat":"46.5998587","lon":"125.0798826"}]},"action":"modify","type":"way","tags":{"highway":"secondary","motorroad":"yes","oneway":"yes"},"nodes":[{"ref":"3250413325","lat":"46.6689571","lon":"125.1119034"},{"ref":"3250413343","lat":"46.6664133","lon":"125.1113480"},{"ref":"2567695407","lat":"46.6646933","lon":"125.1110233"},{"ref":"3250413304","lat":"46.6631305","lon":"125.1106130"},{"ref":"3250413317","lat":"46.6617446","lon":"125.1101540"},{"ref":"3250413346","lat":"46.6605278","lon":"125.1096699"},{"ref":"3250413340","lat":"46.6589593","lon":"125.1090071"},{"ref":"2567695395","lat":"46.6514348","lon":"125.1052979"},{"ref":"2567695391","lat":"46.6475741","lon":"125.1033854"},{"ref":"2567695383","lat":"46.6402479","lon":"125.0998799"},{"ref":"2679449386","lat":"46.6303197","lon":"125.0950767"},{"ref":"3974765030","lat":"46.6258050","lon":"125.0928973"},{"ref":"2330124955","lat":"46.6256505","lon":"125.0928147"},{"ref":"2679362862","lat":"46.6255136","lon":"125.0927539"},{"ref":"2678792250","lat":"46.6253546","lon":"125.0926836"},{"ref":"2567695254","lat":"46.6201966","lon":"125.0902642"},{"ref":"2567695226","lat":"46.6130448","lon":"125.0869153"},{"ref":"2330177286","lat":"46.6089147","lon":"125.0848142"},{"ref":"2567695212","lat":"46.6082122","lon":"125.0844401"},{"ref":"3974747857","lat":"46.6038396","lon":"125.0820544"},{"ref":"3250396347","lat":"46.5998587","lon":"125.0798826"}]},{"id":"262216260","version":"7","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"262216260","version":"6","timestamp":"2016-01-28T21:38:20Z","changeset":"36866264","uid":"3501101","user":"Delon_123","action":"modify","type":"way","tags":{"highway":"secondary","oneway":"yes"},"nodes":[{"ref":"2330124955","lat":"46.6256435","lon":"125.0928147"},{"ref":"2678754439","lat":"46.6260996","lon":"125.0895799"},{"ref":"2678754435","lat":"46.6262943","lon":"125.0888512"},{"ref":"2678754433","lat":"46.6266443","lon":"125.0877729"},{"ref":"2678754443","lat":"46.6272411","lon":"125.0863728"},{"ref":"2678754431","lat":"46.6281253","lon":"125.0848815"},{"ref":"2678792345","lat":"46.6282344","lon":"125.0847418"},{"ref":"2678792187","lat":"46.6285944","lon":"125.0842810"},{"ref":"2678754436","lat":"46.6291752","lon":"125.0836584"},{"ref":"2678754428","lat":"46.6300851","lon":"125.0826821"},{"ref":"2678754442","lat":"46.6310355","lon":"125.0816897"},{"ref":"2679449125","lat":"46.6317734","lon":"125.0809265"},{"ref":"2679449204","lat":"46.6323537","lon":"125.0803263"},{"ref":"2678754438","lat":"46.6325863","lon":"125.0800857"},{"ref":"2678754441","lat":"46.6340266","lon":"125.0785783"},{"ref":"2678754437","lat":"46.6347264","lon":"125.0778488"},{"ref":"3736340596","lat":"46.6348285","lon":"125.0777350"},{"ref":"2678754427","lat":"46.6351058","lon":"125.0773821"},{"ref":"2678754440","lat":"46.6356399","lon":"125.0766364"},{"ref":"2678792282","lat":"46.6358717","lon":"125.0762366"},{"ref":"2678754429","lat":"46.6363987","lon":"125.0753275"},{"ref":"2678754434","lat":"46.6369623","lon":"125.0742117"},{"ref":"2678754430","lat":"46.6374963","lon":"125.0728813"},{"ref":"2678754432","lat":"46.6379310","lon":"125.0713846"},{"ref":"2678792211","lat":"46.6381335","lon":"125.0704512"},{"ref":"2678792194","lat":"46.6383651","lon":"125.0693641"},{"ref":"2678792197","lat":"46.6385467","lon":"125.0682867"},{"ref":"2678792290","lat":"46.6386942","lon":"125.0677164"}]},"action":"modify","type":"way","tags":{"highway":"secondary","oneway":"yes"},"nodes":[{"ref":"3974765030","lat":"46.6258050","lon":"125.0928973"},{"ref":"3974765031","lat":"46.6258303","lon":"125.0922298"},{"ref":"2678754439","lat":"46.6260996","lon":"125.0895799"},{"ref":"2678754435","lat":"46.6262943","lon":"125.0888512"},{"ref":"2678754433","lat":"46.6266443","lon":"125.0877729"},{"ref":"2678754443","lat":"46.6272411","lon":"125.0863728"},{"ref":"2678754431","lat":"46.6281253","lon":"125.0848815"},{"ref":"2678792345","lat":"46.6282344","lon":"125.0847418"},{"ref":"2678792187","lat":"46.6285944","lon":"125.0842810"},{"ref":"2678754436","lat":"46.6291752","lon":"125.0836584"},{"ref":"2678754428","lat":"46.6300851","lon":"125.0826821"},{"ref":"2678754442","lat":"46.6310355","lon":"125.0816897"},{"ref":"2679449125","lat":"46.6317734","lon":"125.0809265"},{"ref":"2679449204","lat":"46.6323537","lon":"125.0803263"},{"ref":"2678754438","lat":"46.6325863","lon":"125.0800857"},{"ref":"2678754441","lat":"46.6340266","lon":"125.0785783"},{"ref":"2678754437","lat":"46.6347264","lon":"125.0778488"},{"ref":"3736340596","lat":"46.6348285","lon":"125.0777350"},{"ref":"2678754427","lat":"46.6351058","lon":"125.0773821"},{"ref":"2678754440","lat":"46.6356399","lon":"125.0766364"},{"ref":"2678792282","lat":"46.6358717","lon":"125.0762366"},{"ref":"2678754429","lat":"46.6363987","lon":"125.0753275"},{"ref":"2678754434","lat":"46.6369623","lon":"125.0742117"},{"ref":"2678754430","lat":"46.6374963","lon":"125.0728813"},{"ref":"2678754432","lat":"46.6379310","lon":"125.0713846"},{"ref":"2678792211","lat":"46.6381335","lon":"125.0704512"},{"ref":"2678792194","lat":"46.6383651","lon":"125.0693641"},{"ref":"2678792197","lat":"46.6385467","lon":"125.0682867"},{"ref":"2678792290","lat":"46.6386942","lon":"125.0677164"}]},{"id":"262271765","version":"5","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"262271765","version":"4","timestamp":"2016-01-28T21:46:06Z","changeset":"36866404","uid":"3501101","user":"Delon_123","action":"modify","type":"way","tags":{"highway":"primary","name":"北一快速路","oneway":"yes"},"nodes":[{"ref":"2330124955","lat":"46.6256435","lon":"125.0928147"},{"ref":"2678729427","lat":"46.6257257","lon":"125.0919454"},{"ref":"2330124945","lat":"46.6258841","lon":"125.0900032"},{"ref":"2678729475","lat":"46.6260003","lon":"125.0887890"},{"ref":"2678729461","lat":"46.6261365","lon":"125.0880033"},{"ref":"2330124960","lat":"46.6263367","lon":"125.0872177"},{"ref":"2678729470","lat":"46.6267128","lon":"125.0860338"},{"ref":"2330124948","lat":"46.6270488","lon":"125.0852570"},{"ref":"2678729467","lat":"46.6274684","lon":"125.0844964"},{"ref":"2330124963","lat":"46.6279568","lon":"125.0838087"},{"ref":"2330124944","lat":"46.6282958","lon":"125.0833698"},{"ref":"2678729424","lat":"46.6289530","lon":"125.0825780"},{"ref":"2678792182","lat":"46.6295227","lon":"125.0820038"},{"ref":"2330124953","lat":"46.6302671","lon":"125.0812536"},{"ref":"3974760015","lat":"46.6311797","lon":"125.0803343"}]},"action":"modify","type":"way","tags":{"highway":"primary","name":"北一快速路","oneway":"yes"},"nodes":[{"ref":"2330124955","lat":"46.6256505","lon":"125.0928147"},{"ref":"2678729427","lat":"46.6257257","lon":"125.0919454"},{"ref":"2330124945","lat":"46.6258841","lon":"125.0900032"},{"ref":"2678729475","lat":"46.6260003","lon":"125.0887890"},{"ref":"2678729461","lat":"46.6261365","lon":"125.0880033"},{"ref":"2330124960","lat":"46.6263367","lon":"125.0872177"},{"ref":"2678729470","lat":"46.6267128","lon":"125.0860338"},{"ref":"2330124948","lat":"46.6270488","lon":"125.0852570"},{"ref":"2678729467","lat":"46.6274684","lon":"125.0844964"},{"ref":"2330124963","lat":"46.6279568","lon":"125.0838087"},{"ref":"2330124944","lat":"46.6282958","lon":"125.0833698"},{"ref":"2678729424","lat":"46.6289530","lon":"125.0825780"},{"ref":"2678792182","lat":"46.6295227","lon":"125.0820038"},{"ref":"2330124953","lat":"46.6302671","lon":"125.0812536"},{"ref":"3974760015","lat":"46.6311797","lon":"125.0803343"}]},{"id":"262271768","version":"3","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"262271768","version":"2","timestamp":"2014-04-12T06:10:31Z","changeset":"21640085","uid":"384084","user":"Kostik","action":"modify","type":"way","tags":{"highway":"primary","oneway":"yes"},"nodes":[{"ref":"2679362862","lat":"46.6255136","lon":"125.0927539"},{"ref":"2678729438","lat":"46.6254161","lon":"125.0932800"},{"ref":"2678729421","lat":"46.6251067","lon":"125.0948603"},{"ref":"2678729448","lat":"46.6249290","lon":"125.0969265"},{"ref":"2678729464","lat":"46.6249688","lon":"125.0985152"},{"ref":"2678729426","lat":"46.6250822","lon":"125.0996149"},{"ref":"2678729460","lat":"46.6252181","lon":"125.1017107"},{"ref":"2678729444","lat":"46.6252662","lon":"125.1025474"},{"ref":"2678729452","lat":"46.6252832","lon":"125.1028405"},{"ref":"2678729447","lat":"46.6255857","lon":"125.1061449"},{"ref":"2678729440","lat":"46.6257751","lon":"125.1083857"},{"ref":"2678729443","lat":"46.6256824","lon":"125.1187845"},{"ref":"2678729419","lat":"46.6256882","lon":"125.1226174"}]},"action":"modify","type":"way","tags":{"highway":"primary","oneway":"yes"},"nodes":[{"ref":"2679362862","lat":"46.6255136","lon":"125.0927539"},{"ref":"3974765027","lat":"46.6253972","lon":"125.0932611"},{"ref":"3974765026","lat":"46.6252415","lon":"125.0939269"},{"ref":"2678729421","lat":"46.6251067","lon":"125.0948603"},{"ref":"2678729448","lat":"46.6249290","lon":"125.0969265"},{"ref":"2678729464","lat":"46.6249688","lon":"125.0985152"},{"ref":"2678729426","lat":"46.6250822","lon":"125.0996149"},{"ref":"2678729460","lat":"46.6252181","lon":"125.1017107"},{"ref":"2678729444","lat":"46.6252662","lon":"125.1025474"},{"ref":"2678729452","lat":"46.6252832","lon":"125.1028405"},{"ref":"2678729447","lat":"46.6255857","lon":"125.1061449"},{"ref":"2678729440","lat":"46.6257751","lon":"125.1083857"},{"ref":"2678729443","lat":"46.6256824","lon":"125.1187845"},{"ref":"2678729419","lat":"46.6256882","lon":"125.1226174"}]},{"id":"318670829","version":"4","timestamp":"2016-01-28T21:53:22Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"318670829","version":"3","timestamp":"2015-09-11T22:04:11Z","changeset":"33971206","uid":"1965631","user":"Hermann001","action":"modify","type":"way","tags":{"highway":"secondary","motorroad":"yes","oneway":"yes","source":"bing"},"nodes":[{"ref":"2380056511","lat":"46.5950004","lon":"125.0791959"},{"ref":"3250355325","lat":"46.5954640","lon":"125.0786909"},{"ref":"3250355316","lat":"46.5957075","lon":"125.0785633"},{"ref":"2380056377","lat":"46.5959545","lon":"125.0785080"},{"ref":"3250355317","lat":"46.5961629","lon":"125.0785370"},{"ref":"3250355322","lat":"46.5963893","lon":"125.0786062"},{"ref":"2380056697","lat":"46.5967354","lon":"125.0787902"},{"ref":"3739704066","lat":"46.5974784","lon":"125.0791879"},{"ref":"3250399724","lat":"46.5981925","lon":"125.0795702"},{"ref":"3250399742","lat":"46.5999259","lon":"125.0804711"},{"ref":"2567695171","lat":"46.6001255","lon":"125.0805862"},{"ref":"2567695184","lat":"46.6037460","lon":"125.0824954"},{"ref":"3250355321","lat":"46.6052158","lon":"125.0832845"},{"ref":"2330176661","lat":"46.6087630","lon":"125.0853711"},{"ref":"2567695228","lat":"46.6165213","lon":"125.0891342"},{"ref":"2567695267","lat":"46.6213381","lon":"125.0913409"},{"ref":"2673159089","lat":"46.6240622","lon":"125.0926194"},{"ref":"2330120057","lat":"46.6255649","lon":"125.0933417"},{"ref":"2567695369","lat":"46.6358721","lon":"125.0983158"},{"ref":"2567695381","lat":"46.6401457","lon":"125.1003744"},{"ref":"2567695389","lat":"46.6474913","lon":"125.1039590"},{"ref":"3250413314","lat":"46.6513069","lon":"125.1057879"},{"ref":"2567695397","lat":"46.6532291","lon":"125.1067236"},{"ref":"3250413309","lat":"46.6588522","lon":"125.1094977"},{"ref":"3250413323","lat":"46.6604289","lon":"125.1101994"},{"ref":"3250413324","lat":"46.6616702","lon":"125.1106384"},{"ref":"3250413307","lat":"46.6630690","lon":"125.1110934"},{"ref":"2567695405","lat":"46.6646935","lon":"125.1115118"},{"ref":"3250413339","lat":"46.6663539","lon":"125.1118251"},{"ref":"2567695409","lat":"46.6673077","lon":"125.1119272"},{"ref":"2567695413","lat":"46.6689617","lon":"125.1120480"}]},"action":"modify","type":"way","tags":{"highway":"secondary","motorroad":"yes","oneway":"yes","source":"bing"},"nodes":[{"ref":"2380056511","lat":"46.5950004","lon":"125.0791959"},{"ref":"3250355325","lat":"46.5954640","lon":"125.0786909"},{"ref":"3250355316","lat":"46.5957075","lon":"125.0785633"},{"ref":"2380056377","lat":"46.5959545","lon":"125.0785080"},{"ref":"3250355317","lat":"46.5961629","lon":"125.0785370"},{"ref":"3250355322","lat":"46.5963893","lon":"125.0786062"},{"ref":"2380056697","lat":"46.5967354","lon":"125.0787902"},{"ref":"3739704066","lat":"46.5974784","lon":"125.0791879"},{"ref":"3250399724","lat":"46.5981925","lon":"125.0795702"},{"ref":"3250399742","lat":"46.5999259","lon":"125.0804711"},{"ref":"2567695171","lat":"46.6001255","lon":"125.0805862"},{"ref":"2567695184","lat":"46.6037460","lon":"125.0824954"},{"ref":"3250355321","lat":"46.6052158","lon":"125.0832845"},{"ref":"2330176661","lat":"46.6087630","lon":"125.0853711"},{"ref":"2567695228","lat":"46.6165213","lon":"125.0891342"},{"ref":"2567695267","lat":"46.6213381","lon":"125.0913409"},{"ref":"2673159089","lat":"46.6240622","lon":"125.0926194"},{"ref":"3974765027","lat":"46.6253972","lon":"125.0932611"},{"ref":"2330120057","lat":"46.6255649","lon":"125.0933417"},{"ref":"2567695369","lat":"46.6358721","lon":"125.0983158"},{"ref":"2567695381","lat":"46.6401457","lon":"125.1003744"},{"ref":"2567695389","lat":"46.6474913","lon":"125.1039590"},{"ref":"3250413314","lat":"46.6513069","lon":"125.1057879"},{"ref":"2567695397","lat":"46.6532291","lon":"125.1067236"},{"ref":"3250413309","lat":"46.6588522","lon":"125.1094977"},{"ref":"3250413323","lat":"46.6604289","lon":"125.1101994"},{"ref":"3250413324","lat":"46.6616702","lon":"125.1106384"},{"ref":"3250413307","lat":"46.6630690","lon":"125.1110934"},{"ref":"2567695405","lat":"46.6646935","lon":"125.1115118"},{"ref":"3250413339","lat":"46.6663539","lon":"125.1118251"},{"ref":"2567695409","lat":"46.6673077","lon":"125.1119272"},{"ref":"2567695413","lat":"46.6689617","lon":"125.1120480"}]},{"id":"394470364","version":"2","timestamp":"2016-01-28T21:53:21Z","changeset":"36866543","uid":"3501101","user":"Delon_123","old":{"id":"394470364","version":"1","timestamp":"2016-01-28T21:46:04Z","changeset":"36866404","uid":"3501101","user":"Delon_123","action":"modify","type":"way","tags":{"highway":"secondary","oneway":"-1"},"nodes":[{"ref":"2678729438","lat":"46.6254161","lon":"125.0932800"},{"ref":"2678792250","lat":"46.6254434","lon":"125.0927210"},{"ref":"2678792331","lat":"46.6255796","lon":"125.0904605"},{"ref":"2678792311","lat":"46.6257528","lon":"125.0881860"},{"ref":"2678792335","lat":"46.6259149","lon":"125.0857184"},{"ref":"2678792226","lat":"46.6260696","lon":"125.0842753"},{"ref":"2678792329","lat":"46.6262464","lon":"125.0830898"},{"ref":"2678792252","lat":"46.6266370","lon":"125.0812391"},{"ref":"2678792337","lat":"46.6270938","lon":"125.0796029"},{"ref":"2678792271","lat":"46.6274732","lon":"125.0786642"},{"ref":"2678792204","lat":"46.6278269","lon":"125.0779346"},{"ref":"2678792327","lat":"46.6282358","lon":"125.0772050"},{"ref":"2678792339","lat":"46.6288620","lon":"125.0763092"},{"ref":"3974760013","lat":"46.6288874","lon":"125.0762738"}]},"action":"modify","type":"way","tags":{"highway":"secondary","oneway":"-1"},"nodes":[{"ref":"2678792250","lat":"46.6253546","lon":"125.0926836"},{"ref":"3974765028","lat":"46.6254254","lon":"125.0924536"},{"ref":"3974765029","lat":"46.6254854","lon":"125.0917994"},{"ref":"2678792331","lat":"46.6255796","lon":"125.0904605"},{"ref":"2678792311","lat":"46.6257528","lon":"125.0881860"},{"ref":"2678792335","lat":"46.6259149","lon":"125.0857184"},{"ref":"2678792226","lat":"46.6260696","lon":"125.0842753"},{"ref":"2678792329","lat":"46.6262464","lon":"125.0830898"},{"ref":"2678792252","lat":"46.6266370","lon":"125.0812391"},{"ref":"2678792337","lat":"46.6270938","lon":"125.0796029"},{"ref":"2678792271","lat":"46.6274732","lon":"125.0786642"},{"ref":"2678792204","lat":"46.6278269","lon":"125.0779346"},{"ref":"2678792327","lat":"46.6282358","lon":"125.0772050"},{"ref":"2678792339","lat":"46.6288620","lon":"125.0763092"},{"ref":"3974760013","lat":"46.6288874","lon":"125.0762738"}]}]} 7 | {"metadata":{"id":"36866550","created_at":"2016-01-28T21:53:51Z","closed_at":"2016-01-28T21:53:52Z","open":"false","num_changes":"14","user":"Juan ITU","uid":"2708398","min_lat":"-33.4383332","max_lat":"-33.4375122","min_lon":"-70.6831044","max_lon":"-70.6816909","comments_count":"0","comment":"Indicación de servicios y org. en Barrio Yungay ","locale":"es","host":"https://www.openstreetmap.org/id","imagery_used":"Bing","created_by":"iD 1.8.5"},"elements":[{"id":"3974768617","lat":"-33.4376206","lon":"-70.6831044","version":"1","timestamp":"2016-01-28T21:53:51Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768618","lat":"-33.4381923","lon":"-70.6830400","version":"1","timestamp":"2016-01-28T21:53:51Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768619","lat":"-33.4381481","lon":"-70.6824752","version":"1","timestamp":"2016-01-28T21:53:51Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768620","lat":"-33.4380050","lon":"-70.6824021","version":"1","timestamp":"2016-01-28T21:53:51Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768621","lat":"-33.4375694","lon":"-70.6824511","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768622","lat":"-33.4376083","lon":"-70.6829340","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768623","lat":"-33.4380511","lon":"-70.6828907","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768624","lat":"-33.4380280","lon":"-70.6825519","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"3974768625","lat":"-33.4375853","lon":"-70.6825951","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"node","tags":{}},{"id":"394470315","version":"2","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","old":{"id":"394470315","version":"1","timestamp":"2016-01-28T21:44:39Z","changeset":"36866376","uid":"2708398","user":"Juan ITU","action":"modify","type":"way","tags":{"building":"yes","name":"Edificio Principal"},"nodes":[{"ref":"3974758630","lat":"-33.4382204","lon":"-70.6818003"},{"ref":"3974758631","lat":"-33.4382652","lon":"-70.6824763"},{"ref":"3974758632","lat":"-33.4380145","lon":"-70.6824870"},{"ref":"3974758633","lat":"-33.4379757","lon":"-70.6817675"},{"ref":"3974758630","lat":"-33.4382204","lon":"-70.6818003"}]},"action":"modify","type":"way","tags":{"building":"yes","name":"Edificio Principal"},"nodes":[{"ref":"3974758630","lat":"-33.4382204","lon":"-70.6818003"},{"ref":"3974758631","lat":"-33.4382652","lon":"-70.6824763"},{"ref":"3974768619","lat":"-33.4381481","lon":"-70.6824752"},{"ref":"3974758632","lat":"-33.4380120","lon":"-70.6824905"},{"ref":"3974768620","lat":"-33.4380050","lon":"-70.6824021"},{"ref":"3974758633","lat":"-33.4379757","lon":"-70.6817675"},{"ref":"3974758630","lat":"-33.4382204","lon":"-70.6818003"}]},{"id":"394470995","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"way","tags":{"building":"yes"},"nodes":[{"ref":"3974768617","lat":"-33.4376206","lon":"-70.6831044"},{"ref":"3974768618","lat":"-33.4381923","lon":"-70.6830400"},{"ref":"3974768619","lat":"-33.4381481","lon":"-70.6824752"},{"ref":"3974758632","lat":"-33.4380120","lon":"-70.6824905"},{"ref":"3974768620","lat":"-33.4380050","lon":"-70.6824021"},{"ref":"3974768621","lat":"-33.4375694","lon":"-70.6824511"},{"ref":"3974768625","lat":"-33.4375853","lon":"-70.6825951"},{"ref":"3974768622","lat":"-33.4376083","lon":"-70.6829340"},{"ref":"3974768617","lat":"-33.4376206","lon":"-70.6831044"}]},{"id":"394470996","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"way","tags":{"area":"yes","name":"garden"},"nodes":[{"ref":"3974768622","lat":"-33.4376083","lon":"-70.6829340"},{"ref":"3974768623","lat":"-33.4380511","lon":"-70.6828907"},{"ref":"3974768624","lat":"-33.4380280","lon":"-70.6825519"},{"ref":"3974768625","lat":"-33.4375853","lon":"-70.6825951"},{"ref":"3974768622","lat":"-33.4376083","lon":"-70.6829340"}]},{"id":"394470997","version":"1","timestamp":"2016-01-28T21:53:52Z","changeset":"36866550","uid":"2708398","user":"Juan ITU","action":"create","type":"way","tags":{"building":"yes","name":"Vicerrectoria"},"nodes":[{"ref":"3974768622","lat":"-33.4376083","lon":"-70.6829340"},{"ref":"3974768623","lat":"-33.4380511","lon":"-70.6828907"},{"ref":"3974768624","lat":"-33.4380280","lon":"-70.6825519"},{"ref":"3974768625","lat":"-33.4375853","lon":"-70.6825951"},{"ref":"3974768621","lat":"-33.4375694","lon":"-70.6824511"},{"ref":"3974768620","lat":"-33.4380050","lon":"-70.6824021"},{"ref":"3974758632","lat":"-33.4380120","lon":"-70.6824905"},{"ref":"3974768619","lat":"-33.4381481","lon":"-70.6824752"},{"ref":"3974768618","lat":"-33.4381923","lon":"-70.6830400"},{"ref":"3974768617","lat":"-33.4376206","lon":"-70.6831044"},{"ref":"3974768622","lat":"-33.4376083","lon":"-70.6829340"}]}]} 8 | {"metadata":{"id":"36866549","created_at":"2016-01-28T21:53:41Z","closed_at":"2016-01-28T21:53:42Z","open":"false","num_changes":"26","user":"nallstar","uid":"1618963","min_lat":"33.5266909","max_lat":"33.5271766","min_lon":"-117.7098717","max_lon":"-117.709301","comments_count":"0","comment":"Created apartment building in Laguna Niguel, CA. ","locale":"en-US","host":"https://www.openstreetmap.org/id","imagery_used":"Bing","created_by":"iD 1.8.5"},"elements":[{"id":"3974768593","lat":"33.5270956","lon":"-117.7094246","version":"1","timestamp":"2016-01-28T21:53:41Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768594","lat":"33.5271205","lon":"-117.7093981","version":"1","timestamp":"2016-01-28T21:53:41Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768595","lat":"33.5270447","lon":"-117.7093037","version":"1","timestamp":"2016-01-28T21:53:41Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768596","lat":"33.5270217","lon":"-117.7093279","version":"1","timestamp":"2016-01-28T21:53:41Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768597","lat":"33.5270159","lon":"-117.7093198","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768598","lat":"33.5269813","lon":"-117.7093578","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768599","lat":"33.5269900","lon":"-117.7093693","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768600","lat":"33.5269257","lon":"-117.7094373","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768601","lat":"33.5269180","lon":"-117.7094304","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768602","lat":"33.5268854","lon":"-117.7094672","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768603","lat":"33.5268911","lon":"-117.7094776","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768604","lat":"33.5268806","lon":"-117.7094879","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768605","lat":"33.5268729","lon":"-117.7094787","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768606","lat":"33.5267988","lon":"-117.7095666","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768607","lat":"33.5267915","lon":"-117.7095578","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768608","lat":"33.5267257","lon":"-117.7096339","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768609","lat":"33.5267598","lon":"-117.7096816","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768610","lat":"33.5267509","lon":"-117.7096904","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768611","lat":"33.5268094","lon":"-117.7097655","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768612","lat":"33.5268208","lon":"-117.7097518","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768613","lat":"33.5268785","lon":"-117.7098211","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768614","lat":"33.5271337","lon":"-117.7095237","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768615","lat":"33.5271255","lon":"-117.7095139","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"3974768616","lat":"33.5271442","lon":"-117.7094896","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"node","tags":{}},{"id":"394470994","version":"1","timestamp":"2016-01-28T21:53:42Z","changeset":"36866549","uid":"1618963","user":"nallstar","action":"create","type":"way","tags":{"building":"apartments","source":"survey","source:geometry":"Bing 2012"},"nodes":[{"ref":"3974768593","lat":"33.5270956","lon":"-117.7094246"},{"ref":"3974768594","lat":"33.5271205","lon":"-117.7093981"},{"ref":"3974768595","lat":"33.5270447","lon":"-117.7093037"},{"ref":"3974768596","lat":"33.5270217","lon":"-117.7093279"},{"ref":"3974768597","lat":"33.5270159","lon":"-117.7093198"},{"ref":"3974768598","lat":"33.5269813","lon":"-117.7093578"},{"ref":"3974768599","lat":"33.5269900","lon":"-117.7093693"},{"ref":"3974768600","lat":"33.5269257","lon":"-117.7094373"},{"ref":"3974768601","lat":"33.5269180","lon":"-117.7094304"},{"ref":"3974768602","lat":"33.5268854","lon":"-117.7094672"},{"ref":"3974768603","lat":"33.5268911","lon":"-117.7094776"},{"ref":"3974768604","lat":"33.5268806","lon":"-117.7094879"},{"ref":"3974768605","lat":"33.5268729","lon":"-117.7094787"},{"ref":"3974768606","lat":"33.5267988","lon":"-117.7095666"},{"ref":"3974768607","lat":"33.5267915","lon":"-117.7095578"},{"ref":"3974768608","lat":"33.5267257","lon":"-117.7096339"},{"ref":"3974768609","lat":"33.5267598","lon":"-117.7096816"},{"ref":"3974768610","lat":"33.5267509","lon":"-117.7096904"},{"ref":"3974768611","lat":"33.5268094","lon":"-117.7097655"},{"ref":"3974768612","lat":"33.5268208","lon":"-117.7097518"},{"ref":"3974768613","lat":"33.5268785","lon":"-117.7098211"},{"ref":"3974768614","lat":"33.5271337","lon":"-117.7095237"},{"ref":"3974768615","lat":"33.5271255","lon":"-117.7095139"},{"ref":"3974768616","lat":"33.5271442","lon":"-117.7094896"},{"ref":"3974768593","lat":"33.5270956","lon":"-117.7094246"}]}]} 9 | {"metadata":{"id":"36866545","created_at":"2016-01-28T21:53:24Z","closed_at":"2016-01-28T21:53:25Z","open":"false","num_changes":"2","user":"rabeyroux","uid":"805590","min_lat":"45.7598765","max_lat":"45.7612292","min_lon":"3.1121365","max_lon":"3.1149941","comments_count":"0","comment":"aubiere","locale":"fr","host":"http://www.openstreetmap.org/id","imagery_used":"Bing","created_by":"iD 1.8.5"},"elements":[{"id":"70877656","version":"4","timestamp":"2016-01-28T21:53:24Z","changeset":"36866545","uid":"805590","user":"rabeyroux","old":{"id":"70877656","version":"3","timestamp":"2014-01-03T10:56:35Z","changeset":"19784023","uid":"143932","user":"NicolasDumoulin","action":"modify","type":"way","tags":{"surface":"concrete","bicycle":"yes","foot":"yes","highway":"service","service":"alley","source":"Orthophotographie CRAIG/TopoGEODIS 2009"},"nodes":[{"ref":"567412728","lat":"45.7599844","lon":"3.1123852"},{"ref":"534485099","lat":"45.7601060","lon":"3.1127653"},{"ref":"534485100","lat":"45.7602248","lon":"3.1131475"},{"ref":"567412740","lat":"45.7603200","lon":"3.1134706"},{"ref":"845025203","lat":"45.7603691","lon":"3.1136285"},{"ref":"679725155","lat":"45.7605843","lon":"3.1143198"},{"ref":"679725169","lat":"45.7606557","lon":"3.1145496"},{"ref":"534485104","lat":"45.7607194","lon":"3.1147601"}]},"action":"modify","type":"way","tags":{"bicycle":"yes","foot":"yes","highway":"service","name":"Place Vasarely","service":"alley","source":"Orthophotographie CRAIG/TopoGEODIS 2009","surface":"concrete"},"nodes":[{"ref":"567412728","lat":"45.7599844","lon":"3.1123852"},{"ref":"534485099","lat":"45.7601060","lon":"3.1127653"},{"ref":"534485100","lat":"45.7602248","lon":"3.1131475"},{"ref":"567412740","lat":"45.7603200","lon":"3.1134706"},{"ref":"845025203","lat":"45.7603691","lon":"3.1136285"},{"ref":"679725155","lat":"45.7605843","lon":"3.1143198"},{"ref":"679725169","lat":"45.7606557","lon":"3.1145496"},{"ref":"534485104","lat":"45.7607194","lon":"3.1147601"}]}]} 10 | {"metadata":{"id":"36866546","created_at":"2016-01-28T21:53:30Z","closed_at":"2016-01-28T21:53:31Z","open":"false","num_changes":"4","user":"Vardanega Gianfranco","uid":"642342","min_lat":"45.8648229","max_lat":"45.8650166","min_lon":"11.8961957","max_lon":"11.8971864","comments_count":"0","source":"knowledge","created_by":"JOSM/1.5 (9329 it)","comment":"Corretto percorso"},"elements":[{"id":"1781434625","visible":"false","version":"2","timestamp":"2016-01-28T21:53:31Z","changeset":"36866546","uid":"642342","user":"Vardanega Gianfranco","old":{"id":"1781434625","lat":"45.8648540","lon":"11.8964788","version":"1","timestamp":"2012-06-09T10:26:19Z","changeset":"11843385","uid":"109705","user":"gscholz","action":"delete","type":"node","tags":{}},"action":"delete","type":"node","tags":{}},{"id":"1781434627","visible":"false","version":"2","timestamp":"2016-01-28T21:53:31Z","changeset":"36866546","uid":"642342","user":"Vardanega Gianfranco","old":{"id":"1781434627","lat":"45.8650166","lon":"11.8961957","version":"1","timestamp":"2012-06-09T10:26:19Z","changeset":"11843385","uid":"109705","user":"gscholz","action":"delete","type":"node","tags":{}},"action":"delete","type":"node","tags":{}},{"id":"166692073","visible":"false","version":"2","timestamp":"2016-01-28T21:53:31Z","changeset":"36866546","uid":"642342","user":"Vardanega Gianfranco","old":{"id":"166692073","version":"1","timestamp":"2012-06-09T10:26:20Z","changeset":"11843385","uid":"109705","user":"gscholz","action":"delete","type":"way","tags":{"highway":"track","source":"bing"},"nodes":[{"ref":"1781434627","lat":"45.8650166","lon":"11.8961957"},{"ref":"1781434625","lat":"45.8648540","lon":"11.8964788"},{"ref":"1781434623","lat":"45.8648229","lon":"11.8966973"},{"ref":"1781434624","lat":"45.8648319","lon":"11.8971864"}]},"action":"delete","type":"way","tags":{},"nodes":[]}]} 11 | --------------------------------------------------------------------------------