你如何衡量地图的移动距离?

时间:2011-05-28 00:24:02

标签: objective-c ios ios4 mkmapview mapkit

在我的mapView:regionDidChangeAnimated方法中,我正在调用以在地图上查找地点,但我只想在地图移动了很多的情况下拨打电话。

这是一个场景:

  1. 用户移动地图或地图加载
  2. HTTP调用以获取查找位置
  3. 在地图中添加地点。
  4. 的问题!用户点击打开标题气泡的注释,它靠近边缘,因此它会移动地图。由于数据加载与地图移动事件相关联,因此标记会消失并重新添加。
  5. 我应该如何观察变化的跨度和中心点?

    @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 个答案:

答案 0 :(得分:1)

嗯。听起来您通过删除所有注释来刷新地图,然后(重新)显示visibleMapRect内的所有注释 - 并且解决此问题可能需要更细微的方法来更新地图。 / p>

一种方法可能是使用MKMapRectIntersection来识别“旧”和“新”visibleMapRect之间的重叠,并且(如果有的话)排除此区域中的注释被删除或重新添加。或者,您可以计算在屏幕上滚动的L形区域,并仅对该区域内的数据进行HTML调用。

或者您可以检查地图的“旧”中心是否仍然在visibleMapRect内,如果是这样,则任意判断地图是否移动了很多。这可能会让你在屏幕上显示应该有注释的区域但是没有。

或者,最后,您可以只存储用户选择的注释的坐标,如果地图移动后该坐标仍然在屏幕上,找到它并重新选择注释。