distanceFromLocation - Calculate distance between two points

后端 未结 7 970
礼貌的吻别
礼貌的吻别 2020-11-29 21:27

Just a quick question on Core Location, I\'m trying to calculate the distance between two points, code is below:

    -(void)locationChange:(CLLocation *)newL         


        
相关标签:
7条回答
  • 2020-11-29 21:27
    #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 讨论(0)
  • 2020-11-29 21:28

    The distance is calculated between 2 CLLocations and not between to coordinates.

    You need to use these coordinates to get the CLLocations for the respective coordinates using the following line of code

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

    Similarly for the other coordinate and then you can calculate the distance between these two locations using the following line of code

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

    Hope this will help you.

    Update: Swift 3.0

    let distanceKiloMeters = (newLocation.distance(from: oldLocation))/1000
    
    0 讨论(0)
  • 2020-11-29 21:30

    Try this instead:

    CLLocationDistance meters = [newLocation distanceFromLocation:oldLocation];
    

    The method you're trying to use is a method on a CLLocation object :)

    0 讨论(0)
  • 2020-11-29 21:34

    The problem here is that you're calling an object method:

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

    of class CLLocation.

    CLLocationCoordinate2D is in fact a structure, consisting of two doubles:

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

    Proper way of doing this is to get a CLLocation object and call distanceFromLocation on it. Like this:

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

    Of course you first need to initialize both of those values (from CLLocationManager, for instance).

    0 讨论(0)
  • 2020-11-29 21:35

    If you're going to do with 2 CLLocationCoordinate2D values then you can use this.

    This is Swift 2.1 on Xcode 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)
        }
    
    }
    
    0 讨论(0)
  • 2020-11-29 21:49

    In Swift

    Let's create a method function that calculates distance between two locations:

     func distanceBetweenTwoLocations(source:CLLocation,destination:CLLocation) -> Double{
    
            var distanceMeters = source.distanceFromLocation(destination)
            var distanceKM = distanceMeters / 1000
            let roundedTwoDigit = distanceKM.roundedTwoDigit
            return roundedTwoDigit
    
        }
    

    If you want only two digits:

    extension Double{
    
        var roundedTwoDigit:Double{
    
            return Double(round(100*self)/100)
    
            }
        }
    
    0 讨论(0)
提交回复
热议问题