劉春林 張翠翠
摘 要:隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展和人們對(duì)APP便利性的需求,旅游導(dǎo)航類(lèi)、物流類(lèi)、生活服務(wù)類(lèi)APP在應(yīng)用中標(biāo)配了地圖功能,這些功能越來(lái)越受到人們的歡迎,發(fā)揮著越來(lái)越重要的作用。另一方面,基于iOS系統(tǒng)的便攜設(shè)備,由于其便攜性、穩(wěn)定性和應(yīng)用豐富性,擁有著大量的中高端用戶(hù)群體。因此,對(duì)基于iOS系統(tǒng)的地圖類(lèi)應(yīng)用進(jìn)行研究,掌握其開(kāi)發(fā)細(xì)節(jié)顯得尤為重要。文章以百度地圖為例,研究了基于iOS的地圖類(lèi)APP的開(kāi)發(fā)應(yīng)用。
關(guān)鍵詞:地圖;iOS;API;SDK;開(kāi)發(fā)
近年來(lái),基于iOS系統(tǒng)的智能手機(jī)用戶(hù)爆炸式地增長(zhǎng),涉及地圖功能需求的旅游導(dǎo)航類(lèi)、物流類(lèi)、生活服務(wù)類(lèi)APP使用頻率越來(lái)越高,要求開(kāi)發(fā)者必須能熟練運(yùn)用地圖公司提供的地圖API來(lái)快速開(kāi)發(fā)地圖功能。目前主流的地圖公司均提供地圖開(kāi)發(fā)API[1]。本文主要以百度地圖API為例,闡述如何在封閉的iOS系統(tǒng)中,進(jìn)行地圖類(lèi)APP的開(kāi)發(fā)應(yīng)用。
百度地圖提供了非常完善的API,我們可以根據(jù)自己項(xiàng)目的需求選擇百度地圖官方提供的API,其中包含的iOS SDK開(kāi)發(fā)工具與服務(wù),提供了應(yīng)用軟件開(kāi)發(fā)中所需的地圖功能的實(shí)現(xiàn)、定位、搜索、路線(xiàn)規(guī)劃等,可應(yīng)用于大多數(shù)終端設(shè)備和大多數(shù)種操作系統(tǒng)下的地圖應(yīng)用開(kāi)發(fā)[2]。本文闡述如何運(yùn)用百度iOS SDK創(chuàng)建地圖以及添加相關(guān)服務(wù)功能。
1 在APP中創(chuàng)建地圖功能
1.1 引用地圖API
在引用地圖API文件之前,首先要去注冊(cè)百度地圖開(kāi)發(fā)者,創(chuàng)建百度地圖開(kāi)發(fā)應(yīng)用,得到百度地圖API密匙。在cocoaPods導(dǎo)入百度SDK。
Platfor:ios,6.0
Pod ‘BaiduMapKit
然后對(duì)項(xiàng)目plist進(jìn)行配置,并在AppDelegate.m中導(dǎo)入頭文件:
#import
運(yùn)用didFinishLaunchingWithOptions方法創(chuàng)建一個(gè)百度地圖對(duì)象,代碼如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//創(chuàng)建并初始化一個(gè)對(duì)象
BMKMapManager *MyManager = [[BMKMapManager alloc] init];
//啟動(dòng)地圖
BOOL MySuccess = [MyManager start:@”百度地圖AK” generalDelegate:nil];
if (!MySuccess) {
NSLog(@”創(chuàng)建地圖失敗”);
}
return YES;
}
創(chuàng)建百度地圖主對(duì)象時(shí),將generalDelegate的參數(shù)設(shè)置為self,主要是為了在onGetNetworkState和onGetPermissionState兩個(gè)函數(shù)中偵聽(tīng)網(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òng)失敗,編號(hào)%d”, MyError); }
}
-(void)onGetPermissionState:(int) MyError
{
if (0 == MyError) {
NSLog(@”地圖系統(tǒng)授權(quán)成功!”); }
else {
NSLog(@”onGetPermissionState啟動(dòng)失敗,編號(hào): %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)注、矢量元素等均為覆蓋物,其本身?yè)碛械乩碜鴺?biāo),如果我們對(duì)地圖進(jìn)行縮放操作、拖動(dòng)地圖操作,它們會(huì)發(fā)生相對(duì)應(yīng)的變化。如果要增加覆蓋物,可使用addOverlay()方法,如果要?jiǎng)h除覆蓋物,則使用removeOverlay()方法。
另外,百度地圖集成很強(qiáng)交互功能的“工具”,它涵蓋有:測(cè)距工具DistanceTool、標(biāo)注工具PushpinTool、區(qū)域縮放工具DragAndZoomTool。
應(yīng)注意的是,初始化“工具”類(lèi),必須按照地圖所要求的實(shí)例參數(shù)來(lái)提供,才能使“工具”在該地圖上生效??梢栽诘貓D上同時(shí)添加數(shù)個(gè)“工具”,但同一時(shí)刻僅有一個(gè)“工具”處于開(kāi)啟狀態(tài)。
區(qū)域縮放工具卻可以自行配置是否自動(dòng)關(guān)閉,而標(biāo)注工具和測(cè)距工具在完成一次運(yùn)行后會(huì)自動(dòng)退出開(kāi)啟狀態(tài)。
var Lclmap = new BMap.Map(“container”); // 生成新的地圖對(duì)象
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 偵聽(tīng)事件
百度地圖API的事件機(jī)制中提供了addEventListener方法,每一個(gè)對(duì)象都包含該方法,并且運(yùn)用這個(gè)方法來(lái)偵聽(tīng)對(duì)象的事件。addEventListener方法有2個(gè)參數(shù):(1)偵聽(tīng)的事件名;(2)當(dāng)事件觸發(fā)時(shí)所需調(diào)用的函數(shù)。例如,Bmap.Map包含著mousemove,rightclick等事件。當(dāng)這些事件被觸發(fā)時(shí),偵聽(tīng)函數(shù)會(huì)獲得對(duì)應(yīng)的事件參數(shù)[3]。
4 自定義地圖圖層
因?yàn)榘俣鹊貓D對(duì)隱私比較注重,通過(guò)截屏出來(lái)的圖片沒(méi)有地圖圖層。解決的思路是,百度地圖API中有截圖的方法,可以通過(guò)地圖管理對(duì)象調(diào)截圖方法,如果項(xiàng)目中需求圖片還有除地圖之外的信息,就需要將兩個(gè)圖片進(jìn)行拼接,才能得到想要的圖片。
5 結(jié)語(yǔ)
本文重點(diǎn)討論了在iOS系統(tǒng)中,如何運(yùn)用百度地圖API創(chuàng)建地圖功能,向地圖中添加覆蓋物、工具、控件,以及偵聽(tīng)事件、自定義圖層。熟練運(yùn)用和掌握這些地圖API,對(duì)于快速在APP中內(nèi)嵌地圖功能,提高開(kāi)發(fā)效率,降低地圖類(lèi)功能的開(kāi)發(fā)成本具有重要意義和實(shí)踐推廣價(jià)值。
[參考文獻(xiàn)]
[1]梁廣榮,黎紅.基于百度地圖API的虛擬校園實(shí)現(xiàn)[J].廊坊師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2012(6):47-49.
[2]董杰,馬宏琳.百度地圖API的安卓開(kāi)發(fā)技術(shù)研究[J].電腦知識(shí)與技術(shù),2017(23):79-80.
[3]趙鵬程,胡慶武,劉仙雄,等.面向iOS的移動(dòng)端全景地圖構(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