Google Maps SDK [Android]:如何获取/设置热图的 MaxIntensity?

Posted

技术标签:

【中文标题】Google Maps SDK [Android]:如何获取/设置热图的 MaxIntensity?【英文标题】:Google Maps SDK [Android] : How to get/set MaxIntensity for heatmap? 【发布时间】:2019-06-08 23:20:14 【问题描述】:

我目前正在编写一个热图应用程序,该应用程序将 Google Maps SDK 与动态数据结合使用。

热图强度基于梯度与数据的相对最大值的插值[*]

对于动态数据,我知道将要到达的值的上限和下限,但我不知道它们何时会出现。

例如,1 是可能的最低值,10 是可能的最高值。

我可以接收 1,1,2,4,5 的数据,然后下一个数据到达可以使数据 1,1,2,4,5,10。因为热图强度是相对的,这会导致渐变/热图改变颜色(因为它是相对的)。

对于 1,1,2,4,5 的数据实例。值 5 将表示为可能的最高强度,而我希望它与绝对可能的强度 (10) 相关。

我尝试在附近添加 LatLng 对作为数据的上限和下限,但这会影响数据的不透明度,因为它往往基于像素密度。并且谷歌地图的android SDK缺少MaxIntensity功能。

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

【问题讨论】:

似乎你必须改变梯度才能获得所需的效果,随着当前数据最大值接近 10 而更新。 【参考方案1】:

我是菜鸟,但也许会有所帮助。

我在数据列表中添加了一个 WeightedLatLng in (85,0) 与最大强度,在你的情况下为 10。所以这一点将不可见,其他点将基于它。

list.add(new WeightedLatLng(new LatLng(85,0),10));

它对我有用,但我不知道它是否通用。如果有更清洁的解决方案,我也很感兴趣。

编辑:我认为重要的是要注意,只有当集群强度小于您的最大强度时,此解决方案才会消除强度之间的相关性。

例如,如果您的最大强度为 10,并且您在同一位置有 3 个强度为 4 的点,则集群强度将为 3*4=12,并将接管最大强度。

要重新制定,如果有集群强度大于您的最大强度颜色将相对于更大的集群强度(您的 10 会发光)。否则它将按照您想要的方式显示。

【讨论】:

以上是关于Google Maps SDK [Android]:如何获取/设置热图的 MaxIntensity?的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps SDK [Android]:如何获取/设置热图的 MaxIntensity?

在 Google Maps Android SDK (v2) 中更改建筑物颜色

如何在 Google Maps Android SDK 的折线上添加形状

Android Google Maps SDK,如果越过北极或南极,则不填充圆圈

Google Maps SDK 错误在最后一小时开始弹出 [重复]

自定义图块覆盖在最新的适用于 Android 的 Google Maps SDK 中不起作用