首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

GPS 纠偏的有关问题,一直没解决。

2012-09-09 
GPS 纠偏的问题,一直没解决。。网上很多解决将实际经纬度纠偏到GPS经纬度(下面是源码),可是现在我需要将带有

GPS 纠偏的问题,一直没解决。。
网上很多解决将实际经纬度纠偏到GPS经纬度(下面是源码),可是现在我需要将带有偏差的GPS经纬度转化为实际的经纬度,求各位帮忙!!

C# code
using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.IO;
using System.Text.RegularExpressions;

namespace Wars2Wgs
{
    public partial class Form1 : Form
    {
        double[] TableX = new double[660 * 450];
        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();

                //textBox1.Text = s;

                string[] lines = s.Split('\n');
                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">GPS纬度 </param>
        /// <param name="yWgs">GPS精度 </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();
        }
    }
}


上面我们是实际的经纬度,求出了GPS的纠偏经纬度--》相当于,已知 xMars, yMars求 xWgs, yWgs,现在如何已知xWgs, yWgs情况下求xMars, yMars,也就是代码的逆向求解。

Mars2Wgs.txt部分如下:

 
C# code

       7200000     1000000     7210372      999847     7220350      999834     7230340      999834     7240347      999848     7250321      999829     7260295      999811     7270306      999824     7280303      999825     7290287      999811     7300304      999828     7310321      999847     7320307      999833     7330305      999833     7340317      999848     7350294      999827     7360271      999810     7370282      999825     7380276      999824     7390256      999810     7400268      999828     7410282      999847     7420264      999833     7430259      999833     7440271      999847     7450250      999828     7460231      999810     7470248      999824


[解决办法]
http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/b8ad9d03-fb1e-486b-9e04-aca6e7ba5c13
http://www.codeproject.com/KB/cs/GpsMapping.aspx
[解决办法]
http://topic.csdn.net/u/20100427/11/2285AD20-7475-4742-870F-126D05CC932F.html
[解决办法]
既然是逆向计算,把公式转换一下,重新写一个。
[解决办法]
er..
不同椭球的坐标转换貌似需要先转换为空间直角坐标系,然后用布尔沙模型七参数转换,再转换为目标椭球的经纬度。直接bl(1)->bl(2)的没见过。。

热点排行