在iPhone中直接调用系统自带的地图程序实现导航
在iPhone中直接调用系统自带的地图程序实现导航
在一个国外iPhone外包项目中,需要实现一个GPS功能:将当前所在地和目的地进行导航。GPS定位的话,iPhone中容易实现,通过CLLocationManager对象可以实现当前位置定位,而实现地图导航功能就有点麻烦,在开发初期,我们采用的是UIWebView加载Google地图,然后调用其API来实现,但是导航效果不是很理想,相关的API详见:http://code.google.com/intl/zh-CN/apis/maps/documentation/mapplets/reference.html
后来在AppStore下载到一个GPS相关的程序,发现里面的导航功能,直接是调用iPhone自带的地图程序,所以通过查找相关资料,实现了此功能,具体的代码片段如下:
用XCode打开工程,在Frameworks中添加CoreLocation.Framework
在ViewController类的头文件中:
#import <CoreLocation/CoreLocation.h>
.....
CLLocationManager *locmanager;
....
当然这个类要实现CLLocationManagerDelegate 代理,在按钮点击事件中,初始化CLLocationManager:
locmanager = [[CLLocationManager alloc] init];
//欢迎光临作者小站,手机主题 http://www.shouji138.com
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
[locmanager startUpdatingLocation];
在取得GPS定位信息之后,将当前位置的经纬度信息通过参数的形式传递给地图程序。
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
[manager stopUpdatingLocation];
CLLocationCoordinate2D loc = [newLocation coordinate];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://maps.google.com/maps?saddr=%f,%f&daddr=%@",loc.latitude,loc.longitude,@"中国,湖南,长沙,具体地名"]]];
//欢迎光临作者小站,手机主题下载 http://www.shouji138.com
}
其中saddr是起始地址,可以是具体地名,形式为国家,省份,城市,地名,也可以是经纬度,形式为经度,维度。
daddr是目标地址,形式跟saddr一样。
如果定位不到当前位置的话,我们可以处理他的出错信息。
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
[manager stopUpdatingLocation];
UIAlertView *alert = [[UIAlertView alloc]//警告
initWithTitle:@"Error:"
message:[NSString stringWithFormat:@"locationManager error:%@",[error localizedDescription]]
delegate:self
cancelButtonTitle:@"Return"
otherButtonTitles:nil];
[alert show];
[alert release];
}
好了,原来调用iPhone系统自带的地图是如此的简单。最后提供演示项目的下载:
http://www.shouji138.com/files/iphone20101008.zip
也欢迎光临作者的小站:手机主题 http://www.shouji138.com/
欢迎与作者交流:haolinks#163.com