宣传单:e.layer不适用于L.Marker或esri.featurelayer?

时间:2017-08-15 21:46:27

标签: javascript leaflet esri esri-leaflet

我有一层通过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重置回默认样式,然后改变所选中心点的样式 - 多边形单击组合?

1 个答案:

答案 0 :(得分:0)

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

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);
  });