2012-05-07 101 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 –