Mapbox GL JS шаблон заполнения и стиль, управляемый данными - PullRequest
0 голосов
/ 19 февраля 2020

См. Редактировать внизу

Я пытаюсь создать карту, используя mapbox js, с полосатым узором заливки, похожим на это изображение. Мои данные состоят из нескольких полигонов, которые имеют различные свойства. Я хочу, чтобы у определенных полигонов были разные шаблоны, основанные на определенном свойстве под названием «currentSchool». Я мог делать очень похожие вещи, используя свойство fillbox цвета mapbox, но, поскольку мне нужно, чтобы они были полосатыми, я должен использовать свойство fill-pattern, и это доставляет мне некоторые проблемы.

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

map.setPaintProperty("blocks", 'fill-pattern', ["case", 
    ["==", ['number', 300],
        300],
    "pattern",
    "pattern2"]);

В приведенном ниже фрагменте для полигонов, чье свойство currentSchool равно 300, я хочу, чтобы их шаблон заливки был «узором». Для всех других многоугольников я хочу, чтобы их заливочный шаблон был pattern2.

map.setPaintProperty("blocks", 'fill-pattern', ["case", 
    ["==", ['number', ["get", "currentSchool"]],
        300],
    "pattern",
    "pattern2"]);

Однако он выдает мне следующее сообщение об ошибке:

Error: "layers.blocks.paint.fill-pattern: data expressions not supported"

Так что, очевидно, "get" выражение вызывает у меня проблемы, хотя я не знаю почему. Я нашел два примера, которые используют fill-pattern и выражение "get" ( здесь и здесь ), поэтому я подумал, что то, что я делаю, должно работать.

В mapbox JS документации говорится следующее под заголовком "выражения данных":

Однако некоторые свойства рисования и макета еще не поддерживают данные выражения. Уровень поддержки указывается строкой «стиль данных на основе данных» таблицы «Поддержка SDK» для каждого свойства. Выражения данных с оператором состояния объекта допускаются только для свойств рисования.

Здесь (под заголовком "fill-pattern") - это таблица, на которую она ссылается. В этой таблице говорится, что fill-pattern поддерживает стилизацию на основе данных, поэтому я не уверен, почему я получаю эту ошибку.

Я провел большой поиск в Интернете и попытался дать ссылку на соответствующую информацию.

Кто-нибудь знает, как я могу исправить эту ошибку? В качестве альтернативы, если действительно невозможно использовать этот вид управляемых данными стилей с шаблоном заполнения mapbox, кто-нибудь знает, как можно получить карту с полигонами, заполненными полосатым узором (аналогично изображению, связанному выше)? Большое спасибо.

Редактировать:

Хорошо, я действительно тупой. Я понял, что происходит не так. Оказалось, что я просто использовал старую версию mapbox, в которой не было поддержки стилей, управляемых данными. Я запустил этот проект некоторое время go, бросил его, а затем снова поднял. Я просто предполагал, что использую самую последнюю версию.

1 Ответ

1 голос
/ 27 февраля 2020

Для тех, у кого могут быть подобные ошибки, Mapbox Ссылка на выражение является полезным ресурсом для определения версий Mapbox SDK, которые поддерживают каждый тип выражения. Здесь перечислены все выражения, а также таблица с подробным описанием поддерживаемых версий SDK для Mapbox GL JS, Android SDK, iOS SDK и macOS SDK.

Рад слышать, что вы смогли устранить ошибку самостоятельно, и, надеюсь, эта ссылка на выражение будет полезна для решения подобных проблем в будущем!

...