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

2020-12-06 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模擬器上測試該示例程序時,總會顯示這些固定的值

相關焦點

  • ​車載gps定位器,車載gps定位器的作用
    車載gps定位器,對於路痴來說是很有用的。來到一個不是很熟悉的城市,就算不懂東南西北,只要有定位器,就不怕找不到目的地了。那麼我們平常說的指南針和定位器有什麼不一樣的功能呢?今天我們主要來了解車載gps定位器的作用。
  • 日本開發出誤差為1釐米的衛星定位系統
    據《日本經濟新聞》報導,三菱電機、NEC、日本宇宙航空研究開發機構(JAXA)共同開發出精度誤差最小可達1釐米的衛星定位系統,僅為美國開發的全球定位系統(GPS)最小誤差的千分之一。這套名為「準天頂衛星」的定位系統預計2018年開始在日本國內投入運營,並推向海外市場。
  • 全球四大衛星定位系統,各有優勢,如何利用定位系統實現民用價值
    全球四大衛星定位系統,論民用市場目前還是gps衛星定位系統的天下,畢竟gps系統早誕生那麼多錢,各方面產業鏈更趨完善,民用晶片和產品價格更優惠,這也是無法避免的事情;隨著國家大力發展北鬥定位系統,逐步應用到各類物流運輸,客運,危險品運輸,渣土車,工程車等等監控車輛上面,隨著北鬥系統的日趨完善
  • 環衛車北鬥GPS定位管理系統費用一般多少錢
    環衛車北鬥GPS定位管理系統費用一般多少錢中央電視臺廣播電臺研究員齊義說:「工業控制的***系統,進水基本是預防性的,來個人聲的方式有很大的方便性,信號錄得正常,並且信號很大。」不知道高頻直播,效果又不能相當理想,電視節目內容質量不能滿足要求。在不用的時候和電視、衛星直播聲音的節目內容匹配,時刻不能達到新聞規範要求,要麼頻率過高。
  • 汽車GPS定位器使用指南
    汽車定位設備全球定位系統(GPS)跟蹤器是由相關技術企業製造用於物體定位的可攜式終端設備。顧名思義,汽車GPS跟蹤器是一種專用於汽車領域的gps 定位設備,它允許車隊經理,父母和車主監控和跟蹤他們的汽車和卡車的位置,通常來說,用於汽車的gps跟蹤器不僅能夠實時提供汽車的瞬時速度和位置數據,大多數企業為了使汽車gps 跟蹤器解決更多車主的需求,他們會擴展許多實用的功能,比如歷史位置數據查詢,讓車主更好掌握車子行駛的軌跡,以用來統計一段時期內,車子的行駛情況
  • 知識科普,告訴你為什麼北鬥系統是世界上最好的衛星定位系統
    川普最近好幾次威脅說,考慮讓中美兩國完全脫鉤,而現在中國呢,已經在全球衛星定位系統的領域當中跟美國脫鉤,擺脫了對美國系統gps的依賴。01世界上有幾個衛星定位系統世界上總共有四個衛星定位系統,美國的gps,中國的北鬥,俄羅斯的格格納斯,歐洲的伽利略
  • 除了GPS和北鬥物聯網還有哪些定位技術?
    伴隨著時代進步和科技發展,物聯網定位在關鍵技術、精準度、易用性等層面均實現質的飛躍,就整體而言,定位可以依照應用場景的差異區分為室內定位和戶外定位兩大領域,鑑於使用場景的差異,其需求也有所不同,所以各自運用的定位技術也大不同。
  • 為什麼中國北鬥系統已完善,手機定位卻還用美國的GPS?長見識了
    如今北鬥已經可以為亞太地區提供導航服務了,關於,其實在我們平時的生活之中我們一直都在使用北鬥系統,只是大家不知道而已,北鬥系統從開始構想然後再達到現在的成績實屬不易,從剛開始時的試驗系統,一步步的成為我們現在所熟知的北鬥導航系統,然後再向更大的目標進發,成為一個可以讓全世界的中國同胞都可以使用的導航系統
  • 位置服務軟體 GPS手機定位—GPSToy試用(組圖)
    2010-02-12 00:05:17   一、GPSToy軟體簡介  隨著GPS手機的普及,GPS相關的位置服務(比如gps定位)也越來越走進我們的生活,現在發現一個界面美觀,操作簡便的GPS手機軟體-GPSToy,授權方面同樣是免費的,可以自由分享。
  • 如何在任何手機上找到GPS定位
    【IT168技術】前一段時間,我曾在另一篇文章提到,我想採取的位置廣播思想,開發後續移動解決方案。當時的問題是我沒有辦法擺脫手機來獲取位置信息,或者使位置數據變得有用的一種方法。在這篇文章中,我將演示如何讓你的手機獲取GPS坐標.即使您的手機沒有內置的全球定位系統。  定位為什麼如此的困難?
  • 關於全球定位系統,這些功能可能是都你沒想到的
    大家所了解的全球定位系統,可能最密切的就是手機導航定位,找附近外賣,或出外旅行到具體的地方。但也只是定位系統的一部分而已。其實它還有其它的意想不到的功能。今天我國北鬥全球定位系統建成,因為後發優勢,gps有的我們都有,它沒有的我們也有。先說gps有的一些具體應用,定位這功能就不說了。1.感受地震波gps可以感受到地震波,測量其量級。
  • 打開手機導航的定位為什麼還是GPS,而不是中國的北鬥?
    BDS全稱:BeiDou Navigation Satellite System,北鬥衛星導航系統,是中國自行研製的全球衛星定位系統,手機上的定位一般理解成定位,或者定位服務,從字面上看,GPS的叫法相對更貼切一些,而GPS也叫習慣了,也可以理解成一個統稱。
  • 車載導航系統終端的研究
    各發達國家的很多生產商都加快了車載導航系統的研究步伐。隨著嵌入式技術的發展,很多資源不足的瓶頸問題都很大程度上得到了解決。車載定位系統由車載定位終端、無線通信鏈路和車載監控管理系統三部分組成。本文將gps定位技術應用於氣車,與現有定位技術組合起來共同完成定位監控任務,將大大提高定位準確性及安全性,同時能夠降低資金投入,具有很廣闊的發展空間。系統總體設計系統硬體的結構設計車輛監控系統由車載端(包括arm工控機、觸控螢幕、gps接收模塊和電源等)、通信系統(gprs)、監控中心三大部分組成。
  • 中國的北鬥系統這麼強悍,iphone為什麼不支持北鬥定位
    中國北鬥衛星導航系統(BDS)是中國自行研製的全球衛星導航系統,也是繼GPS、GLONASS之後的第三個成熟的衛星導航系統。作為中國自主研發的導航系統,北鬥導航到底強不強?中國人自豪,國外鄙夷,這都不是事,且看真實事件:2008年北鬥系統剛組建不久,那年卻發生了可怕的汶川大地震,震區通信設備全部中斷,爭分奪秒救人是第一要務。可是面對複雜和無信號的震區情況,救援部隊沒有眼睛不行。GPS信號也無法準確定位,大家都很無助。
  • GPS定位?不全是!解析你不知道的四大全球定位系統
    相信很多人都使用過GPS定位系統,GPS定位系統也是大家所熟知的,也是最常見的定位系統,比如手機定位、車載導航、巡航飛彈等,這些都適用了位置定位系統。但是你知道嗎?定位系統不只是GPS,全球共有四大定位系統。
  • 無線電定位技術在蜂窩通信系統中的應用及實現(圖)
    ,向用戶提供精確的定位信息已經成為新一代pcs系統的標準業務之一。本文主要介紹幾種基於現有蜂窩通信系統的無線定位技術的實現原理,所要解決的主要問題和應用前景。如何儘可能地利用現存網絡資源,低成本地實現對用戶的精確定位一直是研究的焦點。總的來說,實現無線定位主要有兩大類解決方案,第一類是由移動站(ms)主導的定位技術。單從技術角度講,這種技術更容易提供比較精確的用戶定位信息,它可以利用現有的一些定位系統,例如,在移動站中集成gps接收機,從而利用現成的gps信號實現對用戶的精確定位。
  • 手持gps定位測量儀配件測繪儀器領域高新企業
    手持gps定位測量儀配件測繪儀器領域高新企業,公司現開展儀器出租業務,出租儀器包括:天寶GPSRTK(R8-4GNSS),進口、國產全站儀,國產GPSRTK。手持gps定位測量儀配件測繪儀器領域高新企業, ACCURA Z影像測量儀主機工作檯採用經特殊工藝處理的航空鋁合金材料,運動機構重量輕、慣性小、速度快、運行穩。
  • gps測量儀器品牌大全
    公司致力於GNSS 技術的深層次研發,提供全球定位系統及相關行業完整高效的系統解決方案,提供全面、快捷、周到的技術支持和服務。「積極響應,快速行動,首問負責、跟蹤落實、徹底解決」是我們的服務理念  中海達產品涵蓋:高精度測量型GNSS產品系列;超聲波數位化測深儀系列;GIS數據採集系統;海洋工程應用集成系統。
  • 全球衛星定位系統GPS及其在現代交通運輸中的應用
    摘要:本文系統介紹了GPS的原理和其三大子系統,著重介紹了GPS系統在交通運輸中的應用,包括在道路工程、汽車導航和交通管理中的應用以及其他應用  一、全球定位系統GPS簡介  全球衛星定位系統GPS是美軍70年代初在「子午儀衛星導航定位」技術上發展而起的具有全球性
  • iphone離線怎麼定位,iphone離線是什麼意思
    我們知道在我們的蘋果手機丟了以後,我們都會去使用查找我的iphone這一項功能,不過如果當我們丟失的手機沒電關機離線時,我們要怎麼去找回它呢,下面我來說下iphone離線怎麼定位,iphone離線是什麼意思。