Sian 发表于 2015-6-6 00:31:07

如何解决百度地图反地理编码失败的问题!!

我们在使用百度地图定位成功后,一般会使用反地理编码的方式进行地址解析,获取地址信息供我们应用使用,如下方法所示:
// 获取地址位置后调用方法
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
/*
    code for location...
*/
      // 反地址编码获取地址
      BMKReverseGeoCodeOption *option = [ init];
      option.reverseGeoPoint = userLocation.location.coordinate;
      
      SALog(@"开始反地理编码...");
      
      if (!){
            SALog(@"反地址编码失败,使用Apple地图反地理编码");
            CLLocationCoordinate2D newCoor = [ GCJ02FromBD09:userLocation.location.coordinate];
            CLLocation *location = [ initWithLatitude:newCoor.latitude longitude:newCoor.longitude];
            [[ init] reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
                CLPlacemark *placemark = ;
                SALog(@"%@ - %@", placemark.name, placemark.locality);
/*
    code for address...
*/
            }];
      }
      // 结束
    }
}

但是,Apple的反地址编码使用的经纬度与百度经纬度坐标是不一致的,所以需要转换,这里给一个转换的方法:
/// 百度坐标转高德坐标
+ (CLLocationCoordinate2D)GCJ02FromBD09:(CLLocationCoordinate2D)coor
{
    CLLocationDegrees x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    CLLocationDegrees x = coor.longitude - 0.0065, y = coor.latitude - 0.006;
    CLLocationDegrees z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
    CLLocationDegrees theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
    CLLocationDegrees gg_lon = z * cos(theta);
    CLLocationDegrees gg_lat = z * sin(theta);
    return CLLocationCoordinate2DMake(gg_lat, gg_lon);
}
关于百度地图经纬度与苹果自带地图经纬的故事,请参考这里:http://yusian.com/thread-10519-1-1.html
页: [1]
查看完整版本: 如何解决百度地图反地理编码失败的问题!!