【问题标题】:How to convert PFGeoPoint to CLLocation如何将 PFGeoPoint 转换为 CLLocation
【发布时间】:2014-12-23 19:59:15
【问题描述】:

是否可以使用 Parse 将 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 *'

【问题讨论】:

    标签: ios objective-c parse-platform cllocationmanager


    【解决方案1】:

    正如 Wain 所说,没有方便的方法可以将 PFGeoPoint 转换为 CLLocation,但是您可以自己制作并使用以下方法扩展 PFGeoPoint

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

    现在您可以通过以下方式轻松返回 CLLocation 对象

    let aLocation: CLLocation = yourGeoPointObject.location()
    

    【讨论】:

      【解决方案2】:

      您需要使用来自PFGeoPointlatitudelongitude 使用initWithLatitude:longitude: 显式创建CLLocation 实例。只有一种方便的方法可以从CLLocation 创建PFGeoPoint,反之则不然。

      【讨论】:

        【解决方案3】:

        基于 Justin Oroz 的 answer(请参阅下面的答案): 另外一个好主意是在 CLLocation 端创建扩展,以便可以使用接收 PFGeoPoint 的便利 init 创建它:

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

        【讨论】:

          【解决方案4】:

          您始终可以获取 PFGeoPoint,然后将其添加到 CLLocationCoordinate2D,如下所示:

          //get all PFObjects
          
          let parseLocation = ParseObject["location"]
          
          let location:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: parseLocation.latitude, longitude: parseLocation.longitude)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-07
            • 2015-04-24
            • 1970-01-01
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多