0

我有一个应用程序,它使用 Leafletjs 在地图上显示最近的工作作为精确点。

使用 Leafletjs,当您想要缩放到用户检测到的位置时,您可以调用如下内容:

map.locate({'setView' : true, 'timeout' : 10000, maxZoom: 10});

但是,对于某些位置,缩放级别 10 不包含任何作业点,因此我想动态设置缩放,以便用户至少可以看到作业。

我知道我可以侦听定位功能的成功,然后检查以下内容:

map.on('locationfound', function() { 
  //for marker in markers{
  //is point within currently visible bounds
  //break on first positive
  //else, 
  //zoom up a level, repeat previous checks
  } 
}

但这效率很低,特别是如果我有大量积分。

Leaflet 是否有任何内置函数/方法来提供有关当前地图视图中图层的信息?

4

1 回答 1

0

如果你在服务器端做一些事情,你可能可以足够快地完成计算。

  1. 以某种方式放大的缩放级别(我使用缩放级别 23)将位置以像素坐标存储在数据库中。我称这个坐标系为“大坐标系”。然后,要获取特定位置的点的平铺坐标是 IIRC 一个位移位 - 非常快,并且您可以在 SQL 中执行此操作。
  2. 将用户的位置转换为以这种方式放大的像素坐标。
  3. 迭代缩放级别。在该缩放级别获取用户位置的图块坐标,然后执行 SQL 查询来计算该图块上的点数。如果 > 0,则停止。

您的 SQL 将类似于(对不起,我很懒惰,并且从记忆/思考中进行操作,而不是实际尝试)

SELECT count(*) WHERE (vcsX>>(zoom+8)==userX>>(zoom+8)) AND (vcsY>>(zoom+8)==userY>>(zoom+8));

其中 vcsX 和 vcsY 是 Vast Coordinate System 中的像素坐标。

于 2013-04-02T07:00:47.960 回答