Объедините более одного стиля на карте - PullRequest
1 голос
/ 14 января 2020

Вот что я пытаюсь достичь: я хочу объединить несколько стилей (карту, созданную пользователем в Mapbox Studio) в одну карту.

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

Что я пробовал

  1. Я добавляю первый стиль с помощью setStyle
  2. Сделаем запрос к API стилей и получаю второй стиль json
  3. Перебираем источники второго Стиль и добавить их на карту, используя addSource (переименование, чтобы избежать конфликта)
  4. Переберите слои второго стиля и добавьте их на карту usgin addLayer

Это сработало, я получал ошибки только со слоями, которые используют «текстовое поле» и требуют, чтобы стиль имел атрибут «glyphs».

Затем я попытался динамически изменить атрибут «glyphs» в Стиль карты, но это не сработало. Ошибка сохраняется.

Error: "layers.state-label.layout.text-field: use of "text-field" requires a style "glyphs" property"

Почему вместо этого я не добавляю наборы плиток?

Поскольку я хочу получить все параметры макета присутствует в стиле.

Почему я не открыл вопрос о том, как динамически изменять глифы?

Хотя это конкретная проблема, с которой я сталкиваюсь правильно Теперь я был готов получить отзывы об общем подходе.

Это что-то выполнимое? Должен ли я считать объединение нескольких стилей на карте хорошей идеей? Есть ли лучший способ сделать это?

Заранее спасибо.

Лев ,,

1 Ответ

0 голосов
/ 15 января 2020

Ваш подход звучит в целом хорошо, с парой основных замечаний, которые вы обнаружили:

  1. Стиль может иметь только один глиф шрифта
  2. Стиль может иметь только один значок спрайта

Если оба размещены под одной учетной записью пользователя в Studio, я думаю, что это может работать, по крайней мере, для шрифтов. Но, судя по твоей ошибке, дело не в этом.

Так что ты можешь сделать? Вам придется выбрать глиф шрифта из одного стиля, а затем обновить каждый слой в другом стиле, чтобы использовать шрифт, представленный в этом стиле. Я думаю, что это будет трудно сделать в общем случае (я не знаю, как узнать, какие шрифты присутствуют в глифе), поэтому наиболее безопасным вариантом может быть создание нового глифа шрифта и переназначение каждого шрифта в него.

FWIW, эта общая проблема уже отслежена здесь: https://github.com/mapbox/mapbox-gl-js/issues/4225

...