Ok, da ich bereits eine sehr lange Frage dazu gestellt habe, aber seit einiger Zeit keine neuen Antworten mehr eingegangen sind und nicht im Detail verwirrt werden soll, werde ich diese so einfach wie möglich halten.
Wenn ich mich nicht irre, würde eine setStyle
Funktion für eine benannte, bestimmte Funktion wie folgt lauten:
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"});
... was die Farbe von orange nach blau ändern würde. Mir ist auch die resetStyle()
Funktion bekannt, mit der der Stil auf das Original zurückgesetzt wird.
So gestalte ich meinen 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;
}
}
});
Ich möchte nur ein Land blau und die anderen grau machen, später im Code. Es ist eine zweistufige Sache, alle Länder grau zu malen und dann eines blau zu machen.
Das erste ist, ich brauche eine solche Schleife, die über jedes Feature iteriert und setStyle()
für alle Länder grau wird. Funktioniert es, wenn ich nur everything.setStyle({color: "#4B1BDE"})
oder so?
Die zweite Sache ist (das gibt mir schlaflose Nächte), wie wähle ich nur ein Feature aus einer Gruppe von GeoJSON-Polygonen aus, mit denen ich arbeiten möchte ? Genau das Land, in dem ich blau streichen muss.
Wenn es sich um das Schweben mit der Maus handelte, konnte ich einen Ereignis-Listener platzieren, wie es in den Tutorials für Flugblätter gemacht wird. Unabhängig von der Benutzerinteraktion möchte ich den Stil festlegen und zurücksetzen, indem ich ihn wie im obigen Rechteck mit seinem Namen aufrufe.
setStyle()
Funktion der Broschüre hingewiesen haben .Antworten:
Dies funktioniert, ohne dass Sie die Ebene entfernen und eine neue erstellen müssen, wie oben beschrieben:
Es scheint einiges effizienter zu sein, als den GeoJson-Layer zu entfernen und neu zu erstellen. Aus den Dokumenten
GeoJSON
erstreckt sichFeatureGroup
eine Ebene, die sich wiederum erstrecktLayerGroup
.Darüber hinaus scheint es, dass jedes GeoJson-Feature eine eigene Ebene in der
FeatureGroup
!quelle
Ich habe einen kleinen Code geschrieben, um eine bestimmte Geojson-Funktion mithilfe eines Faltblatts zu gestalten. Sie können es mit JSFiddle (Original, nicht funktionsfähig) oder Functional JSFiddle 2018-02-17 versuchen oder den folgenden Codetest lokal verwenden.
Für dieses Beispiel verwende ich us-states.json-Dateien, aber es kann für jede Geojson-Datei verwendet werden.
Ich hoffe es wird helfen.
Hier ist der Code:
quelle
style(feature)
Funktion zu erstellen, die denfeature.properties.name
Wert überprüft . Vielen Dank!