IPhone开发时使用MKMapView在显示地图的同时获取用户当前坐标的方法
最近在公司有一个项目需要在IPhone手机上显示地图并获取到用户当前的位置信息,从网上参考了很多大侠的文章。发现均是同时使用MKMapView和CLLocationManager两个类才实现的。其实只需要使用MKMapView一个类就可以同时实现显示地图并获取到坐标的功能。
按我目前的理解:
MKMapView应该是使用在需要显示地图的程序中。
CLLocationManager应该是使用在不需要显示地图但需要获取用户坐标信息的程序中。
另外,从网上看到过一位同志说MKMapView获取到的坐标精度要高于CLLocationManager获取到的坐标精度,因为没有测试,不敢妄下结论。
程序的核心部分,其实就是使用了MKMapView的didUpdateUserLocation事件,有关MKMapView的使用方法网上有一大堆,请自行搜索参考。以下是相关代码,已经在XCode4.3 IOS5.0的手机上测试通过,供大家参考。
程序头文件:
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
@interface UnitMapViewController : UIViewController<MKMapViewDelegate>
{
MKMapView *map;
}
@end
程序源文件:
#import "UnitMapViewController.h"
#import "UnitViewController.h"
@interface UnitMapViewController ()
@end
@implementation UnitMapViewController
NSString *userLatitude;
NSString *userlongitude;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
userLatitude=@"";
userlongitude=@"";
map=[[MKMapView alloc] initWithFrame:[self.view bounds]];
map.mapType=MKMapTypeStandard;
map.delegate=self;
map.showsUserLocation=YES;
[self.view addSubview:map];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
-(void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
NSString *lat=[[NSString alloc] initWithFormat:@"%f",userLocation.coordinate.latitude];
NSString *lng=[[NSString alloc] initWithFormat:@"%f",userLocation.coordinate.longitude];
userLatitude=lat;
userlongitude=lng;
MKCoordinateSpan span;
MKCoordinateRegion region;
span.latitudeDelta=0.010;
span.longitudeDelta=0.010;
region.span=span;
region.center=[userLocation coordinate];
[map setRegion:[map regionThatFits:region] animated:YES];
}
@end