将Google地图上的一组点平均为一个较小的集合

时间:2009-08-31 02:50:29

标签: algorithm google-maps static google-maps-markers average

我正在使用Google Maps Static API在网页上展示一张小型Google地图。

我有一套15个坐标,我想把它们表示为地图上的点。

由于地图相当小(184 x 90像素)且Google地图网址上限为2000个字符,我无法代表地图上的每个点。

所以相反,我想生成一个小的坐标列表,代表大列表的平均值。

所以不是有15套,我最终会得到5套,其位置接近15的位置。假设有3个点与地图上的任何其他点非常接近。 ,这些点将被折叠成1点。

所以我想我正在寻找能够做到这一点的算法。

不要求任何人拼出每一步,但也许会指出我对这类事情的数学原理或通用函数的方向?

我确信在对图像进行像素化时,在图形软件中使用类似的功能。

(如果我解决了这个问题,我一定会发布我的结果。)

3 个答案:

答案 0 :(得分:3)

当您需要将N个对象聚类为已知数字K<时,我建议K-means clustering。群集中的N,这似乎是你的情况。请注意,一个群集最终可能会有一个异常点,而另一个群集可能会说5个点彼此非常接近:没关系,它会看起来更接近原始集合,而不是强迫每个集群中有3个点! - )

答案 1 :(得分:1)

如果您正在搜索此类函数/类,请查看MarkerClustererMarkerManager实用程序类。 MarkerClusterer与所描述的功能非常匹配,如this demo中所示。

答案 2 :(得分:0)

一般来说,我认为你需要搜索的区域是“矢量量化”。我有一本旧书名称矢量量化和信号压缩,由Allen Gersho和Robert M. Gray提供了一系列的例子。

从内存来看,Lloyd Iteration对于这类事情来说是一个很好的算法。它可以采用输入集并将其减少到固定大小的点集。基本上,在空间周围均匀或随机分布您的点。将每个输入映射到最近的量化点。然后计算误差(例如距离之和或均方根)。然后,对于每个输出点,将其设置为映射到它的集合的中心。这将移动点,甚至可能更改映射到它的集合。迭代执行此操作,直到从一次迭代到下一次迭代未检测到任何更改。

希望这有帮助。