Leaflet: e.layer не работает с L.Marker или esri.featurelayer?

У меня есть слой центральных точек, полученных из полигонов через событие 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 и метод resetStyle GeoJSON, как предложено во многих других потоках здесь.

      [...]

      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 вернуться к своему стилю по умолчанию, затем изменить стиль выбранной комбинации centerpoint-polygon по клику?

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);
  });
Другие вопросы по тегам