diff --git a/lib/OpenLayers/Format/OSM.js b/lib/OpenLayers/Format/OSM.js index 806b338eff..9e029491d5 100644 --- a/lib/OpenLayers/Format/OSM.js +++ b/lib/OpenLayers/Format/OSM.js @@ -347,6 +347,13 @@ OpenLayers.Format.OSM = OpenLayers.Class(OpenLayers.Format.XML, { 'point': function(point) { var id = null; var geometry = point.geometry ? point.geometry : point; + + if (this.internalProjection && this.externalProjection) { + geometry = geometry.clone(); + geometry.transform(this.internalProjection, + this.externalProjection); + } + var already_exists = false; // We don't return anything if the node // has already been created if (point.osm_id) { diff --git a/tests/Format/OSM.html b/tests/Format/OSM.html index e2509ae9bf..6ceb316e42 100644 --- a/tests/Format/OSM.html +++ b/tests/Format/OSM.html @@ -95,6 +95,18 @@ output = output.replace(/<\?[^>]*\?>/, ''); t.eq(output, osm_serialized_data[key], key + " serialized correctly"); } + } + function test_Format_OSM_write_reproject(t) { + t.plan(1); + var f = new OpenLayers.Format.OSM({'internalProjection': new OpenLayers.Projection("EPSG:900913")}); + var feat = new OpenLayers.Feature.Vector( + new OpenLayers.Geometry.Point(100000, 100000) + ); + var data = f.write([feat]); + var f = new OpenLayers.Format.OSM(); + var features = f.read(data); + + t.eq(OpenLayers.Util.toFloat(features[0].geometry.x, 3), .898, "exported to lonlat and re-read as lonlat correctly") }