ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android高德地图配置及实现定位,目的地路线规划的路线绘制

2019-08-16 12:06:46  阅读:570  来源: 互联网

标签:定位 myLocationStyle 地图 路线 aMap 设置 new Android 高德


1.第一步进行高德地图的配置

    1)高德地图控制台https://lbs.amap.com/dev/index创建应用和所需要的key(注意applicationId 和 签名中的SHA1 正确,比如用          正式的签名配的SHA1但是编译项目却用debug的默认签名会出问题)

    

//清单文件配置
<application>

   <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="申请的Key"/>

</application>

    2) gradle配置所需要的依赖包

app下的build.gradle文件中配置

dependencies {

    //.......
    //3D地图so及jar
    compile 'com.amap.api:3dmap:latest.integration'
    //定位功能
    compile 'com.amap.api:location:latest.integration'
    //搜索功能
    compile 'com.amap.api:search:latest.integration'

}

2.UI,初始化,定位代码编写

xml代码

<?xml version="1.0" encoding="utf-8"?>
<com.amap.api.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

activity代码

private MapView mapView;//地图显示view

private AMap aMap;//地图控制器

private MyLocationStyle myLocationStyle;//地图定位样式

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_map_base);
     mapView = (MapView) findViewById(R.id.map_view);
     mapView.onCreate(savedInstanceState);  
     if (aMap == null){
      aMap = mapView.getMap();
     }
     /**
      * 设置一些amap的属性
      */        
     aMap.getUiSettings().setZoomControlsEnabled(false);//是否可以缩放
     aMap.moveCamera(CameraUpdateFactory.zoomTo(15));//缩放比例
     //地图文字的Z轴指数,设置为2可以将地图底图文字设置在添加的覆盖物之上
     aMap.setMapTextZIndex(2);
     
     UiSettings uiSettings = aMap.getUiSettings();//地图的UI设置控制器
     uiSettings.setCompassEnabled(false);// 设置指南针是否显示
     uiSettings.setZoomControlsEnabled(false);// 设置缩放按钮是否显示
     uiSettings.setScaleControlsEnabled(true);// 设置比例尺是否显示
     uiSettings.setRotateGesturesEnabled(true);// 设置地图旋转是否可用
     uiSettings.setTiltGesturesEnabled(true);// 设置地图倾斜是否可用
     uiSettings.setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 

     myLocationStyle = new MyLocationStyle();
     //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为秒。     
     myLocationStyle.interval(3000);
     
     //设置连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
     //具体场景可根据高德API查看
     myLocationStyle.myLocationType(MyLocationStyle
     .LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);

     myLocationStyle.showMyLocation(true);//显示定位蓝点
     //设置图标
     myLocationStyle.myLocationIcon(BitmapDescriptorFactory.
     fromResource(R.mipmap.navi_map_gps_locked));
     //设置圆圈颜色
     myLocationStyle.radiusFillColor(0x70ffffff);
     //设置边框颜色
     myLocationStyle.strokeColor(0xffffffff);
     aMap.setMyLocationStyle(myLocationStyle);//关联myLocationStyle
     //监听定位信息的回调
     aMap.setOnMyLocationChangeListener(new OnMyLocationChangeListener());

     //开启定位,设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认false。
     aMap.setMyLocationEnabled(true);
     
}
    
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState), 
        //保存地图当前的状态
        mapView.onSaveInstanceState(outState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mapView.onDestroy();
    }
private boolean isFirstLocation = true;//第一次定位成功

class OnMyLocationChangeListener implements AMap.OnMyLocationChangeListener{

   @Override //定位信息的回调监听
   public void onMyLocationChange(Location location) {
      if (location == null){
        return;
      }
      Bundle bundle = location.getExtras();
      if (bundle != null && (bundle.getInt("errorCode",-1)) == 0){//定位成功
         //获取定位数据
         //经度
         double lat = location.getLatitude();
         //纬度
         double lng = location.getLongitude();

         //实现第一次定位成功,将地图中心移动到定位点
          if (isFirstLocation){
             isFirstLocation = false;
             CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new 
             LatLng(lat,lng),17);
             aMap.moveCamera(cameraUpdate);//将地图移动到定位坐标点
          }
         
      }else{
          //错误信息
          String error = bundle.get("errorInfo")
          Log.e("Map",error);
    
      }
   }
}

3.路线规划查询路径

private RouteSearch mRouteSearch;//路线查询器

private void initSearch() {
   mRouteSearch = new RouteSearch(this);
   //设置数据回调监听器
   mRouteSearch.setRouteSearchListener(new OnRouteSearchListener());

   //设置开始位置坐标点(注意经纬度不能写反,会报错1800(只能规划到中国区域里的地图路线))
   LatLonPoint startPoint new LatLonPoint(30.321842,120.141216);
   //设置目的地坐标点
   LatLonPoint endPoint = new LatLonPoint(30.321842,120.141216);
   //查询信息对象
   RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(startPoint,endPoint);

   //设置搜索参数 1.fromAndTo 路径的起点终点  2.路径规划的策略(这里是驾车模式,具体看高德API) 3.途 
   //经点,可选 4.避让区域,可选, 5.避让道路 ,可选
   RouteSearch.DriveRouteQuery query = new 
   RouteSearch.DriveRouteQuery(fromAndTo,RouteSearch.DRIVING_SINGLE_DEFAULT,null,null,"");
   //开始异步查询
   mRouteSearch.calculateDriveRouteAsyn(query);
   
}

class OnRouteSearchListener implements RouteSearch.OnRouteSearchListener{

  @Override
  public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int rCode) {
      if (rCode == 1000){//获取规划路线成功,获取到的是了,路线坐标点的集合

          List<DrivePath> paths = driveRouteResult.getPaths();

          //创建存储坐标点的集合
          List<LatLng> latLngs = new ArrayList<>();

          //遍历获取规划的所有路线坐标点
          for (DrivePath mDrivePath : paths) {
            for (DriveStep mDriveStep : mDrivePath.getSteps()) {
               for (LatLonPoint mLatLonPoint : mDriveStep.getPolyline()) {
                   latLngs.add(new 
                   LatLng(mLatLonPoint.getLatitude(),mLatLonPoint.getLongitude()));
               }
            } 
          }
         
          //先清除一下,避免重复显示
          aMap.clear();

          //绘制起始位置和目的地marker
          aMap.addMarker(new MarkerOptions()
                    .icon(BitmapDescriptorFactory.fromResource(iconRes))
                    .position(new LatLng(经度,纬度)));
          aMap.addMarker(new MarkerOptions()
                    .icon(BitmapDescriptorFactory.fromResource(iconRes))
                    .position(new LatLng(经度,纬度)));

          //绘制规划路径路线
          aMap.addPolyline(new PolylineOptions()
                //路线坐标点的集合
                .addAll(latLngs)
                //线的宽度
                .width(30)
                .color(getResources().getColor(R.color.blue))//设置画线的颜色

         //显示完整包含所有marker地图路线
         LatLngBounds.Builder builder = new LatLngBounds.Builder();
         for (int i = 0; i < latLngs.size(); i++) {
            builder.include(latLngs.get(i));
         }
         //显示全部marker,第二个参数是四周留空宽度
         aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(),200));
      }
  }

}

Over~

标签:定位,myLocationStyle,地图,路线,aMap,设置,new,Android,高德
来源: https://blog.csdn.net/m0_38020167/article/details/99672359

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有