为热图聚类地理数据

时间:2012-02-02 19:54:02

标签: algorithm google-maps geocoding cluster-analysis heatmap

我有一个包含地理位置的推文列表。 它们将显示在透明放置在Google Map上的热图图像中。 诀窍是找到彼此相邻并显示的位置组 它们是基于簇大小的单个热图圆/某个热/颜色的图形。

是否有一些图书馆准备好将地图中的位置分组到群集中? 或者我最好决定我的聚类参数并构建一个自定义算法?

6 个答案:

答案 0 :(得分:2)

K means clustering是一种常用于此类问题的技术

基本理念是:

  

给定一个k的初始集合意味着m 1 ,...,m k ,   算法通过两个步骤之间的交替进行:

     
      
  1. 分配步骤:将每个观察值分配给具有最接近平均值的群集

  2.   
  3. 更新步骤:计算新方法作为群集中观测值的质心。

  4.   

Here是php的一些示例代码。

答案 1 :(得分:2)

我不知道是否有“图书馆准备将地图中的位置分组为群集”,也许是,也许不是。无论如何,我不建议你构建自定义聚类算法,因为已经为此实现了很多库。

@recursive发送了一个带有k-means(一种聚类算法)的php代码的链接。还有一个巨大的Java库,其他技术(Java-ML)也包括k-means,层次聚类,k-means ++(选择质心)等。

最后,我想告诉你,聚类是一种非监督算法,这意味着有效地,它会为你提供一组包含数据的聚类,但乍一看你没有知道算法如何聚类数据。我的意思是,它可以根据您的需要按位置进行聚类,但也可以通过您不需要的其他特性进行聚类,因此只需使用算法参数并调整您的解决方案即可。

我对你可以找到这个问题的最终解决方案感兴趣:)也许你可以在结束这个项目时在评论中分享它!

答案 2 :(得分:1)

heatmap.js是用于渲染热图的HTML5库,并提供了在Google Maps API之上执行此操作的示例。它非常强大,但仅适用于支持canvas的浏览器:

  

Firefox 3.6+,Chrome目前支持heatmap.js库   10,Safari 5,Opera 11和IE 9 +。

答案 3 :(得分:0)

你可以在phpclasses.org上试试我的php类hilbert曲线。这是一个怪物曲线,并将2d复杂度降低到1d复杂度。我使用四键来寻址坐标,它有21个缩放级别,如谷歌地图。

答案 4 :(得分:0)

这不是一个集群问题。通过创建群集,头部地图不起作用。相反,他们用高斯内核卷积数据。如果您不熟悉图像处理,请将其视为使用普通或高斯“图章”并将其标记在每个点上。由于印章的叠加将相互叠加,因此高密度区域将具有更高的值。

答案 5 :(得分:0)

热图的一个简单替代方法是将lat / long四舍五入到一些小数并按其分组。

请参阅this explanation有关纬度/长小数精度的信息。

  • 1小数 - 11km
  • 2位小数 - 1.1km
  • 3位小数 - 110m

对于包含大量数据的低缩放级别热图,舍入到1或2位小数并按结果对结果进行分组应该可以解决问题。