当世界包装-Javascript v3 API时,获取谷歌地图上显示的纬度/经度总度

时间:2014-01-17 04:21:24

标签: google-maps google-maps-api-3

我正在编写一些在Google地图上聚类标记的代码。聚类算法依赖于知道用户当前可以看到多少度的纬度和经度,因为我将地图分成n/map_pixels_width x n/map_pixels_height正方形的网格,并且需要知道纬度的多少度/ lon在每个方块中以知道每个标记点属于哪个方格。

在地图未换行的正常情况下,使用Google地图对象上的getBounds()进行计算相对容易,并进行计算以计算返回的东北与Sout-之间的纬度和纵向距离西点。在我遇到问题的地方,地图缩小到包裹整个地球> 1次的程度。例如,我可以缩小地图,使整个地球“平铺”5次,相当于纵向度360 * 5 = 1800,然后调用getBounds()不再提供有用的信息:< / p>

m.getBounds().getNorthEast().lat()
88.31833020528785
m.getBounds().getNorthEast().lng()
180
m.getBounds().getSouthWest().lat()
-88.5485785544835
m.getBounds().getSouthWest().lng()
-180

基本上,经度getBounds()报告只是整个地球的最小值和最大值,它没有说明地球重复的次数。虽然谷歌地图没有垂直平铺地图(如果缩小得足够只插入灰色的文件空间),我在概念上也存在相同的问题 - 我需要知道垂直区域将占用多少空间。

有没有办法获得可见纵向度数的总数?

1 个答案:

答案 0 :(得分:1)

因此基于this answer的另一个问题,我找到了一种(hackish)方法来解决这个问题。基本上,Google地图OverlayView类使用getProjection()方法返回MapCanvasProjection对象,该对象又有getWorldWidth()方法,该方法返回当前缩放的世界宽度像素级别。那么解决问题的方法是:

  1. 将虚拟OverlayView添加到实际不显示叠加层的地图上。
  2. 获取叠加层的投影。
  3. 从投影中获取世界宽度。
  4. 将可见纵向度数计算为pixel_width_of_map_element / world_width_in_pixels * 360
  5. 如果有一种方法可以在不创建虚拟叠加的情况下执行此操作会更好,但此方法似乎有效。