Динамический выбор свойства из объекта GeoJSON в листовке - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь динамически изменить свойство, отображаемое на карте листовки. Вот мой код:

$("#button_thermal").click(function(){
$.getJSON("physicalProperties.geojson", function(data) {
var geojson2 = L.geoJson(data, {                
style: { color: 'black', fill: true , opacity: 0.1, fillOpacity:1},
onEachFeature: function (feature,layer){

if (layer.feature.properties.Thermal_Admittance <= 528){
     layer.setStyle({fillColor :'#edf8fb'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 866){
     layer.setStyle({fillColor :'#bfd3e6'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 1205){
     layer.setStyle({fillColor :'#9ebcda'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 1543){
     layer.setStyle({fillColor :'#8c96c6'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 1881){
     layer.setStyle({fillColor :'#8c6bb1'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 2200){
     layer.setStyle({fillColor :'#88419d'})
    }
else if (layer.feature.properties.Thermal_Admittance <= 2500){
     layer.setStyle({fillColor :'#6e016b'})
    }
}
});
geojson2.addTo(map)
$("#button_clear").click(function(){map.removeLayer(geojson2)})
});
});

Как я могу динамически изменить свойство Thermal_Admittance на другое? Когда функция определена, легко добавить свойства, которые будут выбраны при вызове функции, но как я могу включить ее в функцию, определенную в onEachFeature?

1 Ответ

0 голосов
/ 10 июля 2019

Добро пожаловать в ТАК!

У вас есть 2 возможных решения для вашего случая:

  • сделать конструктор функций
  • связывание функции

Первое решение просто состоит в создании функции, которая возвращает другую функцию, и ваше свойство остается в области действия с момента создания функции:

function buildOnEachFeatureFn(prop) {
  return function (feature, layer) {
    if (feature.properties[prop] <= 528) {
      // etc.
    }
  }
}

L.geoJSON(data, {
  onEachFeature: buildOnEachFeatureFn("Thermal_Admittance")
}

Второе решение каким-то образом технически аналогично предыдущему, в том смысле, что оно также создает новую функцию, но с использованием bind"magic":

function onEachFeatureFn(prop, feature, layer) {
  if (feature.properties[prop] <= 528) {
    // etc.
  }
}

L.geoJSON(data, {
  onEachFeature: onEachFeatureFn.bind(this, "Thermal_Admittance")
}
...