MapBox GL - Render Geo Json Тематически на основе данных в клиенте - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть слой geo Json, показывающий штаты США, только с идентификатором и без других свойств.

У меня также есть локальный массив данных в памяти с множеством свойств об этих состояниях: вещи как население, акры сельхозугодий, ставка налога с продаж и т. д. 1011 *. Одним из свойств является идентификатор, который находится в слое geo Json. Так что я должен иметь возможность присоединиться к локальному массиву с функциями в слое geo Json.

Я хотел бы иметь возможность тематически стилизовать состояния на основе любого из этих свойств, предоставляя пользователю возможность выбрать свойство. Все примеры, которые я видел для стиля c стилей слоев Geo Json в MapBox, требуют (1), что свойства существуют в самом geo Json, и (2), что вы заранее определяете свойства и правила стиля (Я не уверен, есть ли способ изменить это позже).

В других библиотеках карт, я думаю, включая Leaflet, вы можете определить функцию рисования и передать функцию. Есть ли что-то подобное в MapBox GL?

Спасибо.

1 Ответ

1 голос
/ 12 апреля 2020

Вы можете упростить свою жизнь, объединив данные geo json с вашими данными "свойств" в единую коллекцию объектов geo json.

После этого вы можете использовать map.setPaintProperty(layerId, ...) для обновления стиля слоя в зависимости от взаимодействия с пользователем: https://docs.mapbox.com/mapbox-gl-js/api/#map # setpaintproperty

По состоянию на документацию:

value (any) Значение свойства рисования, которое нужно установить. Должен иметь тип, соответствующий этому свойству, как определено в спецификации стиля Mapbox.

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

Это может быть немного надуманным, но при условии, что вы называете «темой» это просто набор свойств краски и значений, которые вы получили в результате взаимодействия с пользователем. Вы можете просто закодировать свою «тему» ​​в качестве допустимого стиля mapbox и использовать map.setStyle(...) для эффективного изменения нескольких свойств одним вызовом. Remeber setStyle() может получать как URL-адрес стиля, так и полный объект стиля.

...