王述聪+李哲
摘要:学校里经常会有同学问某某楼怎么走,某某教室怎么走,如果有一款手机app能帮助大家找到校园里要去的地方,那么会给广大师生带来很大的帮助。百度地图api是百度公司给开发人员提供的地图调用接口,通过对其编程可以实现很多自定义功能,如定位、导航、检索、全景,给我们的生活带来便利。
关键词:手机应用;android;地图开发;百度地图;高校
中图分类号:TP393 文献标识码: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
新来的大学生有这样一个需求,他们需要知道学校的教室所在地,或者教学单位、活动场所等所在地。高校里的手绘地图包含有这些信息,给学生带来了便利,帮助了他们,但是手绘地图一般只画出了楼房的位置,具体的教室、实验室、语音室、机房等的位置并不知道,而且手绘地图不能方便标识出所有的地理位置。另一个可以查阅的地方是百度地图或者其他电子地图,但它们也不能精确到教室等详细位置。百度地图是百度提供的一项网络地图搜索服务,在百度地图里,用户可以查询街道、商场、楼盘的地理位置,也可以找到离您最近的所有餐馆、学校、银行、公园等等。本文将介绍基于百度地图api的开发,用来解决上文中提到的问题,主要讲到的是定位和导航这两个方面。
1 定位
要标识出地图上的POI,先要从地图中采集到所要显示位置的经纬度。
//双击地图位置采集经纬度, onCreate方法里加上地图的双击事件处理程序,
//mBaiduMap是界面上地图的id
mBaiduMap.setOnMapDoubleClickListener(new OnMapDoubleClickListener() {
@Override
public void onMapDoubleClick(LatLng arg0) {
//获得地图想要标识位置的经纬度
System.out.println(arg0.toString());
}
});
2 加载覆盖物
通过经纬度在地图上标识覆盖物,同时显示详细信息。MarkerOptions类用来生成覆盖物,InfoWindow类用来给覆盖物显示详细信息。
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());
//加上详细信息
button.setText("同大综合楼:\n2楼(机房1-3)\n3楼(机房4、语音室3-5)");
button.setTextColor(Color.BLACK);
button.setBackgroundResource(R.drawable.popup);
mInfoWindow = new InfoWindow(button.getRootView(), llA, -90);
mBaiduMap.showInfoWindow(mInfoWindow);
}
3 步行导航
显示目的地到学校的步行线路。需要实现OnGetRoutePlanResultListener接口,实现onGetWalkingRouteResult方法。SearchButtonProcess是在onGetWalkingRouteResult中调用的方法。Search为百度地图搜索相关类RoutePlanSearch的实例对象。
public void SearchButtonProcess() {
//重置浏览节点的路线数据
route = null;
mBaiduMap.clear();
//设置起终点信息,对于tranist search 来说,城市名无意义
PlanNode stNode = PlanNode.withCityNameAndPlaceName("孝感", "湖北工程学院南门");
PlanNode enNode = PlanNode.withCityNameAndPlaceName("孝感", "湖北工程学院新技术学院");
//实际使用中请对起点终点城市进行正确的设定
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
运行如图:显示了同大综合楼所在位置,同时也显示了同大综合楼各楼层含有哪些教室的信息。同理可以显示学校内所有单位的详细信息。百度地图还提供有全景、搜索周边信息等功能,这些api免费提供给开发者调用。
参考文献:
[1] Reto Meier. Android 4高级编程[M]. 北京: 清华大学出版社.