如何比较两个不同的地图视图区域并找出它们之间的差异

时间:2012-02-03 03:38:38

标签: iphone xcode mkmapview region

嗨,大家好我正在开发Map-view Base应用程序。我几乎完成了地图视图的所有工作,但我无法比较两个不同的地图视图区域并找到新的地图视图区域。例如,如果用户拖动地图,我想找到该地区已经改变了多少。

4 个答案:

答案 0 :(得分:1)

部分答案。平等遵守MKCoordinateRegion

extension MKCoordinateRegion: Equatable
{
public static func == (lhs: MKCoordinateRegion, rhs: MKCoordinateRegion) -> Bool
{
    if lhs.center.latitude != rhs.center.latitude || lhs.center.longitude != rhs.center.longitude
    {
        return false
    }
    if lhs.span.latitudeDelta != rhs.span.latitudeDelta || lhs.span.longitudeDelta != rhs.span.longitudeDelta
    {
        return false
    }
    return true
}
}

答案 1 :(得分:0)

首先,您需要找到初始地图区域。假设你的地图名为mapView ...你可以先找到(在你的viewDidLoad中):

CLLocationCoordinate2D center = mapView.centerCoordinate;
CLLocationDegrees lat = center.latitude;
CLLocationDegrees lon = center.longitude;

MKCoordinateRegion region = mapView.region;
MKCoordinateSpan span = region.span;

//Assuming they have been declared as instance variables of type double
current_lat_low = lat - span.latitudeDelta / 2.0;
current_lat_high = lat + span.latitudeDelta / 2.0;
current_lon_low = lon - span.longitudeDelta / 2.0;
current_lon_high = lon + span.longitudeDelta / 2.0;

这将显示所显示地图的初始区域。然后在

- (void)mapView:(MKMapView*)mapView regionDidChangeAnimated:(BOOL)animated
{

    CLLocationCoordinate2D center = mapView.centerCoordinate;
    CLLocationDegrees lat = center.latitude;
    CLLocationDegrees lon = center.longitude;

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = region.span;

    double lat_low = lat - span.latitudeDelta / 2.0;
    double lat_high = lat + span.latitudeDelta / 2.0;
    double lon_low = lon - span.longitudeDelta / 2.0;
    double lon_high = lon + span.longitudeDelta / 2.0;

    //do any work comparing the initial lat/lons with the new values
    .....

    //set current lat/lon to be the new lat/lon after work is complete
    current_lat_low = lat_low;
    current_lat_high = lat_high;
    current_lon_low = lon_low;
    current_lon_high = lon_high;
}

答案 2 :(得分:0)

我想这真的取决于您要执行的操作。例如,您可能试图比较两个区域的中心之间的差异。但是,您提到了区域。

MKCoordinateRegion仅仅是一个矩形,除非缩放级别更改,否则其总面积(LxW units squared)相同。因此,我将带您到一个CLCircularRegion区域,该区域可以使用其半径与中心一起显示的半径来计算。

有很多方法可以从地图数据中获取圆形区域。您的问题并不清楚,您是否对区域中心之间的距离感兴趣,但是在找到差异时应该有很多SO答案。

如果其中一种情况与您要实现的目标不完全相同,请给我评论。

circle-areasource

答案 3 :(得分:-1)

此答案显示如何比较两个地图点。您可以在地图区域的中心使用此选项:link