4

I'm using Leaflet filter on geoJson data. I'm able to apply it with a simple criteria :

filter: function(feature, layer) {
     return feature.properties.field1 == "yes";
}

I can also apply two criteria with logical operators like && or || :

filter: function(feature, layer) {
     return (feature.properties.field1 == "yes" && feature.properties.field2 == "yes");
}

I want now to insert a condition (depending of a variable):

filter: function(feature, layer) {  
   if (varState == "01") {  
     return (feature.properties.field1 == "yes" && feature.properties.field2 == "yes");
   }
   else if (varState == "02") {
     return (feature.properties.field1 == "yes" && feature.properties.field2 == "no");
    }
    else {
      return feature.properties.field1 == "yes";            
    }
}

Does someone has already succeed this ?

8
  • what about defining two different layers for each filter. For example 'var field1 = L.Geojson... filter: function() { field1 }' 'var field2 = L.Geojson... filter: function() { field2 }' Commented Apr 29, 2016 at 10:35
  • Ok, and how can I use this two filters in a single layer ? (markers with feature.properties.field1 == "yes" && feature.properties.field2 == "yes";
    – GeoGyro
    Commented Apr 29, 2016 at 12:19
  • 1
    I can see no reason why this wouldn't work. Here's a quick test filtering some random data with multiple properties: fiddle.jshell.net/nathansnider/am3nwqn8 Have you made sure that there are actually features that have "yes" for both field and field2? Commented Apr 29, 2016 at 17:53
  • Yes, features have "yes" for both field1 and field2
    – GeoGyro
    Commented May 2, 2016 at 7:29
  • It works. I can't see it because I make a if else if else not recognize by filters.
    – GeoGyro
    Commented May 4, 2016 at 14:01

1 Answer 1

1

Here is a full answer with a if ... else if ... else condition :

filter: function(feature, layer) {  
   if (varState == "01") {  
     return (feature.properties.field1 == "yes" && feature.properties.field2 == "yes");
   }
   else if (varState == "02") {
     return (feature.properties.field1 == "yes" && feature.properties.field2 == "no");
    }
    else {
      return feature.properties.field1 == "yes";            
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.