我正在尝试从MS4W提供并在OpenLayers3中查看的WMS Shapefile层中的要素获取属性信息。
有没有办法在一个命令中获取多个功能信息,就像使用下面的矢量源方法一样?
vectorSource.forEachFeatureIntersectingExtent(extent, function(feature) {
selectedFeatures.push(feature);
info.push(feature.get('name'));
答案 0 :(得分:1)
对于任何wms / wfs服务器提供的WMS图层,您可以使用以下内容执行wms get功能请求:
var url = myWMSLayer
.getSource()
.getGetFeatureInfoUrl(
evt.coordinate,
map.getView().getResolution(),
map.getView().getProjection(),
{
'INFO_FORMAT': 'application/json',
'propertyName': 'ATTR1,ATTR2,ATTR3'
}
);
这应该为您提供event.coordinate
内传递的任何功能。所以你可能会回到所给出的所有特征。
我认为如果您只能访问服务器上的WMS请求,这是您唯一的选择。
但是,如果您的服务器支持WFS请求并且您可以访问它们,则可以执行wfs请求以获取所需的功能。如下所示:
//here is the rectangle to search for fetaures
var extent [-8876804.07807116, 5368955.976007851, -8866790.827365803, 5374688.75312924];
$.ajax('http://demo.opengeo.org/geoserver/wfs', {
type: 'GET',
data: {
service: 'WFS',
version: '1.1.0',
request: 'GetFeature',
typename: 'mylayer',
srsname: 'EPSG:3857',
bbox: extent.join(',') + ',EPSG:3857'
}
}).done(function(resp){
//you may parse the responce back here
var formatWFS = new ol.format.WFS();
var feats = formatWFS.readFeatures(resp);
//now you can iterate through your features and get the attrs
for (var i=0;i<feats.length;i++){
console.log(feats[i].get('ATTR1'));
}
}).fail(function () {
alert("fail loading features");
});
答案 1 :(得分:0)
对于WMS地图图层,我们可以使用以下功能获取该功能,同时点击具有WMS图层的地图:
map.forEachFeatureAtPixel(evt.pixel, function(feature, layer)
{
//Do your logic
}
注意:evt =点击事件。