简体   繁体   English

在openlayers3 javascript中获取地图点击的特征信息

[英]Get a feature info on map click in openlayers3 javascript

i am trying to get feature information on map click using openlayers 3 javascript with the help of the example popupinfo我正在尝试在示例popupinfo的帮助下使用 openlayers 3 javascript获取地图点击的特征信息

 var mmi = new ol.layer.Tile({ source: new ol.source.OSM() }); var one = new ol.layer.Image({ source: new ol.source.ImageWMS({ url: 'http://localhost:8080/geoserver/wms', params: {'LAYERS': 'cite:abc'}, format: new ol.format.GeoJSON(), ratio: 1, serverType: 'geoserver' }) }); var map = new ol.Map({ layers: [mmi,one], target: 'map', view: new ol.View({ center: ol.proj.fromLonLat([73.6608, 29.8820]), zoom: 8 }) }); map.on('click', function(evt) { var feature = map.forEachFeatureAtPixel(evt.pixel, function(feature, one) { return feature; }) });
 <link href="https://openlayers.org/en/v4.6.4/css/ol.css" rel="stylesheet"/> <script src="https://openlayers.org/en/v4.6.4/build/ol-debug.js"></script> <div id="map" class="map"></div> <div id="map" class="information"></div>

on my map click event the feature value is nothing.在我的地图点击事件中,特征值什么都不是。 how to get the value of feature on clicking on it.如何在点击它时获得功能的价值。

You are studying the wrong example for your use case, you need a getFeatureInfo call as you are using a Web Map Service (WMS).您正在为您的用例研究错误的示例,您在使用 Web 地图服务 (WMS) 时需要调用 getFeatureInfo

map.on('click', function(evt) {
      var url = wms_layer.getSource().getFeatureInfoUrl(
          evt.coordinate, viewResolution, viewProjection,
          {'INFO_FORMAT': 'text/html',
           'propertyName': 'formal_en'});
      if (url) {
        var parser = new ol.format.GeoJSON();
        $.ajax({
          url: url,
        
        }).then(function(response) {
            container.innerHTML = response;
          } else {
            container.innerHTML = '&nbsp;';
          }
        });
      }
    });

You can get feature information like this:您可以获得这样的功能信息:

map.on("singleclick", function (evt) {
  this.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
    console.log(feature.get("<property_key>"));
  });
});

Example Code:示例代码:

 var vectorSource = new ol.source.Vector({ format: new ol.format.GeoJSON(), url: function(extent) { return 'https://ahocevar.com/geoserver/wfs?service=WFS&' + 'version=1.1.0&request=GetFeature&typename=osm:water_areas&' + 'outputFormat=application/json&srsname=EPSG:3857&' + 'bbox=' + extent.join(',') + ',EPSG:3857'; }, strategy: ol.loadingstrategy.bbox }); var vector = new ol.layer.Vector({ source: vectorSource, style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 255, 1.0)', width: 2 }) }) }); var raster = new ol.layer.Tile({ source: new ol.source.BingMaps({ imagerySet: 'Aerial', key: 'Your Bing Maps Key from http://www.bingmapsportal.com/ here' }) }); var map = new ol.Map({ layers: [raster, vector], target: document.getElementById('map'), view: new ol.View({ center: [-8908887.277395891, 5381918.072437216], maxZoom: 19, zoom: 12 }) }); map.on("singleclick", function (evt) { this.forEachFeatureAtPixel(evt.pixel, function (feature, layer) { alert("Osm Id: " + feature.get("osm_id") + "\\nLand Use: " + feature.get("landuse")); }); });
 <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script> <link href="https://openlayers.org/en/v4.6.5/css/ol.css" rel="stylesheet"/> <div id="map" class="map" style="width: 98%; height: calc(95%); position: absolute;"></div>

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

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