Swift - 使用CoreLocation实现定位经纬度、海拔、速度、距离等

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

varcurrentLocation =CLLocation(latitude: 52.104526,longitude: 51.111151)

vartargetLocation =CLLocation(latitude: 52.105526,longitude: 51.141151)

vardistance: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

importUIKit

importCoreLocation

classViewController:UIViewController,CLLocationManagerDelegate{

//定位管理器

letlocationManager:CLLocationManager=CLLocationManager()

@IBOutletweakvarlabel1:UILabel!

@IBOutletweakvarlabel2:UILabel!

@IBOutletweakvarlabel3:UILabel!

@IBOutletweakvarlabel4:UILabel!

@IBOutletweakvarlabel5:UILabel!

@IBOutletweakvarlabel6:UILabel!

@IBOutletweakvarlabel7:UILabel!

overridefuncviewDidLoad() {

super.viewDidLoad()

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

locationManager.delegate =self

//设置定位进度

locationManager.desiredAccuracy = kCLLocationAccuracyBest

//更新距离

locationManager.distanceFilter = 100

////发送授权申请

locationManager.requestAlwaysAuthorization()

if(CLLocationManager.locationServicesEnabled())

{

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

locationManager.startUpdatingLocation()

print("定位开始")

}

}

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

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

//获取最新的坐标

letcurrLocation: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)"

}

}


原文出自:www.hangge.com转载请保留原文链接:http://www.hangge.com/blog/cache/detail_783.html

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...