我正在尝试使用QGIS Server(2.14)实现此示例https://medium.com/@goldrydigital/wfs-t-with-openlayers-3-16-6fb6a820ac58并适应不同的SRS。遗憾的是,函数ol.format.WFS.readFeatures()无法读取QGIS Server发回的几何体(请参阅console.log(features [k] .getGeometry()); // => NULL))
非常感谢任何帮助,谢谢!
顺便说一句:使用ArcGIS-Server-WFS时,下面的代码正常工作......
代码:
var formatWFS = new ol.format.WFS();
var sourceWFS = new ol.source.Vector({
loader: function (extent) {
$.ajax('http://xxx/qgis/qgis_mapserv.fcgi.exe', {
type: 'GET',
data: {
service: 'WFS',
version: '1.0.0',
request: 'GetFeature',
typename: 'test2',
srsname: 'EPSG:2056',
bbox: extent.join(',') + ',EPSG:2056'
}
}).done(function (response) {
wfsresponsefeatures = formatWFS.readFeatures(response);
sourceWFS.addFeatures(wfsresponsefeatures);
features = sourceWFS.getFeatures();
for (var k in features) {
console.log(features[k].getGeometry()); // => NULL
}
WFS响应如下:
<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd http://www.qgis.org/gml http://szhm4120/qgis/qgis_mapserv.fcgi.exe?srsname=EPSG%3A2056&SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureType&TYPENAME=test2&OUTPUTFORMAT=XMLSCHEMA"><gml:boundedBy>
<gml:Box srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2681188.02,1246449.97 2685167.35,1248977.27</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<qgs:test2 fid="test2.2">
<gml:boundedBy>
<gml:Box srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2683250.99,1248618.11 2683250.99,1248618.11</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<qgs:geometry>
<gml:Point srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2683250.99,1248618.11</gml:coordinates>
</gml:Point>
</qgs:geometry>
<qgs:id>2</qgs:id>
</qgs:test2>
</gml:featureMember>
<gml:featureMember>
<qgs:test2 fid="test2.3">
<gml:boundedBy>
<gml:Box srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2681673.03,1247121.49 2681673.03,1247121.49</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<qgs:geometry>
<gml:Point srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2681673.03,1247121.49</gml:coordinates>
</gml:Point>
</qgs:geometry>
<qgs:id>3</qgs:id>
</qgs:test2>
</gml:featureMember>
<gml:featureMember>
<qgs:test2 fid="test2.6">
<gml:boundedBy>
<gml:Box srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2682779.23,1248227.69 2682779.23,1248227.69</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<qgs:geometry>
<gml:Point srsName="EPSG:2056">
<gml:coordinates cs="," ts=" ">2682779.23,1248227.69</gml:coordinates>
</gml:Point>
</qgs:geometry>
<qgs:id>6</qgs:id>
</qgs:test2>
</gml:featureMember>
</wfs:FeatureCollection>
答案 0 :(得分:0)
好的,所以QGIS Server只能用GML2几何图形来提供WFS 1.0.0 ......
以上示例通过将WFS设置为GML2
来工作var formatWFS = new ol.format.WFS({
'gmlFormat': new ol.format.GML2
});