参考学习链接

各种IOS设备可以使用 Core Location 框架确定它的物理位置。core location 主要使用三种技术来实现功能。GPS、蜂窝基站三角网络定位、 wifi 定位服务。这三种技术都会非常的消耗电能,所以在使用Core Location 的时候,要注意,除非必要,要尽量少对你的位置进行轮询。使用 core location 的时候,通过指定所需的最低精度级别,可以减少不必要的电能损耗。

获取定位
 
if ([CLLocationManagerlocationServicesEnabled]) {
        [CLLocationManager authorizationStatus];
        self.locationManager = [[CLLocationManager alloc] init];
        [self.locationManager startUpdatingLocation];
        [self.locationManager requestWhenInUseAuthorization];
    }
 
 
 
// 1.设置地图类型
    self.mapView.mapType = MKMapTypeStandard;
   
    // 2.设置跟踪模式(MKUserTrackingModeFollow == 跟踪)
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
   
    // 3.设置代理(监控地图的相关行为:比如显示的区域发生了改变)
    self.mapView.delegate = self;
 
 
 
// 设置经纬度
    CLLocationCoordinate2D ddd = CLLocationCoordinate2DMake(23, 116);
//
//    [self.mapView setCenterCoordinate:ddd];
   
   
    // 设置跨度
    [self.mapView setRegion:MKCoordinateRegionMake(ddd, MKCoordinateSpanMake(1, 1)) animated:YES];
 
 
归位
- (IBAction)guiweiAction:(id)sender {
    [self.mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
 
 
 
代理方法  显示系统自带的大头针
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    userLocation.title = @"天朝帝都";
    userLocation.subtitle = @"帝都是个牛逼的地方";
}
 
 
 
自定义大头针类
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface HMAnnotation : NSObject <MKAnnotation>
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

@end
 
// 创建两个大头针
    HMAnnotation *anno1 = [[HMAnnotation alloc] init];
    anno1.coordinate = CLLocationCoordinate2DMake(39, 119);
    anno1.title = @"帝都";
    anno1.subtitle = @"帝都帝都帝都帝都帝都";
    // 添加一个大头针模型(模型:描述大头针的信息)
    [self.mapView addAnnotation:anno1];
   
    HMAnnotation *anno2 = [[HMAnnotation alloc] init];
    anno2.coordinate = CLLocationCoordinate2DMake(23, 116);
    anno2.title = @"广东";
    anno2.subtitle = @"广东广东广东广东广东";
    [self.mapView addAnnotation:anno2];
 
 
创建100个大头针
for (int i = 0; i<100; i++) {
        CLLocationDegrees latitude = 23 + arc4random_uniform(20);
        CLLocationDegrees longitude = 73.2 + arc4random_uniform(50);
       
        HMAnnotation *anno = [[HMAnnotation alloc] init];
        anno.coordinate = CLLocationCoordinate2DMake(latitude, longitude);
        [self.mapView addAnnotation:anno];
    }
 
 
 
大图片的大头针
// 带图片的大头针
    HMAnnotation *tg1 = [[HMAnnotation alloc] init];
    tg1.title = @"xxx大饭店";
    tg1.subtitle = @"全场一律15折,会员20折";
    tg1.icon = @"category_1";
    tg1.coordinate = CLLocationCoordinate2DMake(37, 116);
    [self.mapView addAnnotation:tg1];
   
    HMAnnotation *tg2 = [[HMAnnotation alloc] init];
    tg2.title = @"xxx影院";
    tg2.subtitle = @"最新大片:美国队长2,即将上映。。。";
    tg2.icon = @"category_5";
    tg2.coordinate = CLLocationCoordinate2DMake(29, 110);
    [self.mapView addAnnotation:tg2];
 
 
设置带图片的大头针
//- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(HMAnnotation *)annotation
//{
//    // 1.先从缓存池中取出可以循环利用的大头针控件
//    static NSString *ID = @"anno";
//    MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID];
//   
//    // 2.缓存池中没有可以循环利用的大头针控件
//    if (annotationView == nil) {
//        // 传入循环利用标识来创建大头针控件
//        annotationView = [[MKAnnotationView alloc] initWithAnnotation:nil reuseIdentifier:ID];
//        // 显示标题和子标题
//        annotationView.canShowCallout = YES;
//    }
//   
//    // 3.传递模型(更新大头针数据,覆盖掉之前的旧数据)
//    annotationView.annotation = annotation;
//   
//    // 4.设置图片
//    annotationView.image = [UIImage imageNamed:annotation.icon];
//   
//    return annotationView;
//}
 
 
 
导航  
 
@property (nonatomic, strong) CLGeocoder *geocoder;
- (IBAction)startNavigation;

@property (nonatomic, strong) MKPlacemark *sourceMKPm;

@property (nonatomic, strong) MKPlacemark *destinationMKPm; 
 
先划线
- (void)viewDidLoad
{
    [super viewDidLoad];
   
    self.mapView.delegate = self;
   
    NSString *sourceAddress = @"广州";
    NSString *destinationAddress = @"北京";
   
    [self.geocoder geocodeAddressString:sourceAddress completionHandler:^(NSArray *placemarks, NSError *error) {
        CLPlacemark *gzPm = [placemarks firstObject];
        if (gzPm == nil) return;
       
        // 添加广州大头针
        HMAnnotation *gzAnno = [[HMAnnotation alloc] init];
        gzAnno.coordinate = gzPm.location.coordinate;
        gzAnno.title = sourceAddress;
        gzAnno.subtitle = gzPm.name;
        [self.mapView addAnnotation:gzAnno];
       
        [self.geocoder geocodeAddressString:destinationAddress completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark *bjPm = [placemarks firstObject];
            if (bjPm == nil) return;
           
            // 添加北京大头针
            HMAnnotation *bjAnno = [[HMAnnotation alloc] init];
            bjAnno.coordinate = bjPm.location.coordinate;
            bjAnno.title = destinationAddress;
            bjAnno.subtitle = bjPm.name;
            [self.mapView addAnnotation:bjAnno];
           
            [self drawLineWithSourceCLPm:gzPm destinationCLPm:bjPm];
        }];
    }];
}
 
 
 
- (void)drawLineWithSourceCLPm:(CLPlacemark *)sourceCLPm destinationCLPm:(CLPlacemark *)destinationCLPm
{
    if (sourceCLPm == nil || destinationCLPm == nil) return;
   
    // 1.初始化方向请求
    // 方向请求
    MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
   
    // 设置起点
    MKPlacemark *sourceMKPm = [[MKPlacemark alloc] initWithPlacemark:sourceCLPm];
    request.source = [[MKMapItem alloc] initWithPlacemark:sourceMKPm];
    self.sourceMKPm = sourceMKPm;
   
    // 设置终点
    MKPlacemark *destinationMKPm = [[MKPlacemark alloc] initWithPlacemark:destinationCLPm];
    request.destination = [[MKMapItem alloc] initWithPlacemark:destinationMKPm];
    self.destinationMKPm = destinationMKPm;
   
    // 2.根据请求创建方向
    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
   
    // 3.执行请求
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
        if (error) return;
       
        for (MKRoute *route in response.routes) {
            // 添加路线遮盖(传递路线的遮盖模型数据)
            [self.mapView addOverlay:route.polyline];
        }
    }];
   
    // 遮盖 overlay
}
 
 
#pragma mark - 代理方法
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
    MKPolylineRenderer *redender = [[MKPolylineRenderer alloc] initWithOverlay:overlay];
    redender.lineWidth = 5;
    redender.strokeColor = [UIColor blueColor];
    return redender;
}
 
 
 
开始导航
- (IBAction)startNavigation {
    if (self.sourceMKPm == nil || self.destinationMKPm == nil) return;
   
    // 起点
    MKMapItem *sourceItem = [[MKMapItem alloc] initWithPlacemark:self.sourceMKPm];
   
    // 终点
    MKMapItem *destinationItem = [[MKMapItem alloc] initWithPlacemark:self.destinationMKPm];
   
    // 存放起点和终点
    NSArray *items = @[sourceItem, destinationItem];
   
    // 参数
    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    // 导航模式:驾驶导航
    options[MKLaunchOptionsDirectionsModeKey] = MKLaunchOptionsDirectionsModeDriving;
    // 是否要显示路况
    options[MKLaunchOptionsShowsTrafficKey] = @YES;
   
    // 打开苹果官方的导航应用
    [MKMapItem openMapsWithItems:items launchOptions:options];
}
 
 
 
 
 
 
 
 

UI:地图和定位的更多相关文章

  1. iOS UI进阶-4.0 地图与定位

    在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院   在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能 ...

  2. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)

    使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...

  3. iOS开发系列--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  4. iOS开发之地图与定位

    无论是QQ还是微信的移动客户端都少不了定位功能,之前在微信demo中没有添加定位功能,今天就写个定位的小demo来了解一下定位和地图的东西.地图和定位看上去是挺高大上一东西,其实用法比TableVie ...

  5. [OC][地图] 高德地图之定位初探(一)

    使用前的说明 高德地图开放平台的iOS定位模块网址-->http://lbs.amap.com/api/ios-location-sdk/summary/ 高德地图有Web端.android平台 ...

  6. iOS进阶_地图上定位的标志——大头针

    一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...

  7. 地图、定位 CLLocationManager CLGeocoder CLPlacemark

    地图.定位 一.基本知识点 定位: 1.info.plist文件设置 ios8以后,使用定位需要在info.plist文件中添加两个字段NSLocationAlwaysUsageDescription ...

  8. Android 百度地图API 定位 导航

    看看这个利用百度地图定位并实现目的地导航的Demo. 首先看实现效果:                          进 入后首先会得到当前位置,在地图上显示出来.在输入框中输入目的地后,就会在地 ...

  9. ios开发——实用技术OC篇&地图与定位

    地图与定位 11.1 iOS定位服务 11.2 iOS地图 11.3 Web地图 1 iOS定位服务 iOS中有三个定位服务组件: Wifi定位,通过查询一个Wifi路由器的地理位置的信息.比较省电, ...

  10. iOS中的地图和定位

    文章摘自http://www.cnblogs.com/kenshincui/p/4125570.html#location  如有侵权,请联系删除. 概览 现在很多社交.电商.团购应用都引入了地图和定 ...

随机推荐

  1. Mybatis详解

    SqlSession(SqlSessionDaoSupport类) SqlSessionDaoSupportSqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession ...

  2. Spring中Beans的自动装配概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/beans-autowiring.html: 在之前的做法上会参照这样的顺序:1.使用<bea ...

  3. 梯度下降和EM算法,kmeans的em推导

    I. 牛顿迭代法给定一个复杂的非线性函数f(x),希望求它的最小值,我们一般可以这样做,假定它足够光滑,那么它的最小值也就是它的极小值点,满足f′(x0)=0,然后可以转化为求方程f′(x)=0的根了 ...

  4. 利用反射技术实现POJO的数据库操作

    记得第一次写项目的时候,傻傻的数据库一张表,代码里就写一个DAO类,几张表就写几个DAO类,大量的反复代码,自己粘着都嫌烦,后来接触了Hibernate,不得不说对我们这样的小白用处还是非常大的.那么 ...

  5. 【机器学习算法-python实现】协同过滤(cf)的三种方法实现

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景       协同过滤(collaborative filtering)是推荐系统经常使用的一种方法.c ...

  6. 【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正則表達式匹配)】

    [010-Regular Expresssion Matching(正則表達式匹配)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Implement regular ...

  7. iOS多线程编程(四)------ GCD(Grand Central Dispatch)

    一.简单介绍 是基于C语言开发的一套多线程开发机制.也是眼下苹果官方推荐的多线程开发方法.用起来也最简单.仅仅是它基于C语言开发,并不像NSOperation是面向对象的开发.而是全然面向过程的.假设 ...

  8. 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)

    这里能够简单的改动随意函数的返回地址.能够做到自己定义EIP的指向,就可以运行当前进程空间的随意指令,这里仅仅是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取随意 ...

  9. windows下在eclipse上远程连接hadoop集群调试mapreduce错误记录

    第一次跑mapreduce,记录遇到的几个问题,hadoop集群是CDH版本的,但我windows本地的jar包是直接用hadoop2.6.0的版本,并没有特意找CDH版本的 1.Exception ...

  10. How MySQL Opens and Closes Tables refuse connections 拒绝连接的原因 file descriptors

    MySQL :: MySQL 5.7 Reference Manual :: 8.4.3.1 How MySQL Opens and Closes Tables https://dev.mysql.c ...