Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Unable to use in expression as layer filter #16262

Description

@1ec5

The in expression operator added in #16162 can only be used with paint and layout properties, not with layer filters. To reproduce, load this style and observe that nothing is visible:

colors.json
{
  "version": 8,
  "zoom": 0,
  "center": [0, 0],
  "sources": {
    "quadrants": {
      "type": "geojson",
      "data": {
        "type": "FeatureCollection",
        "features": [
          {
            "type": "Feature",
            "properties": {
              "name": "ABC",
              "color": "red"
            },
            "geometry": {
              "type": "Polygon",
              "coordinates": [[
                [-180, -90],
                [-180, 0],
                [0, 0],
                [0, -90],
                [-180, -90]
              ]]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "name": "DEF",
              "color": "#00ff00"
            },
            "geometry": {
              "type": "Polygon",
              "coordinates": [[
                [-180, 90],
                [-180, 0],
                [0, 0],
                [0, 90],
                [-180, 90]
              ]]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "name": "GHI",
              "color": "#0000ff"
            },
            "geometry": {
              "type": "Polygon",
              "coordinates": [[
                [180, -90],
                [180, 0],
                [0, 0],
                [0, -90],
                [180, -90]
              ]]
            }
          },
          {
            "type": "Feature",
            "properties": {
              "name": "GHI",
              "color": "#ffff00"
            },
            "geometry": {
              "type": "Polygon",
              "coordinates": [[
                [180, 90],
                [180, 0],
                [0, 0],
                [0, 90],
                [180, 90]
              ]]
            }
          }
        ]
      }
    }
  },
  "glyphs": "local://glyphs/{fontstack}/{range}.pbf",
  "layers": [
    {
      "id": "colors",
      "type": "fill",
      "source": "quadrants",
      "filter": ["in", "#", ["get", "color"]],
      "paint": {
        "fill-color": ["get", "color"]
      }
    }
  ]
}
GL JS v1.8.1 Expected GL Native v1.3.0
gl-js expected actual

mbgl::style::conversion::isExpression() always returns false for the filter ["in", "#", ["get", "color"]], because in is also a legacy filter operator:

} else if (*op == "in" || *op == "!in" || *op == "!has" || *op == "none") {
return false;

/ref mapbox/mapbox-gl-native-ios#183 (comment)
/cc @jmkiley @Chaoba @chloekraw

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

CoreThe cross-platform C++ core, aka mbglbugexpressions

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions