在使用百度地图显示点位的时候,为了能够让用户体验更好,我允许了地图可手势旋转。那么问题来了,在旋转的时候会发现请求的数据点位会先减少,当旋转90度以后剩下的寥寥无几直至消失。对于同一个位置 我们只是旋转了一下地图,点位数目就会不同,这显然不是我想要的结果,我想要的结果是在旋转的时候中间的数据点不变,屏幕周围的点随着地图的显示而显示。那么为什么会出现这种情况呢?现在我来分析一下。
我们请求数据的时候是获取的屏幕左上角和右下角的经纬度,百度地图上有这个api,所以原本认为很简单的问题。看原来是这种状态
现在让我们来向右旋转一下,慢慢旋转 就会出现如下情况
这时候你会发现经度成为了右上角和左下角一条线,当你继续旋转的时候一定会出现左上角和右下角的纬度成为一条线。这时候你再通过左上角和右下角的经纬度请求数据,锁请求踹的数据就是在一条线上,这时候就开始出现数据请求不到,点位添加不上的情况, 也就是点位消失了。左旋转也是同理,不再叙述。现在来说下解决方法。
在旋转地图的时候你会发现,手机屏幕的边缘会在地图上画一个圆形(需要想象 用到几何了哦),其半径就是手机屏幕的对角线一半。不管你怎么旋转,只要地图中心店在手机的位置不变,你的手机屏幕所显示的地图一定在这个圆内。如下所示
但是我们没有办法获取这个圆的区域的某个角的经纬度,怎么办呢?继续几何,在圆的外面再来一个正方形,这个正方形的边长就是这个圆的直径,也就是手机屏幕的对角线长。如下图
这时候我们再获取对角的经纬度就好获取了,当旋转的时候 我们就在地图代理的方法
中通过获取屏幕中心点经纬度和屏幕最大经纬度跨度的方式得到最外部正方形的左上角和右下角的经纬度。
在对比经度跨度和纬度跨度时候一定要取绝对值。具体代码如上。这个时候你获取的点位范围会大一点,再通过只显示屏幕范围内的点的方式把多于的点位过滤掉,这样就完成了。不管你怎么旋转,地图上的点位都会正常显示了。完毕,如果你觉着好,就给我点赞