• C#下的GPS座标纠偏方法(也叫火星座标)


    中国的地图和卫星图都存在一个偏移量,我们在Google Map上看到的坐标与实际的GPS坐标其实是有着一定范围的偏移的,而在Google Earth上看到的坐标与GPS坐标是完全一致的,也就是说,同一张地图图片,切换到Google Map和Google Earth模式下的地图实际是上不匹配的,为什么会有这个偏移这里就不作叙述了,那么当我们拿到地图上的座标以后,要怎样转成GPS坐标呢?

    我在google中找到一段C的代码,主要是借助一组码表,加上一个计算公式而得到GPS坐标,我用C#翻译了一下,下面贴上代码:


    项目文件下载:Wars2Wgs.rar 


            double[] TableY = new double[660 * 450];
            bool InitTable = false;

            public Form1()
            {
                InitializeComponent();

                LoadText();
            }

            private int GetID(int I, int J)
            {
                return I + 660 * J;
            }

            private void LoadText()
            {
                using (StreamReader sr = new StreamReader("Mars2Wgs.txt"))
                {
                    string s = sr.ReadToEnd();

                    Match MP = Regex.Match(s, "(\\d+)");

                    int i = 0;
                    while (MP.Success)
                    {
                        //MessageBox.Show(MP.Value);
                        if (i % 2 == 0)
                        {
                            TableX[i / 2] = Convert.ToDouble(MP.Value) / 100000.0;
                        }
                        else
                        {
                            TableY[(i - 1) / 2] = Convert.ToDouble(MP.Value) / 100000.0;
                        }
                        i++;
                        MP = MP.NextMatch();
                    }
                    InitTable = true;
                    //MessageBox.Show((i / 2).ToString());
                }
            }

            /// <summary>
            
    /// x是117左右,y是31左右
            
    /// </summary>
            
    /// <param name="xMars"></param>
            
    /// <param name="yMars"></param>
            
    /// <param name="xWgs"></param>
            
    /// <param name="yWgs"></param>
            private void Parse(double xMars, double yMars, ref double xWgs, ref double yWgs)
            {
                int i, j, k;
                double x1, y1, x2, y2, x3, y3, x4, y4, xtry, ytry, dx, dy;
                double t, u;

                if (!InitTable)
                    return;

                xtry = xMars;
                ytry = yMars;

                for (k = 0; k < 10; ++k)
                {
                    // 只对中国国境内数据转换
                    if (xtry < 72 || xtry > 137.9 || ytry < 10 || ytry > 54.9)
                    {
                        return;
                    }

                    i = (int)((xtry - 72.0) * 10.0);
                    j = (int)((ytry - 10.0) * 10.0);

                    x1 = TableX[GetID(i, j)];
                    y1 = TableY[GetID(i, j)];
                    x2 = TableX[GetID(i + 1, j)];
                    y2 = TableY[GetID(i + 1, j)];
                    x3 = TableX[GetID(i + 1, j + 1)];
                    y3 = TableY[GetID(i + 1, j + 1)];
                    x4 = TableX[GetID(i, j + 1)];
                    y4 = TableY[GetID(i, j + 1)];

                    t = (xtry - 72.0 - 0.1 * i) * 10.0;
                    u = (ytry - 10.0 - 0.1 * j) * 10.0;

                    dx = (1.0 - t) * (1.0 - u) * x1 + t * (1.0 - u) * x2 + t * u * x3 + (1.0 - t) * u * x4 - xtry;
                    dy = (1.0 - t) * (1.0 - u) * y1 + t * (1.0 - u) * y2 + t * u * y3 + (1.0 - t) * u * y4 - ytry;

                    xtry = (xtry + xMars - dx) / 2.0;
                    ytry = (ytry + yMars - dy) / 2.0;
                }

                xWgs = xtry;
                yWgs = ytry;

            }

            private void button1_Click(object sender, EventArgs e)
            {
                double x = Convert.ToDouble(txbX.Text);
                double y = Convert.ToDouble(txbY.Text);

                double xWgs = x;
                double yWgs = y;

                Parse(x, y, ref xWgs, ref yWgs);

                ltrResult.Text = "X:" + xWgs.ToString() + ",Y:" + yWgs.ToString();
            }
  • 相关阅读:
    hadoop 环境配置
    批量生成不同尺寸的图片
    如何生成publish windows app 用到的 pfx 文件
    MVC项目用Windsor注入
    UWP textbox 只能输入数字
    power shell upload file to azure storage
    Checkbox can't checked
    安装部署 Goaccess
    阿里云OSS的Bucket容量大小采集
    1. Nagios和 NagiosQL安装及配置
  • 原文地址:https://www.cnblogs.com/xidongs/p/2284953.html
Copyright © 2020-2023  润新知