1

我有一层通过 OnEachFeature 事件从多边形派生的中心点。

我正在寻找的行为的第一部分是与该中心点关联的多边形在单击时改变样式,我已经成功了。

var ProjectMap = L.esri.featureLayer ({
      url: 'https://services.arcgis.com/2gdL2gxYNFY2TOUb/arcgis/rest/services/NECSC_Test_Data/FeatureServer/1',
      //making the polygons invisible
      weight: 0,
      fillOpacity: 0,


      onEachFeature: function(feature,layer){
        if (feature.geometry.type = 'Polygon') {

          var bounds = layer.getBounds();
          var center = bounds.getCenter();


          var centerpoints = L.marker(center);
          centerpointlayer.addLayer(centerpoints);


          centerpoints.on('click', function(e) {
            map.fitBounds(bounds);
            layer.setStyle({
              fillOpacity: 0.5,
            });
            info.update(layer.feature.properties);
          });

        };
      }

    }).addTo(map);

我想要的行为的第二部分是任何先前单击的多边形在单击不同的中心点时重置其样式。正如这里的许多其他线程所建议的,我无法使用 e.target 和 e.layer 以及 GeoJSON resetStyle 方法使其工作。

      [...]

      var selected

      centerpoints.on('click', function(e) {
        if (selected){
          e.target.resetStyle(selected)
        }
        selected = e.layer
        map.fitBounds(bounds);
        selected.setStyle({
          fillOpacity: 0.5,
        });
        info.update(layer.feature.properties);
      });

控制台在 selected.setStyle({ of

'Uncaught TypeError: Cannot read property 'setStyle' of undefined'  at e.<anonymous> ((index):178)
    at e.fire (leaflet.js:5)
    at e._fireDOMEvent (leaflet.js:5)
    at e._handleDOMEvent (leaflet.js:5)
    at HTMLDivElement.r (leaflet.js:5)

我对 Leaflet 的情况有点困惑——是否有另一种方法可以让 esri.feature.layer 重置为其默认样式,然后在单击时更改所选中心点-多边形组合的样式?

4

1 回答 1

1

我相信你需要听图层上的点击事件而不是标记。

centerpointlayer.on('click', function(e) {
    if (selected){
      e.target.resetStyle(selected)
    }
    selected = e.layer
    map.fitBounds(bounds);
    selected.setStyle({
      fillOpacity: 0.5,
    });
    info.update(layer.feature.properties);
  });
于 2017-08-16T12:57:12.293 回答