关于使用高德地图进行车辆行驶或者人运动轨迹记录成功方案

轨迹记录是现在交通运输发展的今天必不可少的一项技术,从卫星上天得那一刻,运输管控等TMS类似就注定诞生!

百度知道告诉我们GPS定位不准原因: https://jingyan.baidu.com/article/48a42057084f9fa9242504de.html 

以下是一个GPS误差引入简表:

l         卫星时钟误差:0-1.5米

l         卫星轨道误差:1-5米

l         电离层引入的误差:0-30米

l         大气层引入的误差:0-30米

l         接收机本身的噪音:0-10米

l         多路反射:0-1米

l         总定位误差:大约28米

 

什么是GPS的漂移?

用过GPS的人大概都有这种体会:当GPS终端静止的时候,其定位坐标(经纬度)经常在变,偶尔变化还比较大,甚至还会显示有速度。业内人士把这种现象称为“漂移”。

其实,GPS漂移不仅在静止的时候会产生,动态的时候也会产生,只不过漂移的程度没那么明显,产生的几率小些罢了,这是GPS的一个基本特性。(至于GPS为什么会产生漂移,了解GPS的定位原理就不难解释,在此不再详述。)

GPS漂移是GPS应用时需要处理的问题之一,漂移主要有两个方面,

第一,   速度过快,以至于GPS的响应时间短于当前运行速度,出现漂移;

第二,   在高大建筑密集或天气情况不好的地方,因为GPS信号经过多次的折、反射,造成信号误差,出现漂移。

GPS漂移的两种表现:静态位置漂移、速度(位置)漂移

 

以上,是对GPS相关知识的一个简单说明, 在实际开发过程中,我真实遇见了这个严峻的问题,  先后用 GPS全量收集,GPS点速度过滤,距离过滤,以及高德地图的LBS服务等, 进行了一系列对比,想到一种可行的方案:

1. 网络+GPS定位 , 通过距离对当前状态分为两种: 静止状态/移动状态. 

    网络定位的特点是: 相对高精度(8星10米内)的GPS定位误差偏大,没有速度/角度等( 可以使用手机传感器,但是人在原地转圈也存在高速和角度变化大问题), 但是不需要GPS信号,通过地址与前后三点平均距离对其进行二次过滤

2. 进入静止状态的条件是 :  连续多点距离变化小

  进入移动状态的条件:当前处于静止状态切有多次距离较大改变量变化

3. 静止状态下, 大变化的点轨迹记录次数不处理 ,移动状态同理 , 这样是为了避免 飘逸,

因为静态飘逸数据特点: 例如,多次连续小范围内的距离在5m以内,突然存在一两次100m甚至500m的轨迹点出现(观察中, 高德API 无论GPS还是网络都存在, 特别是人在电梯内 变化尤为明显)

 

针对以上想法的实现效果图:

其中:

黑色-记录的原轨迹点

红色-对原轨迹点进行抽稀平滑道路纠正

蓝色及黄色-高德LBS服务

图1 - 行驶轨迹  走路+公交+地铁

 

部分代码片段:

    private AMapLocation prev;

    @Override
    public boolean intercept(AMapLocation location) {

        if (prev!=null){
            LatLng s =  new LatLng(prev.getLatitude(), prev.getLatitude());
            LatLng d = new LatLng(location.getLatitude(), location.getLatitude());
            float distance = AMapUtils.calculateLineDistance(s,d);//距离改变量,单位米
            LLog.print("距离改变量: "+ distance+" 米");
            if (distance < intervalMin ) {
//                LLog.print("距离改变量过小: "+ distance+" 米");
                if (distance<3) {
                    if (!staticFlag){
                        count++; //收集连续多次的距离改变量
                        if (count==10){
                            staticFlag  = true;
                            count=0;
                            LLog.print("进入静止状态");
                        }
                    } else {
//                        LLog.print("当前处于静止");

                        if (count>0) count--;
                    }
                }
                //如果连续10次距离改变量==0 认为处于静止状态, 解除静止状态的条件: 连续3次大的距离改变
                return true;
            }

            if (staticFlag) {
                count++;
                if (count==3){
                    staticFlag = false;
                    count = 0;
                    LLog.print("进入移动状态");
                }
            }else{
//                LLog.print("当前移动正常");
                if (count>0) count--;
            }

            if (distance < intervalMax){
                float time = (location.getTime() - prev.getTime()) / 1000.0f; //两点的时间差
                if (time <= 0) {
                    //LLog.print("时间异常: " + time);
                    return true;
                }else{
//                    prev.setTime(location.getTime());
                    float speed = distance/time; // m/s ,车辆速度最大值  50米/秒(m/s)=180千米/时(km/h)
                    if (speed < 1.5){
                        LLog.print("速度过小: "+ speed+" 米/秒");
                    }else if (speed > 30){
                        LLog.print("速度过大: "+ speed+" 米/秒");
                    }
                }
            }
        }

        if (staticFlag) {
            LLog.print("静止状态");
            return true;
        }
        LLog.print("移动状态");
        prev = location;

        return false;
    }

图2 - 部分数据截图

图3 - 部分数据截图

 

如今大多数智能手机系统都提供节点功能, GPS轨迹记录目前对于电量消耗是巨大的,如果在应用开发过程中,建议使用者进行如下设置:

 

 

我是狼一样的存在 , 嗷呜`

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
uniapp是一款基于Vue.js的跨平台应用框架,支持同时开发iOS、Android和H5等多个平台的应用程序。而高德地图App是一款地图应用程序,提供了地图、导航、定位等功能。本文将介绍如何在uniapp中使用高德地图App完成车辆轨迹动画。 1.安装高德地图插件 在uniapp项目中使用高德地图,需要先安装uni-app插件,可以在插件市场中搜索“高德地图插件”进行安装。 安装完成后,在项目中的manifest.json中添加以下配置: ``` "permissions":{ "scope.userLocation": { "desc": "获取当前位置信息及地图功能" } }, "sitemapLocation":"sitemap.json", "app-plus": { "modules": { "AMap": "uni-AMap", "AMapUI": "uni-AMapUI" }, "appid": "" } ``` 2.创建地图 在页面中创建地图组件,代码如下: ``` <template> <view class="map"> <map :longitude="longitude" :latitude="latitude" :markers="markers"></map> </view> </template> <script> export default { data() { return { longitude: 116.397428, latitude: 39.90923, markers: [{ id: 1, longitude: 116.397428, latitude: 39.90923, iconPath: '/static/location.png', width: 50, height: 50, title: '当前位置' }] } } } </script> ``` 3.添加动画 在页面中添加动画,代码如下: ``` <template> <view class="map"> <map :longitude="longitude" :latitude="latitude" :markers="markers"></map> <view class="button" @click="startAnimation">开始动画</view> </view> </template> <script> export default { data() { return { longitude: 116.397428, latitude: 39.90923, markers: [{ id: 1, longitude: 116.397428, latitude: 39.90923, iconPath: '/static/location.png', width: 50, height: 50, title: '当前位置' }], animation: null } }, methods:{ startAnimation(){ const animation = uni.createAnimation({ duration: 10000, timingFunction: 'linear' }) animation.translate(100, 100).step() this.markers[0].animation = animation.export() this.animation = animation } } } </script> ``` 4.运行程序 在HBuilder X中运行程序,点击“开始动画”按钮即可看到车辆轨迹动画。 以上就是在uniapp中使用高德地图App完成车辆轨迹动画的步骤。通过使用高德地图插件和uniapp框架,我们可以很方便地实现地图功能和动画效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值