在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

posted @ 2010-10-08 09:46  漫步walkman  阅读(1668)  评论(0编辑  收藏  举报