2.2各坐标系转换工具类
package com.jourwon.util;
import com.jourwon.pojo.Point;
/**
-
Description: 各坐标系之间的转换工具类
-
@author JourWon
-
@date Created on 2018年6月19日
*/
public class CoordinateTransformUtils {
// 圆周率π
private static final double PI = 3.1415926535897932384626D;
// 火星坐标系与百度坐标系转换的中间量
private static final double X_PI = 3.14159265358979324 * 3000.0 / 180.0D;
// Krasovsky 1940
// 长半轴a = 6378245.0, 1/f = 298.3
// b = a * (1 - f)
// 扁率ee = (a^2 - b^2) / a^2;
// 长半轴
private static final double SEMI_MAJOR = 6378245.0D;
// 扁率
private static final double FLATTENING = 0.00669342162296594323D;
// WGS84=>GCJ02 地球坐标系=>火星坐标系
public static Point wgs84ToGcj02(double lng, double lat) {
if (outOfChina(lng, lat)) {
return new Point(lng, lat);
}
double[] offset = offset(lng, lat);
double mglng = lng + offset[0];
double mglat = lat + offset[1];
return new Point(mglng, mglat);
}
// GCJ02=>WGS84 火星坐标系=>地球坐标系(粗略)
public static Point gcj02ToWgs84(double lng, double lat) {
if (outOfChina(lng, lat)) {
return new Point(lng, lat);
}
double[] offset = offset(lng, lat);
double mglng = lng - offset[0];
double mglat = lat - offset[1];
return new Point(mglng, mglat);
}
// GCJ02=>WGS84 火星坐标系=>地球坐标系(精确)
public static Point gcj02ToWgs84Exactly(double lng, double lat) {
if (outOfChina(lng, lat)) {
return new Point(lng, lat);
}
double initDelta = 0.01;
double threshold = 0.000000001;
double dLat = initDelta, dLon = initDelta;
double mLat = lat - dLat, mLon =