Merge pull request #7141 from Sol1du2/issue/6990/WFSReadSrsDimension
Issue/6990/Wfs Read srsDimension
This commit is contained in:
@@ -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 = [];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
33
test/spec/ol/format/gml/geoserver3DFeatures.xml
Normal file
33
test/spec/ol/format/gml/geoserver3DFeatures.xml
Normal 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&version=1.1.0&request=DescribeFeatureType&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>
|
||||
Reference in New Issue
Block a user