劉春林 張翠翠
摘 要:隨著移動互聯(lián)網(wǎng)的快速發(fā)展和人們對APP便利性的需求,旅游導(dǎo)航類、物流類、生活服務(wù)類APP在應(yīng)用中標(biāo)配了地圖功能,這些功能越來越受到人們的歡迎,發(fā)揮著越來越重要的作用。另一方面,基于iOS系統(tǒng)的便攜設(shè)備,由于其便攜性、穩(wěn)定性和應(yīng)用豐富性,擁有著大量的中高端用戶群體。因此,對基于iOS系統(tǒng)的地圖類應(yīng)用進(jìn)行研究,掌握其開發(fā)細(xì)節(jié)顯得尤為重要。文章以百度地圖為例,研究了基于iOS的地圖類APP的開發(fā)應(yīng)用。
關(guān)鍵詞:地圖;iOS;API;SDK;開發(fā)
近年來,基于iOS系統(tǒng)的智能手機(jī)用戶爆炸式地增長,涉及地圖功能需求的旅游導(dǎo)航類、物流類、生活服務(wù)類APP使用頻率越來越高,要求開發(fā)者必須能熟練運(yùn)用地圖公司提供的地圖API來快速開發(fā)地圖功能。目前主流的地圖公司均提供地圖開發(fā)API[1]。本文主要以百度地圖API為例,闡述如何在封閉的iOS系統(tǒng)中,進(jìn)行地圖類APP的開發(fā)應(yīng)用。
百度地圖提供了非常完善的API,我們可以根據(jù)自己項(xiàng)目的需求選擇百度地圖官方提供的API,其中包含的iOS SDK開發(fā)工具與服務(wù),提供了應(yīng)用軟件開發(fā)中所需的地圖功能的實(shí)現(xiàn)、定位、搜索、路線規(guī)劃等,可應(yīng)用于大多數(shù)終端設(shè)備和大多數(shù)種操作系統(tǒng)下的地圖應(yīng)用開發(fā)[2]。本文闡述如何運(yùn)用百度iOS SDK創(chuàng)建地圖以及添加相關(guān)服務(wù)功能。
1 在APP中創(chuàng)建地圖功能
1.1 引用地圖API
在引用地圖API文件之前,首先要去注冊百度地圖開發(fā)者,創(chuàng)建百度地圖開發(fā)應(yīng)用,得到百度地圖API密匙。在cocoaPods導(dǎo)入百度SDK。
Platfor:ios,6.0
Pod ‘BaiduMapKit
然后對項(xiàng)目plist進(jìn)行配置,并在AppDelegate.m中導(dǎo)入頭文件:
#import
運(yùn)用didFinishLaunchingWithOptions方法創(chuàng)建一個百度地圖對象,代碼如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//創(chuàng)建并初始化一個對象
BMKMapManager *MyManager = [[BMKMapManager alloc] init];
//啟動地圖
BOOL MySuccess = [MyManager start:@”百度地圖AK” generalDelegate:nil];
if (!MySuccess) {
NSLog(@”創(chuàng)建地圖失敗”);
}
return YES;
}
創(chuàng)建百度地圖主對象時,將generalDelegate的參數(shù)設(shè)置為self,主要是為了在onGetNetworkState和onGetPermissionState兩個函數(shù)中偵聽網(wǎng)絡(luò)狀態(tài)和獲得密匙(key)的授權(quán)認(rèn)證狀態(tài),代碼如下:
-(void)onGetNetworkState:(int)MyError
{
if (0 == MyError) {
NSLog(@”地圖系統(tǒng)聯(lián)網(wǎng)成功!”);}
else{
NSLog(@”onGetNetworkState啟動失敗,編號%d”, MyError); }
}
-(void)onGetPermissionState:(int) MyError
{
if (0 == MyError) {
NSLog(@”地圖系統(tǒng)授權(quán)成功!”); }
else {
NSLog(@”onGetPermissionState啟動失敗,編號: %d”, MyError);}
}
創(chuàng)建地圖截圖如圖1所示。
1.2 創(chuàng)建并初始化BMKMapView
在引入BaiduMapAPI_Map/BMKMapComponent.h頭文件后,聲明BMKMapView并添加到父視圖上,進(jìn)行地圖初始化:
BMKLocationViewDisplayParam *LclShow = [[BMKLocationViewDisplayParam alloc] init];
LclShow.isRotateAngleValid = true;
LclShow.isAccuracyCircleShow = true;
LclShow.locationViewOffsetX = 0;
LclShow.locationViewOffsetY = 0;
[_mapView updateLocationViewWithParam: LclShow];
完成以上步驟,運(yùn)行即可看到生成的百度地圖。
2 向地圖中添加覆蓋物、工具、控件
在主控制器中添加覆蓋物、工具和自定義UI控件,可實(shí)現(xiàn)外部操作與按鈕等控件的響應(yīng)事件方法。
信息窗口、標(biāo)注、矢量元素等均為覆蓋物,其本身擁有地理坐標(biāo),如果我們對地圖進(jìn)行縮放操作、拖動地圖操作,它們會發(fā)生相對應(yīng)的變化。如果要增加覆蓋物,可使用addOverlay()方法,如果要刪除覆蓋物,則使用removeOverlay()方法。
另外,百度地圖集成很強(qiáng)交互功能的“工具”,它涵蓋有:測距工具DistanceTool、標(biāo)注工具PushpinTool、區(qū)域縮放工具DragAndZoomTool。
應(yīng)注意的是,初始化“工具”類,必須按照地圖所要求的實(shí)例參數(shù)來提供,才能使“工具”在該地圖上生效??梢栽诘貓D上同時添加數(shù)個“工具”,但同一時刻僅有一個“工具”處于開啟狀態(tài)。
區(qū)域縮放工具卻可以自行配置是否自動關(guān)閉,而標(biāo)注工具和測距工具在完成一次運(yùn)行后會自動退出開啟狀態(tài)。
var Lclmap = new BMap.Map(“container”); // 生成新的地圖對象
Lclmap.centerAndZoom(new BMap.Point((110.390, 50.870),12);//110.390表示經(jīng)度,50.870表示緯度,顯示地圖
var LclGongJu = new BMap.DistanceTool(Lclmap);
LclGongJu.open();
3 偵聽事件
百度地圖API的事件機(jī)制中提供了addEventListener方法,每一個對象都包含該方法,并且運(yùn)用這個方法來偵聽對象的事件。addEventListener方法有2個參數(shù):(1)偵聽的事件名;(2)當(dāng)事件觸發(fā)時所需調(diào)用的函數(shù)。例如,Bmap.Map包含著mousemove,rightclick等事件。當(dāng)這些事件被觸發(fā)時,偵聽函數(shù)會獲得對應(yīng)的事件參數(shù)[3]。
4 自定義地圖圖層
因?yàn)榘俣鹊貓D對隱私比較注重,通過截屏出來的圖片沒有地圖圖層。解決的思路是,百度地圖API中有截圖的方法,可以通過地圖管理對象調(diào)截圖方法,如果項(xiàng)目中需求圖片還有除地圖之外的信息,就需要將兩個圖片進(jìn)行拼接,才能得到想要的圖片。
5 結(jié)語
本文重點(diǎn)討論了在iOS系統(tǒng)中,如何運(yùn)用百度地圖API創(chuàng)建地圖功能,向地圖中添加覆蓋物、工具、控件,以及偵聽事件、自定義圖層。熟練運(yùn)用和掌握這些地圖API,對于快速在APP中內(nèi)嵌地圖功能,提高開發(fā)效率,降低地圖類功能的開發(fā)成本具有重要意義和實(shí)踐推廣價(jià)值。
[參考文獻(xiàn)]
[1]梁廣榮,黎紅.基于百度地圖API的虛擬校園實(shí)現(xiàn)[J].廊坊師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2012(6):47-49.
[2]董杰,馬宏琳.百度地圖API的安卓開發(fā)技術(shù)研究[J].電腦知識與技術(shù),2017(23):79-80.
[3]趙鵬程,胡慶武,劉仙雄,等.面向iOS的移動端全景地圖構(gòu)建方法[J].地理與地理信息科學(xué),2016(1):95-99.
Abstract:With the rapid development of mobile Internet and peoples demand for APP convenience, travel navigation, logistics, and life service APPs are equipped with map functions in their applications. These functions are more and more popular and play a role. More and more important role. On the other hand, iOS-based portable devices have a large number of mid-to-high-end users due to their portability, stability and application richness. Therefore, it is especially important to study the map application based on iOS system and master the development details. This psper takes the Baidu map as an example, researches the development and application of maps APP based on iOS.
Key words:map; iOS; API; SDK; development