中国的地图和卫星图都存在一个偏移量,我们在Google Map上看到的坐标与实际的GPS坐标其实是有着一定范围的偏移的,而在Google Earth上看到的坐标与GPS坐标是完全一致的,也就是说,同一张地图图片,切换到Google Map和Google Earth模式下的地图实际是上不匹配的,为什么会有这个偏移这里就不作叙述了,那么当我们拿到地图上的座标以后,要怎样转成GPS坐标呢?
在google中找到一段C的代码,主要是借助一组码表,加上一个计算公式而得到GPS坐标,我用C#翻译了一下,下面贴上代码:
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();
}
来源:http://www.cnblogs.com/ahhi/archive/2010/04/27/Wars2Wgs.html
分享到:
相关推荐
在地球坐标系统中进行火星坐标转换通常需要特定的数学模型和参数。 2. **CGCS2000**:中国大地2000坐标系统是中国国家测绘局于2000年建立的现代化地心地固坐标系统,取代了原有的北京54和西安80坐标系统。CGCS2000...
本文将深入探讨C#编程环境下,如何在Visual Studio 2010中实现GPS坐标、火星坐标以及Google坐标之间的互转,并针对GPS坐标纠偏进行讨论。 首先,我们要了解基础概念。GPS坐标系统,也称为WGS84坐标系统,是一种全球...
在实际应用中,你可以先通过`Location`获取坐标,然后调用上述的转换函数,将火星坐标转换为WGS84坐标,以便进行地图匹配或其他需要精确位置信息的操作。 6. **注意事项:** - 坐标转换可能涉及到精度问题,尤其是...
`Aoyou.Wgs2Was.dll`很可能是一个动态链接库文件,其中包含了实现火星坐标转换为WGS84坐标的具体算法和函数。开发者可能编写了接口,使得其他程序能够调用这个库进行坐标转换。`WgsParse.exe`则可能是一个执行程序,...
转换GPS坐标到火星坐标的过程通常包含两个步骤:偏移和加密。偏移是指对原始GPS坐标应用一个特定的常数值,而加密则涉及到复杂的数学算法,通常包括双曲正弦函数等。 相反,从火星坐标转换回GPS坐标,需要执行解密...
要将百度坐标转换为火星坐标,我们需要理解两者之间的转换算法。转换过程通常涉及到一定的数学计算,包括双曲正弦函数等。附带的“BaiDuMap_converter”源码可能包含这样的转换算法,通过输入百度坐标,计算出相应的...
火星坐标转换,是一种能够把标准GPS坐标转换为火星坐标的算法
1. **坐标预处理**:首先,GPS坐标需要从经纬度格式转换为笛卡尔坐标系,这可以通过地球的平均半径和纬度角的正弦和余弦函数完成。 2. **参考系转换**:然后,需要将笛卡尔坐标从WGS84转换到火星坐标系,这涉及到...
GPS系统接收数据坐标转换 GPS接收的数据往往是三维坐标,而在科学研究中我们通常用二维坐标。因此必须 进行坐标转换,下面我们介绍一种坐标转换,即把WGS84坐标转换为高斯—克吕 格坐标系。数字地图投影的...
反之,如果需要将火星坐标转换为WGS-84坐标,以便与国际标准进行对接,也需要相应的转换算法。 转换算法通常基于数学模型实现,涉及到双曲正弦函数和坐标偏移等数学知识。对于开发人员来说,理解这些算法并不是必须...
支持火星坐标(奥维)与 wgs84坐标(Google Earth)坐标批量通过电子表格方式相互转换 使用方法: 双击exe执行程序,按提示选择是生成模板还是进行转换。已有模板表格情况下,模板填入相应信息保存并关闭电子表格,...
Visual Studio C# 编写加密火星坐标转换,国内高德、腾讯、百度地图通用坐标系统。 1、WGS84坐标转GCJ02火星坐标 2、GCJ02火星坐标转WGS84坐标(回归计算) 3、GCJ02火星坐标转BD09百度坐标 4、BD09百度坐标转GCJ02...
1. GPS坐标系统:全球定位系统(GPS)采用的是WGS84坐标系,这是一个国际上广泛认可的地心地固坐标系统,基于地球椭球模型,是卫星导航的基础。 2. 火星坐标系统:在China's Beidou Navigation Satellite System...
1. **WGS-84到火星坐标系(GCJ-02)的转换**:这一步通常称为加密过程,使用的是双曲正弦函数。具体算法为两次迭代,每次迭代都对WGS-84坐标进行加偏移、双曲正弦加密,直到结果稳定。 2. **火星坐标系(GCJ-02)到...
为了解决这个问题,我们需要进行坐标转换,将真实的地球坐标(WGS84)转换为火星坐标系统(GCJ-02),这种坐标系统在中国大陆广泛使用。 WGS84(World Geodetic System 1984)是全球通用的地理坐标系统,基于地球椭...
火星坐标转换代码通常包含两个核心方法:WGS84转GCJ-02(wgs84_to_gcj02)和GCJ-02转WGS84(gcj02_to_wgs84)。转换算法基于椭球体近似公式,涉及到数学中的坐标平移和旋转。转换过程如下: 1. WGS84转GCJ-02(偏移...