日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

創(chuàng)建一個項目

點擊"+"號之后,跳轉到下個界面

導入完畢

2.原理:

  大家平時在使用iPhone時,每下載一個App,第一次打開的時候,都會有這樣的提示

?

是吧,這時候我們如果選擇了不允許的話,這個App是獲取不了我們的位置的,相應的App里面涉及到位置的功能我們都用不了(比如微信和QQ的"附近的人")

所以每次我都被App的意志強奸,選擇允許

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

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

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

接下來看下圖

?

?

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

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

點進去會看到如下圖示

和下圖

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

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

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

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

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

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

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

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 //導入頭文件(也可以創(chuàng)建一個pch文件,在pch文件中導入下面頭文件) 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.判斷用戶是否開啟定位服務 25 if (![CLLocationManager locationServicesEnabled]) { 26 NSLog(@"請開啟定位服務"); 27 return; 28 } 29 //2.判斷用戶授權狀態(tài) 30 if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) { 31 //請求用戶授權 32 //后臺可以定位 33 // [self.manager requestAlwaysAuthorization]; 34 //允許在前臺使用GPS描述,后臺不能定位 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 //位置更新的最小距離(如果不設置這個屬性,程序會一直獲取用戶當前位置,是非常耗電的) 47 _manager.distanceFilter = 100; 48 _manager.delegate = self; 49 } 50 return _manager; 51 } 52 53 /** 54 * 當獲取到用戶位置的時候調用 55 * 56 * @param manager 當前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 //通過經緯度來獲取用戶位置 65 //緯度 66 CLLocationDegrees latitude = userLocal.coordinate.latitude; 67 //經度 68 CLLocationDegrees longtitude = userLocal.coordinate.longitude; 69 NSLog(@"緯度:%f,經度:%f",latitude,longtitude); 70 } 71 72 - (void)didReceiveMemoryWarning { 73 [super didReceiveMemoryWarning]; 74 // Dispose of any resources that can be recreated. 75 } 76 77 @end

打印結果:

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

東經為正數(shù),西經為負數(shù)

取值范圍:-180~180

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

取值范圍:-90~90

注意:

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

5.計算兩點間的距離

1 /** 2 * 計算兩點間的距離 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 //計算距離(單位是米) 8 CLLocationDistance distance = [beijing distanceFromLocation:chengdu]; 9 NSLog(@"北京到成都的距離是:%f米",distance); 10 }

打印結果:

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

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

轉載于:https://www.cnblogs.com/Xebdison/p/5515453.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。