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

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 来识别您的“旧”和“新”visibleMapRects 之间的重叠,并且(如果有)排除该区域中的注释,使其不被删除或重新添加.或者,您可以计算在屏幕上滚动的 L 形区域,然后仅对该区域内的数据进行 html 调用。

或者您可以检查地图的“旧”中心是否仍在visibleMapRect 内,如果是,则任意确定地图没有移动很多。这可能会在屏幕上留下应该有注释但没有注释的区域。

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

【讨论】:

以上是关于你如何测量地图移动了多远?的主要内容,如果未能解决你的问题,请参考以下文章

百度地图如何测量距离?

谷歌地图怎样测量城市面积

百度地图如何测量两个地点的距离

怎么在地图上查找两地间距离

如何计算百度地图上两点的距离

如何测定地理坐标