Как раскрасить отдельные полигоны, нарисованные с помощью mapbox-gl draw?

Я читаю файл GeoJSON и импортирую многоугольники (и другие вещи) в mapbox-gl draw с помощью draw.set(geoJSON). Как раскрасить отдельные полигоны с помощью атрибута в свойствах объекта. Пример:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      //"id": "the most unique id in the world",
      "properties": {
        "class_id": 1
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              79.30961608886719,
              61.57192958204744
            ],
            [
              79.34309005737303,
              61.57192958204744
            ],
            [
              79.34309005737303,
              61.57871162332267
            ],
            [
              79.30961608886719,
              61.57871162332267
            ],
            [
              79.30961608886719,
              61.57192958204744
            ]
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "class_id": 2
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              79.35201644897461,
              61.58271478278019
            ],
            [
              79.35115814208984,
              61.573972521656835
            ],
            [
              79.38188552856444,
              61.57192958204744
            ],
            [
              79.35201644897461,
              61.58271478278019
            ]
          ]
        ]
      }
    },
    }

Идея состоит в том, что мы раскрашиваем функции с class_id = 1 красным, class_id = 2 синим и class_id = 3 зеленым. Как мы это делаем?


person Shravan    schedule 12.07.2018    source источник


Ответы (1)


Вам необходимо установить для userProperties значение true для свойств a feature will be available for styling. И используйте префикс user.

И используйте case expression:

var Draw = new MapboxDraw({
  userProperties: true,
  styles: [{
      'id': 'gl-draw-polygon-fill-inactive',
      'type': 'fill',
      'filter': ['all', ['==', 'active', 'false'],
        ['==', '$type', 'Polygon'],
        ['!=', 'mode', 'static']
      ],
      'paint': {
        'fill-color': [
          "case", 
          ['==', ['get', "user_class_id"], 1], "#00ff00", 
          ['==', ['get', "user_class_id"], 2], "#0000ff",
          '#ff0000'
        ],
        'fill-outline-color': '#3bb2d0',
        'fill-opacity': 0.5
      }
    }...

[http://jsfiddle.net/5Lotf4ka/]

person stdob--    schedule 12.07.2018
comment
Спасибо! Это сработало. - person Shravan; 13.07.2018