GPS轨迹飘点处理(原创)

2023-05-16

当我们处理gps设备传过来的数据时,最让人头疼的事情莫过于设备定位异常所传输的异常点了,我们习惯的叫它为飘点。这些数据是设备层面的异常,目前没有什么有效的方法来减少设备发送的飘点。但是我们可以通过程序来过滤掉这些点。

原理 

  1.  获取时间范围内(默认一天)设备的连续gps信息。
  2. 遍历这些信息,计算两个相邻点的距离,这个距离要根据实际情况确定
  3. 若距离大于可容忍距离。则证明该两个相邻点其中有一个点异常
  4. 根据3的原理,我们将正常的轨迹通过异常点切分为若干个小的轨迹(d1,d2,d3)
  5. 找出若干个小轨迹分段中最常的一个将其视为合法轨迹(这里如果合法轨迹都是飘点,那使用的设备也没啥使用的意义了)
  6. 将5找出的合法轨迹的起始点和结束点均作为起点,向整条轨迹的两侧遍历,计算两点之间的距离,若距离大于可容忍距离,则过滤该点。

图示

 代码

/**
*获得合法轨迹的list起止下标
*计算两点距离的工具类(LocationConvertUtils)自行百度
*实体中用到的信息就是经纬度和时间,我这里时间用的是毫秒的时间戳
*/ 
private String getSafeIndex(List<CarriskAlarmVO> gpsList){
        int start=0;
        int end=0;
        List<String> indexList = new ArrayList<>();
        CarriskAlarmVO dangerBefore = null;
        for(int i=1;i<gpsList.size();i++){
            CarriskAlarmVO dangerVo = gpsList.get(i);
            if(dangerBefore == null){
                dangerBefore = gpsList.get(i-1);
            }
            double disKM = LocationConvertUtils.getGPSDistanceKM(dangerVo.getGpslng(),dangerVo.getGpslat(),dangerBefore.getGpslng(),dangerBefore.getGpslat());
            long time = Math.abs(dangerVo.getGpsts()-dangerBefore.getGpsts());
            double speed = disKM*1000*3600/time;
            if(speed>200){
                if(end>start){
                    indexList.add(end+"-"+start);
                }
                start=i;
            }
            end =i;
            dangerBefore = dangerVo;
        }
        if(end>start){
            indexList.add(end+"-"+start);
        }
        int maxIndx = 0;
        int max = 0;
        for(int i=0;i<indexList.size();i++){
            int tmpEnd = Integer.valueOf(indexList.get(i).split("-")[0]);
            int tmpStart = Integer.valueOf(indexList.get(i).split("-")[1]);
            if(tmpEnd-tmpStart>max){
                max = tmpEnd-tmpStart;
                maxIndx = i;
            }
        }
      
        return indexList.get(maxIndx);
    }

找出飘点

   private void removeErrorPoint( List<CarriskAlarmVO> gpsList){
        String safeInxs = getSafeIndex(gpsList);
        int startIndex = Integer.valueOf(safeInxs.split("-")[1]);
        int endIndex = Integer.valueOf(safeInxs.split("-")[0]);
        if(startIndex==0 && endIndex==gpsList.size()-1){
            return;//轨迹正常
        }
        List<String> deleteList = new ArrayList<>();
        CarriskAlarmVO safeVo = gpsList.get(startIndex);
        for(int i=startIndex-1;i>-1;i--){
            CarriskAlarmVO dangerVo = gpsList.get(i);
            double disKM = LocationConvertUtils.getGPSDistanceKM(dangerVo.getGpslng(),dangerVo.getGpslat(),safeVo.getGpslng(),safeVo.getGpslat());
            long time = Math.abs(dangerVo.getGpsts()-safeVo.getGpsts());
            double speed = disKM*1000*3600/time;
            if(speed>200){
                deleteList.add(dangerVo.getId());
            }else{
                safeVo = dangerVo;
            }
        }
        safeVo = gpsList.get(endIndex);
        for(int i = endIndex+1;i<gpsList.size();i++){
            CarriskAlarmVO dangerVo = gpsList.get(i);
            double disKM = LocationConvertUtils.getGPSDistanceKM(dangerVo.getGpslng(),dangerVo.getGpslat(),safeVo.getGpslng(),safeVo.getGpslat());
            long time = Math.abs(dangerVo.getGpsts()-safeVo.getGpsts());
            double speed = disKM*1000*3600/time;
            if(speed>200){
                deleteList.add(dangerVo.getId());
            }else{
                safeVo = dangerVo;
            }
        }
        if(!deleteList.isEmpty()){
            //TODO 对飘点自行处理
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPS轨迹飘点处理(原创) 的相关文章

  • 在 Iphone SDK 中显示 GPS 可用性和准确性

    如何编程以在 iPhone 中显示 GPS 可用性和准确度级别 并且它必须擦除标签中先前的纬度 经度信息 iOS sdk 中有一个类叫做 CLLocationManager 浏览 XCode 中的文档或查找一些示例 http mobileo
  • 需要 Android 活动等待获取 GPS 位置

    对不起我的英语不好 我正在尝试从 GPS 获取单个位置以添加全局变量纬度 经度 GPS 打开 但在从 GPS 检索数据之前活动仍在继续 换句话说 我的需求 仅当找到位置并且填充了经度和纬度变量时 方法 getCurrentLocation
  • Android上的“覆盖”尺寸可以与谷歌地图一起缩放吗?

    我已经能够使用 MapActivity 和 ItemizedOverlay 通过 Eclipse 在 Android 上的谷歌地图上绘制叠加层 但是当地图放大和缩小时 叠加层的大小不会改变 我希望叠加层 固定 在地图上 并随地图一起放大和缩
  • 如何在 JavaScript 中查找到已知位置的距离

    在浏览器中使用 JavaScript 如何确定从我当前位置到另一个我有纬度和经度的位置的距离 如果您的代码在浏览器中运行 您可以使用 HTML5 地理定位 API window navigator geolocation getCurren
  • GPS 应用程序在 iOS 5 上停止工作 - 位置管理器未更新

    我开发了一个针对 iOS 4 3 的应用程序 效果很好 但自从我迁移到 iOS 5 0 以来 该应用程序开始表现出奇怪的行为 位置管理器不显示位置变化的更新 有人遇到过这种问题吗 谢谢你的帮助 我与 CLLocation 经理共享票价 出现
  • 如何在android中离线获取纬度和经度?

    我想在 WiFi 和 Gps 关闭时获取当前位置 纬度和经度 可以从移动 SIM 网络获取纬度和经度 我在谷歌上搜索了更多 但没有得到满意的答案 从我昨天的经验来看question https stackoverflow com q 220
  • 如何测试GPS状态?

    我现在创建一个应用程序来通过 GPS 检测设备的位置 我对 GPS 状态有疑问 我查看 GpsStatus Listener 但它很复杂 因为我是 Android 新手 这是我尝试对 GPS 状态执行的操作 我是否走在正确的轨道上 fina
  • GPS定位无服务

    我是一名新开发人员 有一个简单的问题 我已经四处搜索 但尚未找到明确的答案 简而言之 我正在开发一个需要能够使用 GPS 的应用程序 然而 诀窍是我想使用 GPS 来获取手机的位置 即使它们没有运营商服务 话虽如此 我有两个问题 是否可以通
  • 在带有校准点的地图上将经度和纬度转换为 X Y

    如果我有一张尺寸为 sizeX sizeY 的 jpeg 地图 以及地图上的一些校准点 X Y 经度 纬度 使用给定的经度 纬度对计算地图中相应 XY 点的算法是什么 这对我有用 没有那么多废话 int x int MAP WIDTH 36
  • Java中的多点三边测量算法

    我正在尝试在我的 Android 应用程序中实现三边测量算法来确定用户的室内位置 我正在使用超宽带信标来获取到固定点的距离 我能够采用中建议的方法三边测量法 Android Java https stackoverflow com ques
  • 在设备所有者应用程序中启用 GPS

    根据API文档 https developer android com reference android app admin DevicePolicyManager html setSecureSetting android conten
  • 从 GPS 点绘制线

    我有大约 100 个 GPS 坐标列表 我想画出每个列表所构成的线 使用散点图绘制的列表之一 看起来有点像这样 显然那里有一条线 我尝试了几种方法来对 GPS 位置进行排序并绘制它们 lats lngs with open filename
  • 移动应用程序在后台时的 GPS 位置(使用 ionicframework)

    我需要实现一个应用程序来存储用户从 A 移动到 B 时的旅程 路径 现在 我知道 ionicframework 可以使用 GPS 但是当我的应用程序转到后台时会发生什么 我的应用程序如何继续存储用户位置 这可能吗 有没有我可以使用的插件 请
  • 使用纬度/经度计算从 A 点到线段的距离

    我正在开发一个使用 GPS 的 Android 应用程序 我想知道如果 新位置 C 点 距离线段 AB 太远 是否有办法可以丢弃 GPS 位置数据 我正在使用发现的点到线段公式在维基百科上 http en wikipedia org wik
  • GPS 坐标(以度为单位)来计算距离

    在iPhone上 我以十进制度数获取用户的位置 例如 纬度39 470920和经度 0 373192 也就是A点 我需要用另一个 GPS 坐标 同样以十进制表示 B 点创建一条线 然后 计算从 A 到 B 的线与另一个点 C 之间的距离 垂
  • Android 查找 GPS 位置一次,显示加载对话框

    我正在编写一个应用程序 它需要用户的当前位置 lastknownlocation 不会很有帮助 并显示从数据库中获取的所有最接近的 项目 的列表 我已经找到了最近的项目 效果很好 但暂时只使用硬编码的纬度和经度位置 但现在是时候实现查找实际
  • 使用 iPhone 版 gmap 中的经纬度计算两个地点之间的距离 [重复]

    这个问题在这里已经有答案了 可能的重复 GPS 坐标 以度为单位 来计算距离 https stackoverflow com questions 6994101 gps coordinates in degrees to calculate
  • 如何在 Android 中像 Google 地图一样获得持续的位置更新?

    我正在构建一个朋友跟踪 Android 应用程序 当我的朋友激活应用程序并带着他的 GPS 和蜂窝数据离开时 我需要在我的设备上跟踪他 这就是这个概念 我已经实现了 LocationListener 类 现在我可以从 Gps 或网络获取最后
  • Swift 将十进制坐标转换为度、分、秒、方向

    我怎样才能将其转换为快速 我最好的猜测是所有 int 都变成了 var 删除所有导致 的 此外 如果有的话可以给我指出一个很好的来源来了解事物如何转换 那就太好了 NSString coordinateString int latSecon
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的

随机推荐

  • navicat连接本地mysql数据库报1251(版本问题)

    本地数据库服务已经启动 xff0c navicat连接本地数据库出现如下错误 xff0c 一般首次使用或下载新版本navicat会出现 xff0c 因为我下载的10 0版本 xff0c 它采用新的保密方式 xff0c 与默认旧版本5 0不同
  • oracle中的违反完整性约束条件问题

    在用sql语句创建表时 xff0c 出现了下列问题 xff1a 在这 xff0c 把这个问题出现的原因总结一下 xff1a 1 数据类型长度不一致 A表中的外键字段和B表中的被外键关联的字段数据类型或长度不一致 由此产生了问题 xff0c
  • python web快速建站基础

    1 Django基础 Django是一个开放源代码的Python Web应用框架 xff0c 由Python写成 xff0c 采用了MVT的框架模式 xff0c 即模型M xff0c 模板T和视图V 1 1 MVT 与MVC模式类似 xff
  • pycharm报找不到模块问题

    在学习python数据可视化时 xff0c 用到库特性时 xff0c 例如csv xff0c 总是提示类似 module csv has no attribute writer 的问题 xff0c 后来发现把这些库的文件夹名字改为 csv1
  • Linux 安装配置Docker 和Docker compose 并在docker中部署mysql和中文版portainer图形化管理界面

    Linux 安装配置Docker 和Docker compose 并在docker中部署mysql和中文版portainer图形化管理界面 首先环境准备 xff1a 下载Ubuntu20 04 4版本并打开vmare16虚拟机 xff08
  • Android设备获取wifi下的ipv6地址

    ipv6技术逐渐普及并得到广泛的应用 xff0c 很多企业也开始部署自己的ipv6网络 xff0c 很多终端也开始支持ipv6技术 遗憾的是 xff0c android虽然得到广泛普及 xff0c 但android并没有原生支持ipv6 可
  • 程序猿的情话

    世界上最遥远的距离 xff0c 是我在if里你在else里 xff0c 似乎一直相伴又永远分离 xff1b 世界上最痴心的等待 xff0c 是我当case你是switch xff0c 或许永远都选不上自己 xff1b 世界上最真情的相依 x
  • Kinect v2相机标定

    Kinect2 相机标定 到手kinect v2相机 xff0c 和已有的ur3双臂组装一体 xff0c 实现物体识别和物体抓取 xff0c 在相机使用之前需先进行相机标定 xff0c 在此记录下相机标定的过程 为什么要进行相机标定 相机作
  • 如何制作开源依赖库上传至GitHub供他人使用

    背景 在项目开发中经常会使用别人的第三方依赖库 xff0c 在之前的Eclipse时代 xff0c 基本都是通过拷贝jar包引入到工程中去使用 现如今大部分 Android开发者都开始使用Android Studio工具进行开发 xff0c
  • roslaunch px4 multi_uav_mavros_sitl_sdf.launch报错

    转载自 xff1a https www cnblogs com pig fly p 13971458 html 在试图运行multi uav mavros sitl sdf launch时报错 xff1a while processing
  • secureCRT串口无法输入

    用串口配置交换机的时候 xff0c 出现的问题 xff1a 用secureCRT建了一个串口COM1后 xff0c 连接上开发板后 xff0c 可以正确接受和显示串口的输出 xff0c 但是按键输入无效 解决方法 xff1a Session
  • 经典编程书籍(C++, 网络, Windows, Linux)【转载】

    书单中列举的都是相关领域的经典书籍 xff0c 必读之作 此书单的编辑参考了很多网站 xff0c 包括一些名家的推荐 xff0c 例如侯捷 xff0c 孟岩 xff0c 荣耀 xff0c 潘爱民等等 xff0c 在此也向这些前辈表示感谢 1
  • Ubuntu 20.04 LTS 发布最终 Beta 版本

    Ubuntu 团队通过邮件列表宣布推出 Ubuntu 20 04 LTS 最终 Beta 版本 xff0c 并预告稳定版将于2020年4月23日发布 虽然是最终的 Beta 版本 xff0c 但毕竟尚处于测试阶段 xff0c 因此不建议在生
  • Git——6个免费的GUI客户端

    目录 1 简介 1 1 测试的工具 1 2 测试方法 2 SourceTree 2 1 详情 2 2 概述 2 3 印象 3 GitHub Desktop 3 1 详情 3 2 概述 3 3 印象 4 Git Extensions 4 1
  • SourceTree Git管理神器使用教程详解

    目录 前言 xff1a SourceTree Github Desktop TortoiseGit 可视化管理工具对比 xff1a SourceTree介绍和Atlassian账号注册和登录教程 xff1a 连接Gitee or GitHu
  • 软件测试项目篇

    目录 1 项目启动2 需求分析3 制定测试方案 xff08 计划 43 策略 xff09 4 测试执行流程 1 项目启动 了解项目背景 2 需求分析 功能需求 xff1a 文件类型 xff1a 支持所有的文件压缩文件个数 xff1a 最多压
  • LTE系统信息(1)-MIB

    1 什么是MIB 为了能正常接入小区 xff0c UE在完成扫频 xff08 无论是指定频点扫频还是全频段扫频 xff0c 目的都是为了找到合适的中心载波频点 xff0c 参考 LTE物理传输资源 xff08 3 xff09 时频资源 xf
  • vi编辑器

    目录 简介 基本操作 1 移动光标 2 定位 3 删除 4 复制 5 查找
  • ubuntu下进行串口通信

    1 首先下载串口通信需要的uart文件 xff0c 用于数据封装json文件 下载地址 xff1a http download csdn net download m zhangjingdong 10164628 http download
  • GPS轨迹飘点处理(原创)

    当我们处理gps设备传过来的数据时 xff0c 最让人头疼的事情莫过于设备定位异常所传输的异常点了 xff0c 我们习惯的叫它为飘点 这些数据是设备层面的异常 xff0c 目前没有什么有效的方法来减少设备发送的飘点 但是我们可以通过程序来过