1.前言                              

发现在很多的社交软件都引入了地图和定位功能,如果我们要想实现这两大功能,需要利用到两个框架:MapKit和CoreLocation
 
我们先来看看CoreLocation框架:
 
它可以使用硬件设备来进行定位服务,不需要地图,精度相对略差,省电。
 
而MapKit框架:
 
能够使应用程序做一些地图展示与交互的相关功能,必须有地图,精度相对较高,费电。
 
下面我就说说它的能实现的一些常用功能

2.地图常见操作                        

@property (weak, nonatomic) IBOutletMKMapView *mapView;

2.1. 标记用户当前位置、跟踪用户位置                        

     // 标记用户当前位置
// 跟踪用户位置
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];

2.1. 地图的类型                                  

可以通过设置MKMapView的mapViewType设置地图类型
MKMapTypeStandard 普通地图
MKMapTypeSatellite 卫星云图
MKMapTypeHybrid普通地图覆盖于卫星云图之上                     
 // 地图类型
[_mapView setMapType:MKMapTypeHybrid];

2.2.通过代理的方式可以跟踪用户的位置变化                     

2.2.1.mapViewWillStartLoadingMap: 当地图界面将要加载时调用
2.2.2.mapView:viewForAnnotation: 当地图上有大头针时调用
2.2.3.mapViewWillStartLocatingUser:当准备进行一个位置定位时调用
2.2.4.mapView:regionDidChangeAnimated: 当显示的区域发生变化时调用
 

2.2.5.mapView:didUpdateUserLocation:当用户位置发生变化时调用

 // 通过代理的方式可以跟踪用户的位置变化
_mapView.delegate = self;
#pragma mark - 地图代理方法
#pragma mark 会频繁调用,非常费电
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{ // 显示用户周边信息 拉近地图 设置地图显示区域

    CLLocationCoordinate2D center = userLocation.location.coordinate;



    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(center, 100.0, 100.0);



    [mapView setRegion:region animated:YES];

}

2.3.添加默认大头针(地标)                              

1.通过MapView的addAnnotation方法可以添加一个大头针到地图上
2.通过MapView的addAnnotations方法可以添加多个大头针到地图上
头文件里说明:- (void)addAnnotation:(id <MKAnnotation>)annotation;
4.说明需要传入一个遵守了MKAnnotation协议的对象
     MyAnnotation *annotation2 = [[MyAnnotation alloc] init];
annotation2.coordinate = CLLocationCoordinate2DMake(, );
annotation2.title = @"重庆";
annotation2.subtitle = @"重庆详细描述";
annotation2.imageName = @"head0";
     [_mapView addAnnotation:annotation2];

2.4.添加自定义大头针(重用地标)                            

 #pragma mark 自定义大头针视图
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
// 判断annotation参数是否是MyAnnotation
// 如果不是MyAnnotaion说明是系统的大头针,无需做处理
if (![annotation isKindOfClass:[MyAnnotation class]]) {
// 使用系统默认的大头针
return nil;
} // 可重用标示符
static NSString *ID = @"MyAnno"; // 查询可重用的大头针
MKAnnotationView *annoView = [mapView dequeueReusableAnnotationViewWithIdentifier:ID]; // 如果没有找到,再去实例化大头针
if (annoView == nil) {
annoView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID]; // 自定义大头针视图,如果要接受用户响应,需要设置此属性
annoView.canShowCallout = YES;
} // 设置大头针
annoView.annotation = annotation;
// 转换成MyAnnotation
// 设置大头针视图的图像
MyAnnotation *anno = annotation;
annoView.image = [UIImage imageNamed:anno.imageName]; NSLog(@"自定义大头针"); return annoView;
}

3.定位                              

   // 定位服务管理器
CLLocationManager *_locationManager; // 使用地理编码器
CLGeocoder *_geocoder;

1. 在开发LBS类的应用时,获取用户定位信息之前,一定要判断一下定位服务是否允许  

locationServicesEnabled

     if (![CLLocationManager locationServicesEnabled]) {
NSLog(@"定位服务不可用!");
return;
}

2. 开启定位,获取自己的当前位置                            

[_locationManager startUpdatingLocation];

3. 根据经纬度,知道准确的地名                              

reverseGeocodeLocation

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"位置变化: %@", locations[]); // 根据经纬度查找(去苹果后台查找准确的位置,必须联网才能用)
[_geocoder reverseGeocodeLocation:locations[] completionHandler:^(NSArray *placemarks, NSError *error) { NSLog(@"%@", placemarks[]); }];
}

4. 根据定名,获取到经纬度,一般用在导航                        

geocodeAddressString

    [_geocoder geocodeAddressString:@"王府井" completionHandler:^(NSArray *placemarks, NSError *error) {

         for (CLPlacemark *placemark in placemarks) {
NSLog(@"aaaa______%@ %lu", placemark, (unsigned long)placemarks.count);
} }];

                                                             清澈Saup

iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)的更多相关文章

  1. [iOS 利用MapKit和CoreLocation框架打造精简的定位和导航]

    运行效果:            一.利用<CoreLocation/CoreLocation.h>定位 创建变量 CLLocationManager *locationManager , ...

  2. iOS:地图:MapKit和CoreLocation

    地图:MapKit和CoreLocation 简介: 现在很多的社交软件都引入了地图和定位功能,要想实现这2大功能,那就不得不学习其中的2个框架:MaKit和CoreLocation CoreLoca ...

  3. iOS开发拓展篇—CoreLocation简单介绍

    iOS开发拓展篇—CoreLocation简单介绍 一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 ...

  4. iOS开发拓展篇—CoreLocation定位服务

    iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...

  5. iOS开发拓展篇—CoreLocation地理编码

    iOS开发拓展篇—CoreLocation地理编码 一.简单说明 CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写. 1.使用CLGeocoder可以完成“地理编码 ...

  6. iOS-MapKit的使用笔记

    对于地图和定位,苹果公司提供给了两个框架: MapKit:用于地图展示 Core Location :用于地理定位 这次总结MapKit:       同样,在使用MapKit时首先要导入头文件: 与 ...

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

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

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

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

  9. iOS中的地图和定位

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

随机推荐

  1. 网页股票期货历史数据(API)

    //[和讯数据] //大商所DCE.郑商所CZCE.上期所SHFE3.中金所CFFEX //期货1分钟线http://webftcn.hermes.hexun.com/ ... I1709&d ...

  2. Spark运行模式_本地伪集群运行模式(单机模拟集群)

    这种运行模式,和Local[N]很像,不同的是,它会在单机启动多个进程来模拟集群下的分布式场景,而不像Local[N]这种多个线程只能在一个进程下委屈求全的共享资源.通常也是用来验证开发出来的应用程序 ...

  3. ubuntu 防止软件包自动更新

    阻止软件包升级 有两种方法阻止软件包升级,使用dpkg,或者在Woody中使用APT. 使用dpkg,首先导出软件包选择列表: dpkg --get-selections \* > select ...

  4. 使用bison和yacc制作脚本语言(2)

    我们先来想一下语法 一般脚本语言不需要定义类型直接在赋值的时候确定 我们主要考虑一下变量的类型 a = 1; b = 1.1; c = "str"; 一般来讲,我们使用这三种类型, ...

  5. Java设计模式(7)——结构型模式之适配器模式(Adapter)

    一.概述 概念 其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB:这里的转接头一方面需要查在typeC上,一方 ...

  6. Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...

  7. Java:多线程中的volatile

    一.为什么使用volatile 首先,通过一段简单的代码来理解为什么要使用volatile: public class RunThread extends Thread{ private boolea ...

  8. SQL计算出百分比

    有clients和lead_sources俩表.mysql数据库. lead_sources表结构类似: clients表中的lead_source_id是外键.现在要统计某时间段内client内每种 ...

  9. 第三模块:面向对象&网络编程基础 第1章 面向对象

    我的失败与梦想(一) 我的失败与梦想之为何创办路飞学城 01-编程范式 02-面向过程编程 03-面向对象编程介绍 04-定义类与实例化出对象 05-如何使用类 06-如何使用对象 07-属性查找与绑 ...

  10. mysql新手进阶01

    生活不止眼前的苟且,还有诗和远方. 请根据给出的数据库表结构来回答相应问题: DEPT (DEPTNO INT, DNAME VARCHAR(14),LOC VARCHAR(13)); EMP (EM ...