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');