地图(定位、POI、地理编码……)

使用苹果自带的地图MKMapKit,需要导入框架:MapKit.frameworks、CoreLocation.framework

定位

目前iOS定位方式有三种:基站 WIFI A-GPS

基站:省电、定位不精准(大概位置)

WIFI:和基站差不多,比基站更费电、定位不精准(大概位置)

A-GPS:苹果改良了直接使用GPS,先使用基站和WIFI获得大概位置,然后苹果自动推荐当前区域的离你位置最近的GPS卫星,这样就不用再搜索卫星了,直接就可以使用了。费电、定位精准。

打开定位,在iOS8以前自动弹出对话框。在iOS8之后,必须在info.plist文件中添加一行 NSLocationAlwaysUsageDescription

图:

代码:

<span style="color:#333333;">#import "AZViewController.h"#import <MapKit/MapKit.h>@interface AZViewController ()<MKMapViewDelegate,CLLocationManagerDelegate>{MKMapView *_mapView;CLLocationManager *_manager;}@end@implementation AZViewController- (void)viewDidLoad{[super viewDidLoad];/**iOS中的地图,有两种:1、苹果自带的地图SDK,(MKMapKit)但是它在中国使用的时高德地图。2、2、第三方地图SDK (例如:高德的地图SDK,( MAMapKit)、百度地图SDK(BMapKit))。使用方法:1、 使用苹果自带的地图MKMapKit,需要导入框架:MapKit.frameworks、CoreLocation.framework*/[self useMkMapKit];}-(void)useMkMapKit{_mapView=[[MKMapView alloc] initWithFrame:self.view.bounds];// 地图类型,默认为基本// MKMapTypeSatellite 卫星// MKMapTypeStandard 基本// MKMapTypeHybrid 混合_mapView.mapType=MKMapTypeStandard;[self.view addSubview:_mapView];UILongPressGestureRecognizer *longPress=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:) ];[_mapView addGestureRecognizer:longPress];/**定位目前iOS定位方式有三种: 基站 WIFI A-GPS基站:省电、定位不精准(大概位置)WIFI:和基站差不多,比基站更费电、定位不精准(大概位置)A-GPS:苹果改良了直接使用GPS,先使用基站和WIFI获得大概位置,然后苹果自动推荐当前区域的离你位置最近的GPS卫星,这样就不用再搜索卫星了,直接就可以使用了。费电、定位精准。打开定位,在iOS8以前自动弹出对话框。在iOS8之后,必须在info.plist文件中添加一行 NSLocationAlwaysUsageDescription*///获取定位管理对象_manager=[[CLLocationManager alloc] init];// </span><span style="color:#ff0000;">//ios 8 必须加上// [_manager requestAlwaysAuthorization];</span><span style="color:#333333;">//精准度/*kCLLocationAccuracyBestForNavigation 导航精准(导航使用)kCLLocationAccuracyBest 普通精准kCLLocationAccuracyNearestTenMeters 误差十米kCLLocationAccuracyHundredMeters 误差百米kCLLocationAccuracyKilometer 误差千米kCLLocationAccuracyThreeKilometers 误差三千米*/_manager.desiredAccuracy=kCLLocationAccuracyBest;//定位距离过滤器,超过10米,才重新定位一次_manager.distanceFilter=10;//设置代理_manager.delegate=self;//开始定位[_manager startUpdatingLocation];//开始方向定位[_manager startUpdatingHeading];//显示当前用户的位置_mapView.showsUserLocation=YES;}//长按添加大头针-(void)longPress:(UILongPressGestureRecognizer *)longPress{if (longPress.state!=UIGestureRecognizerStateBegan) {return;}//坐标CGPoint point=[longPress locationInView:_mapView];//转成经纬度CLLocationCoordinate2D coordinate=[_mapView convertPoint:point toCoordinateFromView:_mapView];//地图中心经纬度//_mapView.centerCoordinate=coordinate;//缩放比例MKCoordinateSpan span=MKCoordinateSpanMake(0.5, 0.5);//要显示的区域MKCoordinateRegion regin=MKCoordinateRegionMake(coordinate, span);//地图显示一个区域[_mapView setRegion:regin animated:YES];/**添加大头针1:苹果自带框架下有一个大头针数据类,它可以显示标题,副标题。2: 自定义大头针。*/// 第一种大头针(系统自带)//添加一个标签/大头针 (数据类)MKPointAnnotation *anno=[[MKPointAnnotation alloc] init];//标题anno.title=@"KFC";//副标题anno.subtitle=@"地址:海淀黄庄";//显示位置anno.coordinate=coordinate;//添加到地图上[_mapView addAnnotations:@[anno]];//第二种,自定义大头针,使用代理_mapView.delegate=self;}#pragma mark — 自定义大头针- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{if([annotation isKindOfClass:[_mapView.userLocation class]]){return nil;}static NSString *idn=@"ID";MKPinAnnotationView *annoView=(MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:idn];if (!annoView) {annoView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:idn];}//显示详情面板annoView.canShowCallout=YES;//颜色annoView.pinColor=MKPinAnnotationColorPurple;//拖拽annoView.draggable=YES;//动画效果annoView.animatesDrop=YES;//添加左视图UIView *leftview=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];leftview.backgroundColor=[UIColor redColor];annoView.leftCalloutAccessoryView=leftview;//添加右视图UIButton *btn=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];annoView.rightCalloutAccessoryView=btn;/**添加响应事件*/return annoView;}#pragma mark — 实现定位协议//定位成功-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{//拿到定位的位置CLLocation *location=[locations lastObject];//缩放比例MKCoordinateSpan span=MKCoordinateSpanMake(0.1, 0.1);MKCoordinateRegion region=MKCoordinateRegionMake(location.coordinate, span);[_mapView setRegion:region animated:YES];//停止定位[manager stopUpdatingLocation];}-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{NSLog(@"定位失败");}//方向定位成功-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{NSLog(@"%f",newHeading.trueHeading);}-(BOOL)prefersStatusBarHidden{return YES;}@end</span>第二种,使用第三方地图SDK。(这里使用高德SDK,百度SDK和高德的使用方式都差不多,可到百度地图开发者平台上去查看文档)

更多使用方法,请参考高德开发者平台

代码:

因为你的喜爱会挡也挡不住地流露出来。

地图(定位、POI、地理编码……)

相关文章:

你感兴趣的文章:

标签云: