2012-05-07 71 views
0

我从来没有与MKMapView或CoreLocation工作过,所以我需要一些帮助。 我想获得我现在的位置(也许在mapView中显示此位置)并定期更新我的位置,并每次比较我的新旧位置以查看我是否已移动。比较GPS位置

是这样的可能吗?我怎样才能做到这一点?我已经实现了一个MKMapView。但我不知道我怎样才能得到我目前的位置,并作出比较,看看我是否正在移动...

感谢您的任何帮助!

回答

1

这很简单。将showsUserLocation设置为YES即可完成。 docs

为了使它更好一点,你可以居中每次位置变化MKMapView。请参阅here如何操作。

如果你想知道你是否搬家了,你应该将最近的位置存储在一个属性中,然后在委托方法mapView:didUpdateUserLocation:中检查新位置是否与上一个位置不同。

@property (assign, nonatomic) CLLocationCoordinate2D locationCoordinate; 
... 
@synthesize locationCoordinate = _locationCoordinate; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.mapView.delegate = self; 
} 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if (userLocation.coordinate.latitude != self.locationCoordinate.latitude || 
     userLocation.coordinate.longitude != self.locationCoordinate.longitude) { 
     // We moved 
    } 
    self.locationCoordinate = userLocation.coordinate; 
} 

实际上,我不知道,如果当userLocation已经改变了委托方法只调用。在这种情况下,您不必将该位置存储为属性并执行检查,只需实施委托方法并在那里执行您的操作。

+0

听起来很不错!谢谢,我现在会试一试。但是,是否也可以容忍一点偏差?例如100米或类似的东西?因为我无法想象gps系统的工作总是足够准确...... – Daniel05

+0

啊......但我认为经纬度是浮动的值,不是吗?也许是这样的比较可能? if((userLocation.coordinate.latitude - self.locationCoordinate)> = 12 &&(userLocation.coordinate.latitude - self.locationCoordinate)<= 12)) – Daniel05

+0

如果您记得使用经度和纬度self.locationCoordinate的属性。尽管如此,12似乎是一个巨大的价值。记住你正在比较地理位置而不是长度。如果您绝对需要以米为单位比较距离,则可以实施Haversine公式:http://en.wikipedia.org/wiki/Haversine_formula –