Merge pull request #7141 from Sol1du2/issue/6990/WFSReadSrsDimension

Issue/6990/Wfs Read srsDimension
This commit is contained in:
Bart van den Eijnden
2017-08-29 09:38:13 +02:00
committed by GitHub
4 changed files with 111 additions and 3 deletions

View File

@@ -352,7 +352,7 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
var context = objectStack[0];
var containerSrs = context['srsName'];
var containerDimension = node.parentNode.getAttribute('srsDimension');
var contextDimension = context['srsDimension'];
var axisOrientation = 'enu';
if (containerSrs) {
var proj = ol.proj.get(containerSrs);
@@ -367,8 +367,11 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
} else if (node.getAttribute('dimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString(
node.getAttribute('dimension'));
} else if (containerDimension) {
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
} else if (node.parentNode.getAttribute('srsDimension')) {
dim = ol.format.XSD.readNonNegativeIntegerString(
node.parentNode.getAttribute('srsDimension'));
} else if (contextDimension) {
dim = ol.format.XSD.readNonNegativeIntegerString(contextDimension);
}
var x, y, z;
var flatCoordinates = [];

View File

@@ -198,6 +198,7 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
var context = /** @type {Object} */ (objectStack[0]);
context['srsName'] = node.firstElementChild.getAttribute('srsName');
context['srsDimension'] = node.firstElementChild.getAttribute('srsDimension');
/** @type {ol.geom.Geometry} */
var geometry = ol.xml.pushParseAndPop(null,
this.GEOMETRY_PARSERS_, node, objectStack, this);

View File

@@ -1467,4 +1467,75 @@ describe('ol.format.GML3', function() {
});
describe('when parsing srsDimension from WFS (Geoserver)', function() {
var features, feature;
before(function(done) {
afterLoadText('spec/ol/format/gml/geoserver3DFeatures.xml',
function(xml) {
try {
var config = {
'featureNS': 'http://www.opengeospatial.net/cite',
'featureType': 'geoserver_layer'
};
features = new ol.format.GML(config).readFeatures(xml);
} catch (e) {
done(e);
}
done();
});
});
it('creates 3 features', function() {
expect(features).to.have.length(3);
});
it('creates a LineString', function() {
feature = features[0];
expect(feature.getId()).to.equal('geoserver_layer.1');
expect(feature.getGeometry()).to.be.an(ol.geom.LineString);
});
it('creates a Polygon', function() {
feature = features[1];
expect(feature.getId()).to.equal('geoserver_layer.2');
expect(feature.getGeometry()).to.be.an(ol.geom.Polygon);
});
it('creates a Point', function() {
feature = features[2];
expect(feature.getId()).to.equal('geoserver_layer.3');
expect(feature.getGeometry()).to.be.an(ol.geom.Point);
});
it('creates 3D Features with the expected geometries', function() {
var expectedGeometry1 = [
4.46386854, 51.91122415, 46.04679351,
4.46382399, 51.91120839, 46.04679382
];
var expectedGeometry2 = [
4.46385491, 51.91119276, 46.06074531,
4.4638264, 51.91118582, 46.06074609,
4.46380612, 51.91121772, 46.06074168,
4.46383463, 51.91122465, 46.06074089,
4.46385491, 51.91119276, 46.06074531
];
var expectedGeometry3 = [
4.46383715, 51.91125849, 46.04679348
];
feature = features[0];
expect(feature.getGeometry().getFlatCoordinates())
.to.eql(expectedGeometry1);
feature = features[1];
expect(feature.getGeometry().getFlatCoordinates())
.to.eql(expectedGeometry2);
feature = features[2];
expect(feature.getGeometry().getFlatCoordinates())
.to.eql(expectedGeometry3);
});
});
});

View File

@@ -0,0 +1,33 @@
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:cite="http://www.opengeospatial.net/cite" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberOfFeatures="8" timeStamp="2017-08-14T13:29:50.356Z" xsi:schemaLocation="http://www.opengeospatial.net/cite http://localhost:8080/geoserver/wfs?service=WFS&amp;version=1.1.0&amp;request=DescribeFeatureType&amp;typeName=cite%3Ageoserver_layer http://www.opengis.net/wfs http://localhost:8080/geoserver/schemas/wfs/1.1.0/wfs.xsd">
<gml:featureMembers>
<cite:geoserver_layer gml:id="geoserver_layer.1">
<cite:geom>
<gml:LineString srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="3">
<gml:posList>
51.91122415 4.46386854 46.04679351 51.91120839 4.46382399 46.04679382
</gml:posList>
</gml:LineString>
</cite:geom>
</cite:geoserver_layer>
<cite:geoserver_layer gml:id="geoserver_layer.2">
<cite:geom>
<gml:Polygon srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="3">
<gml:exterior>
<gml:LinearRing>
<gml:posList>
51.91119276 4.46385491 46.06074531 51.91118582 4.4638264 46.06074609 51.91121772 4.46380612 46.06074168 51.91122465 4.46383463 46.06074089 51.91119276 4.46385491 46.06074531
</gml:posList>
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</cite:geom>
</cite:geoserver_layer>
<cite:geoserver_layer gml:id="geoserver_layer.3">
<cite:geom>
<gml:Point srsName="urn:x-ogc:def:crs:EPSG:4326" srsDimension="3">
<gml:pos>51.91125849 4.46383715 46.04679348</gml:pos>
</gml:Point>
</cite:geom>
</cite:geoserver_layer>
</gml:featureMembers>
</wfs:FeatureCollection>