IOS入门笔记之地理位置定位系统

2016-02-19 09:03 13 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的IOS入门笔记之地理位置定位系统,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最常见的就是地图导航,地图导航更需要定位服务,然后根据用户的目的地选出一条路线。其实,作为手机用户这么长时间,或多或少会发现在有些app应用首次在你的手机安装成功后,首次启动可能就会提示"是否同意XXx(比如百度浏览器)获取当前位置"等这样一类的信息。可见地理位置及定位系统是企业app开发必不可少的技能。

本章将提供Swift版本和Objective-C两个版本的入门代码,分别实现显示当前手机或者是模拟器的地理经纬度坐标。

写在正式学习前的小贴士:

这是因为xcode升级造成的定位权限设置问题。
升级xcode6、xcode7以后打开以前xcode5工程,程序不能定位。工程升级到xcode6或xcode7编译时需要iOS8 要自己写授权,不然没权限定位。

解决方法:

首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
NSLocationWhenInUseUsageDescription //允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription //允许在前、后台获取GPS的描述

设置的图示:

好了,如果设置好了,那就正式进入编码学习吧,首先熟悉苹果提供的关于定位服务相关的类,方法以及属性:

1、定位服务和地图应用的介绍

定位服务: 获取用户当前的位置信息,针对用户的位置信息做相关的数据处理。

地图应用: 根据实际需求展示地图和周边环境信息,基于用户当前位置展示用户所关注的地图位置信息、以及为用户导航。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

•定位服务要掌握的:

•主要操作的类:CLLocationManager

•所属库:CoreLocation

•结构体:CLLocationCoordinate2D(经纬度)、CLCLocationCoorRegion(区域)

•地图应用需要掌握的:

•框架:MapKit

•操作类:MKMapView

2、定位服务

•属性:

•desiredAccuracy设置定位精确度,这是一个常量属性,一般用best
•distanceFilter 重新定位的最小变化距离

方法:

•设置什么时候开启定位的状态 •requestAlwaysAuthorization() 始终开启定位
•requestWhenInUseAuthorization() 当app进入前台的时候开启定位(iOS8的新方法)
•类方法locationServicesEnabled() 是否有定位服务功能(CLLocationManager)
•startUpdatingLocation() 开启定位

代理:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

•代理的协议:
•代理的方法:可以直接进入这个库的API查看,只要就是定位错误调用的代理方法,定位成功调用的代理方法等等;

涉及到的对象

•locations: CLLocation 该CLLocation对象的属性: •coordinate •longitude/latitude

英语词汇积累:

•accuracy 英 'ækjʊrəsɪ n. [数] 精确度,准确性
•filter 英 'fɪltə 滤波器 过滤器;筛选;滤光器 过滤;渗透;用过滤法除去

下面提供的是Swift源码:

//// ViewController.swift// LocationManager//// Created by HEYANG on //.// Copyright © 年 HEYANG. All rights reserved.//import UIKit// 需要导入CoreLocation框架import CoreLocationclass ViewController: UIViewController,CLLocationManagerDelegate {// 声明一个全局变量var locationManager:CLLocationManager!override func viewDidLoad() {super.viewDidLoad()locationManager = CLLocationManager()// 设置定位的精确度locationManager.desiredAccuracy = kCLLocationAccuracyBest// 设置定位变化的最小距离 距离过滤器locationManager.distanceFilter = // 设置请求定位的状态if #available(iOS ., *) {locationManager.requestWhenInUseAuthorization()} else {// Fallback on earlier versionsprint("hello")}//这个是在ios之后才有的// 设置代理为当前对象locationManager.delegate = self;if CLLocationManager.locationServicesEnabled(){// 开启定位服务locationManager.startUpdatingLocation()}else{print("没有定位服务")}}// 定位失败调用的代理方法func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {print(error)}// 定位更新地理信息调用的代理方法func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {if locations.count  {let locationInfo = locations.last!let alert:UIAlertView = UIAlertView(title: "获取的地理坐标",message: "经度是:(locationInfo.coordinate.longitude),维度是:(locationInfo.coordinate.latitude)",delegate: nil, cancelButtonTitle: "是的")alert.show()}}}

下面是Objective-C的源码:

//// ViewController.m// LocationManager//// Created by HEYANG on //.// Copyright © 年 HEYANG. All rights reserved.//#import "ViewController.h"#import CoreLocation/CoreLocation.h@interface ViewController () CLLocationManagerDelegate/** 全局定位对象 */@property (nonatomic,strong)CLLocationManager *locationManager;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];CLLocationManager* locationManager = [[CLLocationManager alloc] init];// 设置定位精确度locationManager.desiredAccuracy = kCLLocationAccuracyBest;// 设置定位变化最小距离locationManager.distanceFilter = ;// 设置定位服务的使用状态[locationManager requestWhenInUseAuthorization]; locationManager.delegate = self;if ([CLLocationManager locationServicesEnabled]) {[locationManager startUpdatingLocation];}else{NSLog(@"本机不支持定位服务功能");}self.locationManager = locationManager;}// 定位失败调用的代理方法-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{NSLog(@"错误信息:%@",error);}// 定位数据更新调用的代理方法-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArrayCLLocation * *)locations{if (locations.count  ) {CLLocation* location = locations.lastObject;CLLocationCoordinateD coordinateD = location.coordinate;NSString* message = [NSString stringWithFormat:@"经度:%lf,维度是:%lf",coordinateD.longitude,coordinateD.latitude];UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"显示当前位置的经纬度"                 message:message delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];[alertView show];}}@end 

以上是图老师小编给大家分享的IOS入门笔记之地理位置定位系统,希望对大家有所帮助。

来源:http://www.tulaoshi.com/n/20160219/1589370.html

延伸阅读
《轩辕剑外传苍之涛》地理位置     太华山: 其实它就在秦国都城旁边。  在大地图时要先穿过崤山山道。然后后就可以看到太华山了     泰山迷宫: 其实这里并不难走,沿着梯级方向走上去,之后就向上走, 分支路大多都是放有宝箱的地方。一直走到发现封印蛋就对了。  &n...
飞信如何清除我的地理位置   1)首先先打开,进去之后点击。   2)接着点击,然后点击右上角的。   3)弹出提示后点击,最后点击。  
基于地理位置的暗杀游戏:TAG Mobile 基于地理位置的应用还在源源不断地涌现,总体来看,这些应用中大多数都集中在消费、社交等领域,而来自美国的viaPlace LLC最近则将LBS概念引入了游戏开发中,带来了一款基于地理位置的暗杀游戏,让习惯了传统第一人称射击游戏的玩家耳目一新。 游戏名称:TAG Mobile 支持平台:iOS ...
微信伪装地理位置图文教程 经常玩微信的朋友看过来,修改你微信所在的地理位置,你可以在地图上将任何地方设置为你微信所在的位置,微信搭讪周围的人不再受自己当前所在区域限制。帮你的微信,精准定位到世界上任何一个有人迹的角落,然后搭讪那个地方的人。比如:你人在深圳搬砖,但可穿越到日本东京某家酒店,然后搭讪那的妹子:嘿,你...
手机Facebook发状态如何分享地理位置   1)打开手机Facebook,点击左下角的,然后点击。   2)在弹出页面点击下方的,然后应用会为你搜索附近的地点,找到并点击你所在的地方   3)然后该地点就已经在你的状态编辑框中,点击右上角即可把带有自己地里位置的状态发送出去了。  

经验教程

15

收藏

61
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部