我正在编写一些在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()
报告只是整个地球的最小值和最大值,它没有说明地球重复的次数。虽然谷歌地图没有垂直平铺地图(如果缩小得足够只插入灰色的文件空间),我在概念上也存在相同的问题 - 我需要知道垂直区域将占用多少空间。
有没有办法获得可见纵向度数的总数?
答案 0 :(得分:1)
因此基于this answer的另一个问题,我找到了一种(hackish)方法来解决这个问题。基本上,Google地图OverlayView类使用getProjection()
方法返回MapCanvasProjection对象,该对象又有getWorldWidth()
方法,该方法返回当前缩放的世界宽度像素级别。那么解决问题的方法是:
pixel_width_of_map_element / world_width_in_pixels * 360
如果有一种方法可以在不创建虚拟叠加的情况下执行此操作会更好,但此方法似乎有效。