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/ ...
随机推荐
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 转:关于java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication的解决
在这个控制板中,出现了这个问题 java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 虽然明显知道是 ...
- 你真的了解JMM吗?
引言 在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...
- Rancher1-简单介绍-认识rancher
认识rancher 一.简介 1.什么rancher Rancher是一个开源软件平台,使组织能够在生产中运行和管理Docker和Kubernetes.使用Rancher,组织不再需要使用一套独特的开 ...
- Java修炼——ArrayList常用的方法以及三种方式遍历集合元素。
List接口ArrayList用法详解 ArrayList常用方法: 1. List.add():添加的方法(可以添加字符串,常量,以及对象) List list=new ArrayList(); l ...
- Navicat for mysql 免费破解工具+教程
转载自:https://blog.csdn.net/BigCabbageFy/article/details/79789833 navicat for mysql带给大家这款高性能数据库管理开发工具的 ...
- CSS去除input和textarea点击选中框
1.去除chrome等浏览器默认发光边框 input:focus, textarea:focus { outline: none; } 这样textarea在选中的时候,文字会有点移动,解决方法: i ...
- 【Feign】自定义配置
[Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...
- MySQL的安装、启动和基础配置 —— linux版本
环境和资源地址 *** centos 7 *** http://repo.mysql.com/yum/mysql-5.6-community/ 安装 安装方式一(在线安装): # 查看和mysql有关 ...
- 用正则表达式【regexp】进行高级搜索数据
正则表达式介绍 正则表达式是用来匹配文本的特殊字符集合,如果你想从一个文本中提取电话号码而已使用正则表达式,如果你需要查找名字中包含数字的所有文件可以使用正则,如果你你要在文本块中找到所有重复的单词, ...