diff --git a/foudations/mogo-network/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java b/foudations/mogo-network/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java index 0c1a207..1ab4882 100644 --- a/foudations/mogo-network/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java +++ b/foudations/mogo-network/src/main/java/com/mogo/cloud/commons/utils/CoordinateUtils.java @@ -1,5 +1,7 @@ package com.mogo.cloud.commons.utils; +import org.jetbrains.annotations.NotNull; + import java.math.BigDecimal; /** @@ -8,11 +10,75 @@ import java.math.BigDecimal; public class CoordinateUtils { /** - * 手机GPS坐标转火星坐标 - * - * @return 火星坐标数组 + * @param lon1 + * @param lat1 + * @param lon2 + * @param lat2 + * @return 两坐标的距离 单位:米(M) */ - public static double[] transformFromWGSToGCJ(double wgLat, double wgLon) { + public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) { + try { + double var2 = lon1; + double var4 = lat1; + double var6 = lon2; + double var8 = lat2; + var2 *= 0.01745329251994329D; + var4 *= 0.01745329251994329D; + var6 *= 0.01745329251994329D; + var8 *= 0.01745329251994329D; + double var10 = Math.sin( var2 ); + double var12 = Math.sin( var4 ); + double var14 = Math.cos( var2 ); + double var16 = Math.cos( var4 ); + double var18 = Math.sin( var6 ); + double var20 = Math.sin( var8 ); + double var22 = Math.cos( var6 ); + double var24 = Math.cos( var8 ); + double[] var28 = new double[3]; + double[] var29 = new double[3]; + var28[0] = var16 * var14; + var28[1] = var16 * var10; + var28[2] = var12; + var29[0] = var24 * var22; + var29[1] = var24 * var18; + var29[2] = var20; + return ( float ) ( Math.asin( Math.sqrt( ( var28[0] - var29[0] ) * ( var28[0] - var29[0] ) + ( var28[1] - var29[1] ) * ( var28[1] - var29[1] ) + ( var28[2] - var29[2] ) * ( var28[2] - var29[2] ) ) / 2.0D ) * 1.27420015798544E7D ); + } catch ( Throwable var26 ) { + var26.printStackTrace(); + return 0.0F; + } + } + + + // ------ + private static final double x_PI = 52.35987755982988D; + private static final double PI = 3.141592653589793D; + private static final double a = 6378245.0D; + private static final double ee = 0.006693421622965943D; + + public static final boolean outOfChina( double lat, double lng ) { + return lng <= 73.66D || lng >= 135.05D || lat <= 3.86D || lat >= 53.55D; + } + + private static final double transformLat( double lng, double lat ) { + double ret = -100.0D + 2.0D * lng + 3.0D * lat + 0.2D * lat * lat + 0.1D * lng * lat + 0.2D * Math.sqrt( Math.abs( lng ) ); + ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D; + ret += ( 20.0D * Math.sin( lat * 3.141592653589793D ) + 40.0D * Math.sin( lat / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; + ret += ( 160.0D * Math.sin( lat / 12.0D * 3.141592653589793D ) + ( double ) 320 * Math.sin( lat * 3.141592653589793D / 30.0D ) ) * 2.0D / 3.0D; + return ret; + } + + private static final double transformLon( double lng, double lat ) { + double ret = 300.0D + lng + 2.0D * lat + 0.1D * lng * lng + 0.1D * lng * lat + 0.1D * Math.sqrt( Math.abs( lng ) ); + ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D; + ret += ( 20.0D * Math.sin( lng * 3.141592653589793D ) + 40.0D * Math.sin( lng / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; + ret += ( 150.0D * Math.sin( lng / 12.0D * 3.141592653589793D ) + 300.0D * Math.sin( lng / 30.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; + return ret; + } + + @NotNull + // World Geodetic System ==> Mars Geodetic System + public static final double[] transformWgsToGcj( double wgLat, double wgLon ) { double[] point = new double[2]; if ( outOfChina( wgLat, wgLon ) ) { point[0] = wgLon; @@ -35,86 +101,32 @@ public class CoordinateUtils { } } - public static double transformLat(double lng, double lat) { - double ret = -100.0D + 2.0D * lng + 3.0D * lat + 0.2D * lat * lat + 0.1D * lng * lat + 0.2D * Math.sqrt( Math.abs( lng ) ); - ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D; - ret += ( 20.0D * Math.sin( lat * 3.141592653589793D ) + 40.0D * Math.sin( lat / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; - ret += ( 160.0D * Math.sin( lat / 12.0D * 3.141592653589793D ) + ( double ) 320 * Math.sin( lat * 3.141592653589793D / 30.0D ) ) * 2.0D / 3.0D; - return ret; - } - - public static double transformLon(double lng, double lat) { - double ret = 300.0D + lng + 2.0D * lat + 0.1D * lng * lng + 0.1D * lng * lat + 0.1D * Math.sqrt( Math.abs( lng ) ); - ret += ( 20.0D * Math.sin( 6.0D * lng * 3.141592653589793D ) + 20.0D * Math.sin( 2.0D * lng * 3.141592653589793D ) ) * 2.0D / 3.0D; - ret += ( 20.0D * Math.sin( lng * 3.141592653589793D ) + 40.0D * Math.sin( lng / 3.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; - ret += ( 150.0D * Math.sin( lng / 12.0D * 3.141592653589793D ) + 300.0D * Math.sin( lng / 30.0D * 3.141592653589793D ) ) * 2.0D / 3.0D; - return ret; - } - - public static boolean outOfChina(double lat, double lng) { - return lng <= 73.66D || lng >= 135.05D || lat <= 3.86D || lat >= 53.55D; - } - - public static double[] transformGcj02toWgs84(double lat, double lng) { + @NotNull + public static final double[] transformGcj02toWgs84( double lat, double lng ) { double[] var10000; - if (outOfChina(lat, lng)) { + if ( outOfChina( lat, lng ) ) { var10000 = new double[]{lng, lat}; } else { - double dlat = transformLat(lng - 105.0D, lat - 35.0D); - double dlng = transformLon(lng - 105.0D, lat - 35.0D); - double radlat = lat / 180.0D * Math.PI; - double magic = Math.sin(radlat); - magic = (double) 1 - 0.006693421622965943D * magic * magic; - double sqrtmagic = Math.sqrt(magic); - dlat = dlat * 180.0D / (6335552.717000426D / (magic * sqrtmagic) * Math.PI); - dlng = dlng * 180.0D / (6378245.0D / sqrtmagic * Math.cos(radlat) * Math.PI); + double dlat = transformLat( lng - 105.0D, lat - 35.0D ); + double dlng = transformLon( lng - 105.0D, lat - 35.0D ); + double radlat = lat / 180.0D * 3.141592653589793D; + double magic = Math.sin( radlat ); + magic = ( double ) 1 - 0.006693421622965943D * magic * magic; + double sqrtmagic = Math.sqrt( magic ); + dlat = dlat * 180.0D / ( 6335552.717000426D / ( magic * sqrtmagic ) * 3.141592653589793D ); + dlng = dlng * 180.0D / ( 6378245.0D / sqrtmagic * Math.cos( radlat ) * 3.141592653589793D ); double mglat = lat + dlat; double mglng = lng + dlng; - var10000 = new double[]{dealRound(lng * (double) 2 - mglng), dealRound(lat * (double) 2 - mglat)}; + var10000 = new double[]{dealRound( lng * ( double ) 2 - mglng ), dealRound( lat * ( double ) 2 - mglat )}; } return var10000; } - private static double dealRound(double value ) { + private static final double dealRound( double value ) { BigDecimal bg = new BigDecimal( value ); - return bg.setScale( 6, 4 ).doubleValue(); - } - - /** - * @return 两坐标的距离 单位:米(M) - */ - public static float calculateLineDistance(double lon1, double lat1, double lon2, double lat2) { - try { - double var2 = lon1; - double var4 = lat1; - double var6 = lon2; - double var8 = lat2; - var2 *= 0.01745329251994329D; - var4 *= 0.01745329251994329D; - var6 *= 0.01745329251994329D; - var8 *= 0.01745329251994329D; - double var10 = Math.sin(var2); - double var12 = Math.sin(var4); - double var14 = Math.cos(var2); - double var16 = Math.cos(var4); - double var18 = Math.sin(var6); - double var20 = Math.sin(var8); - double var22 = Math.cos(var6); - double var24 = Math.cos(var8); - double[] var28 = new double[3]; - double[] var29 = new double[3]; - var28[0] = var16 * var14; - var28[1] = var16 * var10; - var28[2] = var12; - var29[0] = var24 * var22; - var29[1] = var24 * var18; - var29[2] = var20; - return (float) (Math.asin(Math.sqrt((var28[0] - var29[0]) * (var28[0] - var29[0]) + (var28[1] - var29[1]) * (var28[1] - var29[1]) + (var28[2] - var29[2]) * (var28[2] - var29[2])) / 2.0D) * 1.27420015798544E7D); - } catch (Throwable var26) { - var26.printStackTrace(); - return 0.0F; - } + double result = bg.setScale( 6, 4 ).doubleValue(); + return result; } } diff --git a/gradle.properties b/gradle.properties index b4423e6..11255ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,20 +30,20 @@ PASSWORD=xintai2018 RELEASE=true # AI CLOUD 云平台 # 工具类 -MOGO_UTILS_VERSION=1.0.40 +MOGO_UTILS_VERSION=1.0.41 # 网络请求 -MOGO_NETWORK_VERSION=1.0.40 +MOGO_NETWORK_VERSION=1.0.41 # 网络DNS -MOGO_HTTPDNS_VERSION=1.0.40 +MOGO_HTTPDNS_VERSION=1.0.41 # 鉴权 -MOGO_PASSPORT_VERSION=1.0.40 +MOGO_PASSPORT_VERSION=1.0.41 # 常链接 -MOGO_SOCKET_VERSION=1.0.40 +MOGO_SOCKET_VERSION=1.0.41 # 数据采集 -MOGO_REALTIME_VERSION=1.0.40 +MOGO_REALTIME_VERSION=1.0.41 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.0.40 +MOGO_TANLU_VERSION=1.0.41 # 直播推流 -MOGO_LIVE_VERSION=1.0.40 +MOGO_LIVE_VERSION=1.0.41 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.0.40 +MOGO_TRAFFICLIVE_VERSION=1.0.41 diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java index a4c35ed..b199a36 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/CloudLocationInfo.java @@ -70,10 +70,10 @@ public class CloudLocationInfo implements Parcelable { } public void convertCoor2GCJ02(){ - double[] amapCoord = CoordinateUtils.transformFromWGSToGCJ( lat, lon ); + double[] amapCoord = CoordinateUtils.transformWgsToGcj( lat, lon ); if ( amapCoord != null ) { - this.lat = amapCoord[0]; - this.lon = amapCoord[1]; + this.lat = amapCoord[1]; + this.lon = amapCoord[0]; } }