Как установить цвет тепловой карты Mapbox по значению данных? - PullRequest
0 голосов
/ 25 июня 2019

Я хотел бы отобразить тепловую карту сканов Bluetooth, чтобы сканы с сильными сигналами выглядели зелеными, а сканы со слабым сигналом - красными.Я попытался поиграть со всеми свойствами тепловой карты Mapbox (вес, интенсивность, радиус, цвет, непрозрачность) и не смог добиться этого эффекта.Есть ли какой-нибудь совет, как это сделать?

Формат данных GeoJSON ("rssi" - уровень сигнала)

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -79.92068447220412,
                    43.259061411756505
                ]
            },
            "properties": {
                "name": "heatmap",
                "rssi": "55"
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    -79.92068446786702,
                    43.25906141184957
                ]
            },
            "properties": {
                "name": "heatmap",
                "rssi": "59"
            }
        },
        ...
    ]
}

Слой Heatmap пока что

map.addLayer({
        id: 'heatmap_heatmap_layer_id',
        type: 'heatmap',
        source: 'heatmap_source_id',
        maxzoom: 24,
        paint: {
          'heatmap-weight': {
            property: 'rssi',
            type: 'exponential',
            stops: [
              [0, 1],
              [120, 10]
            ]
          },
          'heatmap-intensity': {
            stops: [
              [currentZoom, 1],
              [24, 2]
            ]
          },
          'heatmap-color': [
            'interpolate',
            ['linear'],
            ['heatmap-density'],
            0, 'rgba(240,29,29,0)',
            0.2, 'rgba(198,0,12,1)', 
            0.4, 'rgba(32,43,222,1)', 
            0.7, 'rgba(1,1,1,1)', 
            1.0, 'rgba(200,144,153,1)'
          ],
          'heatmap-radius': {
            stops: [
              [currentZoom, 20],
              [middleZoom, 30]
            ]
          },
          'heatmap-opacity': {
            default: 1,
            stops: [
              [currentZoom, 1],
              [24, 1]
            ]
          },
        }
      });

1 Ответ

0 голосов
/ 26 июня 2019

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

Возможно, вам лучше представить точки в виде отдельных кругов, окрашенных RSSI.

...