Хорошо, так как я уже задавал очень длинный вопрос по этому поводу, но поскольку он некоторое время не получал новых ответов, и чтобы не запутаться в деталях, я оставлю этот простой как можно лучше.
Если я не ошибаюсь, setStyle
функция для именованной конкретной функции будет выглядеть следующим образом:
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"});
... который изменит цвет с оранжевого на синий. Я также знаю о resetStyle()
функции, которая вернет стиль к оригиналу.
Вот как я оформляю свой 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;
}
}
});
То, что я хочу сделать, это сделать только одну страну синей, а остальные серыми, позже в коде. Это двухэтапная вещь: закрасить все страны в серый, а затем сделать один синий.
Во-первых, мне нужен такой цикл, который будет повторяться по каждой функции и setStyle()
для всех стран будет серым. Это работает, если я просто everything.setStyle({color: "#4B1BDE"})
или что-то?
Во-вторых, (это дает мне бессонные ночи), как выбрать только одну особенность из группы полигонов GeoJSON для работы? Просто страна, которую мне нужно покрасить в синий.
Если бы это был вопрос зависания мыши, я мог бы разместить слушателя событий, как это делается в уроках Leaflet. Но независимо от взаимодействия с пользователем, я хочу установить и сбросить стиль, вызвав его с его именем, как я делал с прямоугольником выше.
setStyle()
функцию листовки .Ответы:
Это работает без необходимости удалять слой и воссоздавать новый, как описано выше:
Кажется, это немного более эффективно, чем удаление и воссоздание слоя geoJson. Из документов
GeoJSON
распространяется слой,FeatureGroup
который, в свою очередь, расширяетсяLayerGroup
.Кроме того, кажется, что каждая функция geoJson имеет свой собственный слой в
FeatureGroup
!источник
Я написал небольшой код для стилизации конкретной функции геойсона с помощью листовки. вы можете попробовать его в JSFiddle (оригинальный, не функциональный) , функциональный JSFiddle 2018-02-17 или использовать следующий тест кода локально.
В этом примере я использую файлы us-states.json, но его можно использовать для любого файла geojson.
Надеюсь, это поможет.
Вот код:
источник
style(feature)
функцию проверкиfeature.properties.name
значения. Благодарность!