Mysql/VB.净负荷地图标记彼此不在一定范围内

Mysql/VB.Net load map markers not in certain range from eachoter

我有一个包含世界上大量城市的数据库。每个都有一个坐标 (lat,lng) 和一个流行指数。

现在我想在地图上显示它们,但我不想创建集群。

例如,如果我在地图上有一个地点,其中 5 个城市彼此相距 50 公里以内,我只想显示人气最高的城市。当用户放大时,我想显示其他的。

想要的结果就像 Google 地图上的城市。当你缩小时,你只能看到一些重要的城市,当你放大时,其他城市就会出现。

我怎样才能做到这一点?

到目前为止的代码:

Mysql:

SELECT * FROM cities 
WHERE lat > '[Boundingbox min latitude]'
AND  lat < '[Boundingbox max latitude]'
AND lng > '[Boundingbox min longitude]'
AND lng < '[Boundingbox max longitude]'
ORDER BY populairity DESC LIMIT 100;

并将结果添加到地图中。我想我需要遍历 .NET 中的城市并将每个城市相互匹配。但这将是一个循环的地狱。

这是一个可能的策略

  1. 确定当前缩放级别命名地点之间的最小距离。
  2. 然后创建当前地图 window 中的地点列表,按受欢迎程度排序。
  3. 为最受欢迎的地方创建标签。
  4. 检查下一个最受欢迎的地点是否至少与您已创建的所有标签的最小距离,如果是,则创建它。
  5. 继续查看地点列表。

您创建的标签越多,下一个最受欢迎的地点与所有其他标签至少保持最小距离的可能性就越小。为了节省时间,您可能希望对要创建的标签数量设置任意限制(可能基于地图的大小 window),并在创建了那么多标签后停止处理地点列表.