地图:MapKit和CoreLocation

简介:
现在很多的社交软件都引入了地图和定位功能,要想实现这2大功能,那就不得不学习其中的2个框架:MaKit和CoreLocation
CoreLocation框架可以使用硬件设备来进行定位服务
MapKit框架能够使应用程序做一些地图展示与交互的相关功能
几乎所有的iOS设备都支持位置服务,不过在使用位置服务之前,最好检查一下可用性
手机定位的三种方式:手机基站、WIFI、GPS
 
添加框架:

#import <MapKit/MapKit.h>

#import <CoreLocation/CoreLocation.h>

添加显示地图的MKMapView控件 :

地图的类型 :

可以通过设置MKMapView的mapViewType设置地图类型
MKMapTypeStandard 普通地图(左图)
MKMapTypeSatellite 卫星云图 (中图)
MKMapTypeHybrid 普通地图覆盖于卫星云图之上(右图) 
 
   
MapView的代理:
MapView会将一些事件传递给它的代理(遵守MKMapViewDelegate协议),代理方法如下:
mapViewWillStartLoadingMap: 当地图界面将要加载时调用
mapView:viewForAnnotation: 当地图上有一些动画效果展示\加载时调用
mapViewWillStartLocatingUser:当准备进行一个位置定位时调用
mapView:regionDidChangeAnimated: 当显示的区域发生变化时调用
mapView:didUpdateUserLocation:当用户位置发生变化时调用
 

如何添加大头针(地标):

通过MapView的addAnnotation方法可以添加一个大头针到地图上
通过MapView的addAnnotations方法可以添加多个大头针到地图上
–(void)addAnnotation:(id <MKAnnotation>)annotation;
说明:需要传入一个遵守了MKAnnotation协议的对象
 
基本步骤为:
<1>新建一个遵守MKAnnotation协议的类:

@interface MyAnnotation : NSObject <MKAnnotation>

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

@property (nonatomic, copy) NSString *title;

@property (nonatomic, copy) NSString *subtitle;

@end

<2>添加Annotation:

MyAnnotation *anno = [[MyAnnotation alloc] init];

anno.title = @“中国";

anno.subtitle = @“北京”;

//经度和纬度

anno.coordinate = CLLocationCoordinate2DMake(40, 110);

//添加大头针到地图中

[_mapView addAnnotation:anno];

// 让地图挪动到对应的位置(经纬度交叉处)

[_mapView setCenterCoordinate:anno.coordinate animated:YES];

自定义大头针:

实现MapView的代理方法

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

{

static NSString *ID = @"anno";

MKPinAnnotationView *annoView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];

if (annoView == nil) {

annoView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:ID];

// 显示气泡

annoView.canShowCallout = YES;

// 设置绿色

annoView.pinColor = MKPinAnnotationColorGreen;

}

return annoView;

}

注意:可以通过设置MapAnnotationView的image属性来自定义大头针显示的图片
 
 
请求用户批准定位:
在iOS8,要想获得用户的位置,必须经过用户批准授权
开发者可以在Info.plist中添加两个配置项
–NSLocationAlwaysUsageDescription
–NSLocationWhenInUseUsageDescription
 
通过两个实例方法获取授权
–requestWhenInUseAuthorization
–requestAlwaysAuthorization
 
 
获得用户的位置:

// 定位管理器

_mgr = [[CLLocationManager alloc] init];

// 获取授权

[_mgr requestAlwaysAuthorization];

// 设置代理

_mgr.delegate = self;

// 设置精度

_mgr.desiredAccuracy = kCLLocationAccuracyBest;

// 开始获取用户的位置

[_mgr startUpdatingLocation];

定位管理器的代理方法:

当用户的位置发生改变时,就会不断调用代理方法,比如

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations•

当定位失败时,会调用

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

通过地址获得经纬度 :

CLGeocoder:地理信息编解码

地址 -> 经纬度 -> 大头针显示

_geocoder = [[CLGeocoder alloc] init];

[_geocoder geocodeAddressString:@“东三旗" completionHandler:^(NSArray *placemarks, NSError *error) {

//没有找到符合要求的地址

if (placemarks.count == 0) return;

// 取出位置

CLPlacemark *firstPlacemark = placemarks[0];

// 添加大头针

MyAnnotation *anno = [[MyAnnotation alloc] init];

anno.title = firstPlacemark.name; // 名称

anno.subtitle = firstPlacemark.country; // 国家

anno.coordinate = firstPlacemark.location.coordinate; // 坐标

[_mapView addAnnotation:anno];

}];

 
 
 
 
 

iOS:地图:MapKit和CoreLocation的更多相关文章

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

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

  2. iOS地图----MapKit框架

    1.MapKit框架使用前提 ①导入框架 ②导入主头文件 #import <MapKit/MapKit.h> ③MapKit框架使用须知 MapKit框架中所有数据类型的前缀都是MK Ma ...

  3. IOS之【地图MapKit】

    iOS地图位置开发   iPhone SDK提供了三个类来管理位置信息:CLLocation CLLocationManager 和 CLLHeading(不常用).除了使用GPS来获取当前的位置信息 ...

  4. 【高德API】如何利用MapKit开发全英文检索的iOS地图

    原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...

  5. iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)

    1.前言 发现在很多的社交软件都引入了地图和定位功能,如果我们要想实现这两大功能,需要利用到两个框架:MapKit和CoreLocation   我们先来看看CoreLocation框架:   它可以 ...

  6. iOS学习笔记-地图MapKit入门

    代码地址如下:http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错漏 ...

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

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

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

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

  9. 【iOS地图开发】巧妙打造中英文全球地图

    地图开发的同学们经常遇到这样的问题,国内版地图开发,用高德或者百度就行了.但是,国外的地图怎么办?这里告诉大家,如果利用iOS地图,打造中英文的,国内国外都能用的,全球地图. 制作全英文地图的展示并不 ...

随机推荐

  1. SQL SERVER中查询无主键的SQL

    --生成表 IF  EXISTS ( SELECT  name                FROM    sysobjects                WHERE   xtype = 'u' ...

  2. 两个SVN仓库之间代码的转移

    背景: 1.公司的svn服务器架设在了公司内网环境中,没有公网ip,所以离开了公司环境就无法访问(更新.提交...)svn服务器了: 2.四个开发人员去客户现场开发新的需求,在现场找了一台服务器临时搭 ...

  3. 行转列(FOR XML PATH)

    SELECT (SELECT ac.ColName+',' FROM T1 AS ac FOR XML PATH('')) AS ColName, (SELECT ac.colTitle+',' FR ...

  4. hdu 1853 Cyclic Tour 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 There are N cities in our country, and M one-way ...

  5. log4j 配置实例

    1. http://hehongwei44.iteye.com/blog/1494999 2. http://maymay.iteye.com/blog/1275432 #log4j.rootLogg ...

  6. NYOJ-205 求余数 AC 分类: NYOJ 2014-02-02 12:30 201人阅读 评论(0) 收藏

    这题目看一眼以为难度评级出错了,只是一个求余数的题目,,后来才发现,位数小于百万位,,,我还以为是大小小于百万呢,所以借鉴了另一大神的代码, 用大数,重点是同余定理: (a+b)mod m=((a m ...

  7. Codeforces Round #274 (Div. 2)

    A http://codeforces.com/contest/479/problem/A 枚举情况 #include<cstdio> #include<algorithm> ...

  8. JS模板引擎 :ArtTemplate (1)

    1.为什么需要用到模板引擎 我们在做前端开发的时候,有时候经常需要根据后端返回的json数据,然后来生成html,再显示到页面中去. 例如这样子: var data = [ {text: " ...

  9. Js高程笔记->引用类型

    1 . Object 对象    2 . Array 对象 :       检测方法:ES5 : isArray       转换方法: toLocaleString , toString , val ...

  10. Java多线程程序设计详细解析

    一.理解多线程 多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立. 线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线 ...