我的java appengine上有成千上万的记录(lat,lng),我想使用Android Heatmap Utility为它生成热图。但是,原始数据集太大,无法通过移动网络传输。如何将这些记录预处理成足够小的东西,以便将其传输到设备?
答案 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;
}
答案 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
。
较小的“网格”应该会产生更准确的结果,但同样,这取决于数据的大小。