在OpenLayers手绘边界框中显示WFS返回的要素

时间:2019-07-13 14:45:31

标签: openlayers bounding-box openlayers-5 web-feature-service

我允许用户绘制要素,在绘制时,我需要向WFS服务请求返回要素。

我可以使用以下方法使WFS根据范围返回数据:

[0-9]*\.[0-9]|[0-9]\.

尽管我将这些源注入到图层中,并将图层注入到地图上,但仍无法显示这些功能。

我可以使用类似于以下内容的东西来显示所有功能:

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
            });

但是,我终生无法解决如何将请求中请求的数据限制为一个具有四个坐标的边界框。

可能这可能是无限的尖角几何形状,将充当显示数据的Cookie切割器。

我的搜索没有结果。

1 个答案:

答案 0 :(得分:0)

在这两种情况下,您似乎都非常亲密。

在最上面的代码段中,您可以记录任何要素及其几何图形以确认是否已加载任何要素,如果可以,为什么不出现在预期的位置(例如,当视图为EPSG:27700时,几何坐标为lon / lat值)

setTimeout(function(){
  console.log(vectorSource.getFeatures());
  vectorSource.getFeatures().forEach(function(feature){console.log(feature.getGeometry());});
}, 10000);

在第二个代码段中,如果其他一切正常,我想您需要将bbox数组添加到featureRequest调用中使用的serializeToString对象中,或更改传递数据的方式。 / p>

这是一个类似的WFS示例,您可以在其中使用视图源。它与WFS或GML格式同样适用。当视图与数据http://mikenunn.16mb.com/demo/wfs-italy-4326.html的投影相同时,使用url函数就足够了。但是与GeoJSON这样的格式不同,OpenLayers不会自动重新投影功能以查看GML或WFS的投影。使用不同的投影http://mikenunn.16mb.com/demo/wfs-italy-3857.html,需要使用加载程序功能来重新投影要素几何,否则意大利的省份最终会到达[0,0]几米之内的大西洋。