UNPKG

osm-p2p-server

Version:

Peer-to-peer OpenStreetMap API v0.6 Server

36 lines (30 loc) 1.18 kB
/** * Create Changeset * http://wiki.openstreetmap.org/wiki/API_v0.6#Create:_PUT_.2Fapi.2F0.6.2Fchangeset.2Fcreate */ var collect = require('collect-stream') var xtend = require('xtend') var osm2Obj = require('osm2json') var errors = require('../errors') var isValidContentType = require('../lib/util').isValidContentType module.exports = function (req, res, api, params, next) { if (!isValidContentType(req)) { return next(new errors.UnsupportedContentType()) } var r = req.pipe(osm2Obj({types: ['changeset'], strict: true, coerceIds: false})) collect(r, function (err, ops) { if (err) return next(new errors.XmlParseError(err)) if (!ops.length) return next(new errors.XmlMissingElement('changeset')) // If more than one changeset element is included in the PUT request // tags are merged with later tags overwriting previous tags var mergedChangeset = ops.reduce(function (p, v) { p.tags = xtend(p.tags, v.tags) return p }) api.createChangeset(mergedChangeset, function (err, id, node) { if (err) return next(err) res.setHeader('content-type', 'text/plain; charset=utf-8') res.end(id) }) }) }