百度高德坐标转换

   百度高德坐标转换

package com.edcsc.bus.util;

import java.math.BigDecimal;
import net.sf.json.JSONObject;

public class GpsToGaoDeUtil {
	
	private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;

	/**
	 * 对double类型数据保留小数点后多少位 高德地图转码返回的就是 小数点后6位,为了统一封装一下
	 * 
	 * @param digit 位数
	 * @param in 输入
	 * @return 保留小数位后的数
	 */
	static double dataDigit(int digit, double in) {
		return new BigDecimal(in).setScale(digit, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	/**
	 * 将火星坐标转变成百度坐标
	 * @param longitude 经度
	 * @param lantitude 纬度
	 * @return 百度坐标
	 */
	public static JSONObject bd_encrypt(double longitude ,double latitude) {
		JSONObject json = new JSONObject();
		double x = longitude, y = latitude;
		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);
		json.put("longitude", dataDigit(6, z * Math.cos(theta) + 0.0065));
		json.put("lantitude", dataDigit(6, z * Math.sin(theta) + 0.006));
		return json;
	}

	/**
	 * 将百度坐标转变成火星坐标
	 * @param longitude 经度
	 * @param lantitude 纬度
	 * @return 火星坐标(高德、腾讯地图等)
	 */
	public static JSONObject bd_decrypt(double longitude ,double latitude) {
		JSONObject json = new JSONObject();
		//double x = longitude - 0.0065, y = latitude - 0.006;
		double x = longitude - 0.00651, y = latitude - 0.00593;
		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);
		json.put("longitude", dataDigit(10, z * Math.cos(theta)));
		json.put("latitude", dataDigit(10, z * Math.sin(theta)));
		return json;
	}

	// 测试代码
	public static void main(String[] args) {
		System.out.println(bd_decrypt(114.32995788563,30.510125271539).toString());
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值