你如何测量地图移动了多远?
Posted
技术标签:
【中文标题】你如何测量地图移动了多远?【英文标题】:How do you measure how far the map moved? 【发布时间】:2011-05-28 00:24:01 【问题描述】:在我的 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】:嗯。听起来您正在通过删除所有注释来刷新地图,然后(重新)显示属于 visibleMapRect
的所有注释 - 解决此问题可能需要更细微的方法来更新地图。
一种方法可能是使用MKMapRectIntersection
来识别您的“旧”和“新”visibleMapRect
s 之间的重叠,并且(如果有)排除该区域中的注释,使其不被删除或重新添加.或者,您可以计算在屏幕上滚动的 L 形区域,然后仅对该区域内的数据进行 html 调用。
或者您可以检查地图的“旧”中心是否仍在visibleMapRect
内,如果是,则任意确定地图没有移动很多。这可能会在屏幕上留下应该有注释但没有注释的区域。
或者,最后,您可以只存储用户选择的注释的坐标,如果地图移动后该坐标仍在屏幕上,找到它并重新选择注释。
【讨论】:
以上是关于你如何测量地图移动了多远?的主要内容,如果未能解决你的问题,请参考以下文章