iOS學習48地圖

来源:http://www.cnblogs.com/gfxxbk/archive/2016/05/31/5547590.html
-Advertisement-
Play Games

一、地圖的簡介 在移動互聯網時代,移動app能解決用戶的很多生活瑣事,比如 導航:去任意陌生的地方 周邊:找餐館、找酒店、找銀行、找電影院 手機軟體:微信搖一搖、QQ附近的人、微博、支付寶等 在上述應用中,都用到了地圖和定位功能,在iOS開發中,要想加入這兩大功能,必須基於兩個框架進行開發 MapK ...


一、地圖的簡介

 在移動互聯網時代,移動app能解決用戶的很多生活瑣事,比如   

  導航:去任意陌生的地方

  周邊:找餐館、找酒店、找銀行、找電影院

  手機軟體:微信搖一搖、QQ附近的人、微博、支付寶等

 在上述應用中,都用到了地圖和定位功能,在iOS開發中,要想加入這兩大功能,必須基於兩個框架進行開發

  MapKit :用於地圖展示

  CoreLocation :用於地理定位

二、地圖定位(CoreLocation框架,地理編碼與反地理編碼)

 1、CoreLocation框架的使用

  • 導入框架  (iOS5之後不再需要)

  • 導入頭文件
#import <CoreLocation/CoreLocation.h>
  • CoreLocation框架使用須知

        CoreLocation 框架中所有數據類型的首碼都是CL

        CoreLocation 中使用 CLLocationManager 對象來做用戶定位 

 2、CLLocationManager的常用操作(詳細使用說明見註釋)

// 開始用戶定位
- (void)startUpdatingLocation;
// 停止用戶定位
- (void) stopUpdatingLocation;

// 每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
// 定位精確度(越精確就越耗電)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

// 當調用了startUpdatingLocation方法後,就開始不斷地定位用戶的位置,中途會頻繁地調用下麵的代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations; // 參數locations中的元素對象是CLLocation對象,是一系列的位置信息

// 當定位失敗的時候,會調用下麵的代理方法
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(nullable CLRegion *)region withError:(NSError *)error;

  CLLocationAccuracy 是一個枚舉值

/*
最佳導航
  kCLLocationAccuracyBestForNavigation 
最精準
     kCLLocationAccuracyBest;
10米
     kCLLocationAccuracyNearestTenMeters; 
百米
     kCLLocationAccuracyHundredMeters; 
千米
     kCLLocationAccuracyKilometer; 
3千米
     kCLLocationAccuracyThreeKilometers;     
*/

 3、CLLocation

  CLLocation用來表示某個位置的地理信息,比如經緯度、海拔等等

// 經緯度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

// 海拔
@property(readonly, nonatomic) CLLocationDistance altitude;

// 路線,航向(取值範圍是0.0° ~ 359.9°,0.0°代表正北方向)
@property(readonly, nonatomic) CLLocationDirection course;

// 行走速度(單位是m/s)
@property(readonly, nonatomic) CLLocationSpeed speed;

// 此方法可以計算2個位置(CLLocation)之間的距離
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

 4、CLLocationCoordinate2D

  CLLocationCoordinate2D 是一個用來表示經緯度的結構體,定義如下

typedef struct {
    CLLocationDegrees latitude; // 緯度
    CLLocationDegrees longitude; // 經度
} CLLocationCoordinate2D;

  一般用 CLLocationCoordinate2DMake 函數來創建 CLLocationCoordinate2D

 5、實現定位的步驟

  • 第一步:初始化定位管理器
self.manager = [[CLLocationManager alloc] init];
  • 第二步:進行隱私的判斷和授權    

  1> 進行定位服務是否開啟的判斷       

   若 locationServicesEnabled 為 NO,就跳轉到隱私界面進行設置

  2> 進行版本判斷(iOS8.0前後的定位方式不一樣)獲取版本數:[[[UIDevice currentDevice] systemVersion] integerValue]

  3> iOS8.0之後授權的操作
            ① 判斷授權狀態:authorizationStatus
                五種狀態枚舉值
                    kCLAuthorizationStatusNotDetermined: 用戶尚未做出決定是否啟用定位服務
                    kCLAuthorizationStatusRestricted: 沒有獲得用戶授權使用定位服務,可能用戶沒有自己禁止訪問授權
                    kCLAuthorizationStatusDenied:用戶已經明確禁止應用使用定位服務或者當前系統定位服務處於關閉狀態
                    kCLAuthorizationStatusAuthorizedAlways: 應用獲得授權可以一直使用定位服務,即使應用不在使用狀態(常用)
                    kCLAuthorizationStatusAuthorizedWhenInUse: 使用此應用過程中允許訪問定位服務(常用)
            ② 在授權請求之前需要在infoPlist文件中設置 NSLocationUsageDescription 允許定位內容
                authorizationStatus 為 kCLAuthorizationStatusAuthorizedWhenInUse 時使用NSLocationWhenInUseUsageDescription 進行設置
                authorizationStatus 為 kCLAuthorizationStatusAuthorizedAlways 時使用 NSLocationAlwaysUsageDescription 進行設置

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天比較閑所以就花點時間又寫了點東西。 相信這種價格表大家不會陌生 現在我就模仿它做一個簡單版本的。效果如下 首先需要兩個時間控制項,我這裡用的是HTML5裡面的時間控制項,這個沒限制喜歡用什麼就用什麼 直接上代碼吧!我都寫了註釋。 ...
  • 如題: ...
  • [Bootstrap](http://hovertree.com/menu/bootstrap/) 是由兩個 twitter 員工開發並開源的前端框架,非常火爆,而如此火爆自然有它的道理,在我們團隊的所有項目中正全面推行使用 Bootstrap,我想根據自己的實際使用體驗來說明一下為什麼要用 Boo ...
  • 在前端領域里,很多時候,一個簡單的功能可以有很多種不同的實現方式,今天就拿星期幾的不同腳本實現方法作為例子,希望能激發童鞋們更多的想法。 1、使用 if 語句: 2、使用switch case 語句: 3、神器,一句話解決: ...
  • 說說我自己的思路 首先需要一個初始div 然後就是滑鼠事件,想象一下拖動這個過程需要用到哪些事件。。。 1、滑鼠按鈕按下事件mousedown 2、滑鼠按鈕鬆開事件mouseup 3、滑鼠移動事件mousemove 第一步:給div添加滑鼠按鈕按下事件,這個事件需要完成以下事情 一、獲取div到瀏覽 ...
  • Fragment使用的基本知識點總結, 包括Fragment的添加, 參數傳遞和通信, 生命周期和各種操作. ...
  • 開發中有很多地方會用到自定義對話框,為了避免不必要的城府代碼,在此總結出一個工具類。 彈出對話框的地方很多,但是都大同小異,不同無非就是提示內容或者圖片不同,下麵這個類是將提示內容和圖片放到了自定義函數的參數中,並且是靜態,可以用類直接調用此函數。 對話框的xml文件佈局: Activity中彈出對 ...
  • 一、地圖的簡介 在移動互聯網時代,移動app能解決用戶的很多生活瑣事,比如: 導航:去任意陌生的地方。 周邊:找餐館、找酒店、找銀行、找電影院。 手機軟體:微信搖一搖、QQ附近的人、微博、支付寶等。 在上述應用中,都用到了地圖和定位功能,在iOS開發中,要想加入這兩大功能,必須基於兩個框架進行開發: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...