diff --git a/src/ol/format/osmxmlformat.js b/src/ol/format/osmxmlformat.js index 456247d47d..7627b428df 100644 --- a/src/ol/format/osmxmlformat.js +++ b/src/ol/format/osmxmlformat.js @@ -189,6 +189,7 @@ ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeParsersNS( * * @function * @param {ArrayBuffer|Document|Node|Object|string} source Source. + * @param {olx.format.ReadOptions=} opt_options Read options. * @return {Array.} Features. * @api */ @@ -198,7 +199,7 @@ ol.format.OSMXML.prototype.readFeatures; /** * @inheritDoc */ -ol.format.OSMXML.prototype.readFeaturesFromNode = function(node) { +ol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) { goog.asserts.assert(node.nodeType == goog.dom.NodeType.ELEMENT); if (node.localName == 'osm') { var state = ol.xml.pushParseAndPop({ @@ -206,6 +207,8 @@ ol.format.OSMXML.prototype.readFeaturesFromNode = function(node) { features: [] }, ol.format.OSMXML.PARSERS_, node, []); if (goog.isDef(state.features)) { + ol.format.XMLFeature.transformFeaturesWithOptions( + state.features, false, this.getReadOptions(node, opt_options)); return state.features; } } diff --git a/test/spec/ol/format/osmxmlformat.test.js b/test/spec/ol/format/osmxmlformat.test.js new file mode 100644 index 0000000000..9053083aa1 --- /dev/null +++ b/test/spec/ol/format/osmxmlformat.test.js @@ -0,0 +1,105 @@ +goog.provide('ol.test.format.OSMXML'); + + +describe('ol.format.OSMXML', function() { + + var format; + beforeEach(function() { + format = new ol.format.OSMXML(); + }); + + describe('#readFeatures', function() { + + it('can read an empty document', function() { + var text = + '' + + '' + + ''; + var fs = format.readFeatures(text); + expect(fs).to.have.length(0); + }); + + it('can read nodes', function() { + var text = + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + var fs = format.readFeatures(text); + expect(fs).to.have.length(2); + var f = fs[0]; + expect(f).to.be.an(ol.Feature); + var g = f.getGeometry(); + expect(g).to.be.an(ol.geom.Point); + expect(g.getCoordinates()).to.eql([2, 1]); + }); + + it('can read nodes and ways', function() { + var text = + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + var fs = format.readFeatures(text); + expect(fs).to.have.length(3); + var point = fs[0]; + expect(point).to.be.an(ol.Feature); + var g = point.getGeometry(); + expect(g).to.be.an(ol.geom.Point); + expect(g.getCoordinates()).to.eql([2, 1]); + var line = fs[2]; + expect(line).to.be.an(ol.Feature); + g = line.getGeometry(); + expect(g).to.be.an(ol.geom.LineString); + expect(g.getCoordinates()).to.eql([[2, 1], [4, 3]]); + }); + + it('can transform and read nodes', function() { + var text = + '' + + '' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ' ' + + ''; + var fs = format.readFeatures(text, { + featureProjection: 'EPSG:3857' + }); + expect(fs).to.have.length(2); + var f = fs[0]; + expect(f).to.be.an(ol.Feature); + var g = f.getGeometry(); + expect(g).to.be.an(ol.geom.Point); + expect(g.getCoordinates()).to.eql( + ol.proj.transform([2, 1], 'EPSG:4326', 'EPSG:3857')); + }); + + }); + +}); + + +goog.require('goog.dom.xml'); +goog.require('ol.Feature'); +goog.require('ol.format.OSMXML'); +goog.require('ol.geom.Point'); +goog.require('ol.geom.LineString'); +goog.require('ol.proj');