GPS定位的偏移校正(WGS84与火星坐标互转)
地图坐标系目前包括:
地球坐标 (WGS84)
WGS84:World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统。
- 国际标准,从 GPS 设备中取出的数据的坐标系
- 国际地图提供商使用的坐标系
火星坐标 (GCJ-02)也叫国测局坐标系
GCJ-02是由中国国家测绘局(民间说的火星坐标系)制订的地理信息系统的坐标系统。
它是一种对经纬度数据的加密算法,即加入随机的偏差。
国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
- 中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
- 国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
public class Wgs2MarsService
{
private readonly static double[] Lx = new double[]; private readonly static double[] Ly = new double[]; static Wgs2MarsService()
{
string str = string.Empty;
List<string> points = new List<string>();
using (StreamReader sr = new StreamReader(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GPS.CoordinatesTransformation.txt")))
{
str = sr.ReadLine();
while (!string.IsNullOrEmpty(str))
{
points.Add(str);
str = sr.ReadLine();
}
}
int num = ;
foreach (string s in points)
{
if (Lx[num] == 0.0)
{
Lx[num] = (double)int.Parse(s) / 100000.0;
}
else
{
Ly[num] = (double)int.Parse(s) / 100000.0;
num++;
}
}
} private int ID(int i, int j)
{
return i + * j;
} public bool Wgs2Mars(double latwgs, double lngwgs, out double latmars, out double lngmars)
{
double num = lngwgs;
double num2 = latwgs;
for (long num3 = 0L; num3 < ; num3++)
{
if (num < 72.0 || num > 137.9 || num2 < 10.0 || num2 > 54.9)
{
latmars = latwgs;
lngmars = lngwgs;
return false;
}
int num4 = (int)Math.Floor((num - 72.0) * 10.0);
int num5 = (int)Math.Floor((num2 - 10.0) * 10.0);
double num6 = Lx[ID(num4, num5)];
double num7 = Ly[ID(num4, num5)];
double num8 = Lx[ID(num4 + , num5)];
double num9 = Ly[ID(num4 + , num5)];
double num10 = Lx[ID(num4 + , num5 + )];
double num11 = Ly[ID(num4 + , num5 + )];
double num12 = Lx[ID(num4, num5 + )];
double num13 = Ly[ID(num4, num5 + )];
double num14 = (num - 72.0 - 0.1 * (double)num4) * 10.0;
double num15 = (num2 - 10.0 - 0.1 * (double)num5) * 10.0;
double num16 = (1.0 - num14) * (1.0 - num15) * num6 + num14 * (1.0 - num15) * num8 + num14 * num15 * num10 + (1.0 - num14) * num15 * num12 - num;
double num17 = (1.0 - num14) * (1.0 - num15) * num7 + num14 * (1.0 - num15) * num9 + num14 * num15 * num11 + (1.0 - num14) * num15 * num13 - num2;
num = (num + lngwgs + num16) / 2.0;
num2 = (num2 + latwgs + num17) / 2.0;
}
lngmars = Math.Round(num, );
latmars = Math.Round(num2, );
return true;
} public bool Mars2Wgs(double latmars, double lngmars, out double latwgs, out double lngwgs)
{
double num = lngmars;
double num2 = latmars;
for (long num3 = 0L; num3 < ; num3++)
{
if (num < 72.0 || num > 137.9 || num2 < 10.0 || num2 > 54.9)
{
latwgs = latmars;
lngwgs = lngmars;
return false;
}
int num4 = (int)Math.Floor((num - 72.0) * 10.0);
int num5 = (int)Math.Floor((num2 - 10.0) * 10.0);
double num6 = Lx[ID(num4, num5)];
double num7 = Ly[ID(num4, num5)];
double num8 = Lx[ID(num4 + , num5)];
double num9 = Ly[ID(num4 + , num5)];
double num10 = Lx[ID(num4 + , num5 + )];
double num11 = Ly[ID(num4 + , num5 + )];
double num12 = Lx[ID(num4, num5 + )];
double num13 = Ly[ID(num4, num5 + )];
double num14 = (num - 72.0 - 0.1 * (double)num4) * 10.0;
double num15 = (num2 - 10.0 - 0.1 * (double)num5) * 10.0;
double num16 = (1.0 - num14) * (1.0 - num15) * num6 + num14 * (1.0 - num15) * num8 + num14 * num15 * num10 + (1.0 - num14) * num15 * num12 - num;
double num17 = (1.0 - num14) * (1.0 - num15) * num7 + num14 * (1.0 - num15) * num9 + num14 * num15 * num11 + (1.0 - num14) * num15 * num13 - num2;
num = (num + lngmars - num16) / 2.0;
num2 = (num2 + latmars - num17) / 2.0;
}
lngwgs = Math.Round(num, );
latwgs = Math.Round(num2, );
return true;
}
} 参考文档:https://github.com/shenqiliang/WGS2Mars
GPS.CoordinatesTransformation下载地址:GPS.CoordinatesTransformation.txt
GPS定位的偏移校正(WGS84与火星坐标互转)的更多相关文章
- GPS 偏移校正(WGS-84) 至(GCJ-02) java版本号以实现
public class EvilTransform { final static double pi = 3.14159265358979324; // // // a = 6378245.0, 1 ...
- 地球坐标-火星坐标-百度坐标及之间的转换算法 C#
美国GPS使用的是WGS84的坐标系统,以经纬度的形式来表示地球平面上的某一个位置.但在我国,出于国家安全考虑,国内所有导航电子地图必须使 用国家测绘局制定的加密坐标系统,即将一个真实的经纬度坐标加密 ...
- IOS中GPS定位偏移纠正(适用于Google地图)
在这个神奇的国度里,我们总得学习一些有中国特色的东东,例如“火星坐标”.也许有人还不知道这是什么玩意,我就简要介绍一下吧. 如果你有带GPS模块的智能手机,打开定位功能,然后访问Google ...
- IOS LocationManager定位国内偏移,火星坐标(GCJ-02)解决方法
转载自:http://blog.csdn.net/swingpyzf/article/details/16972351 纠偏也可参考:http://www.2cto.com/kf/201310/253 ...
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...
- 【转】火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
原文地址:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地 ...
- 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换(JS版代码)
/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ //定义一些常量 ...
- 地图坐标转换 -- 火星坐标与GPS坐标
第一次处理地理位置的数据的人,没什么经验,往往掉入很多坑浪费不少时间.我也是刚刚从坑里爬出来.这篇博文主要是把入门GPS轨迹分析的经验总结一下,以方便大家少走些弯路. (1)可视化 GPS 路径 刚拿 ...
- WGS84、Web墨卡托、火星坐标、百度坐标互转
转自:1.http://blog.csdn.net/wildboy2001/article/details/12031351 2.http://kongxz.com/2013/10/wgs-cgj/ ...
随机推荐
- JavaScript&&jQuery创建新节点和操作属性对比
JavaScript创建新节点和操作属性 通过JavaScript原生接口创建节点,在处理上是非常复杂与繁琐的. <!DOCTYPE html> <html lang="e ...
- Oracle触发器用法--基础教学
1.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行.因此触发器不需要人为的去调用,也不能调用.然后,触发器的触发条件其实在你定义的时候就已经设定好了.这里面需 ...
- wait notify notifyAll await signal signalAll 的理解及示例
从常见的一道面试题开始,题目的描述是这样子的: 有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 网上大都教了你怎么去实现,其实我也写过一篇 https://bl ...
- 学习ThinkPHP的第23天---门面、钩子与行为
一.门面(facade) 门面在ThinkPHP中可以理解为一个代理商,有了它可以灵活的去使用其中的类. 二.钩子和行为 钩子也可以说是插件,就是程序运行到某个位置,我们用钩子把这个程序截住,去执行所 ...
- 【解决】image ... could not be accessed on a registry to record its digest.
[问题]image jmdiservice:1206 could not be accessed on a registry to record its digest. Each node will ...
- 2019企业linux运维最需要的了解的一些硬件基础知识
第3章 服务器 245 3.1 电脑的种类 245 3.2 服务器的介绍 246 3.2.1 服务器的类别 246 3.2.2 服务器的性能 247 3.2.3 服务器的 ...
- ASP.NET Core 选项模式源码学习Options IOptionsMonitor(三)
前言 IOptionsMonitor 是一种单一示例服务,可随时检索当前选项值,这在单一实例依赖项中尤其有用.IOptionsMonitor用于检索选项并管理TOption实例的选项通知, IOpti ...
- Linux—cat
cat:查看文件内容 cat -A: 显示文件中一些比较特殊的符号,如行尾的$ cat -n: 显示行号包括空白行 cat -b: 显示行号不包括空白行
- PHP ftp获取目录内容为空
使用PHP的ftp函数获取目录内容,ftp_nlist()和ftp_rawlist()返回都为空. 查了一圈资料找不到答案,然后用Python写了一个,一样的操作就可以获取目录内容. 抓包发现,Pyt ...
- 如何用Jmeter做接口测试
Jmeter介绍&测试准备: Jmeter介绍:Jmeter是软件行业里面比较常用的接口.性能测试工具,下面介绍下如何用Jmeter做接口测试以及如何用它连接MySQL数据库. 前期准备:测试 ...