2010-03-10 75 views
5

mapkit如何確定1000英尺或1/2英里的距離?來自某個引腳的半徑或兩個引腳之間的距離。使用mapkit確定距離

例如,我將地圖居中在銷A上。銷B,C和D也位於地圖上與銷A不同的距離處.B和C距離A 1英里內,但D 1英里遠。我想知道B和C距離A半英里之內。我怎麼能計算出來?

+0

你能解釋一下你的問題比較多,所以我們可以理解的確切要求? – 2010-03-10 05:44:58

+0

我編輯了這個問題。讓我知道你是否需要更多信息。 – user230949 2010-03-10 07:06:18

回答

13

既然你已經說過兩個不同點是「引腳」,我會假設你正在使用MKPinAnnotationView(或其他一些註解視圖)。如果沒有,你將不得不以其他方式獲得位置。

如果你有一個指針爲這些位置上標註的對象,那麼你可以很容易地呼籲他們-coordinate,創建(使用-initWithLatitude:longitude:)從這些座標CLLocations,然後使用方法-getDistanceFrom來檢索米的距離。從那裏,這是一個很容易轉換爲英里。總而言之,代碼將是這個樣子:

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate]; 
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude]; 
CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate]; 
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude]; 
double distanceMeters = [pointALocation getDistanceFrom:pointBLocation]; 
double distanceMiles = (distanceMeters/1609.344); 

你會最終在英里的距離,並且可以從那裏進行比較。希望這可以幫助。

+0

好吧,但這樣我們就可以得到這兩點之間的直線距離...不是實際的一個如何找到這個實際的距離.... – AJPatel 2011-04-15 10:49:39

12

getDistanceFrom現在已棄用,所以對於任何想要這樣做的人來說,這裏有一個備選答案。

CLLocationCoordinate2D pointACoordinate = [pointAAnnotation coordinate]; 
CLLocation *pointALocation = [[CLLocation alloc] initWithLatitude:pointACoordinate.latitude longitude:pointACoordinate.longitude]; 

CLLocationCoordinate2D pointBCoordinate = [pointBAnnotation coordinate]; 
CLLocation *pointBLocation = [[CLLocation alloc] initWithLatitude:pointBCoordinate.latitude longitude:pointBCoordinate.longitude]; 

float distanceMeters = [pointALocation distanceFromLocation:pointBLocation]; 
float distanceMiles = (distanceMeters/1609.344); 

[pointALocation release]; 
[pointBLocation release]; 

如上,你可以使用float代替double,你可以將結果轉換爲int,如果你不需要的float像這樣的精度:

int distanceCastToInt = (int) [pointALocation distanceFromLocation:pointBLocation]; 

int是如果您想在註釋中給出對距離的粗略概念,如:

pointAAnnotation.title = @"Point A"; 
pointAAnnotation.subtitle = [NSString stringWithFormat: @"Distance: %im",distanceCastToInt]; 

字幕t例如,他的註釋將會讀作「距離:50米」。

0

這是斯威夫特3相當於給出答案:

let pointACoordinate = pointAAnnotation.coordinate 
let pointALocation = CLLocation(latitude: pointACoordinate.latitude, longitude: pointACoordinate.longitude) 
let pointBCoordinate = pointBAnnotation.coordinate 
let pointBLocation = CLLocation(latitude: pointBCoordinate.latitude, longitude: pointBCoordinate.longitude) 
let distanceMeters = pointALocation.distance(from: pointBLocation) 
let distanceMiles = (distanceMeters/1609.344)