2 配置环境变量(poi)
百度详细图文介绍这里推荐下载SDK后用sample 中的jar包和类库2 配置定位的环境(上面的不一样 如果你只需要定位看这里即可)
百度图文详细介绍这里推荐下载SDK后用sample 中的jar包和类库说明:在地图上某个点显示个图标或者View等
package com.qf.sxy.day27_baidumap; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Button; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow; import com.baidu.mapapi.map.LogoPosition; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; /** * 添加覆盖物 * 步骤: * 1,获取Baidumap对象 * 2,给Baidumap添加覆盖物 addOverlay * 3,给覆盖物添加点击监听 */ public class OverlayActivity extends AppCompatActivity { private MapView mapView; private BaiduMap baiduMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_overlay); mapView = ((MapView) findViewById(R.id.bmapView)); mapView.setLogoPosition(LogoPosition.logoPostionRightBottom); //获取百度地图对象 baiduMap = mapView.getMap(); // //地图类型 卫星 // baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); // //MAP_TYPE_NONE 空白的 // baiduMap.setMapType(BaiduMap.MAP_TYPE_NONE); //普通的 // baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); // // //开启交通图 // baiduMap.setTrafficEnabled(true); // // //开启交通图 // baiduMap.setBaiduHeatMapEnabled(true); //获取图标 BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); //获取当前坐标 final LatLng latLng = new LatLng(40.089597, 116.419385); //获取OverlayOptions 对象 设置图标 OverlayOptions options= new MarkerOptions().icon(bitmapDescriptor).position(latLng).title("天通苑"); //添加覆盖物 baiduMap.addOverlay(options); //覆盖物的点击监听 baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { Button btn = new Button(OverlayActivity.this); btn.setBackgroundColor(Color.WHITE); btn.setText(marker.getTitle()); BitmapDescriptor descriptor = BitmapDescriptorFactory.fromView(btn); /** * 参数1:图片 当然这也可以放View等 * 参数2:坐标点 * 参数3:y轴的偏移量 * 参数4:提示的监听 */ InfoWindow infoWindow = new InfoWindow(descriptor, latLng, -50, new InfoWindow.OnInfoWindowClickListener() { @Override public void onInfoWindowClick() { //隐藏 baiduMap.hideInfoWindow(); } }); //设置提示 baiduMap.showInfoWindow(infoWindow); return false; } }); } }说明:制定两个点的的路线图
package com.qf.sxy.day27_baidumap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.search.route.BikingRouteResult; import com.baidu.mapapi.search.route.DrivingRouteLine; import com.baidu.mapapi.search.route.DrivingRoutePlanOption; import com.baidu.mapapi.search.route.DrivingRouteResult; import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener; import com.baidu.mapapi.search.route.PlanNode; import com.baidu.mapapi.search.route.RoutePlanSearch; import com.baidu.mapapi.search.route.TransitRouteResult; import com.baidu.mapapi.search.route.WalkingRouteResult; import com.qf.sxy.day27_baidumap.utils.DrivingRouteOverlay; import java.util.List; /** * 路线规划步骤: * 1,获取路线规划对象RoutePlanSearch * 2,对路线规划对象进行监听 * 3,开启路线查询(有四种) * 4,在监听中 进行处理 获取路线覆盖物 将其添加到地图 可以进行点击监听节点 */ public class RouteActivity extends AppCompatActivity { private MapView mMapView; private BaiduMap mBaiduMap; //路线规划的对象 private RoutePlanSearch mRoutePlanSearch; private DrivingRouteLine drivingRouteLine;//这个路线展示到Map @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_route); mMapView = ((MapView) findViewById(R.id.bmapView)); //获取百度地图对象 mBaiduMap = mMapView.getMap(); //获取路线规划对象 mRoutePlanSearch = RoutePlanSearch.newInstance(); //对路线规划进行监听 mRoutePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) { //走路的规划 } @Override public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) { //公交的规划 } @Override public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) { //自己开车 //获取所有的路线 List<DrivingRouteLine> lines = drivingRouteResult.getRouteLines(); if(lines!=null&&lines.size()>0){//说明有路线 Log.e("AAA","==="+lines.size()); drivingRouteLine = lines.get(0);//这里我们只获取其中一条路径 }else{ Log.e("AAA","==没有路=="); } //将路线展示到地图 以覆盖物---这类给sample类帮我们画出 开头和结尾还有中间的路 MyOverlay myOverlay = new MyOverlay(mBaiduMap); //将开车的路线 给覆盖物 myOverlay.setData(drivingRouteLine); //对路线覆盖物监听 myOverlay内部实现了new BaiduMap.OnMarkerClickListener()方法 //监听地图上的箭头图片 (图片每次有转向路口都会有个箭头图片 点击图片显示相应的转向提示) mBaiduMap.setOnMarkerClickListener(myOverlay); //将覆盖物添加到地图 myOverlay.addToMap(); } @Override public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) { //骑自行车行 } }); //开启路线查询 mRoutePlanSearch.drivingSearch(new DrivingRoutePlanOption(). from(PlanNode.withCityNameAndPlaceName("北京","北京科技职业学院")). to(PlanNode.withCityNameAndPlaceName("北京","北京西站"))); } //开车的覆盖物 此类继承是百度sample中的类 public class MyOverlay extends DrivingRouteOverlay{ /** * 构造函数 * * @param baiduMap 该DrivingRouteOvelray引用的 BaiduMap */ public MyOverlay(BaiduMap baiduMap) { super(baiduMap); } //路线节点的 点击监听 @Override public boolean onRouteNodeClick(int i) { //监听地图上的箭头图片 (图片每次有转向路口都会有个箭头图片 点击图片显示相应的转向提示) //获取所有的节点 List<DrivingRouteLine.DrivingStep> lists = drivingRouteLine.getAllStep(); DrivingRouteLine.DrivingStep step = lists.get(i); Log.e("AAAA","==>"+step.getInstructions()); return super.onRouteNodeClick(i); } } } 示例图:说明:图中箭头就是监听事件
环境搭建
注意安卓6.0的运行时权限 安卓6.0运行时权限
所需: liblocSDK6a.so locSDK_6.13.jar
package com.qf.sxy.day27_baidumap; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.model.LatLng; public class LocationActivity extends AppCompatActivity { private MapView mapView; private BaiduMap baiduMap; //定位对象 private LocationClient locationClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); mapView = ((MapView) findViewById(R.id.bmapView)); baiduMap = mapView.getMap(); locationClient = new LocationClient(LocationActivity.this); //对定位的设置 LocationClientOption option = new LocationClientOption(); /** * LocationClientOption.LocationMode.Battery_Saving:低功耗定位 不用GPS (wifi 基站) * * LocationClientOption.LocationMode.Hight_Accuracy:高精度定位 全开GPS wifi 基站 * * LocationClientOption.LocationMode.Device_Sensors 仅仅使用设备 GPS 不支持室内 */ option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); /** * bd09ll:百度经纬度坐标 * bd09:墨卡托坐标 * gcjo2:国家测量局坐标 */ option.setCoorType("bd09ll"); //设置定位间隔时间 每隔两秒记录一次位置 option.setScanSpan(1000*2); //设置定位超出时间 option.setTimeOut(1000*10); //是否需要得到地址 option.setIsNeedAddress(true); //是否设置手机 机头方向 option.setNeedDeviceDirect(true); //2给定位对象进行设置 locationClient.setLocOption(option); //3监听 locationClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { //获取坐标 bdLocation.getLatitude()纬度 bdLocation.getLongitude()经度 LatLng latLng = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); BitmapDescriptor descriptor = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher); OverlayOptions options = new MarkerOptions().position(latLng).icon(descriptor).title("当前位置"); baiduMap.addOverlay(options); Log.e("fmy","位置"+bdLocation.getLatitude()); } }); //4启动 locationClient.start();//开启 locationClient.requestLocation();//发起请求 } }