iOS:定位服務及地圖應用開發,ios應用開發
一,定位服務。
iOS裝置能提供3種不同的定位途徑:
1,WiFi定位,通過查詢一個WiFi路由器的地理位置的資訊,比較省電;iPhone,Ipod touch 和iPad都可以。
2,蜂窩式行動電話基站定位,通過行動電信業者基站定位,只有iPhone,3G版本的iPod touch和iPad可以採用。
3,GPS衛星定位,通過3~4顆GPS衛星位置定位,最為準確,但是耗電量大,不能遮擋,iPhone,iPod touch和iPad都可以採用。
iOS不像android系統在定位服務編程時可以指定採用哪種途徑進行定位。iOS的API把底層這些細節屏蔽掉了,開發人員和使用者並不知道現在裝置採用哪種方式進行定位,iOS系統會根據裝置的情況和周圍的環境,採用一太最佳的解決方案。這個方案是這樣的:如果能夠接收GPS資訊,那麼裝置優先採用GPS定位,否則採用WiFi或蜂窩基站定位,在WiFi和蜂窩基站之間優先使用WiFi,如果無法串連WiFi才使用蜂窩基站定位。
總體來說,GPS定位的優點是準確,覆蓋面廣闊,缺點是不能被遮擋(例如在建築物裡收不到GPS衛星訊號),GPS開啟後比較費電。蜂窩基站不僅誤差比較大,而且會耗費使用者流量費。而WiFi定位應該是最經濟實惠的。
二,定位服務編程
1,精度越高請求獲得位置資訊的頻率越高,這就意味著裝置越耗電。
2,調用方法startUpdatingLocation定位服務就會開啟,它根據設定的條件,不斷地請求回調新的位置資訊。因此開啟這個方法一定要謹慎,要在最合適的時候開,在視圖控制器的聲明周期方法中viewWillAppear:方法是最合適的。停止服務的方法是stopUpdatingLocation,它是視圖控制器的viewWillAppear:方法中調用的,代碼如下:
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//停止定位
[_locationManager stopUpdatingLocation];
}
三,地理資訊反編碼
地標類屬性:
1,addressDictionary,地址資訊的字典,包含一些索引值對,其中的鍵是在Address Book framework(地址簿架構)中定義好的。
2,ISOcountryCode,ISO國家代號;
3,country,國家資訊。
4,postalCode,郵遞區號。
5,administrativeArea,行政地區資訊。
6,subAdministrativeArea,行政地區附加資訊。
7,locality,指定城市資訊。
8,subLocality,指定城市資訊附加資訊。
9.thoroughfare,指定街道層級資訊。
10,subThoroughfare,指定街道層級的附加資訊。
四,關於定位服務的測試。
定位服務應用的測試和運行有兩個選擇:模擬器和裝置。原則上是先通過模擬器,然後使用裝置測試。由於定位服務的特別,使用裝置測試需要我們拿著裝置到現場進行測試,因此有的時候是有局限性的,我們不可能為了測試香港有沒有叫“南城”的飯館去一趟香港。所以,模擬器的測試,有時候是不可替代的。
一般使用www.mygeoposition.com通過的GPX工具。這是一個免費提供地理資訊編碼和反編碼,產生KML和GPX檔案等服務的網站。
五,使用iOS6蘋果地圖。
在iOS6之後不再使用Google地圖了,而是使用蘋果自己的地圖,但是API編碼介面沒有太大的變化,使得開發人員不需要學習新東西才能進行地圖的開發。這是負責任的做法。
iOS應用程式 使用MapKit API開發地圖應用程式。其核心是MKMapView類使用。
六,使用程式外地圖。
應用中調用程式外的地圖有兩個選擇:iOS6蘋果地圖和GoogleWeb地圖。
七,調用Google的Web地圖API進行開發地圖應用程式,但這裡所涉及的技術都是Web技術了,而非本地技術。
八,使用本地化的百度地圖。
1,百度地圖使用C++編寫,我們需要把我們工程中一個*.m檔案改成*.mm,就可以了。*.mm說明這個檔案是Object-C++代碼檔案,即代碼模組中可以有C++代碼。
2,需要注意的是蘋果iOS SDK提供了CLGeocoder類,也可以實現地理資訊的編碼和反編碼,但是如果你採用的地圖是百度地圖,那麼在地理資訊編碼和反編碼時候,也最好採用百度地圖提供的API。