一,定位服務。 iOS設備能提供3種不同的定位途徑: 1,WiFi定位,通過查詢一個WiFi路由器的地理位置的信息,比較省電;iPhone,Ipod touch 和iPad都可以。 2,蜂窩式行動電話基站定位,通過移動運營商基站定位,只有iPhone,3G版本的iPod touch和iPad可以採用 ...
一,定位服務。
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之後不再使用谷歌地圖了,而是使用蘋果自己的地圖,但是API編碼介面沒有太大的變化,使得開發人員不需要學習新東西才能進行地圖的開發。這是負責任的做法。
iOS應用程式 使用MapKit API開發地圖應用程式。其核心是MKMapView類使用。
六,使用程式外地圖。
應用中調用程式外的地圖有兩個選擇:iOS6蘋果地圖和谷歌Web地圖。
七,調用谷歌的Web地圖API進行開發地圖應用程式,但這裡所涉及的技術都是Web技術了,而非本地技術。
八,使用本地化的百度地圖。
1,百度地圖使用C++編寫,我們需要把我們工程中一個*.m文件改成*.mm,就可以了。*.mm說明這個文件是Object-C++代碼文件,即代碼模塊中可以有C++代碼。
2,需要註意的是蘋果iOS SDK提供了CLGeocoder類,也可以實現地理信息的編碼和反編碼,但是如果你採用的地圖是百度地圖,那麼在地理信息編碼和反編碼時候,也最好採用百度地圖提供的API。
參考資料:《iOS網路編程與雲端應用-最佳實踐》