根据缩放级别的坐标服务器端集群

3 投票
2 回答
2612 浏览
提问于 2025-04-15 14:39

感谢这个回答,我找到了一种临时解决我问题的方法。

不过,现在我有6000个点的列表,而且每天还在增加,这让处理变得越来越慢。

我不能使用第三方服务,所以我需要自己想办法解决这个问题。

以下是我的需求:

  1. 坐标的聚类需要在地图的任何缩放级别下都能正常工作。

  2. 所有的聚类结果需要被缓存。

  3. 理想情况下,如果添加一个新点,就不需要对所有点进行聚类(计算距离)。

到目前为止,我已经实现了四叉树,它可以返回我地图的四个边界,并返回在可视区域内的坐标。

我需要的,虽然我知道这并不简单,是从数据库(postgres)中返回的点的聚类。

2 个回答

2

我不明白为什么你需要实时“聚合”。你可以在每个缩放级别上总结一下,选择一个你觉得合适的分辨率。

简单来说,你可以有一个结构,包含X、Y和链接数量。当有人添加一个链接时,你就把真实的位置插入进去(最大缩放级别,或者其他的),然后从那里开始向上处理。

最终,如果你有10个缩放级别,你会得到10组不同的坐标——每个缩放级别对应一组。

这个计算非常简单,而且你只需要做一次。

2

我现在正在做动态的服务器端聚类,大约有2000个标记,但即使到达20000个也能运行得很快。你可以在这里看到我算法的讨论:

地图聚类算法

每当用户移动地图时,我会把缩放级别和视图的边界发送给服务器,服务器会把可见的标记进行聚类,然后再把结果发回给客户端。

我没有缓存这些聚类,因为标记可以动态地进行过滤和搜索——不过如果提前聚类的话,速度会快很多!

撰写回答