日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

地图篇-01.获取用户位置

發(fā)布時(shí)間:2025/7/14 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 地图篇-01.获取用户位置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

地圖篇-01.獲取用戶位置

今天把地圖整理了一下,共享出來和大家一起分享,希望幫助到不了解的朋友,當(dāng)然很精通的朋友希望指正小生的不足.

1.說到地圖,首先要接觸一個(gè)framework -CoreLocation.framework

創(chuàng)建一個(gè)項(xiàng)目

點(diǎn)擊"+"號(hào)之后,跳轉(zhuǎn)到下個(gè)界面

導(dǎo)入完畢

2.原理:

  大家平時(shí)在使用iPhone時(shí),每下載一個(gè)App,第一次打開的時(shí)候,都會(huì)有這樣的提示

?

是吧,這時(shí)候我們?nèi)绻x擇了不允許的話,這個(gè)App是獲取不了我們的位置的,相應(yīng)的App里面涉及到位置的功能我們都用不了(比如微信和QQ的"附近的人")

所以每次我都被App的意志強(qiáng)奸,選擇允許

那么,如果選擇了不允許之后,又想選擇允許怎么辦呢?下圖

可以到設(shè)置->隱私->定位服務(wù)里面去打開定位服務(wù),所有的App,只要有定位功能的都會(huì)在這里面顯示,還可以選擇性打開自己想要打開的App定位

所以,在我們寫代碼的時(shí)候,第一步就要判斷用戶是否打開了定位服務(wù).

接下來看下圖

?

?

大家會(huì)從上圖右側(cè)看到,有的App是"使用期間",有的又是"始終",有的是"永不"

對(duì),這是一個(gè)定位的狀態(tài),或者說模式,就是說你希望什么時(shí)候用這個(gè)App的定位服務(wù),或者是不使用

點(diǎn)進(jìn)去會(huì)看到如下圖示

和下圖

大家又會(huì)發(fā)現(xiàn)在以上兩張圖片中,微博比手機(jī)淘寶多了一個(gè)字段,這是為什么呢?

首先,在iOS8之后,獲取用戶位置需要在info.plist文件中添加字段,下圖

常用字段:NSLocationAlwaysUsageDescription(始終)和NSLocationWhenInUseUsageDescription(使用期間),如果只添加一個(gè),就會(huì)像上圖那樣有的只有使用期間,或者有的只有始終,亦或者有的App兩者都有

所以,在判斷用戶打開定位服務(wù)之后,我們要判斷用戶的授權(quán)狀態(tài)

3.在寫代碼之前,先來理理邏輯:

大家都知道在日常生活中,我們使用地圖的時(shí)候,基本都是用經(jīng)緯度來表示位置(要是不知道這個(gè)的話可以問問科學(xué)家),在iOS編碼中也一樣,也是用經(jīng)緯度來表示用戶位置,大家看到的地址名字不過是地理編碼后顯示的文本.

上述步驟完成之后,我們就可以開始定位了.

4.代碼

?

1 // 2 // ViewController.m 3 // 地圖 4 // 5 // Created by admin on 16/5/21. 6 // Copyright ? 2016年 鄧駒. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 //導(dǎo)入頭文件(也可以創(chuàng)建一個(gè)pch文件,在pch文件中導(dǎo)入下面頭文件) 12 #import <CoreLocation/CoreLocation.h> 13 14 @interface ViewController ()<CLLocationManagerDelegate> 15 16 @property (nonatomic, strong) CLLocationManager *manager; 17 18 @end 19 20 @implementation ViewController 21 22 - (void)viewDidLoad { 23 [super viewDidLoad]; 24 //1.判斷用戶是否開啟定位服務(wù) 25 if (![CLLocationManager locationServicesEnabled]) { 26 NSLog(@"請(qǐng)開啟定位服務(wù)"); 27 return; 28 } 29 //2.判斷用戶授權(quán)狀態(tài) 30 if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) { 31 //請(qǐng)求用戶授權(quán) 32 //后臺(tái)可以定位 33 // [self.manager requestAlwaysAuthorization]; 34 //允許在前臺(tái)使用GPS描述,后臺(tái)不能定位 35 [self.manager requestWhenInUseAuthorization]; 36 } 37 //3.開始定位 38 [self.manager startUpdatingLocation]; 39 } 40 41 -(CLLocationManager *)manager { 42 if (!_manager) { 43 _manager = [[CLLocationManager alloc] init]; 44 //定位精度(誤差) 45 _manager.desiredAccuracy = kCLLocationAccuracyBest; 46 //位置更新的最小距離(如果不設(shè)置這個(gè)屬性,程序會(huì)一直獲取用戶當(dāng)前位置,是非常耗電的) 47 _manager.distanceFilter = 100; 48 _manager.delegate = self; 49 } 50 return _manager; 51 } 52 53 /** 54 * 當(dāng)獲取到用戶位置的時(shí)候調(diào)用 55 * 56 * @param manager 當(dāng)前manager 57 * @param locations 用戶的位置 58 */ 59 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations { 60 //獲取用戶的最新位置 61 CLLocation *userLocal = [locations lastObject]; 62 //停止定位 63 [self.manager stopUpdatingHeading]; 64 //通過經(jīng)緯度來獲取用戶位置 65 //緯度 66 CLLocationDegrees latitude = userLocal.coordinate.latitude; 67 //經(jīng)度 68 CLLocationDegrees longtitude = userLocal.coordinate.longitude; 69 NSLog(@"緯度:%f,經(jīng)度:%f",latitude,longtitude); 70 } 71 72 - (void)didReceiveMemoryWarning { 73 [super didReceiveMemoryWarning]; 74 // Dispose of any resources that can be recreated. 75 } 76 77 @end

打印結(jié)果:

1 2016-05-21 19:40:37.242 地圖[2172:76214] 緯度:37.785834,經(jīng)度:-122.406417

東經(jīng)為正數(shù),西經(jīng)為負(fù)數(shù)

取值范圍:-180~180

北緯為正數(shù),南緯為負(fù)數(shù)

取值范圍:-90~90

注意:

CLLocationManager創(chuàng)建對(duì)象,必須要用強(qiáng)引用,不然可能會(huì)提前釋放.

5.計(jì)算兩點(diǎn)間的距離

1 /** 2 * 計(jì)算兩點(diǎn)間的距離 3 */ 4 -(void)calculateDistance{ 5 CLLocation *beijing = [[CLLocation alloc] initWithLatitude:39.54 longitude:116.28]; 6 CLLocation *chengdu = [[CLLocation alloc] initWithLatitude:30.67 longitude:104.06]; 7 //計(jì)算距離(單位是米) 8 CLLocationDistance distance = [beijing distanceFromLocation:chengdu]; 9 NSLog(@"北京到成都的距離是:%f米",distance); 10 }

打印結(jié)果:

1 2016-05-21 19:50:06.315 地圖[2201:79784] 北京到成都的距離是:1483882.846655米

本節(jié)內(nèi)容到這就完了,下一節(jié)是地理編碼,望大家指正,不明白的可以評(píng)論或者留言,我會(huì)第一時(shí)間回復(fù).謝謝

轉(zhuǎn)載于:https://www.cnblogs.com/Xebdison/p/5515453.html

總結(jié)

以上是生活随笔為你收集整理的地图篇-01.获取用户位置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。