/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for * full list of contributors). Published under the Clear BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the * full text of the license. */ /** * @requires OpenLayers/Format/XML.js * @requires OpenLayers/Feature/Vector.js * @requires OpenLayers/Geometry/Point.js * @requires OpenLayers/Geometry/LineString.js * @requires OpenLayers/Projection.js */ /** * Class: OpenLayers.Format.GPX * Read/write GPX parser. Create a new instance with the * constructor. * * Inherits from: * - */ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, { /** * APIProperty: extractWaypoints * {Boolean} Extract waypoints from GPX. (default: true) */ extractWaypoints: true, /** * APIProperty: extractTracks * {Boolean} Extract tracks from GPX. (default: true) */ extractTracks: true, /** * APIProperty: extractRoutes * {Boolean} Extract routes from GPX. (default: true) */ extractRoutes: true, /** * APIProperty: extractAttributes * {Boolean} Extract feature attributes from GPX. (default: true) * NOTE: Attributes as part of extensions to the GPX standard may not * be extracted. */ extractAttributes: true, /** * Constructor: OpenLayers.Format.GPX * Create a new parser for GPX. * * Parameters: * options - {Object} An optional object whose properties will be set on * this instance. */ initialize: function(options) { // GPX coordinates are always in longlat WGS84 this.externalProjection = new OpenLayers.Projection("EPSG:4326"); OpenLayers.Format.XML.prototype.initialize.apply(this, [options]); }, /** * APIMethod: read * Return a list of features from a GPX doc * * Parameters: * doc - {Element} * * Returns: * An Array of s */ read: function(doc) { if (typeof doc == "string") { doc = OpenLayers.Format.XML.prototype.read.apply(this, [doc]); } var features = []; if(this.extractTracks) { var tracks = doc.getElementsByTagName("trk"); for (var i=0, len=tracks.length; i} a trkseg or rte node to parse * segmentType - {String} nodeName of waypoints that form the line * * Returns: * {} A linestring geometry */ extractSegment: function(segment, segmentType) { var points = this.getElementsByTagNameNS(segment, segment.namespaceURI, segmentType); var point_features = []; for (var i = 0, len = points.length; i < len; i++) { point_features.push(new OpenLayers.Geometry.Point(points[i].getAttribute("lon"), points[i].getAttribute("lat"))); } return new OpenLayers.Geometry.LineString(point_features); }, /** * Method: parseAttributes * * Parameters: * node - {} * * Returns: * {Object} An attributes object. */ parseAttributes: function(node) { // node is either a wpt, trk or rte // attributes are children of the form value var attributes = {}; var attrNode = node.firstChild; while(attrNode) { if(attrNode.nodeType == 1) { var value = attrNode.firstChild; if(value.nodeType == 3 || value.nodeType == 4) { name = (attrNode.prefix) ? attrNode.nodeName.split(":")[1] : attrNode.nodeName; if(name != "trkseg" && name != "rtept") { attributes[name] = value.nodeValue; } } } attrNode = attrNode.nextSibling; } return attributes; }, CLASS_NAME: "OpenLayers.Format.GPX" });