最近在做一些关于地图的使用,才发现以前了解的东西很浅,很多细节上的东西没有弄清楚,在这里我想记录一下。好记性不如烂笔头,何况我这烂记性,就更得需要一个好笔头了。废话就不多说,下面就是我在使用系统地图的思路和代码。新手上路,不另指教!
Step1
导入 Mapkit.framework 框架
Step2
引入头文件
#import <MapKit/MapKit.h> //地图框架
#import <CoreLocation/CoreLocation.h> //定位和编码框架
如果只是使用定位,则引入 CoreLocation/CoreLocation.h 即可,需要显示地图则引入MapKit/MapKit.h
Step3
遵守协议和指定代理
@interface MapViewController ()<CLLocationManagerDelegate, MKMapViewDelegate, UITextFieldDelegate>
@property (nonatomic, strong) CLLocationManager *locationManager; //定位管理器
@property (nonatomic, strong) CLGeocoder *geocoder; //创建一个地理编码器,来实现编码和反编码
懒加载创建
- (CLLocationManager *)locationManager
{
if (!_locationManager) {
self.locationManager = [[CLLocationManager alloc] init];
}
return _locationManager;
}
- (CLGeocoder *)geocoder
{
if (!_geocoder) {
self.geocoder = [[CLGeocoder alloc] init];
}
return _geocoder;
}
Step4
显示地图并定位
- (void)viewDidLoad {
[super viewDidLoad];
[self startLocationUpdate];
self.PYMapView.mapType = MKMapTypeStandard;//选择显示地图的样式
self.PYMapView.delegate = self;//指定代理
/*
*[self.PYMapView setShowsUserLocation:YES];//显示用户位置的小圆点
*/
}
#pragma mark --- 开始定位
- (void)startLocationUpdate
{
//判断用户在设置里面是否打开定位服务
if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"请在设置里面打开定位服务");
}
else{
//获取用户对应用的授权
if ([ CLLocationManager authorizationStatus]== kCLAuthorizationStatusNotDetermined) {
NSLog(@"请求授权");
[self.locationManager requestAlwaysAuthorization];
}
else{
//用户位置追踪(用户位置追踪用于标记用户当前位置,此时会调用定位服务)
self.PYMapView.userTrackingMode = MKUserTrackingModeFollow;//即可以在显示地图的时候定位到用户的位置
self.locationManager.delegate = self;
//设置定位的经纬度精度
_locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
//设置定位频率,每隔多少米定位一次
CLLocationDistance distance = 10.0;
_locationManager.distanceFilter = distance;
//开始定位
[self.locationManager startUpdatingLocation];
}
}
}
#pragma mark --- CLLocationDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
/*
*locations 数组里面存储CLLoction对象, 一个对象代表一个地址
*
*location 中存储 经度 coordinate.longitude、纬度 coordinate.latitude、航向 location.course、速度 location.speed、海拔 location.altitude
*/
CLLocation *location = locations.firstObject;
CLLocationCoordinate2D coordinate = location.coordinate;
NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
[self getAddressByLatitude:coordinate