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:(CLL开发者_JAVA技巧ocation *)oldLocation {
}
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
Simple
CLLocation *location = [[CLLocation alloc] initWithLatitude:lat longitude:lon];
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)
}
“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.
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;
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)
精彩评论