android-高德地图:实时轨迹实现

一、简介

由于种种原因公司app打算更换百度地图定位与轨迹sdk为高德地图定位与轨迹(PS:道长的心中填满了泪水)。如果需要使用百度地图定位与轨迹sdk请右拐传送门:android-百度地图:鹰眼轨迹的实时绘制,或者走对门:百度地图:定位,轨迹,白板,加载崩溃,定位到非洲

1.准备

  • 获取key
    咳咳,由于高德开发文档比较完善具体的就不说了(不是道长懒),直接开传送门:获取高德地图的kay

  • 下载sdk
    高德地图的sdk下载也是和百度地图一样的需要根据需要选择,传送门:sdk下载

  • 配置studio
    道长没有按照这个studio的配置教程做,当然有人还是需要的:配置studio
    因为道长公司的项目app是组件化开发。所以一些设置是不同的,个人推荐在高德的地图的示例中心下载一个示例,然后仿照示例进行配置。示例中心传送门:示例中心。既然说到示例中心,示例中心的示例还是非常全面的(PS:高德地图是大大的好人啊,泪目)
    在这里插入图片描述

当然示例中心含有轨迹功能的示例,如下所示:
在这里插入图片描述

注:在示例中心的示例都是有应用场景的,尽量按照推荐应用场景使用

二、高德地图的使用

前面已经说过高德地图的开发文档比较完善。具体的使用道长就不细说了,道长说一下开发时认为需要注意的点:

  • 高德地图的缩放级别对应的比例尺

设置高德地图缩放的api:

aMap.moveCamera(CameraUpdateFactory.zoomTo(13));

带动画的高德地图缩放的api:

aMap.animateCamera(CameraUpdateFactory.zoomTo(13));

设置高德地图以比例尺13缩放到某个点的api:

aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mOriginList.get(0),13));

带动画的高德地图以比例尺13缩放到某个点的api:

aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 13));

缩放级别-比例尺-cameraPosition.zoom:

20-10m -19=<zoom<2019-10m -19=<zoom<2018-25m -18=<zoom<1917-50m -17=<zoom<1816-100m -16=<zoom<1715-200m -15=<zoom<1614-500m -14=<zoom<1513-1km -13=<zoom<1412-2km -12=<zoom<1311-5km -11=<zoom<1210-10km -10=<zoom<119-20km -9=<zoom<108-30km -8=<zoom<97-50km -7=<zoom<86-100km -6=<zoom<75-200km -5=<zoom<64-500km -4=<zoom<53-1000km -3=<zoom<42-1000km -3=<zoom<4

注:因为高德地图的比例尺是动态的,即再不够下一个级别的情况下比例尺的大小可根据地图的放大缩小变化

  • 高德地图截图
    道长公司的app需要把轨迹截图分享到朋友圈,但是在地图上还要覆盖一些app的view,需要一块截图到朋友圈,这时就需要先调用高德地图的api截图,然后再平铺到界面,最后使用截图api再次截图(PS:百度地图也是这么做)。
    高德地图截图api:
  /**
     * 对地图进行截屏
     */
    private void aMapScreenShot() {

        aMap.getMapScreenShot(new AMap.OnMapScreenShotListener() {
            @Override
            public void onMapScreenShot(Bitmap bitmap) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                aMapBitmap = bitmap;
                try {
                    filePath = Environment.getExternalStorageDirectory() + "/DCIM/Camera/test_" + sdf.format(new Date()) + ".png";
                    // 保存在SD卡根目录下,图片为png格式。
                    FileOutputStream fos = new FileOutputStream(filePath);
                    boolean ifSuccess = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
                    try {
                        fos.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onMapScreenShot(Bitmap bitmap, int i) {

            }
        });

    }

调用系统api进行截图:

private void screenshot() {
        // 获取屏幕
        View dView = getWindow().getDecorView();
        dView.setDrawingCacheEnabled(true);
        dView.buildDrawingCache();
        Bitmap bmp = dView.getDrawingCache();
        if (bmp != null) {
            try {
                // 获取内置SD卡路径
                String sdCardPath = Environment.getExternalStorageDirectory().getPath();
                // 图片文件路径
                String filePath = sdCardPath + File.separator + currentTime + ".png";

                File file = new File(filePath);
                FileOutputStream os = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
                os.close();
                ShareImg = filePath;

            } catch (Exception e) {
            }

            layout_title.setVisibility(View.VISIBLE);
            iv_screen_shot.setVisibility(View.GONE);

            if (shareMenuWindow == null) {
                Map<String, Object> parameters = new HashMap<>();
                parameters.put("mScreenWidth", mScreenWidth);
                parameters.put("fromWhere", "ShareTrackActivity");
                parameters.put("ShareImg", ShareImg);
                parameters.put("ShareUrl", "");
                parameters.put("ShareInfo", "");
                parameters.put("RecommendTitle", "");
                shareMenuWindow = new ShareMenuPop(ShareTrackActivity.this, parameters);
            }
            Window window = shareMenuWindow.getWindow();
            window.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); // 此处可以设置dialog显示的位置
            window.setWindowAnimations(R.style.AnimBottom);
            shareMenuWindow.setCancelable(true);
            shareMenuWindow.show();

            iv_cover.setVisibility(View.GONE);
        }
    }

  • 高德地图参数样式设置
    差不多是高德地图的所有设置,包括定位间隔、定位点的精度圈的样式、定位的模式、隐藏系统罗盘、隐藏系统定位到中心、隐藏系统比例尺等,代码如下:
    /**
     * 高德地图参数样式设置
     */
    private void initAMap() {
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。

        myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.icon_track_myself));
        myLocationStyle.strokeColor(Color.argb(255, 245, 140, 40));// 设置圆形的边框颜色
        myLocationStyle.radiusFillColor(Color.argb(100, 245, 140, 40));// 设置圆形的填充颜色
        myLocationStyle.strokeWidth(5);//设置定位蓝点精度圈的边框宽度的方法。

//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且将视角移动到地图中心点。
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
        //以下三种模式从5.1.0版本开始提供
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
//        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。

        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        aMap.getUiSettings().setZoomControlsEnabled(false);//去掉地图右下角隐藏的缩放按钮
        aMap.getUiSettings().setMyLocationButtonEnabled(false);//设置默认定位按钮是否显示,非必需设置。
        aMap.getUiSettings().setCompassEnabled(false);// 设置指南针
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
//        aMap.moveCamera(CameraUpdateFactory.zoomTo(16));

        uiSettings.setMyLocationButtonEnabled(false);//设置默认定位按钮是否显示,非必需设置。
        uiSettings.setScaleControlsEnabled(true);//控制比例尺控件是否显示
    }

道长就简单的分享到这里,希望这篇博客对你有所帮助。具体的示例可以看一下到账的Demo,如下:
aMapDemo

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值