简体   繁体   English

openlayers 3 wms getfeatureinfo 弹出窗口

[英]openlayers 3 wms getfeatureinfo popup

I want to add an OSM map with WMS layers to my webpage, which includes some information about layers.我想将带有 WMS 图层的 OSM 地图添加到我的网页,其中包含有关图层的一些信息。 The best way for me would be to create the popup with getFeatureInfoUrl request, but unfortunatelly I'm not that experienced to do this.对我来说最好的方法是使用 getFeatureInfoUrl 请求创建弹出窗口,但不幸的是我没有那么有经验这样做。 I've tried a lot of codes and tutorials but it doesn't work.我已经尝试了很多代码和教程,但它不起作用。

I wrote something like this:我写了这样的东西:

 var osm = new ol.layer.Tile({ source: new ol.source.OSM() }); var wms = new ol.layer.Tile({ source: new ol.source.TileWMS(({ url: 'http://localhost:8081/geoserver/KORTOWO/wms', params: {'LAYERS': 'roads', 'TILED': "true"}, serverType: 'geoserver', })), title: "Roads" }); var map = new ol.Map({ target: 'map', layers: [osm,wms], view: new ol.View({ center: ol.proj.transform([20.45, 53.75], 'EPSG:4326', 'EPSG:3857'), zoom: 14 }) }); var popup = new ol.Overlay.Popup(); map.addOverlay(popup); map.on('singleclick', function(evt) { popup.getElementById('info').innerHTML = ''; var viewResolution = /** @type {number} */ (view.getResolution()); var url = wms.getGetFeatureInfoUrl( evt.coordinate, viewResolution, 'EPSG:3857', {'INFO_FORMAT': 'text/html'}); if (url) { popup.getElementById('info').innerHTML = '<iframe seamless src="' + url + '"></iframe>'; } popup.show(evt.coordinate, url); });

Can you help me how to modify the code to make it works?你能帮我修改代码以使其正常工作吗? I'm using OpenLayers3.我正在使用 OpenLayers3。

Greetings, Karolina问候,卡罗琳娜

UPDATE 2更新 2

Wrapping this in a function would be (not tested):将其包装在一个函数中将是(未测试):

map.on('singleclick', function(evt) {
    var layerWithWmsSource = map.forEachLayerAtPixel(evt.pixel, 
            function(layer) {
        // return only layers with ol.source.TileWMS
        var source = layer.getSource();
        if (source instanceof ol.source.TileWMS) {
            return layer;
        }
    });
    if (layerWithWmsSource) {
        getInfo(evt, layerWithWmsSource);
    }
});

function getInfo(evt, layer) {
  var resolution = map.getView().getResolution();
  var url = layer.getSource().getGetFeatureInfoUrl(evt.coordinate, 
    resolution, 'EPSG:3857', {'INFO_FORMAT': 'text/html'});
  if (url) {
    var content = '<p>' + url + '</p>';
    popup.show(evt.coordinate, content);
  }
}

UPDATE : getGetFeatureInfoUrl() is method of ol.source.TileWMS so modify to:更新getGetFeatureInfoUrl()ol.source.TileWMS方法,因此修改为:

var url = wms.getSource().getGetFeatureInfoUrl(evt.coordinate, resolution,
        'EPSG:3857', {'INFO_FORMAT': 'text/html'});

Maybe you solve with these modifications:也许您可以通过这些修改解决:

map.on('singleclick', function(evt) {
  var resolution = map.getView().getResolution();

  var url = wms.getSource().getGetFeatureInfoUrl(evt.coordinate, resolution,
    'EPSG:3857', {'INFO_FORMAT': 'text/html'});

  if (url) {
    // maybe you don't want|need an <iframe> inside popup
    var content = '<iframe seamless src="' + url + '"></iframe>';
    popup.show(evt.coordinate, content);
  } else {
    // maybe you hide the popup here
    popup.hide();
  }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM