如何可视化成千上万条记录的热图

时间:2015-02-16 14:52:32

标签: java android google-app-engine heatmap

我的java appengine上有成千上万的记录(lat,lng),我想使用Android Heatmap Utility为它生成热图。但是,原始数据集太大,无法通过移动网络传输。如何将这些记录预处理成足够小的东西,以便将其传输到设备?

2 个答案:

答案 0 :(得分:4)

您可以为您的应用使用示例数据集,而不是使用所有数据集,这样可以提供可靠的结果。< / p>

使用抽样算法:

服务器中的

运行采样算法会将大数据量减小到很小。 Spatial sampling涉及确定地理空间中有限数量的位置,以忠实地测量受依赖性和异质性影响的现象。


改组:

改组是随机重新排列元素数组的过程。例如,在进行扑克游戏之前,您可能会洗牌。一个好的混洗算法是无偏见的,每个排序都是同样可能的。

  

Fisher-Yates shuffle是一种最优的混洗算法。不只   它是否是无偏见的,但它以线性时间运行,使用恒定空间,并且   很容易实现。

function shuffle(array) {
  var n = array.length, t, i;
  while (n) {
    i = Math.random() * n-- | 0; // 0 ≤ i < n
    t = array[n];
    array[n] = array[i];
    array[i] = t;
  }
  return array;
}

详细信息:Visualizing Algorithms

答案 1 :(得分:2)

使用您提到的文档中所述的格式将LatLngs解析为一个(或多个)JSON文件。

[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]

然后使用AsyncTask在您的应用中检索它们并更新您的HeatMap,调用.setData(data);上的HeatmapTileProvider方法

编辑:

可能的解决方案:

在理论图上创建一个“网格”,无论你认为合适的大小是什么,然后平均所有标记的位置,这些标记适合网格中的每个单元格,并为该新标记分配最初在标记中有多少标记的权重。网格。 然后,您可以在HeatMap上使用WeightedLatLng.weightedData,而不是常规LatLng.data

较小的“网格”应该会产生更准确的结果,但同样,这取决于数据的大小。