Ok, skoro zadałem już bardzo długie pytanie na ten temat, ale ponieważ przez jakiś czas nie otrzymywałem żadnych nowych odpowiedzi, i żeby się nie mylić ze szczegółami, postaram się, by to było proste, najlepiej jak potrafię.
Jeśli się nie mylę, setStyle
funkcja nazwanej szczególnej funkcji wyglądałaby następująco:
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"});
... który zmieniłby kolor z pomarańczowego na niebieski. Mam również świadomość resetStyle()
funkcji, która przywróci styl do oryginału.
Oto jak stylizuję mój 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;
}
}
});
Chcę, aby tylko jeden kraj stał się niebieski, a pozostałe szare, w dalszej części kodu. To dwustopniowe, pomalowanie wszystkich krajów na szare, a następnie uczynienie jednego niebieskim.
Po pierwsze potrzebuję pętli, która powtarzałaby się po każdej funkcji i setStyle()
by wszystkie kraje były szare. Czy to działa, jeśli tylko chcę everything.setStyle({color: "#4B1BDE"})
czy coś?
Drugą rzeczą jest (to daje mi nieprzespane noce) jak wybrać tylko jedną funkcję z grupy wielokątów GeoJSON do pracy? Tylko kraj, który muszę pomalować na niebiesko.
Gdyby chodziło o najechanie myszką, mógłbym umieścić detektor zdarzeń, tak jak to zrobiono w tutorialach Ulotki. Ale niezależnie od interakcji użytkownika chcę ustawić i zresetować styl, wywołując go z jego nazwą, tak jak to zrobiłem z powyższym prostokątem.
setStyle()
funkcji ulotki .Odpowiedzi:
Działa to bez konieczności usuwania warstwy i ponownego tworzenia nowej, jak opisano powyżej:
Wydaje się być o wiele bardziej wydajnym niż usuwanie i odtwarzanie warstwy geoJson. Z dokumentów
GeoJSON
rozciąga się warstwa,FeatureGroup
która z kolei rozciąga sięLayerGroup
.Dodatkowo wydaje się, że każda funkcja geoJson ma własną warstwę w
FeatureGroup
!źródło
Zapisałem mały kod, aby stylizować określoną cechę geojson za pomocą ulotki. możesz wypróbować na JSFiddle (oryginalny, niefunkcjonalny) , funkcjonalny JSFiddle 2018-02-17 lub użyć lokalnego testu kodu lokalnie.
W tym przykładzie używam plików us-states.json, ale można go użyć do dowolnego pliku geojson.
Mam nadzieję, że to pomoże.
Oto kod:
źródło
style(feature)
funkcja sprawdzałafeature.properties.name
wartość. Dzięki!