Marco
Marco

Reputation: 461

CLLocationCoordinate2D to CLLocation

I have the following loop in my viewDidLoad:

for(int i=1; i<[eventsArray count]; i++) {
    NSArray *componentsArray = [[eventsArray objectAtIndex:i] componentsSeparatedByString:@","];
    if([componentsArray count] >=6) {
        Koordinate *coord = [[Koordinate alloc] init];
        coord.latitude = [[componentsArray objectAtIndex:0] floatValue];
        coord.longtitude = [[componentsArray objectAtIndex:1] floatValue];
        coord.magnitude = [[componentsArray objectAtIndex:2] floatValue];
        coord.depth = [[componentsArray objectAtIndex:3] floatValue];
        coord.title = [componentsArray objectAtIndex:4];
        coord.strasse = [componentsArray objectAtIndex:5];
        coord.herkunft = [componentsArray objectAtIndex:6];
        coord.telefon = [componentsArray objectAtIndex:7];
        coord.internet = [componentsArray objectAtIndex:8];
        [eventPoints addObject:coord];
    }
}

coord is of Type CLLocationCoordinate2D

How can I use coord in the following method? I need this to get distance between two coords:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {

}

Upvotes: 27

Views: 42699

Answers (6)

pkamb
pkamb

Reputation: 34983

Swift extension for if you're doing CLLocationCoordinate2D to CLLocation conversions a lot, with a built-in check for validity.

Strange that there is not a convenience initializer built in to Core Location.

extension CLLocation {
    convenience init?(_ coordinate2D: CLLocationCoordinate2D) {
        guard CLLocationCoordinate2DIsValid(coordinate2D) else { return nil }
        self.init(latitude: coordinate2D.latitude, longitude: coordinate2D.longitude)
    }
}

use like so:

let location2D = CLLocationCoordinate2D(latitude: 37.3346, longitude: -122.0090)
let location = CLLocation(location2D)

Upvotes: 0

AlexVogel
AlexVogel

Reputation: 10621

CLLocation has an init method that takes a latitude and longitude:

-(id)initWithLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude

Then use the following method to get the distance between two CLLocation objects:

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

Upvotes: 43

Christopher Wade Cantley
Christopher Wade Cantley

Reputation: 7232

For the Swift crowd,

I have a method called "fetchCafesArroundLocation" which is refreshed after the map gets moved around. This is how I handled getting the Lat and Lon into CLLocation from CLLocationCoordiate2d and then passed the CLLocation variable to the handling method.

func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool){

    var centre = mapView.centerCoordinate as CLLocationCoordinate2D

    var getLat: CLLocationDegrees = centre.latitude
    var getLon: CLLocationDegrees = centre.longitude


    var getMovedMapCenter: CLLocation =  CLLocation(latitude: getLat, longitude: getLon)

    self.lastLocation = getMovedMapCenter
    self.fetchCafesAroundLocation(getMovedMapCenter)

}

Upvotes: 12

GeneCode
GeneCode

Reputation: 7588

If coord is a CCLocationCoordinate2D, then you can assign the newLocation from the

**- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation**

delegate by getting both of the latitude and longitude properties of coordinate property of the CLLocation as below:

coord.latitude = newLocation.coordinate.latitude;
coord.longitude = newLocation.coordinate.longitude;

Upvotes: 0

Can &#220;rek
Can &#220;rek

Reputation: 661

Simple

CLLocation *location = [[CLLocation alloc] initWithLatitude:lat longitude:lon];

Upvotes: 15

Peter Hosey
Peter Hosey

Reputation: 96323

“how can i use my instance as CLLocation?”

You can't, because it isn't one. You need to create one.

Don't forget to release what you alloc. See the memory management rules.

Upvotes: 2

Related Questions