【问题标题】:Find layers in current map view with Leafletjs使用 Leafletjs 在当前地图视图中查找图层
【发布时间】:2013-04-02 02:44:37
【问题描述】:

我有一个应用程序,它使用 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 是否有任何内置函数/方法来提供有关当前地图视图中图层的信息?

【问题讨论】:

    标签: maps gis leaflet


    【解决方案1】:

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

    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 中的像素坐标。

    【讨论】:

    • 感谢 Kaitlin,但我真的希望将它保留在这个项目的客户端。
    猜你喜欢
    • 2012-11-18
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多