2

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

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

由于地图相当小(184 x 90 像素)和谷歌地图 URL 上的 2000 个字符的上限,我无法代表地图上的每个点。

因此,我想生成一个小的坐标列表,代表大列表的平均值。

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

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

不要求任何人详细说明每一步,但也许会为我指出这种事情的数学原理或通用函数的方向?

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

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

4

3 回答 3

3

当您需要将 N 个对象聚类到已知数量的 K < N 个聚类中时,我建议使用K-means 聚类,这似乎是您的情况。请注意,一个集群可能会以一个离群点结束,而另一个集群可能会有 5 个点彼此非常接近:没关系,它看起来更接近您的原始集,而不是您强制每个集群恰好 3 个点!-)

于 2009-08-31T03:04:03.210 回答
1

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

于 2009-08-31T08:21:01.480 回答
0

一般来说,我认为您需要搜索的区域是“矢量量化”。我有一本由 Allen Gersho 和 Robert M. Gray 撰写的名为 Vector Quantization and Signal Compression 的旧书,其中提供了许多示例。

从记忆中,劳埃德迭代是处理这类事情的好算法。它可以获取输入集并将其减少为固定大小的点集。基本上,将您的点均匀或随机分布在空间周围。将每个输入映射到最近的量化点。然后计算误差(例如距离总和或均方根)。然后,对于每个输出点,将其设置为映射到它的集合的中心。这将移动该点,甚至可能更改映射到它的集合。反复执行此操作,直到从一个迭代到下一个迭代没有检测到任何变化。

希望这可以帮助。

于 2009-08-31T03:11:04.087 回答