Calculating Distance between two coordinates using CLLocation

后端 未结 4 1440
南方客
南方客 2021-01-13 12:03

I\'m using CLLocationDistance to get the distance between two points, but I\'m getting an error when passing my current location in it.

CLLocati         


        
相关标签:
4条回答
  • 2021-01-13 12:19

    Is swift 2.0 is in the following way:

    let userLocation:CLLocation = CLLocation(latitude: 11.11, longitude: 22.22)
    let priceLocation:CLLocation = CLLocation(latitude: 33.33, longitude: 44.44)
    let meters:CLLocationDistance = userLocation.distanceFromLocation(priceLocation)
    
    0 讨论(0)
  • 2021-01-13 12:25

    The error you're getting is actually:

    Initializing 'CLLocationDistance *' (aka 'double *') with an expression of incompatible type 'CLLocationDistance' (aka 'double')

    What it's saying is you're initializing itemDist (which you've declared as a CLLocationDistance *) to something that is returning a CLLocationDistance (notice no asterisk).

    CLLocationDistance is not an object.
    It is just a primitive type (specifically double -- see the Core Location Data Types Reference).


    So instead of declaring itemDist as a pointer to a CLLocationDistance, just declare it as a CLLocationDistance (no asterisk):

    CLLocationDistance itemDist = [itemLoc distanceFromLocation:current];
    

    You'll also need to update the NSLog to expect a double instead of an object otherwise it will crash at run-time:

    NSLog(@"Distance: %f", itemDist);
    
    0 讨论(0)
  • 2021-01-13 12:28

    To find distance in KM from two different Lat & Long

    let userLocation:CLLocation = CLLocation(latitude: 23.0320, longitude: 72.5250)
    let priceLocation:CLLocation = CLLocation(latitude: 23.0283, longitude: 72.5067)
    let distance = String(format: "%.2f km", userLocation.distanceFromLocation(priceLocation)/1000)
    print("Distance is KM is:: \(distance)")
    
    0 讨论(0)
  • 2021-01-13 12:30

    Below code will work for you in view load

    //************************** GEtting USer's latitude/ Longitude ********************
    
    
    
    
      self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            [self.locationManager startUpdatingLocation];
    //************************** GEtting USer's latitude/ Longitude ********************
    

    pragma mark - CLLocationManagerDelegate

    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        NSLog(@"didFailWithError: %@", error);
        UIAlertView *errorAlert = [[UIAlertView alloc]
                                   initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlert show];
    }
    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
        NSLog(@"didUpdateToLocation: %@", newLocation);
        CLLocation *currentLocation = newLocation;
        if (currentLocation != nil) {        
            CLLocation *locA = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.longitude longitude:currentLocation.coordinate.latitude];
            CLLocation *locB = [[CLLocation alloc] initWithLatitude:11.111111111111111 longitude:11.1111111111111111]; 
            User_Vanue_Distance = [locA distanceFromLocation:locB];
            NSLog(@"THIS IS THE DISTANCE BT TWO POINTS +++++++++++++++++++++%f",User_Vanue_Distance);  
        }
    }
    

    You need to put below keys in info.plist, in ios 8 to access location we need to put below keys in info.plist 1. NSLocationWhenInUseUsageDescription : Location required 2. NSLocationAlwaysUsageDescription Needed : Location Needed

    This will work for you but one thing you need to add is add a check for ios8. otherwise this will crash on ios 7

    // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
    
    
      if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [self.locationManager requestWhenInUseAuthorization];
        }
    

    Hope this will work for you. :)

    0 讨论(0)
提交回复
热议问题