讲到iOS的定位呢,首先先介绍一下定位这东西。iOS系统自带的定位服务可以实现很多需求。比如:获取当前经纬度,获取当前位置信息等等。

一、介绍

1、定位 使用CoreLocation框架
    2、功能
     (1)基础定位
     (2)地理编码(把文字位置转换成地理位置编码) 反编码(把编码转换成文字位置)
    3、ios8 ios9之后的改变
     (1)添加了定位服务的目的
         《1》NSLocationAlwaysUsageDescription
         《2》NSLocationWhenInUseUsageDescription (写在info.plist里面,作为使用定位功能的提示文字 可以同时出现)
         《3》如果忘记写 就不能使用定位功能,并且没有任何提示信息
     (2)需要请求用户授权
          《1》requestAlwaysAuthorization
          《2》requestWhenInUseAuthorization
      (3)ios9 喊Home键进入后台 如果需要继续定位
          《1》需要在Info.plist文件里面添加Required background modes---->数组里面添加App registers for location updates   如果不添加这对键值,却使用后台定位功能会直接崩溃
          《2》在代码里面 allowsBackgroundLocationUpdates 需要将这个属性设置成YES,满足《1》、《2》才可以使用定位
  二、使用
    1、使用定位服务所需的相关类和其他数据类型
    (1)CLLocationManager  定位的管理者 可以通过这个类创建定位服务的功能
    (2)CLLocation  地理位置信息相关的类
    (3)CLLocationCoordinate2D  经纬度的一个信息类型 坐标的数据类型(结构体)
    (4)CLRegion  表示范围的类
    (5)CLGeocoder   地理编码  反地理编码的类
    (6)CLPlacemark  表示地标的类(用文字表示出来的) 里面包含了location
    (7)CLHeading  表示导航方向的类 航向
    (8)CLCircular
     (9)CLLocationDistance:距离
    2、具体使用
     (1)定位
          《0》检查用户是否在设置中 打开了定位服务
          《1》初始化定位对象
          《2》info中添加描述用使用定位的目的,并向用户申请授权
          《3》挂上代理  并实现代理方法
          《4》如果需要使用后台定位服务需要在 info中添加Required background modes 这个key 以及它里面的元素App registers for location updates
          《5》开始定位
     (2)地理编码 反编码
 
 CLLocation位置信息
      <1>coordinate:经纬度
         1、latitude 纬度
         2、longitude  经度
      <2>altitude:高度
      <3>horizontalAccuracy:水平的精准度,可以用它来检测是否定位成功
      <4>verticalAccuracy:垂直的精准度
      <5>course:0.0~359.9 真北方向为0.0
      <6>speed:速度
      <7>timestamp:时间戳
      <8>floor——>楼层信息
以上大致介绍完毕,下面要进行实战:

获取当前经纬度

首先导入#import <CoreLocation/CoreLocation.h>,定义CLLocationManager的实例,实现CLLocationManagerDelegate。

@interface ViewController ()<CLLocationManagerDelegate>{CLLocationManager *_locationManager;}@end

开始定位的方法:

- (void)startLocating{if([CLLocationManager locationServicesEnabled]){_locationManager = [[CLLocationManager alloc] init];//设置定位的精度[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];_locationManager.distanceFilter = 100.0f;_locationManager.delegate = self;if ([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0){[_locationManager requestAlwaysAuthorization];[_locationManager requestWhenInUseAuthorization];}//开始实时定位[_locationManager startUpdatingLocation];}}

实现代理方法:

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{NSLog(@"Longitude = %f", manager.location.coordinate.longitude);NSLog(@"Latitude = %f", manager.location.coordinate.latitude);[_locationManager stopUpdatingLocation];}

获得当前的位置信息

在上面的代理

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{NSLog(@"Longitude = %f", manager.location.coordinate.longitude);NSLog(@"Latitude = %f", manager.location.coordinate.latitude);[_locationManager stopUpdatingLocation];CLGeocoder * geoCoder = [[CLGeocoder alloc] init];[geoCoder reverseGeocodeLocation:manager.location completionHandler:^(NSArray *placemarks, NSError *error) {for (CLPlacemark * placemark in placemarks) {NSDictionary *test = [placemark addressDictionary];//  Country(国家)  State(城市)  SubLocality(区)NSLog(@"%@", [test objectForKey:@"Country"]);NSLog(@"%@", [test objectForKey:@"State"]);NSLog(@"%@", [test objectForKey:@"SubLocality"]);NSLog(@"%@", [test objectForKey:@"Street"]);}}];}

这样就很简单获取了当前位置的详细信息。

获得某一地点的经纬度

- (void)getLongitudeAndLatitudeWithCity:(NSString *)city{//city可以为中文NSString *oreillyAddress = city;CLGeocoder *myGeocoder = [[CLGeocoder alloc] init];[myGeocoder geocodeAddressString:oreillyAddress completionHandler:^(NSArray *placemarks, NSError *error) {if ([placemarks count] > 0 && error == nil){NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];NSLog(@"Longitude = %f", firstPlacemark.location.coordinate.longitude);NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);}else if ([placemarks count] == 0 && error == nil){NSLog(@"Found no placemarks.");}else if (error != nil){NSLog(@"An error occurred = %@", error);}}];}

计算两点之间的距离

-(double)distanceByLongitude:(double)longitude1
latitude:(double)latitude1 longitude:(double)longitude2
latitude:(double)latitude2{CLLocation* curLocation = [[CLLocation alloc] initWithLatitude:latitude1 longitude:longitude1];CLLocation* otherLocation = [[CLLocation alloc] initWithLatitude:latitude2 longitude:longitude2];double distance  = [curLocation distanceFromLocation:otherLocation];//单位是mreturn distance;}

首先我们可以用上面的getLongitudeAndLatitudeWithCity方法获取某一个地点的经纬度。比如我们获取北京和上海的经纬度分别为:北京Longitude = 116.405285,Latitude = 39.904989 上海Longitude = 121.472644, Latitude = 31.231706, 那么北京和上海之间的距离就是:

double distance = [self distanceByLongitude:116.405285 latitude:39.904989 longitude:121.472644 latitude:31.231706];NSLog(@"Latitude = %f", distance);

计算的是大概的距离,可能没有那么精准。输入结果为:

distance = 1066449.749194

如果能帮到你我很高兴,有好东西也给我推荐一下~互粉哦~

iOS地图定位小功能(上)相关推荐

  1. iOS地图定位导航与大头针的简单使用

    定位 1.一次定位 1.创建位置管理器 // 这里创建的管理其对象如果没有强引用,就会造成你后面的操作不会出现效果,全局变量强引用.CLLocationManager *manager = [[CLL ...

  2. google地图定位小Demo

    好几天没写博客了,今天写的是一个简单功能的google地图小demo,因为模拟器定位的经纬度默认设置为苹果公司地址,在调试-->位置  里可以修改地图的其他位置定位 测试效果       实现地 ...

  3. iOS地图定位(Map)

    1.地图的简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如     导航:去任意陌生的地方     周边:找餐馆.找酒店.找银行.找电影院     手机软件:微信摇一摇.QQ附近的人. ...

  4. 高德地图小蓝点_一会晴天一会下雨?夏日想要顺利出行 高德地图这些小功能最实用...

    不同于其他三个季节,夏天总是有很多种烦恼,变化不定的天气就是其中最为影响出行的一项因素.而面对忽晴忽雨的天气,如何才能在夏日顺利出行呢?看看高德地图的这些实用小功能吧. ·实时天气预报 高德地图可以实 ...

  5. uniapp 小程序地图定位选点功能

    <template></template> <script> import { getAddressCode } from "@/api/address& ...

  6. iOS 地图定位 地图

    地图 准备工作 导入MapKit框架(iOS5之后不在需要程序员自己导入) 导入主头文件**#import <MapKit/MapKit.h>** MapKit框架中所有的数据类型的前缀都 ...

  7. iOS 地图定位 定位

    定位 常用方法的介绍 CLLocationManager位置管理器,我们的有关于位置的方法和属性都是通过它来管理设置的. + (BOOL)locationServicesEnabled监测设备是否开启 ...

  8. java语言签到定位系统_百度地图定位签到功能

    1. 注意 key 一定要在activity 前面 android:allowBackup="true" android:icon="@mipmap/ic_launche ...

  9. 类似美团的iOS地图定位及调用苹果系统导航

    引入头文件 #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> #import "MapV ...

最新文章

  1. LeetCode实战:合并两个有序数组
  2. [Ruby编程语言].弗拉纳根_松本行弘读书笔记
  3. ObjC: 使用KVO
  4. elasticsearch 基本配置
  5. 更改Android Studio中AVD的默认路径
  6. java连接mongodb的jar包_Java实战之管家婆记账系统(1)——项目简述
  7. react 判断图片是否加载完成_React中型项目的优化实践
  8. svn增量打包部署_超详细的jenkins持续集成工作原理、功能、部署方式等介绍
  9. TokenInsight:BTC新增流量延续上升,链上活跃度保持高位运行
  10. Python中的异常处理try、exception、raise
  11. Spring(一):简介
  12. 对比了一下Hyper-v和Vmware,有发现.
  13. c语言实验11实验报告,c语言 实验报告11 12.doc
  14. 【HBuilder】前端IDE神器
  15. 对Kindle进行可用性研究
  16. 用百度脑图做思维导图
  17. 2018年第一周APP黑马榜单
  18. 制作Android系统App
  19. html的u标签去掉文字下划线代码
  20. 计算机组装与维修选择题大全,计算机组装与维修试题精选答案.跪求.

热门文章

  1. 个人博客(一)之表结构设计
  2. DiscoveryClient
  3. uniapp项目中引入iconfont图标
  4. 流氓金泰丰pctools.dll,不过Avast认为其为广告软体,杀
  5. 一文搞定MAVLINK软件协议
  6. unity网络实战开发(丛林战争)-前期知识准备(010-在服务器端解析数据)
  7. 计算机与网络杂志投稿,计算机与网络杂志
  8. 让li 横排显示的CSS代码
  9. Java基础-异常机制
  10. 常用配置及命令V1.0