From bbfbe9f1d7ef0dde133c3ee01fd74e59791abf92 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Wed, 24 Feb 2021 16:14:05 +0800 Subject: [PATCH] replace the CoordinationUtils logic --- .../cloud/commons/utils/CoordinateUtils.java | 121 +++++++++--------- gradle.properties | 18 +-- 2 files changed, 70 insertions(+), 69 deletions(-) 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 93aec7a..0c1a207 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,89 +1,90 @@ package com.mogo.cloud.commons.utils; +import java.math.BigDecimal; + /** * @author donghongyu */ public class CoordinateUtils { - private static double a = 6378245.0; - private static double ee = 0.00669342162296594323; - /** * 手机GPS坐标转火星坐标 * - * @return + * @return 火星坐标数组 */ - public static double[] transformFromWGSToGCJ( double lat, double lon ) { - - //如果在国外,则默认不进行转换 - if ( outOfChina( lat, lon ) ) { - return new double[]{lat, lon}; + public static double[] transformFromWGSToGCJ(double wgLat, double wgLon) { + double[] point = new double[2]; + if ( outOfChina( wgLat, wgLon ) ) { + point[0] = wgLon; + point[1] = wgLat; + return point; + } else { + double dLat = transformLat( wgLon - 105.0D, wgLat - 35.0D ); + double dLon = transformLon( wgLon - 105.0D, wgLat - 35.0D ); + double radLat = wgLat / 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 ); + dLon = dLon * 180.0D / ( 6378245.0D / sqrtMagic * Math.cos( radLat ) * 3.141592653589793D ); + double mgLat = wgLat + dLat; + double mgLon = wgLon + dLon; + point[0] = dealRound( mgLon ); + point[1] = dealRound( mgLat ); + return point; } - double dLat = transformLat( lon - 105.0, lat - 35.0 ); - double dLon = transformLon( lon - 105.0, lat - 35.0 ); - double radLat = lat / 180.0 * Math.PI; - double magic = Math.sin( radLat ); - magic = 1 - ee * magic * magic; - double sqrtMagic = Math.sqrt( magic ); - dLat = ( dLat * 180.0 ) / ( ( a * ( 1 - ee ) ) / ( magic * sqrtMagic ) * Math.PI ); - dLon = ( dLon * 180.0 ) / ( a / sqrtMagic * Math.cos( radLat ) * Math.PI ); - - return new double[]{lat + dLat, lon + dLon}; } - public static double transformLat( double x, double y ) { - double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt( x > 0 ? x : -x ); - ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0; - ret += ( 20.0 * Math.sin( y * Math.PI ) + 40.0 * Math.sin( y / 3.0 * Math.PI ) ) * 2.0 / 3.0; - ret += ( 160.0 * Math.sin( y / 12.0 * Math.PI ) + 320 * Math.sin( y * Math.PI / 30.0 ) ) * 2.0 / 3.0; + 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 x, double y ) { - double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt( x > 0 ? x : -x ); - ret += ( 20.0 * Math.sin( 6.0 * x * Math.PI ) + 20.0 * Math.sin( 2.0 * x * Math.PI ) ) * 2.0 / 3.0; - ret += ( 20.0 * Math.sin( x * Math.PI ) + 40.0 * Math.sin( x / 3.0 * Math.PI ) ) * 2.0 / 3.0; - ret += ( 150.0 * Math.sin( x / 12.0 * Math.PI ) + 300.0 * Math.sin( x / 30.0 * Math.PI ) ) * 2.0 / 3.0; + 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 lon ) { - if ( lon < 72.004 || lon > 137.8347 ) - return true; - if ( lat < 0.8293 || lat > 55.8271 ) - return true; - return false; + public static boolean outOfChina(double lat, double lng) { + return lng <= 73.66D || lng >= 135.05D || lat <= 3.86D || lat >= 53.55D; } - public static final double[] transformGcj02toWgs84( double lat, double lng ) { + public static 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 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 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 mglat = lat + dlat; double mglng = lng + dlng; - var10000 = new double[]{lng * ( double ) 2 - mglng, 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 ) { + BigDecimal bg = new BigDecimal( value ); + return bg.setScale( 6, 4 ).doubleValue(); + } + /** - * @param lon1 - * @param lat1 - * @param lon2 - * @param lat2 * @return 两坐标的距离 单位:米(M) */ - public static float calculateLineDistance( double lon1, double lat1, double lon2, double lat2 ) { + public static float calculateLineDistance(double lon1, double lat1, double lon2, double lat2) { try { double var2 = lon1; double var4 = lat1; @@ -93,14 +94,14 @@ public class CoordinateUtils { 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 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; @@ -109,8 +110,8 @@ public class CoordinateUtils { 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 ) { + 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; } diff --git a/gradle.properties b/gradle.properties index 5974a8f..cf08c7a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -30,20 +30,20 @@ PASSWORD=xintai2018 RELEASE=false # AI CLOUD 云平台 # 工具类 -MOGO_UTILS_VERSION=1.0.39-SNAPSHOT +MOGO_UTILS_VERSION=1.0.40-SNAPSHOT # 网络请求 -MOGO_NETWORK_VERSION=1.0.39-SNAPSHOT +MOGO_NETWORK_VERSION=1.0.40-SNAPSHOT # 网络DNS -MOGO_HTTPDNS_VERSION=1.0.39-SNAPSHOT +MOGO_HTTPDNS_VERSION=1.0.40-SNAPSHOT # 鉴权 -MOGO_PASSPORT_VERSION=1.0.39-SNAPSHOT +MOGO_PASSPORT_VERSION=1.0.40-SNAPSHOT # 常链接 -MOGO_SOCKET_VERSION=1.0.39-SNAPSHOT +MOGO_SOCKET_VERSION=1.0.40-SNAPSHOT # 数据采集 -MOGO_REALTIME_VERSION=1.0.39-SNAPSHOT +MOGO_REALTIME_VERSION=1.0.40-SNAPSHOT # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.0.39-SNAPSHOT +MOGO_TANLU_VERSION=1.0.40-SNAPSHOT # 直播推流 -MOGO_LIVE_VERSION=1.0.39-SNAPSHOT +MOGO_LIVE_VERSION=1.0.40-SNAPSHOT # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.0.39-SNAPSHOT +MOGO_TRAFFICLIVE_VERSION=1.0.40-SNAPSHOT