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/ ...
随机推荐
- Flink入门(三)——环境与部署
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行,包括本地调试环境,集群 ...
- mac install: /usr/bin/unrar: Operation not permitted
按照教程mac下解压缩rar文件工具-rarosx(免费),在mac上安装rar,在执行命令 sudo install -c -o $USER unrar /bin 出现错误:install: /bi ...
- iOS RSA加解密签名和验证
转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...
- Java修炼——对象数组存储表格数据
数组存基本数据类型,也可以存引用数据类型 对象数组:使用数组存储对象(自定义对象) 先定义Person的三个私有变量,给他取值赋值方法,重写toString方法. package com.bjsxt. ...
- Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)
之前写过一篇关于 Geoserver2.8.5 版本的部署配置发布 ArcGIS Server 瓦片点击查看,那是下载 Geoserver2.8.5 源码编译,重新打包 jar 来部署配置思路的,版本 ...
- BZOJ 3033 太鼓达人(DFS+欧拉回路)
Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和ly ...
- ARTS-S docker里程序通过ip访问外部数据库
要先确保外部数据库能通过ip访问,然后启动docker的时间加参数--network host,如 docker run \ --name fcheck_async_worker \ -it \ -v ...
- Python3 类与对象
目录 面向对象基础 面向过程编程 面向对象编程 类 什么是类 如何定义类 类的基本操作 对象 实例化对象 对象添加特有属性 对象与类的查找顺序 对象的绑定方法 面向对象基础 面向过程编程 面向过程的核 ...
- 浅谈Java三大特性
Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装 ...
- 分析比较 opacity: 0、visibility: hidden、display: none 优劣和适用场景
总结: 结构: display:none: 会让元素完全从渲染树中消失,渲染的时候不占据任何空间, 不能点击, visibility: hidden:不会让元素从渲染树消失,渲染元素继续占据空间,只是 ...