2017-08-15 6 views
1

J'ai une couche de centres dérivés de polygones via un événement OnEachFeature.Dépliant: e.layer ne fonctionne pas avec L.Marker ou esri.featurelayer?

La première partie du comportement que je recherche est que le polygone associé à ce point central change de style lorsque je clique dessus, ce que j'ai réussi.

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

La deuxième partie du comportement que je veux est pour tout polygone précédemment cliqué pour réinitialiser son style quand on clique sur un autre Centerpoint. Je ne peux pas faire fonctionner ceci en utilisant e.target et e.layer et la méthode GeoJSON resetStyle, comme suggéré dans beaucoup d'autres threads ici.

 [...] 

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

La console rejette une erreur à moi, à selected.setStyle ({de

'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) 

Je suis un peu perplexe à ce qui se passe avec Dépliant ici-- est-il une autre façon de allez-vous obtenir le esri.feature.layer pour réinitialiser son style par défaut, puis en changeant le style du combo centerpoint-polygone sélectionné sur click?

Répondre

0

Je crois que vous devez écouter l'événement click sur la couche et non les marqueurs

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

Merci beaucoup! Cela ne génère aucune erreur, mais rend également map.FitBounds, info.update, etc ... puis applique aux marqueurs, quand j'en ai besoin pour les polygones dans le fichier esri.featurelayer. Cela me donne une idée ou deux sur la création d'une variable globale ou d'une fonction qui pourrait servir de conteneur pour la couche sélectionnée dans esri.featurelayer qui pourrait être appelée à partir d'un événement click sur centerpointlayer, etc ... – GeoJoeK