6.百度地图例子讲解

来源:互联网 发布:ubuntu rar压缩命令 编辑:程序博客网 时间:2024/04/28 07:58

   一.准备工作:  

百度地图移动版API(Android)是一套基于Android设备的应用程序接口,通过该接口,可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序  百度地图移动版API不仅包含构建地图的基本接口,还提供了本地搜索、路线规划、地图定位等数据服务。

一.获取API Key
地址
:
百度地图开发官网http://developer.baidu.com/map/android-mobile-apply-key.htm
添加引擎到Andoid工程中
添加jar包: baidumapapi_v3_3_0.jar和locSDK_5.0.jar
添加.so文件:拷贝libBaiduMapSDK_v3_3_0_15.so 、 liblocSDK5.so到libs\armeabi目录下
注: locSDK_5.0.jar和liblocSDK5.so为百度定位SDK所使用资源,开发者可根据实际需求自行添加。 
    



1、打开命令行输入cd .android 进入到android签名目录 如:C:\Users\lenovo\.android
2、命令 -list -v -keystore debug.keystore 密码是android
数字签名;包名 分号是英文的  
例如:48:8C:D9:43:56:81:C4:10:10:40:B6:C3:0A:A1:84:A9:65:65:9A:5A;baidumapsdk.demo
生成的key:V3ITMGba32313GGCLFLALQdP


二.AndroidManifest中的配置

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<!--允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>


key:

<meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="5RcUpEpQyGNZWeTQVGb7gStr" />


三.MainActivity  页面的配置和地图的校验

public class MainActivity extends Activity {private static String[] objects = new String[] { "hello world", "图层","圆形覆盖物", "展示文字", "marker覆盖物", "矩形范围内搜索", "圆形区域", "全城搜索", "驾车路线","步行路线", "公交换乘", "我的位置" };private static Class[] clazzs = new Class[] { HelloWorld.class,LayerDemo.class,CircleOptionsDemo.class,TextOptionsDemo.class,MarkerOptionsDemo.class,PoiSearchInBoundsDemo.class,PoiSearchNearbyDemo.class,PoiSearchCityDemo.class,DrivingRouteOverlayDemo.class,WalkingRouteOverlayDemo.class,TransitRouteOverlayDemo.class,LocationDemo.class};private ListView list;private ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SDKInitializer.initialize(getApplicationContext());//初始化地图list = (ListView) findViewById(R.id.list);adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item, objects);list.setAdapter(adapter);list.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {Intent intent = new Intent(getApplicationContext(),clazzs[position]);startActivity(intent);}});}}<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >     <ListView        android:id="@+id/list"        android:layout_width="fill_parent"        android:layout_height="wrap_content" >     </ListView></RelativeLayout>






三.检验百度地图 (测试)

//百度地图,测试public class HelloWorld extends Activity {private static final String TAG = "tag";private MybaiduMapReceiver baduSdkReceiver;private IntentFilter filter;private MapView mapView;private double latitude = 30.472473;// 纬度private double longitude = 114.418332;// 经度private LatLng hmPos = new LatLng(latitude, longitude);// 学校private BaiduMap map;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 初始化地图,因为百度会校验你的key是不是他的initManager();setContentView(R.layout.common);//初始化设置init();}private void init() {// 设置地图的放大缩小的级别(V2.X 3-19 V1.X 3-18)// ① 修改了文件的格式 优化了空间的使用(北京 110M 15M)// ② 增加了级别 3D效果(18 19)mapView = (MapView)findViewById(R.id.mapView);//mapView.showZoomControls(false);// 默认是true 显示标尺//mapView.showScaleControl(false);// 默认是true 显示缩放按钮// BaiduMap: 管理具体的某一个MapView : 旋转,移动,缩放,事件。。map = mapView.getMap();//默认级别为12,设置19MapStatusUpdate mapStatus = MapStatusUpdateFactory.zoomTo(19);map.setMapStatus(mapStatus);//设置初始化的位置MapStatusUpdate mapStatusPoint = MapStatusUpdateFactory.newLatLng(hmPos);map.setMapStatus(mapStatusPoint );}private void initManager() {SDKInitializer.initialize(getApplicationContext());baduSdkReceiver = new MybaiduMapReceiver();filter = new IntentFilter();filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 注册网络错误filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR); // 注册key校验结果registerReceiver(baduSdkReceiver, filter);}class MybaiduMapReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String result = intent.getAction();if (result.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {// 网络错误Toast.makeText(getApplicationContext(), "无网络", 0).show();} else if (result.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {// key校验失败Toast.makeText(getApplicationContext(), "校验失败", 0).show();}}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubswitch (keyCode) {case KeyEvent.KEYCODE_1:// 放大// 放大地图缩放级别 每次放大一个级别MapStatusUpdate zoomInStatus = MapStatusUpdateFactory.zoomIn();map.setMapStatus(zoomInStatus);break;case KeyEvent.KEYCODE_2:// 缩小// 缩小地图缩放级别 每次缩小一个级别MapStatusUpdate zooOutStatus = MapStatusUpdateFactory.zoomOut();map.setMapStatus(zooOutStatus);break;case KeyEvent.KEYCODE_3:// 以一个点为中心 旋转MapStatus mapStatus = map.getMapStatus();// 获取地图的当前状态float rotate = mapStatus.rotate;Log.d(TAG, "rotate:" + rotate);// 旋转 范围0~360MapStatus rotateStatus = new  MapStatus.Builder().rotate(rotate+30).build();// 创建新的MapStatusMapStatusUpdate rotateStatusUpdate = MapStatusUpdateFactory.newMapStatus(rotateStatus);map.setMapStatus(rotateStatusUpdate);break;case KeyEvent.KEYCODE_4:// 已一条直线 为轴 旋转 Overlooking 俯角MapStatus mapStatusOver = map.getMapStatus();// 获取地图的当前状态float overlook = mapStatusOver.overlook;Log.d(TAG, "overlook:" + overlook);// 0~45MapStatus overStatus = new MapStatus.Builder().overlook(overlook-5).build();MapStatusUpdate overStatusUpdate = MapStatusUpdateFactory.newMapStatus(overStatus);map.setMapStatus(overStatusUpdate);break;case KeyEvent.KEYCODE_5:// 移动MapStatusUpdate moveStatusUpdate = MapStatusUpdateFactory.newLatLng(new LatLng(40.065796,116.349868));// 带动画的更新地图状态 耗时300毫秒map.animateMapStatus(moveStatusUpdate);break;default:break;}return super.onKeyDown(keyCode, event);}@Overrideprotected void onResume() {mapView.onResume();super.onResume();}@Overrideprotected void onPause() {mapView.onPause();super.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(baduSdkReceiver);}}布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <com.baidu.mapapi.map.MapView//百度地图的View        android:id="@+id/mapView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"/>    </LinearLayout>
</pre><h2>四.图层示例(普通图层.交通图层.卫星图层)</h2><div><pre name="code" class="java">public class LayerDemo extends Activity {private MapView mapView;private BaiduMap baiduMap;private double latitude = 30.472473;// 纬度private double longitude = 114.418332;// 经度private LatLng hmPos = new LatLng(latitude, longitude);// 学校@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// 初始化地图,因为百度会校验你的key是不是他的initManager();setContentView(R.layout.common);init();}private void initManager() {SDKInitializer.initialize(getApplicationContext());}private void init() {mapView = (MapView) findViewById(R.id.mapView);baiduMap = mapView.getMap();// 默认级别为12,设置19MapStatusUpdate mapStatus = MapStatusUpdateFactory.zoomTo(12);baiduMap.setMapStatus(mapStatus);// 设置初始化的位置MapStatusUpdate mapStatusPoint = MapStatusUpdateFactory.newLatLng(hmPos);baiduMap.setMapStatus(mapStatusPoint);//baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);卫星图baiduMap.setTrafficEnabled(true);//设置交通图}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_1:// 底图// 设置地图类型 MAP_TYPE_NORMAL 普通图; MAP_TYPE_SATELLITE 卫星图baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_2:// 卫星图baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_3:// 交通图// 是否打开交通图层baiduMap.setTrafficEnabled(true);break;default:break;}return super.onKeyDown(keyCode, event);}}

五.BaseActivity (代码提取)

public class BaseActivity extends Activity {protected BaiduMap baiduMap;protected MapView mapview;public double latitude = 30.472473;// 纬度public double longitude = 114.418332;// 经度public LatLng hmPos = new LatLng(latitude, longitude);// 学校@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initManager();setContentView(R.layout.common);init();}private void initManager() {//SDKInitializer.initialize(getApplicationContext()); // 不能传递Activity,必须是全局Context}private void init() {// 设置地图级别(V2.X 3-19 V1.X 3-18)// ① 修改了文件的格式 优化了空间的使用(北京 110M 15M)// ② 增加了级别 3D效果(18 19)mapview = (MapView) findViewById(R.id.mapView);baiduMap = mapview.getMap();// BaiduMap: 管理具体的某一个MapView : 旋转,移动,缩放,事件。。// 描述地图状态将要发生的变化 使用工厂类MapStatusUpdateFactory创建MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 默认的级别12// 设置缩放级别baiduMap.setMapStatus(mapstatusUpdate);// LatLng latlng = new LatLng(arg0, arg1);// 坐标 经纬度 参数1 纬度 参数2 经度MapStatusUpdate mapstatusUpdatePoint = MapStatusUpdateFactory.newLatLng(hmPos);// 设置中心点 默认是学校baiduMap.setMapStatus(mapstatusUpdatePoint);// mapview.showZoomControls(false);// 默认是true 显示缩放按钮//// mapview.showScaleControl(false);// 默认是true 显示标尺}@Overrideprotected void onDestroy() {mapview.onDestroy();super.onDestroy();}@Overrideprotected void onResume() {mapview.onResume();super.onResume();}@Overrideprotected void onPause() {mapview.onPause();super.onPause();}}


六.展示圆形覆盖物



public class CircleOptionsDemo extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);draw();}private void draw() {CircleOptions circleOptions = new CircleOptions();circleOptions.center(hmPos).radius(100).fillColor(0X66FF0000);baiduMap.addOverlay(circleOptions);}}


七.显示文字



public class TextOptionsDemo extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);draw();}private void draw() {TextOptions options = new TextOptions();options.fontColor(0x60FF0000).text("老罗的家") // 文字内容.position(hmPos) // 位置.fontSize(50)// 字体大小.typeface(Typeface.SANS_SERIF)// 字体.rotate(30);// 旋转baiduMap.addOverlay(options);}}


八.展示图片在特地位置(Mark覆盖物)


public class MarkerOptionsDemo extends BaseActivity {private View pop;private MarkerOptions markerOptions;private TextView title;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);draw();initPop();// 点击某一个Marker 在脑袋上弹出pop}private void initPop() {pop = View.inflate(getApplicationContext(), R.layout.pop, null);LayoutParams params = new MapViewLayoutParams.Builder().layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照经纬度设置位置.position(hmPos)// 不能传null 设置为mapMode时 必须设置position.width(MapViewLayoutParams.WRAP_CONTENT).height(MapViewLayoutParams.WRAP_CONTENT).build();mapview.addView(pop,params );pop.setVisibility(View.INVISIBLE);title = (TextView) pop.findViewById(R.id.title);}private void draw() {BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.eat_icon);BitmapDescriptor bitmap2 = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);ArrayList<BitmapDescriptor> bitmaps = new ArrayList<BitmapDescriptor>();bitmaps.add(bitmap);bitmaps.add(bitmap2);markerOptions = new MarkerOptions();markerOptions.draggable(true).title("老罗").position(hmPos).icons(bitmaps).period(10);// 设置多少帧刷新一次图片资源,Marker动画的间隔时间,值越小动画越快baiduMap.addOverlay(markerOptions);markerOptions= new MarkerOptions().title("向北").position(new LatLng(latitude + 0.001, longitude)).icon(bitmap);baiduMap.addOverlay(markerOptions);markerOptions= new MarkerOptions().title("向东").position(new LatLng(latitude , longitude+ 0.001)).icon(bitmap);baiduMap.addOverlay(markerOptions);markerOptions= new MarkerOptions().title("向西南").position(new LatLng(latitude - 0.001, longitude - 0.001)).icon(bitmap);baiduMap.addOverlay(markerOptions);baiduMap.setOnMarkerClickListener(new MyListener());}class MyListener implements OnMarkerClickListener{@Overridepublic boolean onMarkerClick(Marker result) {// 当点击时 更新pop的位置 设置为显示LayoutParams params = new MapViewLayoutParams.Builder().layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照经纬度设置位置.position(result.getPosition())// 不能传null.width(MapViewLayoutParams.WRAP_CONTENT).height(MapViewLayoutParams.WRAP_CONTENT).yOffset(-10)// 距离position的像素 向下是正值 向上是负值.build();//更新位置mapview.updateViewLayout(pop, params);pop.setVisibility(View.VISIBLE);title.setText(result.getTitle());return true;}}}

九.矩形范围内搜索加油站



public class PoiSearchInBoundsDemo extends BaseActivity {private PoiSearch poiSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);search();}private void search() {poiSearch = PoiSearch.newInstance();PoiBoundSearchOption poiboundSearch = new PoiBoundSearchOption();LatLngBounds latlngbounds = new LatLngBounds.Builder()//public double latitude = 30.472473;// 纬度//public double longitude = 114.418332;// 经度.include(new LatLng(30.480073,114.421132)).include(new LatLng(30.495673,114.434332)).build();poiboundSearch.bound(latlngbounds);poiboundSearch.keyword("加油站");poiSearch.searchInBound(poiboundSearch);//当搜索到信息时,回调这个监听poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {@Overridepublic void onGetPoiResult(PoiResult result) {if(result==null||SearchResult.ERRORNO.RESULT_NOT_FOUND==result.error){Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}//PoiOverlay overlay = new PoiOverlay(baiduMap);PoiOverlay overlay = new MyOverlay(baiduMap);//设置点击事件baiduMap.setOnMarkerClickListener(overlay);//将点击事件传递给下面的overlayoverlay.setData(result);// 设置POI数据overlay.addToMap();//将所有Overlay 添加到地图上overlay.zoomToSpan();//缩放地图,使所有Overlay都在合适的视野内}@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}});}class MyOverlay extends PoiOverlay{public MyOverlay(BaiduMap arg0) {super(arg0);}@Overridepublic boolean onPoiClick(int index) {PoiResult poiResult = getPoiResult();PoiInfo poiInfo = poiResult.getAllPoi().get(index);String info = poiInfo.city + ":" +poiInfo.name + ":" + poiInfo.address;Toast.makeText(getApplicationContext(), info, 0).show();return super.onPoiClick(index);}}}

十.圆形范围内搜索加油站



//周边的搜索public class PoiSearchNearbyDemo extends BaseActivity {private PoiSearch poiSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);search();}private void search() {poiSearch = PoiSearch.newInstance();PoiNearbySearchOption nearbySearch = new PoiNearbySearchOption();nearbySearch.location(hmPos);nearbySearch.radius(1500);nearbySearch.keyword("加油站");poiSearch.searchNearby(nearbySearch);//当搜索到信息时,回调这个监听poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {//poi 查询结果回调@Overridepublic void onGetPoiResult(PoiResult result) {if(result==null||SearchResult.ERRORNO.RESULT_NOT_FOUND==result.error){Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}//PoiOverlay overlay = new PoiOverlay(baiduMap);PoiOverlay overlay = new MyOverlay(baiduMap);//设置点击事件baiduMap.setOnMarkerClickListener(overlay);//将点击事件传递给下面的overlayoverlay.setData(result);// 设置POI数据overlay.addToMap();//将所有Overlay 添加到地图上overlay.zoomToSpan();//缩放地图,使所有Overlay都在合适的视野内}//poi 详情查询结果回调@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {if(result==null||SearchResult.ERRORNO.RESULT_NOT_FOUND==result.error){Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}String text = result.getAddress()+ "::" + result.getCommentNum() + result.getFacilityRating();Toast.makeText(getApplicationContext(), text, 0).show();}});}class MyOverlay extends PoiOverlay{public MyOverlay(BaiduMap arg0) {super(arg0);}@Overridepublic boolean onPoiClick(int index) {PoiResult poiResult = getPoiResult();PoiInfo poiInfo = poiResult.getAllPoi().get(index);String info = poiInfo.city + ":" +poiInfo.name + ":" + poiInfo.address;Toast.makeText(getApplicationContext(), info, 0).show();//在点击事件中添加详情uidPoiDetailSearchOption detailSearchOption = new PoiDetailSearchOption();detailSearchOption.poiUid(poiInfo.uid);// 设置poi的uidpoiSearch.searchPoiDetail(detailSearchOption);return super.onPoiClick(index);}}}

十一.全城搜索加油站(南京,一个城市有很多.进行分页)



public class PoiSearchCityDemo extends BaseActivity {private PoiSearch poiSearch;private int currentPageIndex = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);search();}private void search() {poiSearch = PoiSearch.newInstance();PoiCitySearchOption poicitySearch = new PoiCitySearchOption();poicitySearch.city("南京");poicitySearch.keyword("加油站");poicitySearch.pageNum(currentPageIndex);poiSearch.searchInCity(poicitySearch );//当搜索到信息时,回调这个监听poiSearch.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {@Overridepublic void onGetPoiResult(PoiResult result) {if(result==null||SearchResult.ERRORNO.RESULT_NOT_FOUND==result.error){Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}String text = "共" + result.getTotalPageNum() + "页,共"+ result.getTotalPoiNum() + "条,当前第"+ result.getCurrentPageNum() + "页,当前页"+ result.getCurrentPageCapacity() + "条";Toast.makeText(getApplicationContext(), text, 1).show();baiduMap.clear();// 清空地图所有的 Overlay 覆盖物以及 InfoWindow//PoiOverlay overlay = new PoiOverlay(baiduMap);PoiOverlay overlay = new MyOverlay(baiduMap);//设置点击事件baiduMap.setOnMarkerClickListener(overlay);//将点击事件传递给下面的overlayoverlay.setData(result);// 设置POI数据overlay.addToMap();//将所有Overlay 添加到地图上overlay.zoomToSpan();//缩放地图,使所有Overlay都在合适的视野内}@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}});}class MyOverlay extends PoiOverlay{public MyOverlay(BaiduMap arg0) {super(arg0);}@Overridepublic boolean onPoiClick(int index) {PoiResult poiResult = getPoiResult();PoiInfo poiInfo = poiResult.getAllPoi().get(index);String info = poiInfo.city + ":" +poiInfo.name + ":" + poiInfo.address;Toast.makeText(getApplicationContext(), info, 0).show();return super.onPoiClick(index);}}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_1){currentPageIndex++;search();}return super.onKeyDown(keyCode, event);}}

十二.驾车路线

//驾车路线图public class DrivingRouteOverlayDemo extends BaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);search();}private void search() {//1.创建实例RoutePlanSearch routePlanSearch = RoutePlanSearch.newInstance();DrivingRoutePlanOption drivingRoutePlanOption = new DrivingRoutePlanOption();PlanNode from = PlanNode.withLocation(hmPos);// 创建起点;drivingRoutePlanOption.from(from);//设置路途中经过的点List<PlanNode> node = new ArrayList<PlanNode>();node.add(PlanNode.withCityNameAndPlaceName("武汉", "光谷广场"));drivingRoutePlanOption.passBy(node);PlanNode to = PlanNode.withLocation(new LatLng(30.422473, 114.418932));drivingRoutePlanOption.to(to);drivingRoutePlanOption.policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_DIS_FIRST);// 设置策略// 2.加载routePlanSearch.drivingSearch(drivingRoutePlanOption);//3.设置驾车路线监听routePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult arg0) {}@Overridepublic void onGetTransitRouteResult(TransitRouteResult arg0) {}@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {if (result == null|| SearchResult.ERRORNO.RESULT_NOT_FOUND == result.error) {Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(drivingRouteOverlay);drivingRouteOverlay.setData(result.getRouteLines().get(0));// 路线为第一条,有很多条drivingRouteOverlay.zoomToSpan();drivingRouteOverlay.addToMap();}});}class MyDrivingOverlay extends DrivingRouteOverlay {public MyDrivingOverlay(BaiduMap arg0) {super(arg0);}//起始点的图标设置@Overridepublic BitmapDescriptor getStartMarker() {return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);}//终点的图标设置@Overridepublic BitmapDescriptor getTerminalMarker() {// TODO Auto-generated method stubreturn BitmapDescriptorFactory.fromResource(R.drawable.icon_en);}}}

十三.步行路线


/** * 步行路线 * @author h * */public class WalkingRouteOverlayDemo extends BaseActivity {private RoutePlanSearch routePlanSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);search();}private void search() {//1.创建实例routePlanSearch = RoutePlanSearch.newInstance();WalkingRoutePlanOption walkOption = new WalkingRoutePlanOption();PlanNode from = PlanNode.withLocation(hmPos);// 创建起点PlanNode to = PlanNode.withLocation(new LatLng(30.422473, 114.418932));// 创建终点walkOption.from(from);walkOption.to(to);//2.设置步行routePlanSearch.walkingSearch(walkOption);//3.设置监听routePlanSearch.setOnGetRoutePlanResultListener(new MyListener());}class MyListener implements OnGetRoutePlanResultListener{@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {}//监听结果@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {if (result == null|| SearchResult.ERRORNO.RESULT_NOT_FOUND == result.error) {Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}//展示OverlayWalkingRouteOverlay overlay = new WalkingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);// 把事件传递给overlayoverlay.setData(result.getRouteLines().get(0));// 设置线路为第一条overlay.addToMap();overlay.zoomToSpan();}}}

十四.公交换乘


/** * 公交换乘路线 * @author h * */public class TransitRouteOverlayDemo extends BaseActivity {private RoutePlanSearch routePlanSearch;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);search();}private void search() {//1.创建实例routePlanSearch = RoutePlanSearch.newInstance();TransitRoutePlanOption transitOption = new TransitRoutePlanOption();PlanNode from = PlanNode.withLocation(hmPos);// 创建起点PlanNode to = PlanNode.withLocation(new LatLng(30.422473, 114.418932));// 创建终点transitOption.from(from);transitOption.to(to);transitOption.city("武汉");transitOption.policy(TransitRoutePlanOption.TransitPolicy.EBUS_WALK_FIRST);//2.设置公交routePlanSearch.transitSearch(transitOption);//3.设置监听routePlanSearch.setOnGetRoutePlanResultListener(new MyListener());}class MyListener implements OnGetRoutePlanResultListener{@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}//路线结果@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {if (result == null|| SearchResult.ERRORNO.RESULT_NOT_FOUND == result.error) {Toast.makeText(getApplicationContext(), "未搜索到结果", 0).show();return;}TransitRouteOverlay overlay = new TransitRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);// 把事件传递给overlayoverlay.setData(result.getRouteLines().get(0));// 设置线路为第一条overlay.addToMap();overlay.zoomToSpan();}@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {}}class MyDrivingOverlay extends DrivingRouteOverlay{public MyDrivingOverlay(BaiduMap arg0) {super(arg0);}@Overridepublic BitmapDescriptor getStartMarker() {//覆写此方法以改变默认起点图标return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);}@Overridepublic BitmapDescriptor getTerminalMarker() {//覆写此方法以改变默认终点图标return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);}}}


十五.定位



public class LocationDemo extends BaseActivity {private LocationClient mLocationClient;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);locate();}private void locate() {BDLocationListener myListener = new MyLocationListener();mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类mLocationClient.registerLocationListener(myListener); // 注册监听函数initLocation();}private void initLocation() {LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备option.setIgnoreKillProcess(false);option.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系int span = 1000;option.setScanSpan(span);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要//option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向//option.setIsNeedLocationDescribe(true);//// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”// option.setIsNeedLocationPoiList(true);//// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到//option.setIgnoreKillProcess(false);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死//option.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集// option.setEnableSimulateGps(false);// 可选,默认false,设置是否需要过滤GPS仿真结果,默认需要mLocationClient.setLocOption(option);BitmapDescriptor geo = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);MyLocationConfiguration configuration = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.COMPASS, true, geo);//NORMAL FOLLOWING COMPASS三种模式baiduMap.setMyLocationConfigeration(configuration);// 设置定位显示的模式baiduMap.setMyLocationEnabled(true);// 打开定位图层}class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation result) {if (result != null) {MyLocationData data = new MyLocationData.Builder().latitude(result.getLatitude()).longitude(result.getLongitude()).build();baiduMap.setMyLocationData(data);}}}@Overrideprotected void onStart() {mLocationClient.start();super.onStart();}@Overrideprotected void onPause() {mLocationClient.stop();super.onPause();}}



1 0
原创粉丝点击