GPS纠偏算法

2 篇文章 0 订阅

GPS纠偏算法

本文提供的GPS纠偏算法,根据某一篇Java纠偏博文修改完善为C#语言支持。

最近自己做地图相关项目,遇到坐标偏移。众所周知,在国内,GPS数据无法直接在瓦片服务器获取准确瓦片,通过查找比对修改,还原了了纠偏相关算法。

效果还是比较明显的

j纠偏前
纠偏后


源代码

相关代码如下:

using System;

namespace MapTest
{
    /// <summary>
    /// 纠偏
    /// Rectify deviation
    /// GPS纠偏算法,适用于google,高德体系的地图
    /// </summary>
    public class RD
    {
        private static double Pi = 3.14159265358979324;
        private static double A = 6378245.0;
        private static double Ee = 0.00669342162296594323;

        public static void Transform(double wgLat, double wgLon, ref double[] latlng)
        {
            if (OutOfChina(wgLat, wgLon))
            {
                latlng[0] = wgLat;
                latlng[1] = wgLon;
                return;
            }
            double dLat = TransformLat(wgLon - 105.0, wgLat - 35.0);
            double dLon = TransformLon(wgLon - 105.0, wgLat - 35.0);
            double radLat = wgLat / 180.0 * Pi;
            double magic = Math.Sin(radLat);
            magic = 1 - Ee * magic * magic;
            double sqrtMagic = Math.Sqrt(magic);
            dLat = (dLat * 180.0) / ((A * (1 - Ee)) / (magic * sqrtMagic) * Pi);
            dLon = (dLon * 180.0) / (A / sqrtMagic * Math.Cos(radLat) * Pi);
            latlng[0] = wgLat + dLat;
            latlng[1] = wgLon + dLon;
        }

        private static bool OutOfChina(double lat, double lon)
        {
            if (lon < 72.004 || lon > 137.8347)
                return true;
            if (lat < 0.8293 || lat > 55.8271)
                return true;
            return false;
        }

        private static double TransformLat(double x, double y)
        {
            double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
            ret += (20.0 * Math.Sin(6.0 * x * Pi) + 20.0 * Math.Sin(2.0 * x * Pi)) * 2.0 / 3.0;
            ret += (20.0 * Math.Sin(y * Pi) + 40.0 * Math.Sin(y / 3.0 * Pi)) * 2.0 / 3.0;
            ret += (160.0 * Math.Sin(y / 12.0 * Pi) + 320 * Math.Sin(y * Pi / 30.0)) * 2.0 / 3.0;
            return ret;
        }

        private static double TransformLon(double x, double y)
        {
            double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
            ret += (20.0 * Math.Sin(6.0 * x * Pi) + 20.0 * Math.Sin(2.0 * x * Pi)) * 2.0 / 3.0;
            ret += (20.0 * Math.Sin(x * Pi) + 40.0 * Math.Sin(x / 3.0 * Pi)) * 2.0 / 3.0;
            ret += (150.0 * Math.Sin(x / 12.0 * Pi) + 300.0 * Math.Sin(x / 30.0 * Pi)) * 2.0 / 3.0;
            return ret;
        }
    }
}


2018年8月3日
Dawn

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
GPS轨迹纠偏算法主要用于对采集到的GPS轨迹数据进行处理和修正,使之更精确地反映真实的移动轨迹。这种算法的应用场景在于各种需要对移动路径进行分析和展示的应用中,如地图导航、运动监测等。 异常点检测则是在GPS轨迹纠偏算法中的一个重要环节,其目的是识别和过滤掉无效的或错误的轨迹点,以保证轨迹数据的准确性和可靠性。异常点检测的主要思想是通过对轨迹数据进行统计分析,找出与正常轨迹偏离较大的数据点,并剔除掉这些异常点。 在GPS轨迹纠偏算法中,常用的异常点检测方法有以下几种: 1. 基于速度的异常点检测:通过计算轨迹点之间的速度变化,对速度超过设定阈值的点进行标记和过滤。速度异常点通常是由于采集设备的误差或者移动模式的突变导致的。 2. 基于加速度的异常点检测:加速度异常点的检测方法类似于速度异常点的检测方法,通过计算轨迹点之间的加速度变化,对加速度超过设定阈值的点进行标记和过滤。 3. 基于位置偏差的异常点检测:通过计算轨迹点与标准轨迹的位置偏差,对偏差超过设定阈值的点进行标记和过滤。位置偏差异常点通常是由于各种误差或者外部干扰导致的。 4. 基于时间间隔的异常点检测:通过计算轨迹点之间的时间间隔,对时间间隔超过设定阈值的点进行标记和过滤。时间间隔异常点通常是由于采集频率不稳定或者采集设备的误差导致的。 综上所述,GPS轨迹纠偏算法中的异常点检测是通过对轨迹数据进行统计分析和设定阈值来识别和过滤掉异常点,以提高轨迹数据的准确性和可靠性。不同的异常点检测方法可以根据具体的应用场景和需求进行选择和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值