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
?
?