Fix GPX write Point transform
This commit is contained in:
@@ -280,7 +280,8 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
this.externalProjection);
|
||||
}
|
||||
if (geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
|
||||
var wpt = this.buildWptNode(feature);
|
||||
var wpt = this.buildWptNode(geometry);
|
||||
this.appendAttributesNode(wpt, feature);
|
||||
return wpt;
|
||||
} else {
|
||||
var trkNode = this.createElementNSPlus("gpx:trk");
|
||||
@@ -348,16 +349,15 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* Builds a wpt node given a point
|
||||
*
|
||||
* Parameters:
|
||||
* feature - {<OpenLayers.Feature.Vector>}
|
||||
* geometry - {<OpenLayers.Geometry.Point>}
|
||||
*
|
||||
* Returns:
|
||||
* {DOMElement} A wpt node
|
||||
*/
|
||||
buildWptNode: function(feature) {
|
||||
buildWptNode: function(geometry) {
|
||||
var node = this.createElementNSPlus("gpx:wpt");
|
||||
node.setAttribute("lon", feature.geometry.x);
|
||||
node.setAttribute("lat", feature.geometry.y);
|
||||
this.appendAttributesNode(node, feature);
|
||||
node.setAttribute("lon", geometry.x);
|
||||
node.setAttribute("lat", geometry.y);
|
||||
return node;
|
||||
},
|
||||
|
||||
|
||||
@@ -152,6 +152,8 @@ Corresponding issues/pull requests:
|
||||
|
||||
The `gpxns` API property has been removed. The GPX namespace is now defined in the `namespaces` property but is not intended to be overriden.
|
||||
|
||||
GPX also now has a basic write function.
|
||||
|
||||
Corresponding issues/pull requests:
|
||||
|
||||
* https://github.com/openlayers/openlayers/pull/221
|
||||
|
||||
@@ -19,13 +19,21 @@
|
||||
"default external projection is EPSG:4326");
|
||||
}
|
||||
function test_Format_GPX_read(t) {
|
||||
t.plan(4);
|
||||
t.plan(7);
|
||||
var f = new OpenLayers.Format.GPX();
|
||||
var features = f.read(gpx_data);
|
||||
t.eq(features.length, 3, "Number of features read is correct");
|
||||
t.eq(features[2].geometry.toString(), "POINT(-0.1853562259 51.3697845627)", "waypoint feature correctly created");
|
||||
t.eq(features[0].geometry.toString(), "LINESTRING(-0.1721292044 51.3768216433,-0.1649230916 51.370833767,-0.1736741378 51.3644368725,-0.166259525 51.3576354272)", "track feature correctly created");
|
||||
t.eq(features[1].geometry.toString(), "LINESTRING(-0.1829991904 51.3761803674,-0.1758887005 51.3697894659,-0.1833202965 51.3639790884,-0.1751119509 51.3567607069)", "route feature correctly created");
|
||||
|
||||
f.internalProjection = new OpenLayers.Projection("EPSG:3857");
|
||||
features = f.read(gpx_data);
|
||||
t.eq(features[2].geometry.toString(), "POINT(-20633.760679678744 6686966.841929403)", "transformed waypoint feature correctly created");
|
||||
features[0].geometry.components.pop();//hack to suppress rounding errors
|
||||
t.eq(features[0].geometry.toString(), "LINESTRING(-19161.33538179203 6688221.743275255,-18359.1545744088 6687153.931130851,-19333.316581165607 6686013.33343931)", "transformed track feature correctly created");
|
||||
features[1].geometry.components.pop();//hack to suppress rounding errors
|
||||
t.eq(features[1].geometry.toString(), "LINESTRING(-20371.3766880736 6688107.378491073,-19579.84057322507 6686967.716235109,-20407.12205561124 6685931.714395953)", "transformed route feature correctly created");
|
||||
}
|
||||
function test_format_GPX_read_attributes(t) {
|
||||
t.plan(2);
|
||||
@@ -35,7 +43,7 @@
|
||||
t.eq(features[2].attributes['sym'], "Flag", "CDATA attribute node read correctly.");
|
||||
}
|
||||
function test_Format_GPX_serialize_points(t) {
|
||||
t.plan(1);
|
||||
t.plan(2);
|
||||
|
||||
var parser = new OpenLayers.Format.GPX();
|
||||
|
||||
@@ -47,9 +55,19 @@
|
||||
];
|
||||
var data = parser.write(features);
|
||||
t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wpt lon="-111.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes points correctly');
|
||||
|
||||
parser.internalProjection = new OpenLayers.Projection("EPSG:3857");
|
||||
point = new OpenLayers.Geometry.Point(-12367595.42541111, 5621521.485409545);
|
||||
point2 = new OpenLayers.Geometry.Point(-12472235.746742222, 5621521.485409545);
|
||||
features = [
|
||||
new OpenLayers.Feature.Vector(point, {name: 'foo', description: 'bar'}),
|
||||
new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'})
|
||||
];
|
||||
data = parser.write(features);
|
||||
t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wpt lon="-111.1" lat="45"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes transformed points correctly');
|
||||
}
|
||||
function test_Format_GPX_serialize_line(t) {
|
||||
t.plan(1);
|
||||
t.plan(2);
|
||||
|
||||
var parser = new OpenLayers.Format.GPX();
|
||||
|
||||
@@ -59,6 +77,14 @@
|
||||
var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
|
||||
var data = parser.write(f);
|
||||
t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes line correctly');
|
||||
|
||||
parser.internalProjection = new OpenLayers.Projection("EPSG:3857");
|
||||
point = new OpenLayers.Geometry.Point(-12367595.42541111, 5621521.485409545);
|
||||
point2 = new OpenLayers.Geometry.Point(-12472235.746742222, 5621521.485409545);
|
||||
line = new OpenLayers.Geometry.LineString([point, point2]);
|
||||
f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
|
||||
data = parser.write(f);
|
||||
t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OpenLayers" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.1" lat="45"/><trkpt lon="-112.04" lat="45"/></trkseg></trk></gpx>', 'GPX serializes transformed line correctly');
|
||||
}
|
||||
function test_Format_GPX_serialize_lines(t) {
|
||||
t.plan(1);
|
||||
|
||||
Reference in New Issue
Block a user