简体   繁体   中英

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

 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).

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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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