2010-10-11 61 views
46

只是核心位置快速的問題之間的距離,我想計算兩個點之間的距離,代碼如下:distanceFromLocation - 計算兩點

-(void)locationChange:(CLLocation *)newLocation:(CLLocation *)oldLocation 
    { 

    // Configure the new event with information from the location. 
     CLLocationCoordinate2D newCoordinate = [newLocation coordinate]; 
     CLLocationCoordinate2D oldCoordinate = [oldLocation coordinate]; 

     CLLocationDistance kilometers = [newCoordinate distanceFromLocation:oldCoordinate]/1000; // Error ocurring here. 
     CLLocationDistance meters = [newCoordinate distanceFromLocation:oldCoordinate]; // Error ocurring here. 
} 

我得到的下面的錯誤最後兩行:

error: cannot convert to a pointer type

我一直在搜索谷歌,但找不到任何東西。

回答

109

試試這個:

CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation]; 

你正在嘗試使用的方法是CLLocation對象:)

+9

也一直在我心中「這種方法通過追蹤下面的地球曲率它們之間的線測量兩個位置之間的距離」蘋果文件。所以這不會通過公路給予距離。 – 2011-12-09 06:32:06

+1

如何通過道路找到距離? @deanWombourne – Dalvik 2015-02-05 12:58:38

+0

@AnkitSrivastava如何通過路徑找到距離 – Dalvik 2015-02-05 13:00:26

23

的距離2個CLLocations之間,而不是之間的座標計算的一種方法。

你需要使用這些座標使用下面的代碼行,以獲得相應的座標CLLocations

CLLocation *newLocation = [[CLLocation alloc] initWithCoordinate: newCoordinate altitude:1 horizontalAccuracy:1 verticalAccuracy:-1 timestamp:nil]; 

同樣,對於其它的座標然後你就可以使用計算這兩個位置之間的距離以下一行代碼

CLLocationDistance kilometers = [newLocation distanceFromLocation:oldLocation]/1000; 

希望這會對你有所幫助。

更新:雨燕3.0

let distanceKiloMeters = (newLocation.distance(from: oldLocation))/1000 
+0

謝謝!它的工作很好。 – Raja 2017-05-02 08:44:29

4

這裏的問題是,你調用一個對象method

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location; 
類CLLocation的

CLLocationCoordinate2D事實上是一個結構,它由兩個雙打:

typedef struct 
{ 
    CLLocationDegrees latitude; 
    CLLocationDegrees longitude; 
} CLLocationCoordinate2D; 

這樣做的正確方法是獲得一個CLLocation對象,並對其調用distanceFromLocation。就像這樣:

CLLocation* newLocation; 
CLLocation* oldLocation; 
CLLocationDistance distance = [newLocation distanceFromLocation:oldLocation]; 

當然,你首先需要初始化這兩個值(從CLLocationManager,例如)。

2

從優秀libary CoreLocation utitlities摘自:

- (CLLocationDistance) distanceFromCoordinate:(CLLocationCoordinate2D) fromCoord; 
{ 
    double earthRadius = 6371.01; // Earth's radius in Kilometers 

    // Get the difference between our two points then convert the difference into radians 
    double nDLat = (fromCoord.latitude - self.coordinate.latitude) * kDegreesToRadians; 
    double nDLon = (fromCoord.longitude - self.coordinate.longitude) * kDegreesToRadians; 

    double fromLat = self.coordinate.latitude * kDegreesToRadians; 
    double toLat = fromCoord.latitude * kDegreesToRadians; 

    double nA = pow (sin(nDLat/2), 2) + cos(fromLat) * cos(toLat) * pow (sin(nDLon/2), 2); 

    double nC = 2 * atan2(sqrt(nA), sqrt(1 - nA)); 
    double nD = earthRadius * nC; 

    return nD * 1000; // Return our calculated distance in meters 
} 
+1

如果有人很好奇,這是[haversine公式](http://en.wikipedia.org/wiki/Haversine_formula) – 2015-03-12 01:24:09

12

在斯威夫特

讓我們創建一個計算兩個地點之間距離的方法函數:

func distanceBetweenTwoLocations(source:CLLocation,destination:CLLocation) -> Double{ 

     var distanceMeters = source.distanceFromLocation(destination) 
     var distanceKM = distanceMeters/1000 
     let roundedTwoDigit = distanceKM.roundedTwoDigit 
     return roundedTwoDigit 

    } 

如果你想只有兩個數字:

extension Double{ 

    var roundedTwoDigit:Double{ 

     return Double(round(100*self)/100) 

     } 
    } 
+1

好的答案。只是一個小點。你應該用'let'替換var'iniside distanceBetweenTwoLocations func ;-) – 2016-07-12 09:13:42

5

如果您要處理2個CLLocationCoordinate2D值,那麼您可以使用它。

這是Xcode的雨燕2.1 7.1

import CoreLocation 

extension CLLocationCoordinate2D { 

    func distanceInMetersFrom(otherCoord : CLLocationCoordinate2D) -> CLLocationDistance { 
     let firstLoc = CLLocation(latitude: self.latitude, longitude: self.longitude) 
     let secondLoc = CLLocation(latitude: otherCoord.latitude, longitude: otherCoord.longitude) 
     return firstLoc.distanceFromLocation(secondLoc) 
    } 

} 
3
#import <CoreLocation/CoreLocation.h> 

CLLocation *locA = [[CLLocation alloc] initWithLatitude:"Value" longitude:"Value"]; 

CLLocation *locB = [[CLLocation alloc] initWithLatitude:"Value" longitude:"Value"]; 

CLLocationDistance distance = [locA distanceFromLocation:locB]; 
NSLog(@"distance:-%f",distance);//distance in Miter 
+0

需要對此解答的解釋 – 2016-09-29 05:28:08

+0

Hi Burhanuddin Rashid這不是Android開發代碼。它是「計算兩點之間的距離」的IOS開發代碼 – 2016-09-30 11:57:06

+0

天氣它的IOS,Android或任何其他技術領域無關緊要。思考是答案應該有一點點解釋與代碼...只是不復制粘貼代碼..請有禮貌的一些解釋 – 2016-09-30 12:05:49