Reputation: 461
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
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
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
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
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
Reputation: 661
Simple
CLLocation *location = [[CLLocation alloc] initWithLatitude:lat longitude:lon];
Upvotes: 15
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