Как я могу интерполировать на основе максимального значения из свойств Geo JSON. Использование краски Mapbox, цвета круга, выражений, управляемых данными - PullRequest
0 голосов
/ 09 апреля 2020

Я использую Mapbox GL в проекте React и хотел бы установить цвет круга точек данных на основе свойства из исходного гео JSON. Моя цель - закрасить зеленый круг для низких значений и красный для высоких значений. Все, что между ними, будет цветовым градиентом. Например, если мои точки данных находятся в диапазоне от 0 до 100. 0 должно быть зеленым, 100 - красным, а 50 - желтым.

Вот что я пробовал:

  paint: {
          'circle-radius': 10,
          'circle-color': [
            'let',
            'maxVal',
            ['max', ['get', 'P1_H']],
            [
              'interpolate',
              ['linear'],
              ['get', 'P1_H'],
              0,
              'green',
              ['var', 'maxVal'],
              'red'
            ]
          ]
        }

Но это дает мне ошибку:

Пары ввода / вывода для «интерполированных» выражений должны быть определены с использованием буквенных чисел c значений (не вычисляемые выражения) для входных значений.

Самая большая проблема для меня заключается в том, что я заранее не знаю, какое максимальное значение будет в исходных данных. Это может быть 20 или 80, я просто не знаю. Так что жесткое кодирование числа не работает для меня. Минимальное значение также может измениться, но сейчас я сосредоточен на максимальном значении. Поэтому мой вопрос заключается в том, как я могу интерполировать цвет круга на основе объекта, который имеет наибольшее значение в выбранном свойстве?

1 Ответ

0 голосов
/ 11 апреля 2020

Ваша первая проблема в том, что похоже, что вы используете var неправильно, и это портит ваш синтаксис. Кажется, вам это не нужно, так почему бы просто:

paint: {
      'circle-radius': 10,
      'circle-color': [
          'interpolate',
          ['linear'],
          ['get', 'P1_H'],
          0, 'green',
          MAXVAL,
          'red'
        ]
      ]
    }

Ваша вторая проблема заключается в том, что ['max'] не работает так, как вы этого хотите. Я думаю, вы надеетесь, что он скажет вам максимальное значение из всех значений в слое. Это не так. Он сообщает вам максимальное значение из значений, переданных ему в вызове функции. Так что вам придется вычислить то, что я назвал MAXVAL другим способом.

...