`

火星坐标和地球坐标的转换

 
阅读更多
/****
 * 坐标转换工具类
 * @author wanwenjun
 *
 */
public class TransLocationUtil {

	private static double pi = 3.14159265358979324D;// 圆周率
	private static double a = 6378245.0D;// WGS 长轴半径
	private static double ee = 0.00669342162296594323D;// WGS 偏心率的平方

	/**
	 * 中国坐标内
	 * 
	 * @param lat
	 * @param lon
	 * @return
	 */
	public static 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;
	}

	public static 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;
	}
	
	// 84->gcj02
	public static 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;
	}

	/****
	 * 地球坐标转火星坐标
	 * @param lon
	 * @param lat
	 * @return
	 */
	public static Map<String, Double> transform(double lon, double lat) {
		HashMap<String, Double> localHashMap = new HashMap<String, Double>();
			if (outofChina(lat, lon)) {
				localHashMap.put("lon", Double.valueOf(lon));
				localHashMap.put("lat", Double.valueOf(lat));
				return localHashMap;
			}
			double dLat = transformLat(lon - 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);
			double mgLat = lat + dLat;
			double mgLon = lon + dLon;
			localHashMap.put("lon", mgLon);
			localHashMap.put("lat", mgLat);
			return localHashMap;
		}
		
		// gcj02-84
	/****
	 * 火星坐标转地球坐标
	 * @param lon
	 * @param lat
	 * @return
	 */
	public static Map<String, Double> gcj2wgs(double lon, double lat) {
			Map<String, Double> localHashMap = new HashMap<String, Double>();
			double lontitude = lon
					- (((Double) transform(lon, lat).get("lon")).doubleValue() - lon);
			double latitude = (lat - (((Double) ( transform(lon, lat))
					.get("lat")).doubleValue() - lat));
			localHashMap.put("lon", lontitude);
			localHashMap.put("lat", latitude);
			return localHashMap;
		}
}

 

分享到:
评论

相关推荐

    火星坐标转换经纬度,火星坐标系转换软件工具【支持批量】

    因此,当需要在北斗系统和其他全球导航系统之间进行数据交换时,就需要进行火星坐标与地球坐标的转换。 火星坐标转换工具是一种专门设计用于进行这种转换的软件应用。它能够帮助用户快速、准确地将火星坐标转换为...

    火星坐标转地球坐标工具

    火星坐标转地球坐标的转换通常涉及到两个主要步骤:解密和投影转换。解密过程主要是通过特定的算法,如双曲正弦函数,将火星坐标还原为近似的WGS-84坐标。投影转换则涉及将二维平面坐标转换为三维球面坐标,这通常...

    坐标转换系统 火星坐标与CGCS2000、WGS84之间的互相转换

    在地球坐标系统中进行火星坐标转换通常需要特定的数学模型和参数。 2. **CGCS2000**:中国大地2000坐标系统是中国国家测绘局于2000年建立的现代化地心地固坐标系统,取代了原有的北京54和西安80坐标系统。CGCS2000...

    火星坐标互转Java版

    "火星坐标互转Java版"这个项目涉及到的就是一种特殊的坐标转换技术,主要用于解决在中国大陆地区地图定位的问题。由于历史原因,中国的地图数据通常采用的是“火星坐标系”,也称为GCJ-02坐标系,它与国际上广泛使用...

    火星坐标转换器.zip

    火星坐标系统与地球坐标系统有显著差异,因为火星的地理特征、自转轴倾角和形状等因素与地球不同。在火星探测中,科学家们通常采用几种主要的坐标系统,如火星大地坐标系(Mars Terrestrial Reference System, MTRS...

    火星坐标转换为GPS坐标

    总结起来,火星坐标到GPS坐标的转换是一个复杂但必要的任务,涉及地球参考坐标系的理解、坐标转换模型的选择和参数的获取与应用。通过提供的"Mars2Wgs.txt"文件,开发者可以深入学习这一过程,并将其应用于实际项目...

    GPS转火星坐标,火星坐标转GPS(C#)

    总的来说,理解并实现GPS到火星坐标的转换需要对地球和火星的几何、物理特性有深入的了解,同时也需要掌握坐标转换的数学原理和编程技巧。在C#中,这通常涉及到线性代数、几何和数值计算的知识。同时,与JavaScript...

    Android火星坐标转换

    在Android系统中,由于国家安全和隐私考虑,GPS获取到的原始坐标数据并非直接采用全球通用的WGS84坐标系,而是使用了被称为“火星坐标”或“GCJ-02”的加密坐标系。这种坐标转换是必要的,因为它使得位置信息在传输...

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

    地球坐标、火星坐标和图吧坐标是三种不同的坐标系统,它们各有特点,适用于不同的应用场景。本篇文章将详细探讨这些坐标系统及其相互之间的转换方法。 首先,地球坐标系统(WGS84)是最常用的一种全球参考坐标系,...

    火星坐标(奥维)与wgs84坐标(GoogleEarth)坐标批量相互转换软件

    支持火星坐标(奥维)与 wgs84坐标(Google Earth)坐标批量通过电子表格方式相互转换 使用方法: 双击exe执行程序,按提示选择是生成模板还是进行转换。已有模板表格情况下,模板填入相应信息保存并关闭电子表格,...

    火星坐标转换

    本文将深入探讨“火星坐标转换”,包括百度坐标、火星坐标和地球坐标之间的相互转换,以及32位和64位版本的区别。 首先,我们需要理解三种坐标系统的基础知识。地球坐标系统,也称为WGS84(World Geodetic System ...

    java实现火星坐标系与84坐标系之转化

    1. **WGS-84到火星坐标系(GCJ-02)的转换**:这一步通常称为加密过程,使用的是双曲正弦函数。具体算法为两次迭代,每次迭代都对WGS-84坐标进行加偏移、双曲正弦加密,直到结果稳定。 2. **火星坐标系(GCJ-02)到...

    火星坐标定位android/ios地图转换

    这个坐标系统与国际上广泛采用的WGS-84坐标系存在差异,因此在开发支持Android和iOS平台的地图应用时,需要进行坐标转换以确保位置信息的准确显示。本文将详细介绍火星坐标定位以及在Android和iOS平台上的地图转换。...

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

    本资料包“地球坐标 火星坐标图吧坐标相互转化修改版”提供了相关的算法和API,用于解决这类问题。 首先,我们来看地球坐标系统。最常见的是WGS84(World Geodetic System 1984),这是一个全球通用的大地坐标系统...

    WGS1984转换火星坐标系

    工具提供的转换功能能够帮助用户将Shapefile中的WGS1984坐标转换成火星坐标系,从而使得在使用中国地图服务时,显示的数据能与实际位置更精确地匹配,减少定位偏差。 转换过程通常涉及数学变换,如投影转换和坐标平...

    GPS坐标与火星坐标互转JAVA版源代码

    相反,从火星坐标转换回GPS坐标,需要执行解密和反偏移操作。这个过程需要逆向执行加密算法,并抵消之前的偏移值。 现在,我们来讨论JAVA版的源代码实现。在JAVA中,我们可以创建两个类,分别用于GPS到火星坐标和...

    火星坐标转GPS坐标

    火星坐标系,全称为中国大地坐标系统2000(China Geodetic Coordinate System 2000),是我国为了国家安全和测绘工作自主设立的一种地理坐标系统。它以2000年中国地球重力场模型为基础,具有较高的精度和适用性。而...

    火星坐标转84(C#源码)

    因此,当需要将火星坐标与地球坐标进行转换时,就需要用到“火星坐标转84”这样的算法。 本文将详细解析C#源码实现的火星坐标转84坐标的转换方法,并探讨相关的地理坐标转换知识。 首先,火星坐标转84的转换涉及到...

Global site tag (gtag.js) - Google Analytics