您如何测量地图移动了多远?

问题描述

| 在我的mapView:regionDidChangeAnimated方法中,我正在打电话以查找地图上的位置,但是我只想在地图移动了很多的情况下才打电话。 这是场景: 用户移动地图或地图加载 HTTP调用以查找位置 在地图上添加地点。 问题!用户单击打开标题气泡的注释,该气泡靠近边缘,因此可以移动地图。由于数据的加载与地图移动事件有关,因此标记消失了并重新添加了。 我应该如何观察跨度和变化的中心点? @Scott感谢您的visibleMapRect想法。到目前为止,这是我一直在努力的工作,仍然需要考虑放大和缩小。
MKMapRect newRect = _mapView.visibleMapRect;
MKMapRect oldRect = currentRect;

float leftBoundry = (newRect.origin.x-(newRect.size.width/4));
float rightBoundry = (newRect.origin.x+(newRect.size.width/4));    
float topBoundry = (newRect.origin.y-(newRect.size.height/4));
float bottomBoundry = (newRect.origin.y+(newRect.size.height/4));

NSLog(@\"Origin x %f,y %f\",oldRect.origin.x,oldRect.origin.y);
NSLog(@\"Boundries left %f,top %f,right %f,bottom %f\",leftBoundry,topBoundry,rightBoundry,bottomBoundry);    

if (oldRect.origin.x < leftBoundry || oldRect.origin.x > rightBoundry || oldRect.origin.y < topBoundry || oldRect.origin.y > bottomBoundry) {
    [self loadLocations];
    currentRect = newRect;
}
    

解决方法

        嗯听起来您好像要通过删除所有注释来刷新地图,然后(重新)显示落入ѭ1范围内的所有注释,并且解决此问题可能需要更细微的方法来更新地图。 一种方法可能是使用ѭ2来识别\“旧\”和\“新\”ѭ1之间的重叠,并且(如果有的话)排除此区域中的注释,使其不被删除或重新添加。或者,您可以计算在屏幕上滚动的L形区域,而只对该区域内的数据进行HTML调用。 或者,您可以仅检查地图的“旧”中心是否仍在ѭ1范围内,如果是,则可以任意确定地图的移动幅度是否很大。这可能会使您在屏幕上留下应该带有注释但没有注释的区域。 或者,最后,您可以只存储用户选择的注释的坐标,如果在地图移动后该坐标仍在屏幕上,请找到它并重新选择注释。