【发布时间】:2019-07-13 14:45:31
【问题描述】:
我允许用户绘制要素,并且在 drawend 上我需要向我的 WFS 服务发出请求以返回要素。
我可以让 WFS 根据范围返回数据:
let vectorSource = new VectorSource({
format: new GeoJSON(),
url: function(extent) {
return 'https://example/wfs' +
'?key=key' +
'&SERVICE=WFS' +
'&REQUEST=GetFeature' +
'&TYPENAMES=data_point' +
'&SRSNAME=urn:ogc:def:crs:EPSG::27700' +
'&BBOX=' + extent.join(',') + ',urn:ogc:def:crs:EPSG::27700';
},
strategy: bboxStrategy
});
但是,尽管将此源注入图层并将图层注入地图,但我无法显示这些功能。
我可以使用以下方式显示所有功能:
fetch('example/wfs?key=key', {
method: 'POST',
body: new XMLSerializer().serializeToString(featureRequest)
}).then(function(response) {
return response.text();
}).then(function(gml) {
console.log(gml);
let features = new GML().readFeatures(gml);
vectorSource.addFeatures(features);
map.getView().fit(vectorSource.getExtent());
});
但是,我终其一生都无法弄清楚如何将此请求中请求的数据限制为四个坐标的边界框。
这可能是一个无限的尖头几何图形,将充当显示数据的千篇一律。
我的搜索没有结果。
【问题讨论】:
-
在您使用
format: new GeoJSON()的第一个sn-p 中,URL 中需要&outputFormat=application/json(以及支持它的服务器)。否则,如果视图和数据都是 EPSG:27700,format: new WFS()就足够了 -
@Mike 谢谢你回复我,而且在星期六也一样。我实际上在这里写错了,因为我的 WFS 为我服务 GML。我将尝试 WFS,看看会发生什么。谢谢。
-
@Mike 所以使用前一个 sn-p,我已经更改并尝试将格式设置为 GML 和 WFS,虽然它没有抛出任何错误,并且查看请求,这些都正确发回在我的范围内形成GML(要更改为bbox的坐标),数据不会显示在图层上!
-
@Mike 我想我的问题是,使用第一个代码 sn-p 我可以从服务器获取正确的数据,但它没有显示在我的地图上,第二个显示数据但我无法弄清楚如何只从边界框内请求数据。
标签: openlayers bounding-box openlayers-5 web-feature-service