代码之家  ›  专栏  ›  技术社区  ›  slevin

openlayers中矢量层的交互特性5

  •  -1
  • slevin  · 技术社区  · 6 年前

    我使用的是openlayers 5.1.3,我不知道如何创建点击向量层特性的功能,得到我点击的特性,然后得到它的属性。我在跟踪 this 我找到的唯一相关的例子。

    我有一个空的向量源,它在搜索之后获取GeoJSON数据

    初始化映射和向量

    this.vectorsource = new VectorSource({});
    
    this.vectorlayer = new VectorLayer({
      source: this.vectorsource
    });
    
    var selectClick = new Select({
      condition: click
    });
    
    this.olmap.addInteraction(selectClick);
    selectClick.on('select', function(e) {
      console.log(e.target);
    });
    

    搜索之后

    this.vectorsource.clear();
    const fff = (new GeoJSON()).readFeatures(data.data);
    this.vectorsource.addFeatures(fff);
    

    selectClick addInteraction 最接近我想要的。我不知道如何进行,我也不知道这是不是正确的方法组合,以获得我点击的特定功能,所以我可以得到它的属性。还有,奇怪的是我什么也没看到 getFeature (非复数)矢量层的方法或功能。

    我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  4
  •   geocodezip    6 年前

    e.target (其中 e getFeatures() 方法。

    var selectClick = new ol.interaction.Select({
      condition: ol.events.condition.click
    });
    this.olmap.addInteraction(selectClick);
    selectClick.on('select', function(e) {
       var selectedFeatures = e.target.getFeatures().getArray();
       var featuresStr = selectedFeatures[0].get('name');
       console.log(featuresStr);
    });
    

    proof of concept example

    代码段:

    var raster = new ol.layer.Tile({ // TileLayer({
      source: new ol.source.OSM()
    });
    
    var vector = new ol.layer.Vector({ // VectorLayer({
      source: new ol.source.Vector({ // VectorSource({
        url: 'https://cdn.rawgit.com/johan/world.geo.json/master/countries.geo.json',
        format: new ol.format.GeoJSON()
      })
    });
    
    var map = new ol.Map({
      layers: [raster, vector],
      target: 'map',
      view: new ol.View({
        center: [0, 0],
        zoom: 2
      })
    });
    
    var selectClick = new ol.interaction.Select({
      condition: ol.events.condition.click
    });
    
    map.addInteraction(selectClick);
    selectClick.on('select', function(e) {
      var selectedFeatures = e.target.getFeatures().getArray();
      var featureStr = "none";
      if (!!selectedFeatures && selectedFeatures.length > 0) {
        featureStr = selectedFeatures[0].get('name');
      }
      console.log(featureStr);
      document.getElementById('status').innerHTML = featureStr;
    });
    html,
    body {
      height: 100%;
      width: 100%;
      padding: 0px;
      margin: 0px;
    }
    
    .map {
      height: 95%;
      width: 100%;
    }
    <script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.1.3/build/ol.js"></script>
    <div id="status"></div>
    <div id="map" class="map"></div>