校正IOS的gps坐标方法

用ios MapKit做过定位服务的人应该都知道用CLLocationManager 获取的经纬度坐标在google地图上显示时与实际位置相差几百米,具体原因可查看我转载的一篇文章《WGS84转火星坐标(ios篇)》。
        在我转载的那篇文章里有讲到两个方法,第二个是要用苹果私有API的而且也没有使用说明所以不推荐使用,而第一个方法是要调用高德地图的API的,方法应该是对的,不过那个sdk已经过时了,我试了发现返回经纬度都是0。文章中提供申请key的链接还是对的,不过那个链接里的sdk应该有问题,我在另外一个地方找到了最新的sdk。下载地址是: http://api.amap.com/Ios/download

下面贴下代码片段
1.下面这段代码就是初始化查询选项,高德API里可以查询公交路线等几个选项,我们要的是查偏移量,所以用的是MARGCSearchOption.

//用高德地图api校正获取的gps 数据
        MARGCSearchOption* searchOption = [[[MARGCSearchOption alloc]init]autorelease];
        searchOption.config = @"RGC"; //这个是默认的,函数声明的头文件有注释
        searchOption.authKey = MAPABC_KEY; //这个就是你申请的key
        searchOption.coors = [NSString stringWithFormat:@"%f,%f;",location.coordinate.longitude, location.coordinate.latitude];//这个可以同时查几组经纬度值,中间用分号隔开,参数location 是用 CLLocationManager获取的经纬度值
        [search gpsOffsetSearchWithOption:searchOption]; //传入searchoption开始查找校正后的经纬度


2.程序执行完  gpsOffsetSearchWithOption:searchOption方法后会调用一个MAsearchDelegate的代理方法,并且把调用结果返回来,所以你可以在这个代理方法里执行你的处理逻辑
.-(void) gpsOffsetSearch:(MARGCSearchOption *)gpsOffSearchOption Result:(MARGCSearchResult *)result
{
    MARGCItem* rgcInfo = [result.rgcItemArray objectAtIndex:0];  //返回的结果result是一个array来的,因为可以同时查找很多组经纬度值,不过我上面代码我只写了一组,所以只取第一个object就行了     
    currentLocation.longitude = [rgcInfo.x floatValue];        //取出经度值
    currentLocation.latitude = [rgcInfo.y floatValue];   //取出纬度值
 }

你可能感兴趣的:(ios,ios,mapkit,api,search,object,google)