D'accord, puisque j'ai déjà posé une très longue question à ce sujet, mais comme il n'a pas reçu de nouvelles réponses pendant un certain temps, et pour ne pas être confus dans les détails, je vais garder celle-ci simple du mieux que je peux.
Si je ne me trompe pas, une setStyle
fonction pour une caractéristique nommée particulière serait la suivante:
var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
var rect = L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
rect.setStyle({color: "#4B1BDE"});
... ce qui changerait la couleur de l'orange au bleu. Je connais également la resetStyle()
fonction qui ramènera le style à l'original.
Voici comment je stylise mon GeoJSON:
var everything = L.geoJson(myfile, {
onEachFeature: function(feature){
array_of_layers.addLayer(feature);
},
style: function(feature){
switch(feature.properties.name){
case "belgium": return belgium_style; break;
case "bosnia": return bosnia_style; break;
case "denmark": return denmark_style; break;
case "great_britain": return britain_style; break;
case "greece": return greece_style; break;
case "italy": return italy_style; break;
case "serbia": return serbia_style; break;
case "spain": return spain_style; break;
}
}
});
Ce que je veux faire, c'est rendre un seul pays bleu et les autres gris, plus loin dans le code. C'est une chose en deux étapes, pour peindre tous les pays en gris, puis en faire un bleu.
La première chose est que j'ai besoin d'une telle boucle qui itérerait sur chaque fonctionnalité et griserait setStyle()
pour tous les pays. Est-ce que ça marche si je viens everything.setStyle({color: "#4B1BDE"})
ou quelque chose?
La deuxième chose est, (cela me donne des nuits blanches) comment puis-je sélectionner une seule entité dans un groupe de polygones GeoJSON avec laquelle travailler? Juste le pays que j'ai besoin de peindre en bleu.
S'il s'agissait de survoler la souris, je pourrais placer un écouteur d'événement comme cela est fait dans les tutoriels Leaflet. Mais quelle que soit l'interaction de l'utilisateur, je veux définir et réinitialiser le style en l'appelant avec son nom, comme je l'ai fait avec le rectangle ci-dessus.
setStyle()
fonction du dépliant .Réponses:
Cela fonctionne sans avoir besoin de supprimer le calque et de recréer un nouveau comme décrit ci-dessus:
Il semble être beaucoup plus efficace que de supprimer et recréer la couche geoJson. À partir des documents, une
GeoJSON
couche s'étendFeatureGroup
qui à son tour s'étendLayerGroup
.De plus, il semble que chaque entité geoJson possède sa propre couche dans le
FeatureGroup
!la source
J'ai écrit un petit code pour styliser une fonction geojson spécifique à l'aide d'un dépliant. vous pouvez l'essayer sur JSFiddle (Original, non fonctionnel) , Functional JSFiddle 2018-02-17 , ou utiliser le test de code suivant localement.
Pour cet exemple, j'utilise des fichiers us-states.json mais il peut être utilisé pour n'importe quel fichier geojson.
J'espère que cela aidera.
Voici le code:
la source
style(feature)
fonction vérifiant lafeature.properties.name
valeur. Merci!