首先創建一個viewController:
添加MapKit,CoreLocation框架
一、添加地圖
1、初始化地圖視圖:
@property (nonatomic, strong) MKMapView *mapView; self.mapView =[[MKMapView alloc]initWithFrame:self.view.bounds];
2、設置地圖的顯示類型,三種:標准,衛星地圖,混合
self.mapView.mapType { MKMapTypeStandard = 0, MKMapTypeSatellite, MKMapTypeHybrid };
3、定義地圖是否可以放大縮小滑動,添加代理
self.mapView.zoomEnabled = YES; self.mapView.scrollEnabled = YES;
self.mapView.delegate = self;
4、添加CoreLocation框架
添加一個地區的地理坐標位置(經緯度),北緯是正數,東經是正數;當前坐標表示鄭州市位置
CLLocationCoordinate2D coordinate; coordinate.latitude = 34.7598711; coordinate.longitude = 113.663221;
5、表示顯示區域的精度,值越小表示的范圍越精確,值越大表示的范圍越大,但是不精確
MKCoordinateSpan span = {100,100}; 100在地圖上表示100*111公裡的范圍
6、根據地理坐標和span創建表示區域的值。(通常一個圓,和半徑)
初始化方法(1):MKCoordinateRegion region = {coordinate,span}; (2):MKCoordinateRegion region; region =MKCoordinateRegionMake(coordinate,span);
7、告訴地圖顯示的區域,並講地圖添加到當前視圖上
[self.mapView setRegion:region]; [self.view addSubview:self.mapView];
8、為坐標位置添加注解
MKPointAnnotation *pinAnnotation = [[MKPointAnnotation alloc] init]; pinAnnotation.coordinate = coordinate; pinAnnotation.title = @"鄭州"; pinAnnotation.subtitle = @"河南青雲信息技術"; [self.mapView addAnnotation:pinAnnotation];
9、當要對顯示當注解自定義時,調用下面方法,用來設置顯示界面
- (MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { if ([annotation isKindOfClass:[MKUserLocation class]]) { return nil; } static NSString *indentifier = @"pinView"; MKPinAnnotationView *pinView =(MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:indentifier]; if (nil == pinView) { pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:indentifier]; } pinView.pinColor = MKPinAnnotationColorPurple; pinView.animatesDrop = YES; pinView.canShowCallout = YES; return pinView; }
10、MKAnnotation 與MKAnnotationView 的差異
MKAnnotation: 它在注解裡實際上就是一個model,主要用於向視圖提供相應的數據。 默認情況下,有三個屬性:1、title 2.subtitle 3、coordinate MKAnnotationView: 在注解裡, 它是用於描述如何顯示注解的, 換句話是確定是顯示成藍點還是顯示成大頭針。 在委托方法裡來確定, 如果委托方法,返回nil,這個時候藍點。如果想要顯示成其它的視圖,必須在代碼裡來實現
二、添加位置管理
1、初始化,並添加代理,設置精度
@property (nonatomic, strong) CLLocationManager *locationManager; self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.distanceFilter = 500; //對於位置管理來說,並非是精度越高越好。因為GPS模塊是手機最耗電的模塊,所以為最大限度讓我們應用程序省電,需要根據具體的應用來設定具體的精度
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; [self.locationManager startUpdatingLocation];
2、當位置更新時調用下面方法,可得出新舊兩位置間的距離,新位置的坐標;並將地圖顯示在新坐標位置
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"%@",NSStringFromSelector(_cmd)); CLLocationDistance distance = [newLocation distanceFromLocation:oldLocation]; NSLog(@"distance is %f",distance /1000.0); MKCoordinateRegion region = MKCoordinateRegionMake(newLocation.coordinate, MKCoordinateSpanMake(100, 100)); [self.mapView setRegion:region animated:YES]; }
3、如果位置管理器失效,將調用下面方法並返回錯誤信息
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"%@",error); }
小結:關於iOS中地圖及定位的基本實現先描述到這裡,後續更新,歡迎浏覽查詢!