[OpenLayers-Commits] r12352 - in sandbox/camptocamp/gpx/openlayers:
lib/OpenLayers/Format tests/Format
commits-20090109 at openlayers.org
commits-20090109 at openlayers.org
Fri Sep 9 11:53:11 EDT 2011
Author: pgiraud
Date: 2011-09-09 08:53:10 -0700 (Fri, 09 Sep 2011)
New Revision: 12352
Modified:
sandbox/camptocamp/gpx/openlayers/lib/OpenLayers/Format/GPX.js
sandbox/camptocamp/gpx/openlayers/tests/Format/GPX.html
Log:
Adding support for name and desc attributes
Modified: sandbox/camptocamp/gpx/openlayers/lib/OpenLayers/Format/GPX.js
===================================================================
--- sandbox/camptocamp/gpx/openlayers/lib/OpenLayers/Format/GPX.js 2011-09-09 09:04:42 UTC (rev 12351)
+++ sandbox/camptocamp/gpx/openlayers/lib/OpenLayers/Format/GPX.js 2011-09-09 15:53:10 UTC (rev 12352)
@@ -20,6 +20,23 @@
* - <OpenLayers.Format.XML>
*/
OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
+
+ /**
+ * APIProperty: waypointsDesc
+ * {String} Default description of the waypoints in the case where the
+ * feature has no "description" attribute.
+ * Default is "No description available".
+ */
+ waypointsDesc: "No description available",
+
+ /**
+ * APIProperty: tracksDesc
+ * {String} Default description of the tracks in the case where the
+ * feature has no "description" attribute.
+ * Default is "No description available".
+ */
+ tracksDesc: "No description available",
+
/**
* APIProperty: extractWaypoints
* {Boolean} Extract waypoints from GPX. (default: true)
@@ -189,7 +206,7 @@
/**
* APIMethod: write
- * Accept Feature Collection, and return a string.
+ * Accepts Feature Collection, and returns a string.
*
* Parameters:
* features - {Array(<OpenLayers.Feature.Vector>)} List of features to serialize into a string.
@@ -200,54 +217,43 @@
features : [features];
gpx = this.createElementNS(this.gpxns, "gpx");
- var featuresNodes = this.buildFeaturesNodes(features);
- for(var i=0, len=featuresNodes.length; i<len; i++) {
- gpx.appendChild(featuresNodes[i]);
+ for(var i=0, len=features.length; i<len; i++) {
+ gpx.appendChild(this.buildFeatureNode(features[i]));
}
return OpenLayers.Format.XML.prototype.write.apply(this, [gpx]);
},
/**
- * Method: buildFeaturesNodes
- * Accept an array of <OpenLayers.Feature.Vector>, and build a array of nodes for it.
+ * Method: buildFeatureNode
+ * Accepts an <OpenLayers.Feature.Vector>, and builds a node for it.
*
* Parameters:
- * features - {Array(<OpenLayers.Feature.Vector>)}
+ * feature - {<OpenLayers.Feature.Vector>}
*
* Returns:
* {Array(DOMElement)}
*/
- buildFeaturesNodes: function(features) {
- var featuresNodes = [],
- trkNode;
-
- // trk node needs to be added only once
- function createTrkNode() {
- if (!trkNode) {
- trkNode = this.createElementNS(this.gpxns, "trk");
- featuresNodes.push(trkNode);
+ buildFeatureNode: function(feature) {
+ var geometry = feature.geometry;
+ geometry = geometry.clone();
+ if (this.internalProjection && this.externalProjection) {
+ geometry.transform(this.internalProjection,
+ this.externalProjection);
+ }
+ if (geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
+ var wpt = this.buildWptNode(feature);
+ return wpt;
+ } else {
+ var trkNode = this.createElementNS(this.gpxns, "trk");
+ this.appendAttributesNode(trkNode, feature);
+ var trkSegNodes = this.buildTrkSegNode(geometry);
+ trkSegNodes = OpenLayers.Util.isArray(trkSegNodes) ?
+ trkSegNodes : [trkSegNodes];
+ for (var i = 0, len = trkSegNodes.length; i < len; i++) {
+ trkNode.appendChild(trkSegNodes[i]);
}
return trkNode;
}
- for (var i = 0, len=features.length; i < len; i++) {
- var geometry = features[i].geometry;
- geometry = geometry.clone();
- if (this.internalProjection && this.externalProjection) {
- geometry.transform(this.internalProjection,
- this.externalProjection);
- }
- if (geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
- featureNode = this.createElementNS(this.gpxns, "wpt");
- featureNode.setAttribute("lon", geometry.x);
- featureNode.setAttribute("lat", geometry.y);
- featuresNodes.push(featureNode);
- } else {
- trkNode = createTrkNode.call(this);
- this.buildTrkSegNode(trkNode, geometry);
- }
- }
-
- return featuresNodes;
},
/**
@@ -255,10 +261,10 @@
* Builds trkseg node(s) given a geometry
*
* Parameters:
- * trkNode - {DOMElement} the node to add the trkseg nodes to
+ * trknode
* geometry - {OpenLayers.Geometry}
*/
- buildTrkSegNode: function(trkNode, geometry) {
+ buildTrkSegNode: function(geometry) {
if (geometry.CLASS_NAME == "OpenLayers.Geometry.LineString" ||
geometry.CLASS_NAME == "OpenLayers.Geometry.LinearRing") {
var node = this.createElementNS(this.gpxns, "trkseg");
@@ -266,11 +272,13 @@
var point = geometry.components[i];
node.appendChild(this.buildTrkPtNode(point));
}
- trkNode.appendChild(node);
+ return node;
} else {
- for (var i = 0, len=geometry.components.length; i < len; i++) {
- this.buildTrkSegNode(trkNode, geometry.components[i]);
+ var nodes = [];
+ for (var i = 0, len = geometry.components.length; i < len; i++) {
+ nodes.push(this.buildTrkSegNode(geometry.components[i]));
}
+ return nodes;
}
},
@@ -291,5 +299,43 @@
return node;
},
+ /**
+ * Method: buildWptNode
+ * Builds a wpt node given a point
+ *
+ * Parameters:
+ * feature - {OpenLayers.Feature.Vector}
+ *
+ * Returns:
+ * {DOMElement} A wpt node
+ */
+ buildWptNode: function(feature) {
+ var node = this.createElementNS(this.gpxns, "wpt");
+ node.setAttribute("lon", feature.geometry.x);
+ node.setAttribute("lat", feature.geometry.y);
+ this.appendAttributesNode(node, feature);
+ return node;
+ },
+
+ /**
+ * Method: appendAttributesNode
+ * Adds some attributes node.
+ *
+ * Parameters:
+ * node - {DOMElement} the node to append the attribute nodes to.
+ * feature - {OpenLayers.Feature.Vector}
+ */
+ appendAttributesNode: function(node, feature) {
+ var name = this.createElementNS(this.gpxns, 'name');
+ name.appendChild(this.createTextNode(
+ feature.attributes.name || feature.attributes.id));
+ node.appendChild(name);
+ var desc = this.createElementNS(this.gpxns, 'desc');
+ desc.appendChild(this.createTextNode(
+ feature.attributes.description || this.defaultDesc));
+ node.appendChild(desc);
+ // TBD - deal with remaining (non name/description) attributes.
+ },
+
CLASS_NAME: "OpenLayers.Format.GPX"
});
Modified: sandbox/camptocamp/gpx/openlayers/tests/Format/GPX.html
===================================================================
--- sandbox/camptocamp/gpx/openlayers/tests/Format/GPX.html 2011-09-09 09:04:42 UTC (rev 12351)
+++ sandbox/camptocamp/gpx/openlayers/tests/Format/GPX.html 2011-09-09 15:53:10 UTC (rev 12352)
@@ -42,11 +42,11 @@
var point = new OpenLayers.Geometry.Point(-111.04, 45.68);
var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68);
var features = [
- new OpenLayers.Feature.Vector(point),
- new OpenLayers.Feature.Vector(point2)
+ new OpenLayers.Feature.Vector(point, {name: 'foo', description: 'bar'}),
+ new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'})
];
var data = parser.write(features);
- t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><wpt lon="-111.04" lat="45.68"/><wpt lon="-112.04" lat="45.68"/></gpx>', 'GPX serializes points correctly');
+ t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><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');
}
function test_Format_GPX_serialize_line(t) {
t.plan(1);
@@ -56,9 +56,9 @@
var point = new OpenLayers.Geometry.Point(-111.04, 45.68);
var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68);
var line = new OpenLayers.Geometry.LineString([point, point2]);
- var f = new OpenLayers.Feature.Vector(line);
+ var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
var data = parser.write(f);
- t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes line correctly');
+ t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><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');
}
function test_Format_GPX_serialize_lines(t) {
t.plan(1);
@@ -71,10 +71,10 @@
var point3 = new OpenLayers.Geometry.Point(1, 2);
var point4 = new OpenLayers.Geometry.Point(3, 4);
var line2 = new OpenLayers.Geometry.LineString([point3, point4]);
- var f = new OpenLayers.Feature.Vector(line);
- var f2 = new OpenLayers.Feature.Vector(line2);
+ var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
+ var f2 = new OpenLayers.Feature.Vector(line2, {name: 'dude', description: 'truite'});
var data = parser.write([f, f2]);
- t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes lines correctly');
+ t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk><trk><name>dude</name><desc>truite</desc><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes lines correctly');
}
function test_Format_GPX_serialize_multiline(t) {
t.plan(1);
@@ -88,9 +88,9 @@
var point4 = new OpenLayers.Geometry.Point(3, 4);
var line2 = new OpenLayers.Geometry.LineString([point3, point4]);
var multiline = new OpenLayers.Geometry.MultiLineString([line, line2]);
- var f = new OpenLayers.Feature.Vector(multiline);
+ var f = new OpenLayers.Feature.Vector(multiline, {name: 'foo', description: 'bar'});
var data = parser.write([f]);
- t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes multiline correctly');
+ t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes multiline correctly');
}
function test_Format_GPX_serialize_polygon(t) {
t.plan(1);
@@ -101,9 +101,9 @@
var point2 = new OpenLayers.Geometry.Point(-112.04, 45.68);
var linearRing = new OpenLayers.Geometry.LinearRing([point, point2, point.clone()]);
var polygon = new OpenLayers.Geometry.Polygon([linearRing]);
- var f = new OpenLayers.Feature.Vector(polygon);
+ var f = new OpenLayers.Feature.Vector(polygon, {name: 'foo', description: 'bar'});
var data = parser.write([f]);
- t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/><trkpt lon="-111.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes polygon correctly');
+ t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/><trkpt lon="-111.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes polygon correctly');
}
</script>
</head>
More information about the Commits
mailing list