|
|
@ -1,7 +1,7 @@ |
|
|
|
package com.elink.esua.epdc.commons.tools.utils; |
|
|
|
|
|
|
|
/** |
|
|
|
* @Description TODO |
|
|
|
* @Description |
|
|
|
* @Author yinzuomei |
|
|
|
* @Date 2019/12/27 10:00 |
|
|
|
*/ |
|
|
@ -29,9 +29,10 @@ public class GPSUtils { |
|
|
|
* pi)) * 2.0 / 3.0; |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
public static double[] transform(double lat, double lon) { |
|
|
|
if (outOfChina(lat, lon)) { |
|
|
|
return new double[]{lat,lon}; |
|
|
|
return new double[]{lat, lon}; |
|
|
|
} |
|
|
|
double dLat = transformLat(lon - 105.0, lat - 35.0); |
|
|
|
double dLon = transformLon(lon - 105.0, lat - 35.0); |
|
|
@ -43,8 +44,9 @@ public class GPSUtils { |
|
|
|
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi); |
|
|
|
double mgLat = lat + dLat; |
|
|
|
double mgLon = lon + dLon; |
|
|
|
return new double[]{mgLat,mgLon}; |
|
|
|
return new double[]{mgLat, mgLon}; |
|
|
|
} |
|
|
|
|
|
|
|
public static boolean outOfChina(double lat, double lon) { |
|
|
|
if (lon < 72.004 || lon > 137.8347) |
|
|
|
return true; |
|
|
@ -52,6 +54,7 @@ public class GPSUtils { |
|
|
|
return true; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 84 to 火星坐标系 (GCJ-02) World Geodetic System ==> Mars Geodetic System |
|
|
|
* |
|
|
@ -61,7 +64,7 @@ public class GPSUtils { |
|
|
|
*/ |
|
|
|
public static double[] gps84_To_Gcj02(double lat, double lon) { |
|
|
|
if (outOfChina(lat, lon)) { |
|
|
|
return new double[]{lat,lon}; |
|
|
|
return new double[]{lat, lon}; |
|
|
|
} |
|
|
|
double dLat = transformLat(lon - 105.0, lat - 35.0); |
|
|
|
double dLon = transformLon(lon - 105.0, lat - 35.0); |
|
|
@ -78,13 +81,14 @@ public class GPSUtils { |
|
|
|
|
|
|
|
/** |
|
|
|
* * 火星坐标系 (GCJ-02) to 84 * * @param lon * @param lat * @return |
|
|
|
* */ |
|
|
|
*/ |
|
|
|
public static double[] gcj02_To_Gps84(double lat, double lon) { |
|
|
|
double[] gps = transform(lat, lon); |
|
|
|
double lontitude = lon * 2 - gps[1]; |
|
|
|
double latitude = lat * 2 - gps[0]; |
|
|
|
return new double[]{latitude, lontitude}; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标 |
|
|
|
* |
|
|
@ -97,7 +101,7 @@ public class GPSUtils { |
|
|
|
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi); |
|
|
|
double tempLon = z * Math.cos(theta) + 0.0065; |
|
|
|
double tempLat = z * Math.sin(theta) + 0.006; |
|
|
|
double[] gps = {tempLat,tempLon}; |
|
|
|
double[] gps = {tempLat, tempLon}; |
|
|
|
return gps; |
|
|
|
} |
|
|
|
|
|
|
@ -111,21 +115,24 @@ public class GPSUtils { |
|
|
|
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); |
|
|
|
double tempLon = z * Math.cos(theta); |
|
|
|
double tempLat = z * Math.sin(theta); |
|
|
|
double[] gps = {tempLat,tempLon}; |
|
|
|
double[] gps = {tempLat, tempLon}; |
|
|
|
return gps; |
|
|
|
} |
|
|
|
|
|
|
|
/**将gps84转为bd09 |
|
|
|
/** |
|
|
|
* 将gps84转为bd09 |
|
|
|
* |
|
|
|
* @param lat |
|
|
|
* @param lon |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public static double[] gps84_To_bd09(double lat,double lon){ |
|
|
|
double[] gcj02 = gps84_To_Gcj02(lat,lon); |
|
|
|
double[] bd09 = gcj02_To_Bd09(gcj02[0],gcj02[1]); |
|
|
|
public static double[] gps84_To_bd09(double lat, double lon) { |
|
|
|
double[] gcj02 = gps84_To_Gcj02(lat, lon); |
|
|
|
double[] bd09 = gcj02_To_Bd09(gcj02[0], gcj02[1]); |
|
|
|
return bd09; |
|
|
|
} |
|
|
|
public static double[] bd09_To_gps84(double lat,double lon){ |
|
|
|
|
|
|
|
public static double[] bd09_To_gps84(double lat, double lon) { |
|
|
|
double[] gcj02 = bd09_To_Gcj02(lat, lon); |
|
|
|
double[] gps84 = gcj02_To_Gps84(gcj02[0], gcj02[1]); |
|
|
|
//保留小数点后六位
|
|
|
@ -134,12 +141,14 @@ public class GPSUtils { |
|
|
|
return gps84; |
|
|
|
} |
|
|
|
|
|
|
|
/**保留小数点后六位 |
|
|
|
/** |
|
|
|
* 保留小数点后六位 |
|
|
|
* |
|
|
|
* @param num |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
private static double retain6(double num){ |
|
|
|
String result = String .format("%.6f", num); |
|
|
|
private static double retain6(double num) { |
|
|
|
String result = String.format("%.6f", num); |
|
|
|
return Double.valueOf(result); |
|
|
|
} |
|
|
|
} |
|
|
|