實戰iPhone應用開發之:GPS定位系統

2020-12-12 IT168

  【IT168 技術文檔】如今,配備GPS功能的行動裝置越來越普遍了,使用GPS定位系統,可以精確地定位你當前所在的地理位置,但由於GPS接收機需要對準天空才能工作,因此在室內環境基本無用。

  另一個找到自己所在位置的有效方法是使用手機基站,手機開機時,它會與周圍的基站保持聯繫,如果你知道這些基站的身份,就可以使用各種資料庫(包含基站的身份和它們的確切地理位置)計算出手機的物理位置。基站不需要衛星,和GPS不同,它對室內環境一樣管用。但它沒有GPS那樣精確,它的精度取決於基站的密度,它在基站密集型區域的準確度最高。

  提示:第一代iPhone並沒有配置GPS接收器,基站方式不能應用到iPod Touch上,因為它不是手機。

  第三種方法是依賴Wi-Fi,使用這種方法時,設備連接到Wi-Fi網絡,通過檢查服務提供商的數據確定位置,它既不依賴衛星,也不依賴基站,因此這個方法對於可以連接到Wi-Fi網絡的區域有效,但它的精確度也是這三個方法中最差的。

  定位框架內核

  在iPhone上,蘋果提供了定位框架內核,以幫助你確定你的物理位置,這個框架的美妙之處在於它使用了前面提到的所有三種方法,具體使用的是哪種方法對於開發者來說是透明的,開發人員只需要指定所需要的精度,定位內核將會以最佳方式確定定位結果。

  你一定感到很吃驚吧?!本文其餘部分將向你展示這是如何做到的。

  獲取位置坐標

  使用Xcode,創建一個新的基於視圖的應用程式項目,取名為LBS,在新項目中,雙擊LBSViewController.xib文件,在界面設計工具中編輯它。使用下面的組件填充視圖窗口,如圖1所示。

  l Label

  l TextField

  圖 1 位置視圖實例:用Label和TextFiled填充這個窗口

  在Xcode中框架組上點擊右鍵,選擇「添加」*「現有框架」,選擇「Framework/CoreLocation.framework」,向LBSViewController.h文件中添加以下粗體字顯示的代碼:

#import <UIKit/UIKit.h>
#import
<CoreLocation/CoreLocation.h>
@interface LBSViewController : UIViewController
    
<CLLocationManagerDelegate> {
    IBOutlet UITextField
*latitudeTextField;
    IBOutlet UITextField
*longitudeTextField;
    IBOutlet UITextField
*accuracyTextField;
    CLLocationManager
*lm;
}
@property (retain, nonatomic) UITextField
*latitudeTextField;
@property (retain, nonatomic) UITextField
*longitudeTextField;
@property (retain, nonatomic) UITextField
*accuracyTextField;
@end

  若要使用CLLocationManager類,需要在你的視圖控制器類中實現CLLocationManagerDelegate協議,還需要創建三個出口用於連接視圖窗口中的三個TextFiled視圖。

  回到界面編輯器,單擊並拖動文檔的所有者項目到三個TextField視圖,然後分別選擇latitudeTextField,longitudeTextField和accuracyTextField。

  在LBSViewController.m文件中查詢以下代碼中的粗體部分:

#import "LBSViewController.h"
@implementation LBSViewController
@synthesize latitudeTextField, longitudeTextField, accuracyTextField;
- (void) viewDidLoad {
    lm
= [[CLLocationManager alloc] init];
    
if ([lm locationServicesEnabled]) {
        lm.
delegate = self;
        lm.desiredAccuracy
= kCLLocationAccuracyBest;
        lm.distanceFilter
= 1000.0f;
        [lm startUpdatingLocation];
    }
}
- (void) locationManager: (CLLocationManager *) manager
    didUpdateToLocation: (CLLocation
*) newLocation
    fromLocation: (CLLocation
*) oldLocation{
    NSString
*lat = [[NSString alloc] initWithFormat:@"%g",
        newLocation.coordinate.latitude];
    latitudeTextField.text
= lat;
    
    NSString
*lng = [[NSString alloc] initWithFormat:@"%g",
        newLocation.coordinate.longitude];
    longitudeTextField.text
= lng;
    
    NSString
*acc = [[NSString alloc] initWithFormat:@"%g",
        newLocation.horizontalAccuracy];
    accuracyTextField.text
= acc;    
    
    [acc release];
    [lat release];
    [lng release];
}
- (void) locationManager: (CLLocationManager *) manager
    didFailWithError: (NSError
*) error {
    NSString
*msg = [[NSString alloc]
       initWithString:
@"Error obtaining location"];
    UIAlertView
*alert = [[UIAlertView alloc]
                          initWithTitle:
@"Error"
                          message:msg
                          
delegate:nil
                          cancelButtonTitle:
@"Done"
                          otherButtonTitles:nil];
    [alert show];    
    [msg release];
    [alert release];
}
- (void) dealloc{
    [lm release];
    [latitudeTextField release];
    [longitudeTextField release];
    [accuracyTextField release];
    [super dealloc];
}

  前面的代碼創建了CLLocationManager類的一個實例,在使用對象之前,你應該檢查用戶是否開啟了設備的定位服務,如果開啟了,你可以使用desiredAccuracy屬性指定想要的精度,使用下面的常量指定想要的精度:

  l kCLLocationAccuracyBest

  l kCLLocationAccuracyNearestTenMeters

  l kCLLocationAccuracyHundredMeters

  l kCLLocationAccuracyKilometer

  l kCLLocationAccuracyThreeKilometers

  distanceFilter屬性讓你指定設備必須移動多少距離位置信息才會更新,這個屬性的單位是米。如果你想得到所有移動的通知,可以使用kCLDistanceFilterNone常量,最後,使用startUpdatingLocation方法啟動位置管理器。

  要獲得位置信息,需處理下面兩個事件:

  l locationManager:didUpdateToLocation:fromLocation:

  l locationManager:didFailWithError:

  當獲得一個新的定位值時,設備觸發locationManager:didUpdateToLocation:fromLocation:事件,如果位置管理器不能確定位置信息,就會觸發locationManager:didFailWithError:事件。

  當設備可以確定位置時,你可能想顯示經緯度值和精度,這時你可以使用CLLocation對象,它的horizontalAccuracy屬性可以指定精度範圍,單位是米。

  按Command-r在iPhone模擬器上測試該程序,圖2顯示了模擬器顯示的位置經緯度值,同時顯示了精度。

  圖 2 定位測試:當你在iPhone模擬器上測試該示例程序時,總會顯示這些固定的值

相關焦點

  • 安卓10源碼開發定製(21)GPS定位研究(3)修改GPS定位數據測試app gps定位代碼
    一、測試gps定位功能的方法探討     在安卓App gps定位開發過程中,往往需要進行GPS定位的測試。
  • gps定位器
    定位器簡介 找好友、找家人、找小孩、找男朋友、找手機神器 gps定位器基於gps,wifi,移動基站技術,結合百度地圖,精準定位。
  • 全球四大衛星定位系統,各有優勢,如何利用定位系統實現民用價值
    全球四大衛星定位系統,論民用市場目前還是gps衛星定位系統的天下,畢竟gps系統早誕生那麼多錢,各方面產業鏈更趨完善,民用晶片和產品價格更優惠,這也是無法避免的事情;隨著國家大力發展北鬥定位系統,逐步應用到各類物流運輸,客運,危險品運輸,渣土車,工程車等等監控車輛上面,隨著北鬥系統的日趨完善
  • 汽車GPS定位器使用指南
    汽車定位設備全球定位系統(GPS)跟蹤器是由相關技術企業製造用於物體定位的可攜式終端設備。它是成品,藉助相關定位平臺或者APP,我們能夠準確獲取位置信息。顧名思義,汽車GPS跟蹤器是一種專用於汽車領域的gps 定位設備,它允許車隊經理,父母和車主監控和跟蹤他們的汽車和卡車的位置,通常來說,用於汽車的gps跟蹤器不僅能夠實時提供汽車的瞬時速度和位置數據,大多數企業為了使汽車gps 跟蹤器解決更多車主的需求,他們會擴展許多實用的功能,比如歷史位置數據查詢,讓車主更好掌握車子行駛的軌跡,以用來統計一段時期內,車子的行駛情況
  • 車載GPS也玩跟蹤 定位網絡平臺實戰解析
    當智慧型手機用戶能夠通過Google latitude玩跟蹤的時候,車載GPS用戶也顯出了一些羨慕之情,除了點對點枯燥的導航以外,車載GPS能否為我們提供類似跟蹤的新鮮功能呢?今天我們就來通過一款國內上市新品推出的定位服務網絡平臺來為大家進行一番詳細解析。
  • 位置服務軟體 GPS手機定位—GPSToy試用(組圖)
    2010-02-12 00:05:17   一、GPSToy軟體簡介  隨著GPS手機的普及,GPS相關的位置服務(比如gps定位)也越來越走進我們的生活,現在發現一個界面美觀,操作簡便的GPS手機軟體-GPSToy,授權方面同樣是免費的,可以自由分享。
  • 如何在任何手機上找到GPS定位
    【IT168技術】前一段時間,我曾在另一篇文章提到,我想採取的位置廣播思想,開發後續移動解決方案。當時的問題是我沒有辦法擺脫手機來獲取位置信息,或者使位置數據變得有用的一種方法。在這篇文章中,我將演示如何讓你的手機獲取GPS坐標.即使您的手機沒有內置的全球定位系統。
  • 車載無線gps定位器的安裝注意事項
    當然,無線gps定位器最終的安裝位置需要依據車輛的車體結構進行實際情況而定,市面上很多不同的車輛,車體結構有很大的差異。無線gps定位器內置電池和pcb板,屬於電子類型的產品,在安裝這類產品的時候,要考慮到安裝位置對定位精度和定位速率的影響,同時也應該做好相應的保護措施。
  • Android應用開發實戰:GPS與加速度傳感器
    【IT168 技術文檔】本文將為讀者詳細介紹Android中增強現實應用程式的兩個關鍵元素:GPS與加速度傳感器。  在前一篇文章《編程實現谷歌Android攝像頭拍照》中,我們介紹了在增強現實技術(AR)引擎中Android SDK的兩種基本構件即攝像頭的用法。
  • gps測量儀器品牌大全
    華測gps測量儀 華測GPS測地型接收機主要用於精密大地測量和精密工程測量。這類儀器主要採用載波相位觀測值 進行相對定位,定位精度高。儀器結構複雜,價格較貴。 公司致力於GNSS 技術的深層次研發,提供全球定位系統及相關行業完整高效的系統解決方案,提供全面、快捷、周到的技術支持和服務。「積極響應,快速行動,首問負責、跟蹤落實、徹底解決」是我們的服務理念  中海達產品涵蓋:高精度測量型GNSS產品系列;超聲波數位化測深儀系列;GIS數據採集系統;海洋工程應用集成系統。
  • 手機GPS及手機定位系統介紹
    手機GPS顧名思義就是在手機上實現GPS的功能,一個就是GPS導航一個就是GPS定位跟蹤。手機GPS以及手機定位對於很多使用智慧型手機的朋友都已經不陌生,下面小編來給大家分享一些關於手機GPS及手機定位系統的相關知識,供大家更好的理解手機GPS以及手機定位系統。
  • GPS衛星定位系統,原理與技術一文全懂
    因此,現在民用GPS也可以達到十米左右的定位精度。  GPS系統擁有如下多種優點:全天候,不受任何天氣的影響;全球覆蓋(高達98%);三維定速定時高精度;快速、省時、高效率;應用廣泛、多功能;可移動定位;不同於雙星定位系統,使用過程中接收機不需要發出任何信號增加了隱蔽性,提高了其軍事應用效能。
  • AI Tracker GPS定位系統
    AI Tracker GPS定位系統 生活工具 大小: 12.78 MB
  • GPS全球定位系統的主要特點
    GPS 是英文Global Positioning System(全球定位系統)的簡稱,而其中文簡稱為「球位系」。GPS是20世紀70年代由美國陸海空三軍聯合研製的新一代空間衛星導航定位系統 。本文引用地址:http://www.eepw.com.cn/article/196475.htm全球定位系統的主要特點:(1)全球、 全天候工作。(2)定位精度高。單機定位精度優於10m,採用差分定位,精度可達釐米級和毫米級。
  • 北鬥正式啟用,北鬥定位精度能夠比得上GPS定位嗎?
    【北鬥正式啟用,北鬥定位精度能夠比得上GPS定位嗎?】我們感覺到驚喜的是,北鬥導航全球系統正式開通,我相信這對於我們來說無疑是一種成功。我們已經有能力去取代GPS導航系統,甚至於我們的北鬥更有優勢,因為它是我們中國的北鬥導航系統,這方面就不是GPS可以比擬的,我們也不用擔心美國將GPS關閉,影響我們的各方面的安全。現在,我們說說的是GPS和北鬥導航系統到底在精度方面有什麼區別呢?1.在精度方面,GPS全球定位精度水平9米,高程15米。
  • 強大的防盜定位追蹤系統方案,硬體原理、結構框圖、軟體流程、源碼...
    投資GPS項目功在社會,利在企業,該項目系統運作和市場經濟相吻合,取之於社會,服務於社會,市場廣闊,生命力強,經濟效益顯著,投資實施二項目具有深遠的社會意義和經濟意義。1.3市場行業分析GPS技術已經廣泛的應用到軍事定位,大型物品(如車輛)防盜等領域,這些高端GPS定位追蹤系統大都在7000以上價格昂貴。
  • 中國北鬥定位系統與美國GPS性能比較
    北鬥衛星導航定位系統,是中國自行研製開發的區域性有源三維衛星定位與通信系統(CNSS),是除美國的GPS、俄羅斯的GLONASS之後第三個成熟的衛星導航系統。在概念上﹐GPS是代表著整個系統﹐包括天空上的衛星、地面控制站及GPS接收機。不過一般而言﹐GPS即意指一個GPS接收機﹐這是因為我們在使用上多半只會接觸GPS接收機的緣故。一般所使用之GPS接收機在任何時刻接收到4顆或更多的衛星。使用者只需擁有GPS接收機,無需另外付費。
  • GPS定位器有哪些費用?
    GPS定位器,很多人反應,以為是汽車 上的gps導航儀。功能有點類似,都是用來定位用的。但是使用起來,差別就很大。不光使用上差距大,價格上,也差距很大。GPS定位器,是硬體和軟體上的相互配合,才能發揮其功效。
  • Serverless上手實戰!雲開發Web應用訓練營來了
    經過將近1個月的學習+實戰+競技,30名在校大學生脫穎而出正式成團,成為阿里云云開發平臺的首批校園合伙人,新的學期讓我們一起推動Serverless和雲開發技術的普及,加速全面上雲時代軟體產業的創新和升級。
  • 淺談GPS定位系統構成及原理
    GPS定位系統功能必須具備GPS終端、傳輸網絡和監控平臺三個要素;這三個要素缺一不可;通過這三個要素,可以提供車輛防盜、反劫、行駛路線監控及呼叫指揮等功能。GPS定位系統是美國第二代衛星導航系統。是在子午儀衛星導航系統的基礎上發展起來的,它採納了子午儀系統的成功經驗。和子午儀系統一樣,GPS定位系統由空間部分、地面監控部分和用戶接收機三大部分組成。