服务器端集群?

11

我已经拼命地寻找正确的解决方案,可以处理多达50000个标记(如果服务器能够处理更多),同时对我的服务器要求不高,我已经这样做了几天。


概念类似于这样:

enter image description here


  • 什么是聚类服务器的最佳解决方案/语言?我不需要大量的工作代码,但需要被推向正确的方向。
  • 如何“缓存”或“标记”已加载的集群/标记,以便在缩放/平移地图时不重新加载已加载的集群/标记?

理论:

正确的方法类似于以下内容:

  • 如果地图缩小并且有大量标记,请在服务器中处理聚类
  • 如果地图缩小到所有标记都无法适应视口,则仅聚类在视口中的标记 - 也在服务器端
  • 如果缩放程度变得非常大,视口中的标记数量变得很小(<500,例如),则通过JS在浏览器中聚类

我可以在服务器端使用的数据,并且我还可以通过JSON将其发送到浏览器:

  • 在请求时通过ajax发送到服务器的地图边界
  • 来自数据库查询的标记总数
  • 来自数据库查询的标记坐标
  • 目前我还没有意识到的其他重要/有用的东西
1个回答

2
我正在使用Google地图应用程序处理50,000到100,000个多边形。将这些多边形组织成一系列区域(逻辑单元、区域或类似)的可能性非常有用。使用已经显示的区域数组,通过ajax将其与绑定坐标一起发送到服务器,使我能够仅选择尚未显示的区域,从而减少了带宽分配和多边形渲染所需的时间。
对于其他策略,都是正确的。要进行更彻底的评估,应该在像SO这样的社交平台上进行更深入的技术实践。
对于服务器端语言,它们都可以,我个人现在正在使用PHP和Yii2框架以及PDO驱动程序来访问MySQL数据库。重要的是要使用一个环境,使得访问数据库非常容易和高效。
在这些条件下,当缩放级别允许时,使用良好的集群组织和将多边形显示为区域,可以使Google地图应用程序表现非常出色。
请注意,标记的出现比多边形更快,因为涉及的坐标数量和它们的图形特征更少。
对于像您这样的一般问题,在线上找到一个好的答案是困难的。对于区域,取决于您管理的区域的尺寸和标记的平均密度。对于不靠近极地的区域,可以使用坐标的一部分,或者如果您的地理点具有与区域相关的某些属性,则可以使用它们。您可以在网上找到公式,将缩放级别与区域的近似尺寸联系起来。还取决于如何收集标记。在我的情况下,在收集期间,我为此目的评估了一些属性。
对于检查标记或一组标记是否已经在地图中显示,我简单地使用向量,并使用这个向量(通过ajax)进行与服务器的动态交换。第一次向量为空,渐进地,向量包含元素以“知道”已经显示了什么。

你如何处理区域逻辑,以便在特定的缩放级别上已经加载的标记不会再次加载?这是我目前遇到的最大问题。另外,如何有效地检查标记是否在地图边界/视口内?这里有很多未解答的问题,并且网上几乎没有有效的解决方案。 - Solo
我已经更新了答案。希望这对你有用,否则你必须发布更多具体的问题。 - ScaisEdge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接