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)的没见过。。