王述聰+李哲
摘要:學(xué)校里經(jīng)常會有同學(xué)問某某樓怎么走,某某教室怎么走,如果有一款手機(jī)app能幫助大家找到校園里要去的地方,那么會給廣大師生帶來很大的幫助。百度地圖api是百度公司給開發(fā)人員提供的地圖調(diào)用接口,通過對其編程可以實(shí)現(xiàn)很多自定義功能,如定位、導(dǎo)航、檢索、全景,給我們的生活帶來便利。
關(guān)鍵詞:手機(jī)應(yīng)用;android;地圖開發(fā);百度地圖;高校
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)30-0071-02
Universities Baidu Map-based Mobile Applications
WANG Shu-hong, LI Zhe
(College of New Technology Experiment Center,Hubei College of Engineering, Xiaogan 432100, China)
Abstract: There is often a certain floor school students asked how to go, how to get a certain classroom, if there is a phone app can help you find the place to go on campus, it will give teachers and students a great deal of help. Baidu Baidu's map api is to provide developers with a map call interface, can achieve a lot through programmed custom features, such as positioning, navigation, retrieval, panoramic, give our life a lot easier.
Key words: mobile applications; android, map development; Baidu map; universities
新來的大學(xué)生有這樣一個(gè)需求,他們需要知道學(xué)校的教室所在地,或者教學(xué)單位、活動場所等所在地。高校里的手繪地圖包含有這些信息,給學(xué)生帶來了便利,幫助了他們,但是手繪地圖一般只畫出了樓房的位置,具體的教室、實(shí)驗(yàn)室、語音室、機(jī)房等的位置并不知道,而且手繪地圖不能方便標(biāo)識出所有的地理位置。另一個(gè)可以查閱的地方是百度地圖或者其他電子地圖,但它們也不能精確到教室等詳細(xì)位置。百度地圖是百度提供的一項(xiàng)網(wǎng)絡(luò)地圖搜索服務(wù),在百度地圖里,用戶可以查詢街道、商場、樓盤的地理位置,也可以找到離您最近的所有餐館、學(xué)校、銀行、公園等等。本文將介紹基于百度地圖api的開發(fā),用來解決上文中提到的問題,主要講到的是定位和導(dǎo)航這兩個(gè)方面。
1 定位
要標(biāo)識出地圖上的POI,先要從地圖中采集到所要顯示位置的經(jīng)緯度。
//雙擊地圖位置采集經(jīng)緯度, onCreate方法里加上地圖的雙擊事件處理程序,
//mBaiduMap是界面上地圖的id
mBaiduMap.setOnMapDoubleClickListener(new OnMapDoubleClickListener() {
@Override
public void onMapDoubleClick(LatLng arg0) {
//獲得地圖想要標(biāo)識位置的經(jīng)緯度
System.out.println(arg0.toString());
}
});
2 加載覆蓋物
通過經(jīng)緯度在地圖上標(biāo)識覆蓋物,同時(shí)顯示詳細(xì)信息。MarkerOptions類用來生成覆蓋物,InfoWindow類用來給覆蓋物顯示詳細(xì)信息。
public void initOverlay() {
LatLng llA = new LatLng(30.939456119340765, 113.91385220883149);
LatLng llB = new LatLng(30.940168518053756, 113.9124867844563);
LatLng llC = new LatLng(30.941291309486694, 113.91140881784435);
MarkerOptions ooA = new MarkerOptions().position(llA).icon(bdA).title("同大綜合樓");
MarkerOptions ooB = new MarkerOptions().position(llB).icon(bdA).title("同大科技樓");
MarkerOptions ooC = new MarkerOptions().position(llC).icon(bdA).title("同大生科樓");
mMarkerzhl = (Marker)(mBaiduMap.addOverlay(ooA));
mMarkerkjl = (Marker)(mBaiduMap.addOverlay(ooB));
mMarkerskl = (Marker)(mBaiduMap.addOverlay(ooC));
Button button = new Button(getApplicationContext());
//加上詳細(xì)信息
button.setText("同大綜合樓:\n2樓(機(jī)房1-3)\n3樓(機(jī)房4、語音室3-5)");
button.setTextColor(Color.BLACK);
button.setBackgroundResource(R.drawable.popup);
mInfoWindow = new InfoWindow(button.getRootView(), llA, -90);
mBaiduMap.showInfoWindow(mInfoWindow);
}
3 步行導(dǎo)航
顯示目的地到學(xué)校的步行線路。需要實(shí)現(xiàn)OnGetRoutePlanResultListener接口,實(shí)現(xiàn)onGetWalkingRouteResult方法。SearchButtonProcess是在onGetWalkingRouteResult中調(diào)用的方法。Search為百度地圖搜索相關(guān)類RoutePlanSearch的實(shí)例對象。
public void SearchButtonProcess() {
//重置瀏覽節(jié)點(diǎn)的路線數(shù)據(jù)
route = null;
mBaiduMap.clear();
//設(shè)置起終點(diǎn)信息,對于tranist search 來說,城市名無意義
PlanNode stNode = PlanNode.withCityNameAndPlaceName("孝感", "湖北工程學(xué)院南門");
PlanNode enNode = PlanNode.withCityNameAndPlaceName("孝感", "湖北工程學(xué)院新技術(shù)學(xué)院");
//實(shí)際使用中請對起點(diǎn)終點(diǎn)城市進(jìn)行正確的設(shè)定
if (v.getId() == R.id.drive) { //駕車線路
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode)
.to(enNode));
} else if (v.getId() == R.id.transit) { //公交線路
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode)
.city("北京")
.to(enNode));
} else if (v.getId() == R.id.walk) { //步行線路
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode)
.to(enNode));
}
}
1
運(yùn)行如圖:顯示了同大綜合樓所在位置,同時(shí)也顯示了同大綜合樓各樓層含有哪些教室的信息。同理可以顯示學(xué)校內(nèi)所有單位的詳細(xì)信息。百度地圖還提供有全景、搜索周邊信息等功能,這些api免費(fèi)提供給開發(fā)者調(diào)用。
參考文獻(xiàn):
[1] Reto Meier. Android 4高級編程[M]. 北京: 清華大學(xué)出版社.