Add feature id (fid) parsing
This commit is contained in:
@@ -123,6 +123,8 @@ ol.format.GML.readGeometry_ = function(node, objectStack) {
|
|||||||
*/
|
*/
|
||||||
ol.format.GML.readFeature_ = function(node, objectStack) {
|
ol.format.GML.readFeature_ = function(node, objectStack) {
|
||||||
var n;
|
var n;
|
||||||
|
var fid = node.getAttribute('fid') ||
|
||||||
|
ol.xml.getAttributeNS(node, 'http://www.opengis.net/gml', 'id');
|
||||||
var values = {}, geometryName;
|
var values = {}, geometryName;
|
||||||
for (n = node.firstElementChild; !goog.isNull(n);
|
for (n = node.firstElementChild; !goog.isNull(n);
|
||||||
n = n.nextElementSibling) {
|
n = n.nextElementSibling) {
|
||||||
@@ -145,6 +147,9 @@ ol.format.GML.readFeature_ = function(node, objectStack) {
|
|||||||
if (goog.isDef(geometryName)) {
|
if (goog.isDef(geometryName)) {
|
||||||
feature.setGeometryName(geometryName);
|
feature.setGeometryName(geometryName);
|
||||||
}
|
}
|
||||||
|
if (!goog.isNull(fid)) {
|
||||||
|
feature.setId(fid);
|
||||||
|
}
|
||||||
return feature;
|
return feature;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -165,8 +170,6 @@ ol.format.GML.readPoint_ = function(node, objectStack) {
|
|||||||
goog.asserts.assert(flatCoordinates.length == 3);
|
goog.asserts.assert(flatCoordinates.length == 3);
|
||||||
point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
|
point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
|
||||||
return point;
|
return point;
|
||||||
} else {
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -185,8 +188,6 @@ ol.format.GML.readMultiPoint_ = function(node, objectStack) {
|
|||||||
ol.format.GML.MULTIPOINT_PARSERS_, node, objectStack);
|
ol.format.GML.MULTIPOINT_PARSERS_, node, objectStack);
|
||||||
if (goog.isDefAndNotNull(coordinates)) {
|
if (goog.isDefAndNotNull(coordinates)) {
|
||||||
return new ol.geom.MultiPoint(coordinates);
|
return new ol.geom.MultiPoint(coordinates);
|
||||||
} else {
|
|
||||||
return undefined;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -652,7 +653,7 @@ ol.format.GML.readFlatPos_ = function(node, objectStack) {
|
|||||||
goog.asserts.assert(goog.isObject(context));
|
goog.asserts.assert(goog.isObject(context));
|
||||||
var containerSrs = goog.object.get(context, 'srsName');
|
var containerSrs = goog.object.get(context, 'srsName');
|
||||||
var axisOrientation = 'enu';
|
var axisOrientation = 'enu';
|
||||||
if (containerSrs !== null) {
|
if (!goog.isNull(containerSrs)) {
|
||||||
var proj = ol.proj.get(containerSrs);
|
var proj = ol.proj.get(containerSrs);
|
||||||
axisOrientation = proj.getAxisOrientation();
|
axisOrientation = proj.getAxisOrientation();
|
||||||
}
|
}
|
||||||
@@ -683,7 +684,7 @@ ol.format.GML.readFlatPosList_ = function(node, objectStack) {
|
|||||||
var containerSrs = goog.object.get(context, 'srsName');
|
var containerSrs = goog.object.get(context, 'srsName');
|
||||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
||||||
var axisOrientation = 'enu';
|
var axisOrientation = 'enu';
|
||||||
if (containerSrs !== null) {
|
if (!goog.isNull(containerSrs)) {
|
||||||
var proj = ol.proj.get(containerSrs);
|
var proj = ol.proj.get(containerSrs);
|
||||||
axisOrientation = proj.getAxisOrientation();
|
axisOrientation = proj.getAxisOrientation();
|
||||||
}
|
}
|
||||||
@@ -691,7 +692,7 @@ ol.format.GML.readFlatPosList_ = function(node, objectStack) {
|
|||||||
// The "dimension" attribute is from the GML 3.0.1 spec.
|
// The "dimension" attribute is from the GML 3.0.1 spec.
|
||||||
var dim = parseInt(node.getAttribute('srsDimension') ||
|
var dim = parseInt(node.getAttribute('srsDimension') ||
|
||||||
node.getAttribute('dimension'), 10) ||
|
node.getAttribute('dimension'), 10) ||
|
||||||
(containerDimension !== null) ?
|
(!goog.isNull(containerDimension)) ?
|
||||||
parseInt(containerDimension, 10) : 2;
|
parseInt(containerDimension, 10) : 2;
|
||||||
var x, y, z;
|
var x, y, z;
|
||||||
var flatCoordinates = [];
|
var flatCoordinates = [];
|
||||||
|
|||||||
@@ -201,6 +201,95 @@ ol.xml.isNodeIE_ = function(value) {
|
|||||||
ol.xml.isNode = goog.userAgent.IE ? ol.xml.isNodeIE_ : ol.xml.isNode_;
|
ol.xml.isNode = goog.userAgent.IE ? ol.xml.isNodeIE_ : ol.xml.isNode_;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {string} Value
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNS_ = function(node, namespaceURI, name) {
|
||||||
|
return node.getAttributeNS(namespaceURI, name) || '';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {string} Value
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNSActiveX_ = function(node, namespaceURI, name) {
|
||||||
|
var attributeValue = '';
|
||||||
|
var attributeNode = ol.xml.getAttributeNodeNS(node, namespaceURI, name);
|
||||||
|
if (goog.isDef(attributeNode)) {
|
||||||
|
attributeValue = attributeNode.nodeValue;
|
||||||
|
}
|
||||||
|
return attributeValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {string} Value
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNS =
|
||||||
|
(document.implementation && document.implementation.createDocument) ?
|
||||||
|
ol.xml.getAttributeNS_ : ol.xml.getAttributeNSActiveX_;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {?Node} Attribute node or null if none found.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNodeNS_ = function(node, namespaceURI, name) {
|
||||||
|
return node.getAttributeNodeNS(namespaceURI, name);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {?Node} Attribute node or null if none found.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNodeNSActiveX_ = function(node, namespaceURI, name) {
|
||||||
|
var attributeNode = null;
|
||||||
|
var attributes = node.attributes;
|
||||||
|
var potentialNode, fullName;
|
||||||
|
for (var i = 0, len = attributes.length; i < len; ++i) {
|
||||||
|
potentialNode = attributes[i];
|
||||||
|
if (potentialNode.namespaceURI == namespaceURI) {
|
||||||
|
fullName = (potentialNode.prefix) ?
|
||||||
|
(potentialNode.prefix + ':' + name) : name;
|
||||||
|
if (fullName == potentialNode.nodeName) {
|
||||||
|
attributeNode = potentialNode;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return attributeNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Node} node Node.
|
||||||
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
* @param {string} name Attribute name.
|
||||||
|
* @return {?Node} Attribute node or null if none found.
|
||||||
|
*/
|
||||||
|
ol.xml.getAttributeNodeNS =
|
||||||
|
(document.implementation && document.implementation.createDocument) ?
|
||||||
|
ol.xml.getAttributeNodeNS_ : ol.xml.getAttributeNodeNSActiveX_;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Node} node Node.
|
* @param {Node} node Node.
|
||||||
* @param {?string} namespaceURI Namespace URI.
|
* @param {?string} namespaceURI Namespace URI.
|
||||||
|
|||||||
@@ -652,6 +652,10 @@ describe('ol.format.GML', function() {
|
|||||||
expect(features).to.have.length(10);
|
expect(features).to.have.length(10);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('creates the right id for the feature', function() {
|
||||||
|
expect(features[0].getId()).to.equal('states.1');
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when parsing TOPP states GML from WFS', function() {
|
describe('when parsing TOPP states GML from WFS', function() {
|
||||||
@@ -678,6 +682,7 @@ describe('ol.format.GML', function() {
|
|||||||
|
|
||||||
it('creates a polygon for Illinois', function() {
|
it('creates a polygon for Illinois', function() {
|
||||||
feature = features[0];
|
feature = features[0];
|
||||||
|
expect(feature.getId()).to.equal('states.1');
|
||||||
expect(feature.get('STATE_NAME')).to.equal('Illinois');
|
expect(feature.get('STATE_NAME')).to.equal('Illinois');
|
||||||
expect(feature.getGeometry()).to.be.an(ol.geom.MultiPolygon);
|
expect(feature.getGeometry()).to.be.an(ol.geom.MultiPolygon);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user