博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 使用CoreLocation实现定位(经纬度、海拔、速度、距离等)
阅读量:6949 次
发布时间:2019-06-27

本文共 2658 字,大约阅读时间需要 8 分钟。

hot3.png

CoreLocation是iOS中一个提供设备定位的框架。通过这个框架可以实现定位处理,从而获取位置数据,比如经度、纬度、海拔信息等。

 

1,定位精度的设置

定位服务管理类CLLocationManager的desiredAccuracy属性表示精准度,有如下6种选择:

kCLLocationAccuracyBestForNavigation :精度最高,一般用于导航

kCLLocationAccuracyBest : 精确度最佳
kCLLocationAccuracyNearestTenMeters :精确度10m以内
kCLLocationAccuracyHundredMeters :精确度100m以内
kCLLocationAccuracyKilometer :精确度1000m以内
kCLLocationAccuracyThreeKilometers :精确度3000m以内

 

2,位置管理器更新频率的设置

我们无法直接控制位置管理器更新的频率,但可使用位置管理器的distanceFilter属性(单位米)进行间接控制。

它指设备(水平或垂直)移动多少米后才将另一个更新发送给委托。定位要求的精度越高,distanceFilter属性的值越小,应用程序的耗电量就越大。

 

3,计算两个坐标间的距离

通过CCLocation对象的distanceTo方法,可以得到两个坐标间的距离,单位是米。

1

2

3

4

var currentLocation = CLLocation(latitude: 52.104526, longitude: 51.111151)

var targetLocation = CLLocation(latitude: 52.105526, longitude: 51.141151)

var distance:CLLocationDistance = currentLocation.distanceFromLocation(targetLocation)

println("两点间距离是:\(distance)")

4,下面通过一个样例演示如何获取设备相关的位置数据(经度,纬度,海拔,速度等信息) 

  

 

(1)在 info.plist里加入定位描述(Value值为空也可以): 

NSLocationWhenInUseDescription :允许在前台获取GPS的描述 

NSLocationAlwaysUsageDescription :允许在后台获取GPS的描述 

(2)代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

import UIKit

import CoreLocation

 

class ViewControllerUIViewControllerCLLocationManagerDelegate {

     

    //定位管理器

    let locationManager:CLLocationManager CLLocationManager()

     

    @IBOutlet weak var label1: UILabel!

    @IBOutlet weak var label2: UILabel!

    @IBOutlet weak var label3: UILabel!

    @IBOutlet weak var label4: UILabel!

    @IBOutlet weak var label5: UILabel!

    @IBOutlet weak var label6: UILabel!

    @IBOutlet weak var label7: UILabel!

     

    override func viewDidLoad() {

        super.viewDidLoad()

         

        //设置定位服务管理器代理

        locationManager.delegate = self

        //设置定位进度

        locationManager.desiredAccuracy = kCLLocationAccuracyBest

        //更新距离

        locationManager.distanceFilter = 100

        发送授权申请

        locationManager.requestAlwaysAuthorization()

        if (CLLocationManager.locationServicesEnabled())

        {

            //允许使用定位服务的话,开启定位服务更新

            locationManager.startUpdatingLocation()

            print("定位开始")

        }

    }

     

    //定位改变执行,可以得到新位置、旧位置

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        //获取最新的坐标

        let currLocation:CLLocation = locations.last!

        label1.text = "经度:\(currLocation.coordinate.longitude)"

        //获取纬度

        label2.text = "纬度:\(currLocation.coordinate.latitude)"

        //获取海拔

        label3.text = "海拔:\(currLocation.altitude)"

        //获取水平精度

        label4.text = "水平精度:\(currLocation.horizontalAccuracy)"

        //获取垂直精度

        label5.text = "垂直精度:\(currLocation.verticalAccuracy)"

        //获取方向

        label6.text = "方向:\(currLocation.course)"

        //获取速度

        label7.text = "速度:\(currLocation.speed)"

    }

}

原文出自:  转载请保留原文链接:

转载于:https://my.oschina.net/JiangTun/blog/687355

你可能感兴趣的文章
JSP 服务器响应
查看>>
一步步制作rpm包
查看>>
App支付签名错误
查看>>
kali linux虚拟wifi搭建
查看>>
jquery设置元素的readonly和disabled
查看>>
监控文件是否被修改
查看>>
Linux学习笔记:Rsync
查看>>
转:APK Crack
查看>>
Beanstalkd协议 二(任务的生命周期)
查看>>
jvisualvm远程监控 visualgc插件 不受此jvm支持问题
查看>>
(1)Powershell简介
查看>>
zabbix客户端配置
查看>>
Logtail提升采集性能
查看>>
史上最失败的一次营销活动
查看>>
asp.net5发神经一例 ------无法加载依赖
查看>>
数据库水平切分的实现原理解析
查看>>
nova boot from volume在多主机zone下的坑
查看>>
uip中关于web服务器的简单例子
查看>>
Windows 10 ADK 1809 的变更 附下载地址
查看>>
修改win7和win8 preview双系统的开机默认启动项
查看>>