Изменить стиль отдельного объекта в mapbox gl

В примерах выделения полигонов в mapbox gl используется второй слой и функция фильтра. Невозможно ли изменить цвет одного объекта / полигона в mapbox gl js, взятого из источника geojson?

См. https://www.mapbox.com/mapbox-gl-js/example/hover-styles/


person malcolm    schedule 16.02.2017    source источник


Ответы (1)


Можно стилизовать отдельный объект, используя стиль, управляемый данными, который однозначно реагирует на атрибут одного объекта. Например, если у вас есть набор точечных данных с атрибутом id и вы хотите, чтобы идентификатор 450 был желтым, а не синим.

{
  "id": "mypoints",
  "type": "circle",
  "paint": {
    "fill-color": {
      "property": "id",
      "type": "category",
      "stops": [[450, "yellow"]],
      "default": "blue"
    }
  }
}

Предостережение 1: функция "по умолчанию" еще не общедоступна.

Предостережение 2: это работает только для свойств стиля, которые поддерживают функции, управляемые данными.

person Steve Bennett    schedule 24.02.2017
comment
Ключевая часть моего вопроса - ИЗМЕНИТЬ стиль многоугольника, а не задавать стиль многоугольника. Я хочу иметь возможность изменять отдельный объект / полигон на лету, а не при первоначальном создании стиля. Могу ли я сделать это с помощью этого метода? - person malcolm; 25.02.2017
comment
Да, это и есть стиль на основе данных. Вы можете оставить данные без изменений и обновить стиль, чтобы выделить другую часть. - person Steve Bennett; 27.02.2017
comment
да, но как это назвать ... layer.setStyle ()? потому что в документации нет ничего, что показало бы, как обновить стиль слоя, который я могу найти, кроме добавления нового слоя ... Мне должно быть что-то здесь не хватает, так как это похоже на базовую функцию - person malcolm; 17.03.2017
comment
Это изменяет / перезагружает всю карту, верно? Я думаю о более традиционной ГИС с базовой картой в качестве стиля карты, а затем поверх слоев. Похоже, это работает с map.setPaintProperty () с использованием функции остановки. - person malcolm; 21.03.2017
comment
Не уверен, что понимаю тебя. setStyle меняет один слой. setPaintProperty изменяет одно свойство одного слоя (как и setLayoutProperty). Оба потенциально чрезвычайно быстрые - нет перезагрузки всей карты. - person Steve Bennett; 22.03.2017
comment
В настоящее время в моем приложении для просмотра участков с векторной сеткой листовок подсветка при нажатии выполняется быстрее, чем в версии mapbox gl js, использующей те же векторные плитки. Я пытался найти более быстрый способ выделить отдельную функцию в mapbox gl js, но это не представляется возможным. Я скоро приведу примеры. - person malcolm; 23.03.2017