`

实际坐标、火星坐标、百度坐标互转

 
阅读更多
package com.jyt.infant.core.common;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @ClassName: MarsCoordinateUtil
 * @Description: TODO(火星坐标转换)
 */
public class MarsCoordinateUtil {

	private double pi = 3.14159265358979324;
	private double a = 6378245.0;
	private double ee = 0.00669342162296594323;
	private double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

	/**
	 * 
	 * @Title: outOfChina
	 * @Description: TODO(天朝范围内)
	 * @param lat
	 * @param lon
	 * @return
	 */
	public boolean outOfChina(double lat, double lon) {
		if (lon < 72.004 || lon > 137.8347)
			return true;
		if (lat < 0.8293 || lat > 55.8271)
			return true;
		return false;
	}

	/**
	 * 
	 * @Title: transformLat
	 * @Description: TODO(偏移调整)
	 * @param x
	 * @param y
	 * @return
	 */
	public double transformLat(double x, double y) {
		double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));

		ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
		ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;
		ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;

		return ret;
	}

	/**
	 * 
	 * @Title: transformLon
	 * @Description: TODO(偏移调整)
	 * @param x
	 * @param y
	 * @return
	 */
	public double transformLon(double x, double y) {
		double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));

		ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;
		ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;
		ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0;

		return ret;
	}

	/**
	 * 
	 * @Title: transform2Mars
	 * @Description: TODO(地球坐标转换为火星坐标 )
	 * @param lat
	 * @param lon
	 * @return
	 */
	public Map<String, Double> transform2Mars(double lat, double lon) {
		Map<String, Double> map = new HashMap<String, Double>();

		if (!outOfChina(lat, lon)) {
			double dLat = transformLat(-105.0, lat - 35.0);
			double dLon = transformLon(lon - 105.0, lat - 35.0);
			double radLat = lat / 180.0 * pi;
			double magic = Math.sin(radLat);

			magic = 1 - ee * magic * magic;
			double sqrtMagic = Math.sqrt(magic);

			dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
			dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);

			lat = lat + dLat;
			lon = lon + dLon;
		}

		map.put("latitude", lat);
		map.put("longitude", lon);

		return map;
	}

	/**
	 * 
	 * @Title: bdEncrypt
	 * @Description: TODO(火星坐标转换为百度坐标)
	 * @param lat
	 * @param lon
	 * @return
	 */

	public Map<String, Double> bdEncrypt(double lat, double lon) {
		Map<String, Double> map = new HashMap<String, Double>();

		double x = lon, y = lat;
		double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
		double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);

		lon = z * Math.cos(theta) + 0.0065;
		lat = z * Math.sin(theta) + 0.006;

		map.put("latitude", lat);
		map.put("longitude", lon);

		return map;
	}

	/**
	 * 
	 * @Title: bdDecrypt
	 * @Description: TODO(百度转火星)
	 * @param lat
	 * @param lon
	 * @return
	 */
	public Map<String, Double> bdDecrypt(double lat, double lon) {
		Map<String, Double> map = new HashMap<String, Double>();

		double x = lon - 0.0065, y = lat - 0.006;
		double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
		double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);

		lon = z * Math.cos(theta);
		lat = z * Math.sin(theta);

		map.put("latitude", lat);
		map.put("longitude", lon);

		return map;
	}

}

 

分享到:
评论

相关推荐

    c# GPS坐标与火星坐标互转

    本文将深入探讨C#编程环境下,如何在Visual Studio 2010中实现GPS坐标、火星坐标以及Google坐标之间的互转,并针对GPS坐标纠偏进行讨论。 首先,我们要了解基础概念。GPS坐标系统,也称为WGS84坐标系统,是一种全球...

    火星百度坐标转WGS84坐标小工具

    这个"百度坐标转wgs84.exe"和"火星坐标转wgs84.exe"程序文件,正是为了实现这种转换而创建的。它们可能采用了反编译百度或火星坐标算法,然后通过编程语言(如Python)实现,使得用户无需深入了解复杂的数学模型就能...

    【delphi】gps-火星-百度等坐标互转源码 by 漠北

    本文将深入探讨由“漠北”提供的Delphi源码,该代码实现了GPS、火星坐标以及百度坐标之间的转换。首先,我们来理解这三个坐标系统: 1. GPS坐标系统:全球定位系统(GPS)采用的是WGS84坐标系,这是一个国际上广泛...

    Gps坐标系转换Java工具类WGS坐标与Google和百度坐标互转

    首先,将WGS84坐标转换为GCJ-02(火星坐标),然后在GCJ-02的基础上进行偏移得到BD-09坐标。 4. `baiduToWgs84.bdLat, bdLon)`: 将百度地图的BD-09坐标转换回WGS84坐标。同样,这个过程也需要进行两次逆运算,先从...

    C#GPS坐标转百度地图坐标

    1. **坐标系**:坐标系是地理空间位置的一种数学表示方式,如WGS84(全球通用)、CGCS2000(中国国家大地坐标系)和BD09(百度坐标系)等。 2. **WGS84坐标系**:全球定位系统默认的坐标系,以地球质心为原点,通过...

    百度转火星坐标

    ### 百度坐标系转火星坐标系:解析与实现 #### 一、引言 在地理信息系统(GIS)领域,不同的地图服务提供商采用不同的坐标系统来表示地球上的位置信息。百度地图采用了一种称为“百度坐标系”的加密坐标系统,而...

    坐标转换(支持百度坐标系,火星坐标系,WGS84之间的互转)

    本文将详细讲解“百度坐标系”、“火星坐标系”以及“WGS84”这三种坐标系之间的互转,以及如何利用相关工具进行批量转换。 首先,我们要理解这三种坐标系的基本概念: 1. **WGS84坐标系**:全称为“World ...

    GPSUtil.zip_火星坐标_百度坐标_百度坐标相互转换_谷歌坐标

    在实际应用中,我们可能需要在百度坐标和火星坐标之间进行转换。例如,如果你从一个使用火星坐标的系统获取数据,然后要在百度地图上显示,就必须将火星坐标转换为百度坐标。反之,如果你的数据是在百度地图上获取...

    火星坐标转地球坐标工具

    因此,当我们在使用百度地图等国内地图服务时,获取到的经纬度实际上是火星坐标。 地球坐标系,即WGS-84,是全球通用的大地坐标系统,由世界大地测量系统定义,适用于全球范围内的定位和导航。WGS-84是GPS系统默认...

    GIS点、线、面数据WGS1984转百度坐标系、火星坐标系

    这里我们关注的是从WGS1984坐标系到百度坐标系、火星坐标系的转换,以及反向转换。这些坐标系间的转换在地理定位、地图展示、数据共享等应用中至关重要。 WGS1984是一种全球通用的大地坐标系统,由世界大地测量系统...

    一个提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具模块。

    这个工具模块专注于处理中国特有的坐标系统,包括百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)以及国际通用的WGS84坐标系。理解这些坐标系之间的转换对于开发地图应用、定位服务或是地理数据分析至关重要。 ...

    百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换纠偏的JS实现

    例如,百度地图使用的是BD09坐标系,高德地图使用的是GCJ-02坐标系,谷歌地图在全球范围内使用WGS84,但在中国境内也采用了GCJ-02,而火星坐标(MG09)则是BD09的加密版本。WGS84(2000)是一种全球通用的大地坐标...

    地球坐标 火星坐标图吧坐标相互转化

    例如,百度坐标(BD09)和高德坐标(GCJ-02)都是对WGS84坐标进行加密的结果。这些坐标系统与图吧坐标类似,需要通过特定的API或算法来进行转换。例如,从WGS84到BD09的转换可以通过两步法实现:先由WGS84到GCJ-02,...

    地球坐标 火星坐标图吧坐标相互转化修改版

    地球坐标系统、火星坐标系统以及图吧坐标系都是不同的地理位置表示方法。在实际应用中,比如地图开发、导航软件或地理数据分析,经常需要将这些坐标系统之间进行转换。本资料包“地球坐标 火星坐标图吧坐标相互转化...

    高德、百度坐标系转天地图坐标系

    本篇文章将详细阐述高德、百度坐标系与天地图坐标系之间的转换方法,并探讨这种转换的重要性。 首先,我们要理解坐标系的基本概念。在地理信息系统中,坐标系是用于定义地球上任何位置的数学框架。常见的全球坐标系...

    gps坐标转百度坐标

    标题中的“GPS坐标转百度坐标”是指在GIS(地理信息系统)中将全球定位系统(GPS)使用的WGS84坐标转换为百度地图所采用的BD-09坐标系统的过程。这是因为不同的地图服务提供商可能使用不同的坐标系统,导致直接在...

    经纬度转换84百度火星互转.txt

    百度坐标转火星坐标系(BD09 =&gt; GCJ02) - **转换公式**: - 计算偏移后的经度和纬度值。 - 应用三角函数计算新的坐标值。 - 返回转换后的火星坐标。 - **具体步骤**: - 对输入的百度坐标进行偏移处理:`x = ...

    GPS坐标转百度坐标及纠偏

    在实际操作中,GPS坐标转百度坐标通常涉及到坐标系的转换,比如从WGS84坐标系转换到GCJ-02(火星坐标系),然后再转换到百度地图的私有坐标系。而坐标纠偏则可能包括对原始GPS数据的平滑处理,以消除快速移动或信号...

    Java实现常见坐标系(百度,高德,WGS84)转墨卡托坐标系(可直接运行).zip

    3. **高德坐标系(GCJ-02)**:也被称为火星坐标系,是中国国家测绘局采用的一种加密算法,将WGS84坐标系进行偏移处理。GCJ-02坐标系是WGS84坐标系在中国大陆地区的实际使用形式。 4. **WGS84经纬度**:全球定位...

Global site tag (gtag.js) - Google Analytics