首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Leafletjs在当前地图视图中查找图层

使用Leafletjs在当前地图视图中查找图层
EN

Stack Overflow用户
提问于 2013-04-02 02:44:37
回答 1查看 1.6K关注 0票数 0

我有一个应用程序,它在地图上显示最近的作业,并使用Leafletjs将其精确地显示出来。

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

代码语言:javascript
运行
复制
map.locate({'setView' : true, 'timeout' : 10000, maxZoom: 10});

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

我知道我可以侦听locate函数的成功,然后检查以下内容:

代码语言:javascript
运行
复制
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
  } 
}

但这是非常低效率的,特别是如果我有很多分数的话。

传单是否有内置的函数/方法来提供关于当前地图视图中各层的信息?

EN

回答 1

Stack Overflow用户

发布于 2013-04-02 07:00:47

如果您在服务器端做了一些事情,您可能可以足够快地进行计算。

  1. 在数据库中以某种方式存储在像素坐标中的位置-放大缩放级别(我使用缩放级别23)。我把这个坐标系叫做“巨大的坐标系”。然后,要获得某一特定位置点的平铺坐标,则是IIRC --一次按位移位--非常快,而且可以在SQL中完成。
  2. 将用户的位置转换成像素坐标,这样就可以放大水平。
  3. 在缩放级别上迭代。在该缩放级别上获取用户位置的平铺coord,然后执行一个SQL查询,该查询计数该块上的点数。如果> 0,停止。

您的SQL将类似于(对不起,我是在内存/思考中懒惰,而不是实际尝试)。

代码语言:javascript
运行
复制
SELECT count(*) WHERE (vcsX>>(zoom+8)==userX>>(zoom+8)) AND (vcsY>>(zoom+8)==userY>>(zoom+8));

其中vcsX和vcsY是大坐标系中的像素坐标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15755219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档