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 s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
|
||||||
var context = objectStack[0];
|
var context = objectStack[0];
|
||||||
var containerSrs = context['srsName'];
|
var containerSrs = context['srsName'];
|
||||||
var containerDimension = node.parentNode.getAttribute('srsDimension');
|
var contextDimension = context['srsDimension'];
|
||||||
var axisOrientation = 'enu';
|
var axisOrientation = 'enu';
|
||||||
if (containerSrs) {
|
if (containerSrs) {
|
||||||
var proj = ol.proj.get(containerSrs);
|
var proj = ol.proj.get(containerSrs);
|
||||||
@@ -367,8 +367,11 @@ ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
|
|||||||
} else if (node.getAttribute('dimension')) {
|
} else if (node.getAttribute('dimension')) {
|
||||||
dim = ol.format.XSD.readNonNegativeIntegerString(
|
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||||
node.getAttribute('dimension'));
|
node.getAttribute('dimension'));
|
||||||
} else if (containerDimension) {
|
} else if (node.parentNode.getAttribute('srsDimension')) {
|
||||||
dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
|
dim = ol.format.XSD.readNonNegativeIntegerString(
|
||||||
|
node.parentNode.getAttribute('srsDimension'));
|
||||||
|
} else if (contextDimension) {
|
||||||
|
dim = ol.format.XSD.readNonNegativeIntegerString(contextDimension);
|
||||||
}
|
}
|
||||||
var x, y, z;
|
var x, y, z;
|
||||||
var flatCoordinates = [];
|
var flatCoordinates = [];
|
||||||
|
|||||||
@@ -198,6 +198,7 @@ ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
|
|||||||
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
|
||||||
var context = /** @type {Object} */ (objectStack[0]);
|
var context = /** @type {Object} */ (objectStack[0]);
|
||||||
context['srsName'] = node.firstElementChild.getAttribute('srsName');
|
context['srsName'] = node.firstElementChild.getAttribute('srsName');
|
||||||
|
context['srsDimension'] = node.firstElementChild.getAttribute('srsDimension');
|
||||||
/** @type {ol.geom.Geometry} */
|
/** @type {ol.geom.Geometry} */
|
||||||
var geometry = ol.xml.pushParseAndPop(null,
|
var geometry = ol.xml.pushParseAndPop(null,
|
||||||
this.GEOMETRY_PARSERS_, node, objectStack, this);
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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