1. 程式人生 > >[IOS開發記錄]ios10下使用Xcode8.2獲取gps位置資訊(swift3.0)

[IOS開發記錄]ios10下使用Xcode8.2獲取gps位置資訊(swift3.0)

CoreLocation是iOS中一個提供裝置定位的框架。通過這個框架可以實現定位處理,從而獲取位置資料,比如經度、緯度、海拔資訊等。

預設環境為Xcode8.2和swift3.0

第一步:先在info.plist中設定位置許可權 

有三種許可權

Privacy - Location Usage Description  //這個不太清楚

Privacy - Location Always Usage Description   //始終使用的提示資訊

Privacy - Location When In Use Usage Description   //使用期間使用位置資訊

這三種許可權和後面 locationManager.request的方式相對應的也可以都新增,如果只在使用期間使用可以只新增Privacy - Location When In Use Usage Description後面寫上說明,顯得程式過度自然

 

第二步幾個關鍵設定:

1.定位精度的設定

定位服務管理類CLLocationManager的desiredAccuracy屬性表示精準度,有如下6種選擇:

kCLLocationAccuracyBestForNavigation :精度最高,一般用於導航

kCLLocationAccuracyBest : 精確度最佳

kCLLocationAccuracyNearestTenMeters :精確度10m以內

kCLLocationAccuracyHundredMeters :精確度100m以內

kCLLocationAccuracyKilometer :精確度1000m以內

kCLLocationAccuracyThreeKilometers

:精確度3000m以內

2.位置管理器更新頻率的設定

我們無法直接控制位置管理器更新的頻率,但可使用位置管理器的distanceFilter屬性(單位米)進行間接控制。

locationManager.distanceFilter = 100//單位為m

它指裝置(水平或垂直)移動多少米後才將另一個更新發送給委託。一般來說定位要求的精度越高,distanceFilter屬性的值越小,應用程式的耗電量就越大。

3.計算兩個座標間的距離

通過CCLocation物件的distanceTo方法,可以得到兩個座標間的距離,單位是米。

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

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

        let distance:CLLocationDistance = currentLocation.distance(from: targetLocation)

        print("兩點間距離是:\(distance)")

第三步完整程式碼:

import UIKit
import CoreLocation

class ViewController: UIViewController,CLLocationManagerDelegate {
    let locationManager:CLLocationManager = CLLocationManager()
    let newLabel=UILabel(frame: CGRect(x: 100, y: 200, width: 300, height: 100))

   override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        //設定定位模式
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        //更新距離
        locationManager.distanceFilter = 5
        ////傳送授權申請
        locationManager.requestWhenInUseAuthorization()
        if (CLLocationManager.locationServicesEnabled())
        {
            //允許使用定位服務的話,開啟定位服務更新
            locationManager.startUpdatingLocation()
            print("定位開始")
        }
                   }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        //獲取最新的座標
        let currLocation:CLLocation = locations.last!
        //獲取經度
        newLabel.text = "\(currLocation.coordinate.longitude)"
        //獲取緯度
//       newLabel.text = "緯度:\(currLocation.coordinate.latitude)"
//        //獲取海拔
//        newLabel.text = "海拔:\(currLocation.altitude)"
//        //獲取水平精度
//        newLabel.text = "水平精度:\(currLocation.horizontalAccuracy)"
//        //獲取垂直精度
//       newLabel.text = "垂直精度:\(currLocation.verticalAccuracy)"
//        //獲取方向
//        newLabel.text = "方向:\(currLocation.course)"
//        //獲取速度
//        newLabel.text = "速度:\(currLocation.speed)"
    }
}

第四步:如果使用者拒絕定位許可權,下次進入程式跳轉至系統設定

override func viewDidAppear(_ animated: Bool) {
        
        if(CLLocationManager.authorizationStatus() != .denied) {
            print("應用擁有定位許可權")
        }else {
            let aleat = UIAlertController(title: "開啟定位開關", message:"定位服務未開啟,請進入系統設定>隱私>定位服務中開啟開關,並允許xxx使用定位服務", preferredStyle: .alert)
            let tempAction = UIAlertAction(title: "取消", style: .cancel) { (action) in
            }
            let callAction = UIAlertAction(title: "立即設定", style: .default) { (action) in
                let url = NSURL.init(string: UIApplicationOpenSettingsURLString)
                if(UIApplication.shared.canOpenURL(url! as URL)) {
                    //ios10廢棄openurl
                    UIApplication.shared.open(url! as URL, options: [:], completionHandler: nil)
                    
                }
            }
            aleat.addAction(tempAction)
            aleat.addAction(callAction)
            self.present(aleat, animated: true, completion: nil)
        }
        
    }

參考:http://www.hangge.com/blog/cache/detail_783.html

相關推薦

[IOS開發記錄ios10使用Xcode8.2獲取gps位置資訊(swift3.0)

CoreLocation是iOS中一個提供裝置定位的框架。通過這個框架可以實現定位處理,從而獲取位置資料,比如經度、緯度、海拔資訊等。 預設環境為Xcode8.2和swift3.0 第一步:先在i

iOS開發 適配iOS10以及Xcode8

現在在蘋果的官網上,我們已經可以下載到Xcode8的GM版本了,加上9.14日凌晨,蘋果就要正式推出iOS10系統的推送了,在此之際,iOS10的適配已經迫在眉睫啦,不知道Xcode8 beat版本,童鞋們有木有下載過來試試呢?就我的使用來說,總體覺得蘋果還是坑不斷,但是也在一直進步的啦。下面我就來說說

iOS開發針對對Masonry的FPS優化討論

如果 ews 適配 建議 添加 重新 屏幕 fsp demo 今天博客的內容就系統的討論一下Masonry對FSP的影響,以及如何更好的使用Masonry。如果你對iOS開發足夠熟悉的話,那麽對Masonry框架應該不陌生。簡單的說,Masonry的誕生讓AutoLayou

iOS開發 -product資料夾有兩個相同的.app檔案怎麼辦,該怎麼刪除

由於某種操作,導致product資料夾下出現了兩個相同的.app檔案: 你會發現刪不掉,不知道去哪刪,也找不到對應的資料夾,系統報錯說存在兩個相同的.app檔案,這時候普通的刪除方法肯定是不行的,因為這個屬於系統的配置,需要到配置中刪除,開啟你的工程檔案,右鍵顯示包內容,開啟後使用Xc

iOS開發中禁止螢幕旋轉的2種方式

在AppDelegate.m中新增以下程式碼: - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsFor

IOS開發記錄

1:ios開發幫到了我的博文 http://www.cnblogs.com/wendingding/p/3770052.html 講解UIWindow簡單明瞭,一看就懂原理了,博主叫文頂頂,寫的不錯,裡面有很多IOS文章特別適合新手。很多文章都值的學習和關注 http:/

iOS開發網路資料之AFNetworking使用(2.0)

如何選擇AFNetworking版本 官網下載2.5版本:http://afnetworking.com/ 此文章基於AFNetworking2.0,如果您使用的是2.5版本的,請看這篇文章:AFNetworking2.5使用 首先得下載AFNetworking庫檔

iOS開發------使用Xcode編譯器定位丟擲異常的位置

版權宣告:本文為博主原創文章,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。 https://blog.csdn.net/RunIntoLove/article/details/51297734 雖然Objective-C對異常進行了封裝,但日常敲程式碼的時候,往往

離線環境redhat7.2已及centOS(7.0版本以上)安裝python3.6以及tensorflow1.5、opencv3.4.5流程和採坑總結

離線環境下redhat7.2已及centOS(7.0版本以上)安裝python3.6以及tensorflow1.5、opencv3.4.5流程和採坑總結 序 Tensorflow的安裝環境 安裝環境監測 離線安裝兩種方式

微信公眾號開發__微信網頁授權並獲取使用者基本資訊(是否關注公眾號、頭像、暱稱等)

        本人最近要做微信公眾號網頁開發的專案,其中有個需求是判斷使用者是否關注公眾號,由於之前沒有接觸過微信授權的東西,所以提前開始做調研。在度娘上看了好多部落格、百度知道、百度經驗、知乎問答等,還仔細閱讀了微信公眾平臺開發文件,大致瞭解到:        微信網頁授

Android開發獲取GPS位置,包含apn\wifi\gps 幾種方法

1.gps定位: 優點:最簡單的手機定位方式當然是通過GPS模組(現在大部分的智慧機應該都有了)。GPS方式準確度是最高的 缺點1.比較耗電;        2.絕大部分使用者預設不開啟GPS模組;        3.從GPS模組啟動到獲取第一次定位資料,可能需要比較長的時間;        4.室內幾乎

微信公眾平臺開發實戰Java版之微信獲取使用者基本資訊

在關注者與公眾號產生訊息互動後,公眾號可獲得關注者的OpenID(加密後的微訊號,每個使用者對每個公眾號的OpenID是唯一的。對於不同公眾號,同一使用者的openid不同)。 公眾號可通過本介面來根據OpenID獲取使用者基本資訊,包括暱稱、頭像、性別、所在城市、語言和

Android開發獲取GPS位置,包含基站\wifi\gps 幾種方法

1.gps定位: 優點:最簡單的手機定位方式當然是通過GPS模組(現在大部分的智慧機應該都有了)。GPS方式準確度是最高的 缺點1.比較耗電;        2.絕大部分使用者預設不開啟GPS模組;        3.從GPS模組啟動到獲取第一次定位資料,可能需要比較長的時間;       

微信公眾號開發——網頁授權 (頁面分享 、獲取使用者基本資訊

第一步:要用到的介面文件如下 第二步:使用網頁服務,公眾號需要如下配置 1.設定 授權回撥頁面域名 2.設定 JS介面安全域名設定(點選公眾號左邊選單 公眾號設定 進入設定頁面 點選 功能設定) 上程式碼 BLL呼叫程式先貼

linux stat statfs 獲取 檔案 磁碟 資訊

stat函式講解 表頭檔案:    #include <sys/stat.h>              #include <unistd.h>定義函式:    int stat(const char *file_name, struct stat *buf); 函式說明:    通過

iOS開發 適配Xcode8以及iOS10-許可權問題

現在在蘋果的官網上,我們已經可以下載到Xcode8的GM版本了,加上9.14日凌晨,蘋果正式推出iOS10系統的推送了,在此之際,iOS10的適配已經迫在眉睫啦,不知道Xcode8 beat版本,童鞋們有木有下載過來試試呢?就我的使用來說,總體覺得蘋果還是坑不斷,但是也在

iOS開發筆記之Xcode9.2SDK開發-生成Framework的圖解流程

1.Workspace可以方便SDK與Demo的聯調,首先建立一個Workspace:2.建立Framework:選擇Cocoa Touch Framework:加入之前建立的SDKWorkspace,點選Create:3.建立SDKDemo:再次新建Project,選擇Si

iOS開發記錄一次蘋果2.1大禮包被拒絕3次歷時12天的坑逼上架歷程

##一、場景描述(歷時12天的上架歷程) ##二、解決方案 ###2.1 第一次被拒絕原因(網上傳言的“狗年大禮包”) 發件人 Apple Guideline 2.1 - Information Needed This type of app has

iOS開發環境 - Git教程2.0:添加遠程倉庫

lan -128 new 右上角 服務器 pos 需要 下一步 warn 添加遠程庫 1 - 你已經在本地創建了一個Git倉庫後,又想在GitHub創建一個Git倉庫,並且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作,真

記錄:Ubuntu升級Python從2.x到3.x

終端 http 方法 ubun 可能 var png 解鎖 建立 一、安裝Python3 在Ubuntu中的終端輸入:sudo apt-get install python3 提示資源被鎖住,可能有另外一個程序在占用此資源。 解決方法:輸入以下指令解鎖資源 sudo rm