2011-03-04 61 views
4

我正在使用CLLocation來計算距當前用戶位置和註釋的距離。不過,我只是想知道這是否正確。我目前使用iPhone模擬器,這和根據的MKMapView iPhone模擬器這裏位於:CLLocation distanceFromLocation

Lat: 0 Long: -1067024384 

註釋的位置是:

workingCoordinate.latitude = 40.763856; 
workingCoordinate.longitude = -73.973034; 

但是,如果你把在谷歌看看地圖,你會找出這些距離有多接近,但是根據CLLocation而分開。我使用下面的代碼來確定它們之間的距離。

CLLocation *loc = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude]; 
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:self.mapView.userLocation.coordinate.latitude longitude:self.mapView.userLocation.coordinate.longitude]; 
CLLocationDistance dist = [loc distanceFromLocation:loc2]; 
int distance = dist 
NSLog(@"%i", distance); 

NSLogged的距離是12769908.我認爲這是不正確的,因此我的代碼一定有問題。

如果有請你指出!

回答

9

你有兩個壞習慣。

  1. 在需要硬件審查狀態的情況下,您不應該依賴模擬器。特別是當你想要正確的測試
  2. 你正在處理類型不正確。所以你不能正確地檢查值。經度-1067024384如何?經度值是度數。這意味着根據經度的定義它的有效範圍是有限的-90.0〜+ 90.0。

您的經度值超出範圍。這意味着其中之一。您錯誤地打印了該值或者實際值錯誤。模擬器可能會打印錯誤的值。或者你用錯誤的方法打印了值。你必須嘗試:

真實設備上有真正的硬件審查測試。

如果以後壞的結果繼續,

審查你的應用程序代碼都。 尤其適用於打印,處理值。在每種情況下檢查您使用的是正確的類型和鑄件。因爲你可能在某處習慣於做過小車操作。

此外,我建議檢查所有這樣的中間值。

CLLocationCoordinate2D annocoord = annotation.coordinate; 
CLLocationCoordinate2D usercoord = self.mapView.userLocation.coordinate; 

NSLog(@"ANNO = %f, %f", annocoord.latitude, annocoord.longitude); 
NSLog(@"USER = %f, %f", usercoord.latitude, usercoord.longitude); 

CLLocation *loc = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude]; 
CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:self.mapView.userLocation.coordinate.latitude longitude:self.mapView.userLocation.coordinate.longitude]; 

NSLog(@"LOC = %f, %f", loc.coordinate.latitude, loc.coordinate.longitude); 
NSLog(@"LOC2 = %f, %f", loc2.coordinate.latitude, loc2.coordinate.longitude); 

CLLocationDistance dist = [loc distanceFromLocation:loc2]; 

NSLog(@"DIST: %f", dist); // Wrong formatting may show wrong value! 
+0

我在設備上遇到同樣的錯誤。這裏是您所提供的代碼的輸出:'ANNO = 37.331741,-122.030564 USER = -180.000000,-180.000000 LOC = 37.331741,LOC2 = -180.000000,-180.000000 LOC2 = -180.000000,-180.000000 DIST:12769908.162754' – 2011-03-05 00:32:04

+0

我仍然像以前那樣獲取隨機位置。 – 2011-03-05 01:19:31

+0

它對我有用! – WWJD 2014-04-14 12:49:33

1

嘗試@「%f」,不要這樣。

CLLocation.h

typedef double CLLocationDistance; 
+0

這沒有什麼區別。我已將int更改爲浮點型,並在控制檯中返回相同的結果。我也嘗試將其改爲雙倍。 – 2011-03-04 20:45:10

+0

12769908 = 12769公里和908米...... btw你的模擬器顯示非常奇怪的位置。 – bioffe 2011-03-04 20:48:22

+0

請問你如何解決這個問題?它怎麼能等於12769公里?但908米聽起來更真實 – 2011-03-04 20:50:01

相關問題