在点击时从多个Geoserver图层获取要素属性 - 打开图层3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在点击时从多个Geoserver图层获取要素属性 - 打开图层3相关的知识,希望对你有一定的参考价值。
我正在尝试从地图上的多个图层中获取属性,使用OpenLayers 3和Geoserver提供的图层。
我找到了这个片段,但它使用的是旧版本的Open Layers,我没有发现任何与Open Layers 3相同的方式
http://dev.openlayers.org/examples/getfeatureinfo-popup.html
答案
这似乎有效..第一个答案的简单变化 - 如果存在重叠的特征,这将从多个层和每个层中的多个要素中检索和显示属性
var layerlist = [wmsLayer, wmsLayer2];
var info = [];
map.on('singleclick', function(evt) {
info = [];
for (i=0; i<layerlist.length; i++)
getInfo(evt, layerlist[i]);
});
function getInfo(evt, layer) {
var resolution = map.getView().getResolution();
var coordinate = evt.coordinate;
var pixel = evt.pixel;
var thislayer = layer.getSource().getParams().LAYERS;
var url = layer.getSource().getGetFeatureInfoUrl(evt.coordinate,
resolution, 'EPSG:3857', {'INFO_FORMAT': 'application/json', 'FEATURE_COUNT': 50 });
if (url) {
var parser = new ol.format.GeoJSON();
var lookup = {};
$.ajax({url: url,
dataType: 'json',
success:function(response) {
var result = parser.readFeatures(response);
if ((result.length > 0) && (wmsLayer.getVisible()==true)) {
for (var i = 0, ii = result.length; i < ii; ++i) {
var text = result[i].get("id");
var param_name;
// to populate different field values from different layers in info popup
if (thislayer == 'thisname' ){
param_name = result[i].get("param1");
} else {
param_name = result[i].get("param2");
}
info.push( param_name);
}
content.innerhtml = '<p><strong>ID: </strong>' + info.join(', ');
overlay.setPosition(coordinate);
}
}
});
}
另一答案
OpenLayers示例WMS GetFeatureInfo (Layers)正好显示了这一点。
<script>
var wmsSource = new ol.source.TileWMS({
url: 'https://ahocevar.com/geoserver/wms',
// Add as many layers as you like here!!
params: {'LAYERS': 'ne:ne', 'TILED': true},
serverType: 'geoserver',
crossOrigin: 'anonymous'
});
var wmsLayer = new ol.layer.Tile({
source: wmsSource
});
var view = new ol.View({
center: [0, 0],
zoom: 1
});
var map = new ol.Map({
layers: [wmsLayer],
target: 'map',
view: view
});
map.on('singleclick', function(evt) {
document.getElementById('info').innerHTML = '';
var viewResolution = /** @type {number} */ (view.getResolution());
// Here all the layers in the wmsSource will be added to the URL
var url = wmsSource.getGetFeatureInfoUrl(
evt.coordinate, viewResolution, 'EPSG:3857',
{'INFO_FORMAT': 'text/html'});
if (url) {
document.getElementById('info').innerHTML =
'<iframe seamless src="' + url + '"></iframe>';
}
});
以上是关于在点击时从多个Geoserver图层获取要素属性 - 打开图层3的主要内容,如果未能解决你的问题,请参考以下文章
简析Geoserver中获取图层列表以及各图层描述信息的三种方法