iOS之地理位置及定位系统 -- 入门笔记

这是因为xcode升级造成的定位权限设置问题。
升级xcode6、xcode7以后打开以前xcode5工程,程序不能定位。工程升级到xcode6或xcode7编译时需要iOS8 要自己写授权,不然没权限定位。
解决方法:
首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
          NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述
          NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述

设置的图示:

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

1、定位服务和地图应用的介绍 定位服务: 获取用户当前的位置信息,针对用户的位置信息做相关的数据处理。

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

  • 定位服务要掌握的:

    • 主要操作的类:CLLocationManager
    • 所属库:CoreLocation
    • 结构体:CLLocationCoordinate2D(经纬度)、CLCLocationCoorRegion(区域)
  • 地图应用需要掌握的:
    • 框架:MapKit
    • 操作类:MKMapView

2、定位服务

  • 属性:

    • desiredAccuracy设置定位精确度,这是一个常量属性,一般用best
    • distanceFilter 重新定位的最小变化距离
  • 方法:
    • 设置什么时候开启定位的状态

      • requestAlwaysAuthorization() 始终开启定位
      • requestWhenInUseAuthorization() 当app进入前台的时候开启定位(iOS8的新方法)
      • 类方法locationServicesEnabled() 是否有定位服务功能(CLLocationManager)
      • startUpdatingLocation() 开启定位
  • 代理:
    • 代理的协议:
    • 代理的方法:可以直接进入这个库的API查看,只要就是定位错误调用的代理方法,定位成功调用的代理方法等等;
  • 涉及到的对象
    • locations: CLLocation 该CLLocation对象的属性:

      • coordinate

        • longitude/latitude
  • 英语词汇积累:
    • accuracy 英 ‘ækj?r?s? n. [数] 精确度,准确性
    • filter 英 ‘f?lt? 滤波器 过滤器;筛选;滤光器 过滤;渗透;用过滤法除去
    • //
      // ViewController.swift
      // LocationManager
      //
      // Created by HEYANG on 16/1/26.
      // Copyright © 2016年 HEYANG. All rights reserved.
      //

      import UIKit

      // 需要导入CoreLocation框架
      import CoreLocation

      class ViewController: UIViewController,CLLocationManagerDelegate {

      // 声明一个全局变量
      var locationManager:CLLocationManager!

      override func viewDidLoad() {
      super.viewDidLoad()
      locationManager = CLLocationManager()

      // 设置定位的精确度
      locationManager.desiredAccuracy = kCLLocationAccuracyBest

      // 设置定位变化的最小距离 距离过滤器
      locationManager.distanceFilter = 50

      // 设置请求定位的状态
      if #available(iOS 8.0, *) {
      locationManager.requestWhenInUseAuthorization()
      } else {
      // Fallback on earlier versions
      print("hello")
      }//这个是在ios8之后才有的

      // 设置代理为当前对象
      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 > 0
      {
      let locationInfo = locations.last!
      let alert:UIAlertView = UIAlertView(title: "获取的地理坐标",
      message: "经度是:\(locationInfo.coordinate.longitude),维度是:\(locationInfo.coordinate.latitude)",
      delegate: nil, cancelButtonTitle: "是的")
      alert.show()
      }
      }
      }

    • //
      // ViewController.m
      // LocationManager
      //
      // Created by HEYANG on 16/1/26.
      // Copyright © 2016年 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 = 50;

      // 设置定位服务的使用状态
      [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:(NSArray<CLLocation *> *)locations{
      if (locations.count > 0) {
      CLLocation* location = locations.lastObject;
      CLLocationCoordinate2D coordinate2D = location.coordinate;
      NSString* message = [NSString stringWithFormat:@"经度:%lf,维度是:%lf",coordinate2D.longitude,coordinate2D.latitude];
      UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"显示当前位置的经纬度"
                      message:message delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
      [alertView show];

      }
      }

      @end

时间: 2024-09-30 04:09:00

iOS之地理位置及定位系统 -- 入门笔记的相关文章

iOS 即时通讯,从入门到 “放弃”?

原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. —— 由宇朋Look分享 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo:iOS即时通讯,从入门到“放弃”?(demo)可以打开项目先预览效果,对照着进行阅读. 言归正传,首先我们来总

Angular入门笔记

AngularJS(下面简称其为ng)是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易. 一.历史 AngularJS最初由Misko Hevery和Adam Abrons于2009年开发,后来成为了Google公司的项目. 当前最新版是:1.2.0-beta.10 当前最新稳定版是:1.2.16 二.授权 A

APPium入门笔记

环境配置 1.首先安装Appium所需要的插件 l Install node.js (includesnpm, the node.js package manager). http://nodejs.org/ l java运行环境 http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=otnjp 此为必须环境,请优先安装,IOS和WIN7一样需要(使用稳定的最新版即可) 2.请明确自己的

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持 调试(debug)是软件开发的一个重要环节,对于嵌入式开发而言这个环节其实比较依赖一些硬件资源(硬件debugger)的支持.传统的嵌入式系统的调试比较依赖断点(breakpoint)和单步调试(single step through).而 ARM cortex-M 系列的芯片其实有很强的CoreSight片上调试支持,实际上就是一个小的调试硬件,作为ARM的标准,内嵌在ARM的芯片里.在ARM自家的调试器ULINK-pro等的帮

iOS开发之Auto Layout入门

随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享.  什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往Autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 为什么要用Auto Layout? Autolayout能解决不同屏幕(iPhone4,iPhone5,iPad...)之间的适配问题. 在iPhone4时代开发者只需要适

Ajax 入门笔记

AJAX =Asynchronous Javascript + XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. XMLHttpRequest 是 AJAX 的基础.XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1:创建 XMLHttpRequest 对象 为

iBatis 入门笔记

iBatis简介 iBatis是一个"半自动"的轻量级O/R Mapping框架. O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象.数据库和映射器之间相互独立. 通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接.关闭连接的代码而眼花头昏. 何为"半自动"?    这里的半自动是与Hibernate这样的O/R Mapping方案对比得出