0
我从来没有与MKMapView或CoreLocation工作过,所以我需要一些帮助。 我想获得我现在的位置(也许在mapView中显示此位置)并定期更新我的位置,并每次比较我的新旧位置以查看我是否已移动。比较GPS位置
是这样的可能吗?我怎样才能做到这一点?我已经实现了一个MKMapView。但我不知道我怎样才能得到我目前的位置,并作出比较,看看我是否正在移动...
感谢您的任何帮助!
我从来没有与MKMapView或CoreLocation工作过,所以我需要一些帮助。 我想获得我现在的位置(也许在mapView中显示此位置)并定期更新我的位置,并每次比较我的新旧位置以查看我是否已移动。比较GPS位置
是这样的可能吗?我怎样才能做到这一点?我已经实现了一个MKMapView。但我不知道我怎样才能得到我目前的位置,并作出比较,看看我是否正在移动...
感谢您的任何帮助!
这很简单。将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
已经改变了委托方法只调用。在这种情况下,您不必将该位置存储为属性并执行检查,只需实施委托方法并在那里执行您的操作。
听起来很不错!谢谢,我现在会试一试。但是,是否也可以容忍一点偏差?例如100米或类似的东西?因为我无法想象gps系统的工作总是足够准确...... – Daniel05
啊......但我认为经纬度是浮动的值,不是吗?也许是这样的比较可能? if((userLocation.coordinate.latitude - self.locationCoordinate)> = 12 &&(userLocation.coordinate.latitude - self.locationCoordinate)<= 12)) – Daniel05
如果您记得使用经度和纬度self.locationCoordinate的属性。尽管如此,12似乎是一个巨大的价值。记住你正在比较地理位置而不是长度。如果您绝对需要以米为单位比较距离,则可以实施Haversine公式:http://en.wikipedia.org/wiki/Haversine_formula –