2014-12-23 28 views
5

是否可以将PFGeoPoint与Parse转换为CLLocation?如何将PFGeoPoint转换为CLLocation

原因是我想从PFGeoPoint获得的地名,像这样:

CLGeocoder *geocoder; 
    CLPlacemark *placemark; 
    PFGeoPoint *point = [object objectForKey:@"location"]; 
          [geocoder reverseGeocodeLocation:point completionHandler:^(NSArray *placemarks, NSError *error) { 
           NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
           if (error == nil && [placemarks count] > 0) 
           { 
            placemark = [placemarks lastObject]; 
            NSLog(@"%@", placemarks); 

           } 
          }]; 

错误,我得到明显的是:

Incompatiable pointer types sending 'PFGeoPoint *' to parameter of type 'CLLocation *' 

回答

5

您需要使用显式地创建CLLocation实例initWithLatitude:longitude:与来自PFGeoPointlatitudelongitude。只有从一个CLLocation创建PFGeoPoint,而不是其他方式轮的便捷方法。

6

正如韦恩说没有从PFGeoPoint转换为CLLocation但是你可以使自己的使用扩展PFGeoPoint以下

import Parse 

extension PFGeoPoint { 

    func location() -> CLLocation { 
     return CLLocation(latitude: self.latitude, longitude: self.longitude) 
    } 
} 

现在你可以很容易地通过做

返回CLLocation对象方便的方法
let aLocation: CLLocation = yourGeoPointObject.location() 
0

你总是可以得到PFGeoPoint,然后将其添加到CLLocationCoordinate2D这样的:

//get all PFObjects 

let parseLocation = ParseObject["location"] 

let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude) 
2

基于贾斯汀Oroz的answer(见下面的答案): 也是一个伟大的想法可能是建立在CLLocation侧进行扩展,以便它可以使用其接收PFGeoPoint便利的init创建:

extension CLLocation { 
    convenience init(geoPoint: PFGeoPoint) { 
     self.init(latitude: geoPoint.latitude, longitude: geoPoint.longitude) 
    } 
} 
相关问题