簡體   English   中英

在openlayers3 javascript中獲取地圖點擊的特征信息

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

我正在嘗試在示例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>

在我的地圖點擊事件中,特征值什么都不是。 如何在點擊它時獲得功能的價值。

您正在為您的用例研究錯誤的示例,您在使用 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;';
          }
        });
      }
    });

您可以獲得這樣的功能信息:

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

示例代碼:

 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