年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3098|回复: 0

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

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2015-6-6 00:31:07 | 显示全部楼层 |阅读模式
    我们在使用百度地图定位成功后,一般会使用反地理编码的方式进行地址解析,获取地址信息供我们应用使用,如下方法所示:
    [Objective-C] 纯文本查看 复制代码
    // 获取地址位置后调用方法
    - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
    {
    /*
        code for location...
     */
            // 反地址编码获取地址
            BMKReverseGeoCodeOption *option = [[BMKReverseGeoCodeOption alloc] init];
            option.reverseGeoPoint = userLocation.location.coordinate;
            
            SALog(@"开始反地理编码...");
            
            if (![self.geoCode reverseGeoCode:option]){
                SALog(@"反地址编码失败,使用Apple地图反地理编码");
                CLLocationCoordinate2D newCoor = [[self class] GCJ02FromBD09:userLocation.location.coordinate];
                CLLocation *location = [[CLLocation alloc] initWithLatitude:newCoor.latitude longitude:newCoor.longitude];
                [[[CLGeocoder alloc] init] reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
                    CLPlacemark *placemark = [placemarks firstObject];
                    SALog(@"%@ - %@", placemark.name, placemark.locality);
    /*
        code for address...
     */
                }];
            }
            // 结束
        }
    }


    但是,Apple的反地址编码使用的经纬度与百度经纬度坐标是不一致的,所以需要转换,这里给一个转换的方法:
    [Objective-C] 纯文本查看 复制代码
    /// 百度坐标转高德坐标
    + (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
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-12-23 04:35 , Processed in 0.048406 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表