作者:Ymgif影像--阿雅XX_506 | 来源:互联网 | 2023-05-18 22:15
用iosMapKit做过定位服务的人应该都知道用CLLocationManager获取的经纬度坐标在google地图上显示时与实际位置相差几百米,具体原因可查看我转载的一篇文章《WGS
用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];
//取出纬度值
}