В настоящее время я пишу приложение для тепловой карты, которое использует Google Maps SDK с динамическими данными.
Интенсивность тепловой карты основана на интерполяции градиента с относительным максимумом данных [*]
Для динамических данных я знаю верхнюю и нижнюю границы значений, которые будут поступать, но я не знаю, когда они появятся.
Например, 1 - это минимально возможное значение, а 10 - максимально возможное значение.
Я мог бы получить данные как {1,1,2,4,5}, а затем при следующем поступлении данных можно было бы получить данные {1,1,2,4,5,10}. Поскольку интенсивность тепловой карты является относительной, это приводит к изменению цвета градиента / тепловой карты (поскольку она является относительной).
Для экземпляра данных {1,1,2,4,5}. Значение 5 будет представлено как максимально возможная интенсивность, тогда как я хочу, чтобы это было относительно абсолютной возможной интенсивности (10).
Я пытался добавить пары LatLng поблизости для верхних и нижних границ данных, но это влияет на непрозрачность данных, так как они, как правило, основаны на плотности пикселей. А функции MaxIntensity не хватает в Android SDK Google Maps.
List<WeightedLatLng> list = new ArrayList<WeightedLatLng>();
// ... do stuff to add all the formatted data to list
// 10 represents total maximum, add this onto end of data list for scaling
list.add(new WeightedLatLng( new LatLng(0,0),10));
mProvider = new HeatmapTileProvider.Builder().weightedData(list).gradient(gradient).build();
// Add a tile overlay to the map, using the heat map tile provider.
overlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
[*] https://developers.google.com/maps/documentation/android-sdk/utility/heatmap
[**] https://developers.google.com/maps/documentation/javascript/heatmaplayer