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

android-第三方框架 同时被 2 个专栏收录
7 篇文章 0 订阅
6 篇文章 0 订阅

一、简介

由于种种原因公司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

  • 3
    点赞
  • 2
    评论
  • 26
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

适合fresh man上手 ffmpeg 库。 目录 ------------------------- 目录 第一章 多媒体概念介绍 6 1.1 视频格式 6 1.1.1 常见格式 6 1.2 音频格式 8 1.2.1 常见格式 9 1.2.2 比较 14 1.3 字幕格式 14 1.3.1 外挂字幕与内嵌字幕的阐述 14 1.3.2 外挂字幕视频与内嵌字幕视频的画面比较 15 1.3.3 外挂字幕的三种格式 15 1.4 采集录制和播放渲染 15 1.4.1 视频采集 15 1.4.2 视频录制 16 1.4.3 视频渲染 16 1.5 编解码器 18 1.6 容器和协议 18 1.6.1 容器格式和编码格式 18 1.6.2 协议 24 1.6.2.1 视频协议 25 1.6.2.2 音频协议 25 1.6.2.3 上层通讯协议 25 1.7 常用概念介绍 26 1.7.1 硬解 26 1.7.2 IBP 帧 26 1.7.3 DTS 和PTS 30 1.7.4 分辨率 30 1.7.5 码率 30 1.7.6 帧率 30 1.7.7 RGB 和YUV 30 1.7.8 实时和非实时 30 1.7.9 复合视频和 s-video 31 1.7.10 硬件加速 31 1.7.11 FFmpeg Device 31 第二章 FFmpeg 框架 32 2.1 FFmpeg 概述 32 2.1.1 简介 32 2.1.2 功能 32 2.1.3 模块组成 33 2.1.4 命令集 33 2.2 媒体播放器三大底层框架 35 第三章 编译及简单应用 39 3.1 FFmpeg 库编译和入门介绍 41 39 3.2 流媒体数据流程讲解 40 3.3 简单应用 42 3.4 SDL( Simple Direct Layer) 45 3.4.1 SDL 显示视频 45 3.4.2 SDL 显示音频 46 3.5 ffmpeg 程序的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 46 3.5.1 ffmpeg.exe 46 3.5.2 ffplay.exe 46 3.5.3 ffprobe.exe 46 第四章 数据结构 50 4.1 AVCodec 结构体 51 4.2 AVCodecContext 结构体 52 4.3 AVInputFormat 结构体 53 4.4 AVFormatContext 结构体 62 4.5 MovContext 结构体 63 4.6 URLProtocol 结构体 63 4.7 URLContext 结构体 64 4.8 AVIOContext 结构体(老版本为:ByteIOContext) 64 4.9 AVStream 结构体 65 4.10 MOVStreamContext 结 构体 66 4.11 AVPacket 结 构体 67 4.12 AVPacketList 结 构体 67 4.13 AVFrame 结构体 53 第五章 重要模块 68 5.1 libavutil 公共模块 68 1 文件列表 68 2 common.h 文件 68 3 bswap.h 文件 70 4 rational.h 文件 71 5 mathematics.h 文件 71 6 avutil.h 文件 72 5.2 libavcodec 编解码模块 73 1 文件列表 73 2 avcodec.h 文件 74 3 allcodec.c 文件 78 4 dsputil.h 文件 79 5 dsputil.c 文件 79 6 utils_codec.c 文件 80 7 imgconvert_template.h 文件 90 8 imgconvert.c 文件 110 9 msrle.c 文件 152 10 turespeech_data.h 文件 159 11 turespeech.c 文件 162 5.3 libavformat 容器模块 171 1 文件列表 171 2 avformat.h 文件 172 3 allformat.c 文件 177 4 cutils.c 文件 178 5 file.c 文件 179 6 avio.h 文件 182 7 avio.c 文件 184 8 aviobuf.c 文件 188 9 utils_format.c 文件 197 10 avidec.c 文件 208 5.4 libswscale 视频色彩空间转换 230 5.5 libswresample 音频重采样 230 5.6 libavfilter 音视频滤器 230 5.7 libavdevice 设备输入和输出容器 230 5.8 libpostproc 视频后期处理 230 第六章 播放器 230 6.1 视频播放器 230 6.1.1 ffmpeg 库的配置 230 6.1.2 一个简单的视频播放器 231 6.2 音频播放器 234 6.3 一个完整的播放器--ffplay 240 6.3.1 ffplay 流程图 240 6.3.2 ffplay 源码剖析 240 第七章 应用开发 262 7.1 ffmpeg 库的使用:编码 262 第八章 关键函数介绍 267 8.1 avformat_open_input 267 8.2 avcodec_register_all() 268 8.3 av_read_frame() 269 8.4 avcodec_decode_video2() 270 8.5 transcode_init() 270 8.6 transcode() 280 第九章 ffmpeg 相关工程 288 9.1 ffdshow 288 ffdshow 源代码分析 1 : 整体结构 288 ffdshow 源代码分析 2: 位图覆盖滤镜(对话框部分 Dialog) 290 ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings) 297 ffdshow 源代码分析 4: 位图覆盖滤镜(滤镜部分Filter) 301 ffdshow 源代码分析 5: 位图覆盖滤镜(总结) 306 ffdshow 源代码分析 6: 对解码器的 dll 的封装(libavcodec) 306 ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec) 328 ffdshow 源代码分析 9: 编解码器有关类的总结 335 9.2 LAV filters 340 LAV Filter 源代码分析 1: 总体结构 340 LAV Filter 源代码分析 2: LAV Splitter 341 LAV Filter 源代码分析 3: LAV Video (1) 364 LAV Filter 源代码分析 4: LAV Video (2) 382 9.3 MPlayer 408 9.3.1 Mplayer 支持的格式 408 9.3.2 Mplayer 中头文件的功能分析 408 9.3.3 MPlayer.main 主流程简要说明 408 9.3.4 Mplayer 源码分析 409 第十章 开发实例 416 第十一章 mp4 文件封装协议分析 416 11.1 概述 416 11.2 mp4 的物理结构 416 11.3 数据的组织结构 417 11.4 mp4 的时间结构 417 11.5 文件结构分析 418 11.5.1 File Type Box(ftyp) 418 11.5.2 Movie Box(moov) 418 第十二章 flv 文件格式分析 437 12.1 概述 437 12.2 文件总体结构 437 12.3 文件结构分析 438 12.3.1 flv 文件头的结构 438 12.3.2 body 主体结构 439 附录A:常见问题 444 1 ffmpeg 从内存中读取数据 444 2 MFC 中使用SDL 播放音频没有声音的解决方法 444 附录B:经典代码示例 445 附录 c:ffmpeg 参数中文详细解释 456 附录D:ffplay 的快捷键以及选项 458 附录E: ffmpeg 处理 rtmp 流媒体 459
©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值