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. git-svn-id: http://svn.openlayers.org/trunk/openlayers@4797 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -48,6 +48,13 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* {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 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
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 @@ OpenLayers.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
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.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* {<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.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* {<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.Format.KML = OpenLayers.Class(OpenLayers.Format.XML, {
|
||||
* {<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);
|
||||
|
||||
Reference in New Issue
Block a user