我正在编写一些代码,这些代码将标记聚集在Google地图上。聚类算法依赖于了解用户当前可见的经度和纬度,因为我将地图分成了n/map_pixels_width
x个n/map_pixels_height
正方形的网格,并且需要知道每个正方形有多少纬度/经度才能知道每个正方形标记点所属。
在正常情况下,如果地图没有包装,则相对容易使用getBounds()
Google Map对象进行计算,并进行计算以得出返回的东北点和南西点之间的纬度和纵向距离。我遇到问题的地方是地图被缩小到可以包裹整个地球> 1
时间的程度。例如,我可以缩小地图,以使整个地球“平铺” 5次,这相当于360 * 5 = 1800
纵向度,但是随后的调用getBounds()
不再提供有用的信息:
m.getBounds().getNorthEast().lat()
88.31833020528785
m.getBounds().getNorthEast().lng()
180
m.getBounds().getSouthWest().lat()
-88.5485785544835
m.getBounds().getSouthWest().lng()
-180
基本上,经度getBounds()
报告只是整个地球的最小值和最大值,而它并没有说明地球重复多少次。尽管Google Maps不会垂直平铺地图(如果缩小得足够远,它只会插入灰色文件空间),但从概念上讲,我遇到了同样的问题-我需要知道垂直区域将占用多少空间。
有没有办法获得可见的纵向度的总数?
因此,基于对另一个问题的答案,我找到了一种解决方案(解决方案)。基本上,Google Maps OverlayView类具有getProjection()
返回MapCanvasProjection对象的方法,而该对象又具有getWorldWidth()
返回当前缩放级别(以像素为单位)的世界宽度的方法。因此,解决问题的方法是:
pixel_width_of_map_element / world_width_in_pixels * 360
如果有一种方法可以在不创建虚拟覆盖的情况下执行此操作会更好,但是此方法似乎可行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句