iOS 地图源及目的地定位、划线和系统导航的使用

这篇博客介绍了如何在iOS中使用MapKit框架进行地图显示、用户定位、路径划线和系统导航。首先,需要导入Mapkit.framework框架和CoreLocation库,然后遵守相关协议和设置代理。通过获取用户位置并使用GE编码和反编码实现定位。接着,创建自定义大头针,并在地图上显示。最后,展示了如何实现起点到终点的路径划线及调用系统导航功能。
摘要由CSDN通过智能技术生成

最近在做一些关于地图的使用,才发现以前了解的东西很浅,很多细节上的东西没有弄清楚,在这里我想记录一下。好记性不如烂笔头,何况我这烂记性,就更得需要一个好笔头了。废话就不多说,下面就是我在使用系统地图的思路和代码。新手上路,不另指教!

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值