package com.seehence.brain.util;
import java.util.HashMap;
import java.util.Map;
/*
* @deprecated 坐标转换(1: WGS84坐标;2: BD09坐标;3:国测局(GCJ02)坐标)
* @author DR
* @date 2020-07-01
*/
public class TransCoord {
private static final double pi = 3.1415926535897932384626;
static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;
private static final double a = 6378245.0;
private static final double ee = 0.00669342162296594323;
/**
* 百度坐标转84坐标系:BD09 => WGS84
* 规则: 无法直接转换,先转火星坐标系,再通过火星坐标转84坐标
* @param lon(经度)
* @param lat(纬度)
* @return Map<String, Double>
*/
@SuppressWarnings("unused")
public static Map<String, Double> bd09ToWgs84(Double lon, Double lat){
Map<String, Double> lonlat = bd09ToGcj02(lon, lat);
return gcj02ToWgs84(lonlat.get("lon"), lonlat.get("lat"));
}
/**
* 百度坐标转火星坐标系:BD09 => GCJ02
* 规则:
* @param lon(经度)
* @param lat(纬度)
* @return
*/
public static Map<String, Double> bd09ToGcj02(Double lon, Double lat){
Map<String, Double> coord = 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 * pi);
Double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * pi);
coord.put("lon", z * Math.cos(theta));
coord.put("lat", z * Math.sin(theta));
return coord;
}
/**
* 火星坐标转84坐标系:GCJ02 => WGS84
* 规则:
* @param lon(经度)
* @param lat(纬度)
* @return
*/
public static Map<String, Double> gcj02ToWgs84(Double lon, Double lat){
Map<String, Double> coord = new HashMap<String, Double>();