Ok, já que eu já fiz uma pergunta muito longa sobre isso, mas como ela não recebeu novas respostas por um tempo e não ficou confusa em detalhes, vou manter essa simples da melhor maneira possível.
Se não me engano, uma setStyle
função para um recurso específico nomeado seria a seguinte:
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"});
... que mudaria a cor de laranja para azul. Também estou ciente da resetStyle()
função que reverterá o estilo para o original.
É assim que eu denomino meu 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;
}
}
});
O que eu quero fazer é tornar apenas um país azul e os outros cinza, posteriormente no código. É uma coisa de duas etapas, pintar todos os países em cinza e depois fazer um azul.
A primeira coisa é que preciso de um loop que itere sobre cada recurso e setStyle()
que todos os países fiquem cinzentos. Funciona se eu apenas everything.setStyle({color: "#4B1BDE"})
ou algo assim?
A segunda coisa é (que está me dando noites sem dormir) como seleciono apenas um recurso de um grupo de polígonos GeoJSON para trabalhar? Apenas o país que eu preciso pintar de azul.
Se fosse uma questão de passar o mouse, eu poderia colocar um ouvinte de evento, como é feito nos tutoriais do Leaflet. Mas, independentemente da interação do usuário, desejo definir e redefinir o estilo chamando-o com seu nome, como fiz no retângulo acima.
setStyle()
função do folheto .Respostas:
Isso funciona sem a necessidade de remover a camada e recriar uma nova, conforme descrito acima:
Parece ser um pouco mais eficiente do que remover e recriar a camada geoJson. A partir dos documentos, uma
GeoJSON
camada se estendeFeatureGroup
e, por sua vez, se estendeLayerGroup
.Além disso, parece que cada recurso geoJson possui sua própria camada no
FeatureGroup
!fonte
Eu escrevi um código pequeno para estilizar o recurso geojson específico usando o folheto. você pode experimentá-lo no JSFiddle (Original, não funcional) , JSFiddle funcional 2018-02-17 , ou usar o seguinte teste de código localmente.
Neste exemplo, estou usando arquivos us-states.json, mas pode ser usado para qualquer arquivo geojson.
Eu espero que isso ajude.
Aqui está o código:
fonte
style(feature)
função verificando ofeature.properties.name
valor. Obrigado!