[OpenLayers-Commits] r4797 - in trunk/openlayers: lib/OpenLayers/Format tests/Format
commits at openlayers.org
commits at openlayers.org
Wed Oct 3 17:15:09 EDT 2007
Author: crschmidt
Date: 2007-10-03 17:15:09 -0400 (Wed, 03 Oct 2007)
New Revision: 4797
Modified:
trunk/openlayers/lib/OpenLayers/Format/KML.js
trunk/openlayers/tests/Format/test_KML.html
Log:
KML should use the correct namespace for the placemark it is processing.
This is slightly more expensive for parsing, but leads to the ability to
load almost all KML Placemarks with geometries on the web, instead of a small
portion of them.
Modified: trunk/openlayers/lib/OpenLayers/Format/KML.js
===================================================================
--- trunk/openlayers/lib/OpenLayers/Format/KML.js 2007-10-03 20:55:22 UTC (rev 4796)
+++ trunk/openlayers/lib/OpenLayers/Format/KML.js 2007-10-03 21:15:09 UTC (rev 4797)
@@ -48,6 +48,13 @@
* {Boolean} Extract attributes from KML. Default is true.
*/
extractAttributes: true,
+
+ /**
+ * Property: internalns
+ * {String} KML Namespace to use -- defaults to the namespace of the
+ * Placemark node being parsed, but falls back to kmlns.
+ */
+ internalns: null,
/**
* Constructor: OpenLayers.Format.KML
@@ -83,7 +90,7 @@
data = OpenLayers.Format.XML.prototype.read.apply(this, [data]);
}
var featureNodes = this.getElementsByTagNameNS(data,
- this.kmlns,
+ '*',
"Placemark");
var numFeatures = featureNodes.length;
var features = new Array(numFeatures);
@@ -116,7 +123,10 @@
var type, nodeList, geometry, parser;
for(var i=0; i<order.length; ++i) {
type = order[i];
- nodeList = this.getElementsByTagNameNS(node, this.kmlns, type);
+ this.internalns = node.namespaceURI ?
+ node.namespaceURI : this.kmlns;
+ nodeList = this.getElementsByTagNameNS(node,
+ this.internalns, type);
if(nodeList.length > 0) {
// only deal with first geometry of this type
var parser = this.parseGeometry[type.toLowerCase()];
@@ -165,7 +175,7 @@
* {<OpenLayers.Geometry.Point>} A point geometry.
*/
point: function(node) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"coordinates");
var coords = [];
if(nodeList.length > 0) {
@@ -200,7 +210,7 @@
* {<OpenLayers.Geometry.LineString>} A linestring geometry.
*/
linestring: function(node, ring) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"coordinates");
var line = null;
if(nodeList.length > 0) {
@@ -254,7 +264,7 @@
* {<OpenLayers.Geometry.Polygon>} A polygon geometry.
*/
polygon: function(node) {
- var nodeList = this.getElementsByTagNameNS(node, this.kmlns,
+ var nodeList = this.getElementsByTagNameNS(node, this.internalns,
"LinearRing");
var numRings = nodeList.length;
var components = new Array(numRings);
Modified: trunk/openlayers/tests/Format/test_KML.html
===================================================================
--- trunk/openlayers/tests/Format/test_KML.html 2007-10-03 20:55:22 UTC (rev 4796)
+++ trunk/openlayers/tests/Format/test_KML.html 2007-10-03 21:15:09 UTC (rev 4797)
@@ -28,7 +28,7 @@
"read geometry collection");
}
- function test_Format_KML_readCdataAttributes(t) {
+ function test_Format_KML_readCdataAttributes_20(t) {
t.plan(2);
var cdata = '<kml xmlns="http://earth.google.com/kml/2.0"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
var features = (new OpenLayers.Format.KML()).read(cdata);
@@ -37,6 +37,15 @@
}
+ function test_Format_KML_readCdataAttributes_21(t) {
+ t.plan(2);
+ var cdata = '<kml xmlns="http://earth.google.com/kml/2.1"><Document><Placemark><name><![CDATA[Pezinok]]></name><description><![CDATA[Full of text.]]></description><styleUrl>#rel1.0</styleUrl><Point> <coordinates>17.266666, 48.283333</coordinates></Point></Placemark></Document></kml>';
+ var features = (new OpenLayers.Format.KML()).read(cdata);
+ t.eq(features[0].attributes.description, "Full of text.", "Description attribute in cdata read correctly");
+ t.eq(features[0].attributes.name, "Pezinok", "title attribute in cdata read correctly");
+
+ }
+
function test_Format_KML_write(t) {
// make sure id, name, and description are preserved
t.plan(1);
More information about the Commits
mailing list