毕业设计(论文)开题报告及文献综述
百度地图移动版API for android
开发指南
2011.4.27
CopyRight @ Baidu.com
1
目录
1 简介 ............................................................................................................... 3
2 在您的地图中显示......................................................................................... 3
3 地图图层 ....................................................................................................... 7
3.1 底图 ..................................................................................................... 7
3.2 实时交通信息 ...................................................................................... 7
3.3 卫星图 ................................................................................................. 8
3.4 实景图 ................................................................................................. 8
4 覆盖物 ........................................................................................................... 8
4.1 覆盖物的抽象类 :Overlay ................................................................. 9
4.2 当前位置:MyLocationOverlay ............................................................ 9
4.3 分条目覆盖物:ItemizedOverlay ........................................................ 10
4.4 本地搜索覆盖物:PoiOverlay ............................................................. 11
4.5 驾车路线覆盖物:RouteOverlay ......................................................... 11
4.6 换乘路线覆盖物:TransitOverlay ........................................................ 11
5 服务类 .......................................................................................................... 11
5.1 搜索服务 ............................................................................................. 11
5.2 POI搜索及PoiOverlay ........................................................................ 12
5.3 驾车路线搜索及RouteOverlay ............................................................ 13
5.4 步行路线搜索及RouteOverlay ............................................................ 15
5.5 公交换乘路线搜索及TransitOverlay ......................................................... 15
5.6 地址信息查询 ..................................................................................... 16
6 事件 .............................................................................................................. 16
6.1 定位监听 ............................................................................................. 16
6.2 一般事件监听 ..................................................................................... 17
2
1 简介
什么是百度地图API?
百度地图移动版API(Android)是一套基于Android 1.5及以上设备的应用程序接口,通过该接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图移动版API不仅包含构建地图的基本接口,还提供了诸如地图定位、本地搜索、路线规划等数据服务,你可以根据自己的需要进行选择。
面向的读者
API是提供给那些具有一定Android编程经验和了解面向对象概念的读者使用。此外,读者还应该对地图产品有一定的了解。
您在使用中遇到任何问题,都可以通过API贴吧或交流群反馈给我们。
获取API Key
用户在使用API之前需要获取百度地图移动版API Key,该Key与你的百度账户相关联,您必须先有百度帐户,才能获得API KEY。并且,该KEY与您引用API的程序名称有关,具体流程请参照获取密钥。
兼容性
支持Android 1.5及以上系统。
2 在您的地图中显示
如何把API添加到我的Android工程中?
首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,确定后返回,这样您就可以在您的程序中使用API了。
百度地图的“Hello,World”
在Manifest中添加使用权限
1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
2. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
3. <uses-permission android:name="android.permission.INTERNET"></uses-permission> 4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
3
6. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permis
sion>
7. <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permiss
ion>
在Manifest中添加Android版本支持
1. <supports-screens android:largeScreens="true" android:normalScreens="true" androi
d:smallScreens="true" android:resizeable="true" android:anyDensity="true"/> 2. <uses-sdk android:minSdkVersion="3"></uses-sdk>
让创建的地图Activity继承com.baidu.mapapi.MapActivity, 并import相关类
1. import java.util.ArrayList;
2. import java.util.List;
3. import android.content.Context;
4. import android.graphics.Canvas;
5. import android.graphics.Paint;
6. import android.graphics.Point;
7. import android.graphics.drawable.Drawable;
8. import android.location.Location;
9. import android.os.Bundle;
10. import android.util.Log;
11. import android.view.View;
12. import android.widget.Toast;
13. import com.baidu.mapapi.BMapManager;
14. import com.baidu.mapapi.GeoPoint;
15. import com.baidu.mapapi.ItemizedOverlay;
16. import com.baidu.mapapi.LocationListener;
17. import com.baidu.mapapi.MKAddrInfo;
18. import com.baidu.mapapi.MKDrivingRouteResult;
19. import com.baidu.mapapi.MKGeneralListener;
20. import com.baidu.mapapi.MKLocationManager;
21. import com.baidu.mapapi.MKPlanNode;
22. import com.baidu.mapapi.MKPoiResult;
23. import com.baidu.mapapi.MKSearch;
24. import com.baidu.mapapi.MKSearchListener;
25. import com.baidu.mapapi.MKTransitRouteResult;
26. import com.baidu.mapapi.MKWalkingRouteResult;
27. import com.baidu.mapapi.MapActivity;
28. import com.baidu.mapapi.MapController;
4
29. import com.baidu.mapapi.MapView;
30. import com.baidu.mapapi.MyLocationOverlay;
31. import com.baidu.mapapi.Overlay;
32. import com.baidu.mapapi.OverlayItem;
33. import com.baidu.mapapi.PoiOverlay;
34. import com.baidu.mapapi.RouteOverlay;
35. import com.baidu.mapapi.TransitOverlay;
36.
37. public class MyMapActivity extends MapActivity {
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48. } @Override protected boolean isRouteDisplayed() { } return false; @Override public void onCreate(Bundle savedInstanceState) { } super.onCreate(savedInstanceState); setContentView(R.layout.main);
在布局xml中添加地图控件
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="/apk/res/android"android:or
ientation="vertical" android:layout_width="fill_parent" android:layout_height="f
ill_parent">
3. <TextView android:layout_width="fill_parent" android:layout_height="wrap_content
" android:text="@string/hello" />
4. <com.baidu.mapapi.MapView android:id="@+id/bmapsView" android:layout_width="fill
_parent" android:layout_height="fill_parent" android:clickable="true" />
5. </LinearLayout>
初始化地图Activity
在地图Activity中定义变量: BMapManager mBMapMan = null; 在onCreate方法中增加以下代码,并将您申请的Key替换“我的Key”:
1. mBMapMan = new BMapManager(getApplication());
2. mBMapMan.init("我的Key", null);
3. super.initMapActivity(mBMapMan);
5
4. MapView mMapView = (MapView) findViewById(R.id.bmapsView); 5. mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件 6. MapController mMapController = mMapView.getController(); // 得到mMapView的控制权,可
以用它控制和驱动平移和缩放
7. GeoPoint point = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); //用
给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6) 8. mMapController.setCenter(point); //设置地图中心点 9. mMapController.setZoom(12); //设置地图zoom级别 Override以下方法,管理API:
1. @Override
2. protected void onDestroy() { 3. if (mBMapMan != null) { 4. mBMapMan.destroy(); 5. mBMapMan = null;
6. }
7. super.onDestroy();
8. }
9. @Override
10. protected void onPause() { 11. if (mBMapMan != null) { 12. mBMapMan.stop();
13. }
14. super.onPause();
15. }
16. @Override
17. protected void onResume() { 18. if (mBMapMan != null) { 19. mBMapMan.start(); 20. }
21. super.onResume();
22. }
完成上述步骤后,运行程序,结果如下:
6
3 地图图层
地图图层概念
地图可以包含一个或多个图层,每个图层在每个级别都是由若干张图块组成的,它们覆盖了地球的整个表面。例如您所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层,另外交通流量的展现也是通过图层来实现的。
3.1 底图
基本的地图图层,包括若干个缩放级别,显示基本的地图信息,包括道路、街道、学校、公园等内容。
3.2 实时交通信息
在以下11个城市中,支持实时交通信息:北京,上海,广州,深圳,南京,南昌,成都,重庆,武
汉,大连,常州。在地图中显示实时交通信息示例如下: mMapView.setTraffic(true);
7
运行程序,结果如下:
3.3 卫星图
在此版本API中暂不支持。 mMapView.setSatellite(true);
3.4 实景图
在此版本API中暂不支持。
mMapView.setStreetView(true);
4 覆盖物
地图覆盖物概述
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。
地图API提供了如下几种覆盖物:
?
?
? Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。 MyLocationOverlay:一个负责显示用户当前位置的Overlay。 ItemizedOverlay<Item extends OverlayItem>:Overlay的一个基类,包含了一个OverlayItem
列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。
? PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“公园”,
通过此图层将公园显示在地图上。
?
RouteOverlay:步行、驾车导航线路图层,将步行、驾车出行方案的路线及关键点显示在地图上。 8
? TransitOverlay:公交换乘线路图层,将某一特定地区的公交出行方案的路线及换乘位置显示
在地图上。
4.1 覆盖物的抽象类 :Overlay
一般来说,在MapView中添加一个Overlay需要经过以下步骤:
? 自定义类继承Overlay,并Override其draw()方法,如果需要点击、按键、触摸等交互操
作,还需Override onTap()等方法。
1. public class MyOverlay extends Overlay {
2. GeoPoint geoPoint = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); 3. Paint paint = new Paint();
4. @Override
5. public void draw(Canvas canvas, MapView mapView, boolean shadow) { 6. //在天安门的位置绘制一个String
7. Point point = mMapView.getProjection().toPixels(geoPoint, null); 8. canvas.drawText("★这里是天安门", point.x, point.y, paint);
9. }
10. }
添加到MapView的覆盖物中:
mMapView.getOverlays().add(new MyOverlay());
运行结果如下:
4.2 当前位置:MyLocationOverlay
将MyLocationOverlay添加到覆盖物中,能够实现在地图上显示当前位置的图标以及指南针:
? 初始化Location模块
1. // 初始化Location模块
2. mLocationManager = mBMapMan.getLocationManager();
3. // 通过enableProvider和disableProvider方法,选择定位的Provider
4. // mLocationManager.enableProvider(MKLocationManager.MK_NETWORK_PROVIDER); 5. // mLocationManager.disableProvider(MKLocationManager.MK_GPS_PROVIDER); 6. // 添加定位图层
7. MyLocationOverlay mylocTest = new MyLocationOverlay(this, mMapView); 9
8. mylocTest.enableMyLocation(); // 启用定位
9. mylocTest.enableCompass(); // 启用指南针
10. mMapView.getOverlays().add(mylocTest);
运行结果如下:
4.3 分条目覆盖物:ItemizedOverlay
某个类型的覆盖物,包含多个类型相同、显示方式相同、处理方式相同的项时,使用此类:
? 自定义类继承ItemizedOverlay<OverlayItem>,并Override其draw()方法,如果需要点击、
按键、触摸等交互操作,还需Override onTap()等方法。
1. class OverItemT extends ItemizedOverlay<OverlayItem> {
2. private List<OverlayItem> GeoList = new ArrayList<OverlayItem>(); 3. private Context mContext;
4. private double mLat1 = 39.90923;//39.9022; // point1纬度
5. private double mLon1 = 116.397428;//116.3822; // point1经度
6. private double mLat2 = 39.9022;
7. private double mLon2 = 116.3922;
8. private double mLat3 = 39.917723;
9. private double mLon3 = 116.3722;
10. public OverItemT(Drawable marker, Context context) {
11. super(boundCenterBottom(marker));
12. this.mContext = context;
13. // 用给定的经纬度构造GeoPoint,单位是微度 (度 * 1E6)
14. GeoPoint p1 = new GeoPoint((int) (mLat1 * 1E6), (int) (mLon1 * 1E6)); 15. GeoPoint p2 = new GeoPoint((int) (mLat2 * 1E6), (int) (mLon2 * 1E6)); 16. GeoPoint p3 = new GeoPoint((int) (mLat3 * 1E6), (int) (mLon3 * 1E6)); 17. GeoList.add(new OverlayItem(p1, "P1", "point1"));
18. GeoList.add(new OverlayItem(p2, "P2", "point2"));
19. GeoList.add(new OverlayItem(p3, "P3", "point3"));
20. populate(); //createItem(int)方法构造item。一旦有了数据,在调用其它方法前,首先调
用 这个方法
21. }
22. @Override
23. protected OverlayItem createItem(int i) {
10
24. return GeoList.get(i);
25. }
26. @Override
27. public int size() {
28. return GeoList.size();
29. }
30. @Override
31. // 处理当点击事件
32. protected boolean onTap(int i) {
33. Toast.makeText(this.mContext, GeoList.get(i).getSnippet(),
34. Toast.LENGTH_SHORT).show();
35. return true;
36. }
37. }
添加到MapView的覆盖物中:
38. Drawable marker = getResources().getDrawable(R.drawable.iconmark); //得
到需要标在地图上的资源
39. mMapView.getOverlays().add(new OverItemT(marker, this)); //添加ItemizedOverlay
实例到mMapView
4.4 本地搜索覆盖物:PoiOverlay
详见POI搜索及PoiOverlay章节。
4.5 驾车路线覆盖物:RouteOverlay
详见驾车路线搜索及RouteOverlay和步行路线搜索及RouteOverlay章节。
4.6 换乘路线覆盖物:TransitOverlay
详见公交换乘路线搜索及TransitOverlay章节。
5 服务类
5.1 搜索服务
百度地图移动版API集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索,通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜
11
索服务。首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果: 1. public class MySearchListener implements MKSearchListener {
2. @Override
3. public void onGetAddrResult(MKAddrInfo result, int iError) {
4. }
5. @Override
6. public onGetDrivingRouteResult(MKDrivingRouteResult result, iError) void int
{
7. }
8. @Override
9. public void onGetPoiResult(MKPoiResult result, int type, int iError) { 10. }
11. @Override
12. public onGetTransitRouteResult(MKTransitRouteResult result, iError) void int
{
13. }
14. @Override
15. public onGetWalkingRouteResult(MKWalkingRouteResult result, iError) void int
{
16. }
17. }
然后初始化MKSearch类:
1. mMKSearch = new MKSearch();
2. mMKSearch.init(mBMapMan, new MySearchListener());
5.2 POI搜索及PoiOverlay
POI搜索有三种方式,根据范围和检索词发起范围检索poiSearchInbounds,城市poi检索
poiSearchInCity,周边检索poiSearchNearBy,以下以周边检索为例介绍如何进行检索并显示覆盖物PoiOverlay:
? 检索天安门周边5000米之内的KFC餐厅:
mMKSearch.poiSearchNearBy("KFC", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);
12
? 实现MySearchListener的onGetPoiResult,并展示检索结果: ?
?
?
?
?
?
?
?
? @Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) { if (result == null) { return; } PoiOverlay poioverlay = new PoiOverlay(MyMapActivity.this, mMapView); poioverlay.setData(result.getAllPoi()); mMapView.getOverlays().add(poioverlay); }
运行结果如下:
5.3 驾车路线搜索及RouteOverlay
? 检索从天安门到百度大厦的驾车路线:
13
1. MKPlanNode start = new MKPlanNode();
2. start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); 3. MKPlanNode end = new MKPlanNode();
4. end.pt = new GeoPoint(40057031, 116307852);
5. // 设置驾车路线搜索策略,时间优先、费用最少或距离最短
6. mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
7. mMKSearch.drivingSearch(null, start, null, end);
实现MySearchListener的onGetDrivingRouteResult,并展示检索结果:
@Override
1. public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) { 2. if (result == null) {
3. return;
4. }
5. RouteOverlay routeOverlay = new RouteOverlay(MyMapActivity.this, mMapView); 6. // 此处仅展示一个方案作为示例
7. routeOverlay.setData(result.getPlan(0).getRoute(0));
8. mMapView.getOverlays().add(routeOverlay);
9. }
运行结果如下
14
5.4 步行路线搜索及RouteOverlay
方式与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null, start, null, end)修改为mMKSearch.walkingSearch(null, start, null, end),实现的方法改为onGetWalkingRouteResult即可,不再赘述。
5.5 公交换乘路线搜索及TransitOverlay ? 检索从天安门到百度大厦的公交换乘路线: 1. MKPlanNode start = new MKPlanNode();
2. start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)); 3. MKPlanNode end = new MKPlanNode();
4. end.pt = new GeoPoint(40057031, 116307852);
5. // 设置乘车路线搜索策略,时间优先、最少换乘、最少步行距离或不含地铁
6. mMKSearch.setTransitPolicy(MKSearch.EBUS_TRANSFER_FIRST);
7. mMKSearch.transitSearch("北京", start, end); // 必须设置城市名
15
实现 MySearchListener 的 onGetTransitRouteResult(MKTransitRouteResult, int),并展示检索 结果:0. 1. 2. 3. 4. 5.@Override public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) { if (result == null) { return; } TransitOverlay transitOverlay = new TransitOverlay(MyMapActivity.this, mMapView); // 此处仅展示一个方案作为示例 transitOverlay.setData(result.getPlan(0)); mMapView.getOverlays().add(transitOverlay); }6. 7. 8. 9.5.6地址信息查询根据地理坐标查询地址信息:1. mMKSearch.reverseGeocode(new GeoPoint(40057031, 116307852));实现 MySearchListener 的 onGetAddrResult,得到查询结果。6事件6.1 定位监听实现方式与系统的定位监听类似,通过 MKLocationManager 注册或者移除定位监听器:1. mLocationManager = mBMapMan.getLocationManager(); 2. LocationListener listener = new LocationListener() { 3. 4. 5. 6. 7. }; 8. // 注册监听 16 } @Override public void onLocationChanged(Location location) { // TODO 在此处处理位置变化
9. mLocationManager.requestLocationUpdates(listener);
10. // 不需要时移除监听
11. mLocationManager.removeUpdates(listener);
6.2 一般事件监听
在初始化地图Activity时,注册一般事件监听,并实现MKGeneralListener的接口处理相应事件,将mBMapMan.init("我的Key", null)替换为下面的代码:
1. mBMapMan.init("我的key", new MKGeneralListener() {
2. @Override
3. public void onGetPermissionState(int iError) {
4. // TODO 返回授权验证错误,通过错误代码判断原因,MKEvent中常量值。 5. }
6. @Override
7. public void onGetNetworkState(int iError) {
8. // TODO 返回网络错误,通过错误代码判断原因,MKEvent中常量值。
9. }
10. });
17
青岛大学毕业论文设计开题报告题目设计模式在Android平台游戏开发中的实践研究学院软件技术学院专业数字媒体艺术姓名指导教师年月日…
毕业设计论文开题报告含文献综述外文翻译题目基于Android手机平台的吃豆人游戏设计与开发毕业设计论文开题报告包括选题的意义可行性…
本科生毕业设计论文开题报告论文题目基于android的在线音乐播放器的设计与实现学院软件学院专业学生姓名学生班级学生学号指导教师基…
毕业设计开题报告题目基于Android平台的同学录设计与开发学生姓名王强学号1118014143所在院系数学与计算机科学学院专业班…
毕业设计论文开题报告题目名称基于Android文件管理器的设计与实现学院专业年级学生姓名班级学号指导教师二一一年十二月六日大学学院…
毕业设计论文开题报告题目基于android平台的新闻阅读器开发专业名称计算机科学与技术班级学号08061323学生姓名张海飞指导教…
音乐播放器详细说明系统设计的过程及部分界面图和主要功能运行流程图同时本文对过程中遇到的问题和解决方案进行了详细的研究Android…