我一直在使用此处显示的示例(https://astuntechnology.github.io/osgis-ol3-leaflet/ol3/05-WMS-INFO.html)尝试从我设置的多个 TileWMS 图层的坐标处检索要素在我的应用程序中。
这个例子已经过调整,所以它现在使用 reqwest 库以 JSONP 格式返回数据,但现在我试图找出最好的方法来调整它以包含多个层和多个特性。
我正在考虑使用 map.forEachLayerAtPixel 函数来检索地图单击位置处存在的所有图层,然后在 if 语句中调用该功能并将其添加到变量中以构建动态 html 结果表。
我不知道这是否是最好的方法,但这是我能想到的唯一方法,因此我能够以一种我可以具体列出的方式检索信息。
下面是我的地图点击功能的 javascript,但它没有返回弹出窗口,也没有显示任何错误。
我不确定我是否使用了正确的方法,下面有什么看起来不正确的吗?
谢谢
var popup = new ol.Overlay.Popup();
map.addOverlay(popup);
map.on('singleclick', function(evt) {
if($(window).width() <= 767 && document.getElementById('sidebar').style.display == 'block') {
$('#sidebar').toggle();
$(".navbar-collapse.in").collapse("hide");
map.updateSize();
return false;
}
// Hide existing popup and reset it's offset
popup.hide();
popup.setOffset([0, 0]);
var displayedLayers = [];
var content = "";
map.forEachLayerAtPixel(evt.pixel, function(layer) {
displayedLayers.push(layer.get('name'));
});
if ($.inArray('layer62', displayedLayers) > -1) {
var url = layer62
.getSource()
.getGetFeatureInfoUrl(
evt.coordinate,
map.getView().getResolution(),
map.getView().getProjection(),
{
'INFO_FORMAT': 'text/javascript',
'format_options': 'callback:results',
'propertyName': 'definition'
}
);
reqwest({
url: url,
type: 'jsonp',
jsonpCallbackName: 'results'
}).then(function (data) {
var feature = data.features[0];
var props = feature.properties;
content += "<h4>Flood Zone 3</h4><p>" + props.definition + "</p>";
});
}
if ($.inArray('layer63', displayedLayers) > -1) {
var url = layer63
.getSource()
.getGetFeatureInfoUrl(
evt.coordinate,
map.getView().getResolution(),
map.getView().getProjection(),
{
'INFO_FORMAT': 'text/javascript',
'format_options': 'callback:results',
'propertyName': 'definition'
}
);
reqwest({
url: url,
type: 'jsonp',
jsonpCallbackName: 'results'
}).then(function (data) {
var feature = data.features[0];
var props = feature.properties;
content += "<h4>Flood Zone 2</h4><p>" + props.definition + "</p>";
});
}
return content;
popup.show(evt.coordinate, content);
});