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/ ...
随机推荐
- 使用Spring Data JPA的Specification构建数据库查询
Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...
- DP思想在斐波那契数列递归求解中的应用
斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...
- luogu P1082 同余方程 |扩展欧几里得
题目描述 求关于 x的同余方程 ax≡1(modb) 的最小正整数解. 输入格式 一行,包含两个正整数 a,ba,b,用一个空格隔开. 输出格式 一个正整数 x,即最小正整数解.输入数据保证一定有解. ...
- javascript数据类型和类型转换
一 数据类型 1)typeof 查看数据类型 1.number 数字 取值范围:正无穷 - 负无穷.NaN 正无穷:Number.POSITIVE_INFINITY 负无穷:Number.NEGAT ...
- [TimLinux] asciinema Linux终端录制工具嵌入私有web中
yum install asciinema https://github.com/asciinema/asciinema-player # 下载asciinema-player.css, asciin ...
- [TimLinux] systemd 精通CentOS7系统启动systemd
1. 介绍 systemd: 在12种不同类型的实体单元(entity unit)间提供了一个依赖关系系统. 2. 几个概念 实体单元:为系统的启动和维护封装多种对象(object).主体单元在单元配 ...
- [TimLinux] JavaScript 原生AJAX介绍
1. AJAX 异步JavaScript + XML,用于浏览器内部通过前端JavaScript语言操纵,与HTTP服务器进行连接通信的技术. 2. XMLHttpRequest对象 从IE7+,以及 ...
- openlayers4 入门开发系列结合 echarts4 实现交通线流动图
前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...
- POJ 1966 Cable TV NETWORK(网络流-最小点割集)
Cable TV NETWORK The interconnection of the relays in a cable TV net ...
- 洛谷 题解 P5015 【标题统计】 NOIP2018 普及组 T1
没有人用 scanf("%c", &ch) != EOF 吗? scanf 和 EOF 会伤心的. 思路:逐个读入字符,遇到EOF中止,对于每个读入的字符进行判断. 附上考 ...