変換Utilsの座標:
インポート 静的java.lang.StrictMath.absを。 輸入 静的java.lang.StrictMath.atan2。 インポート 静的java.lang.StrictMath.cosを。 輸入 静的java.lang.StrictMath.sin。 輸入 静的java.lang.StrictMath.sqrt。 / ** *坐标系转换工具 * @author DSC * * / パブリック クラスCoordinateUtil { プライベート 静的 最終 ダブル PI = 3.14159265358979324 。 プライベート 静的 最後の ダブル A = 6378245.0 。 民間 静的 最終 ダブル EE = 0.00669342162296594323 。 プライベート 静的 最後の ダブル x_pi = 3.14159265358979324 * 3000.0 / 180.0 ; プライベート 静的 ブール outOfChina(ダブル緯度、ダブル経度){ 戻り LON <72.004 || LON> 137.8347 || LAT <0.8293 || LAT> 55.8271 ; } プライベート 静的 ダブル transformLat(ダブル X、ダブルY){ ダブル RET = -100.0 + 2.0 * X + 3.0 * Y + 0.2 * Y * Y + 0.1 * X * Y + 0.2 * SQRT(ABS(X)); RET+ =(20.0 * SIN(6.0 * X * PI)+ 20.0 * SIN(2.0 * X * PI))* 2.0 / 3.0 。 RET + =(20.0 * SIN(Y * PI)+ 40.0 * SIN(Y / 3.0 * PI))* 2.0 / 3.0 。 RET + =(160.0 * SIN(Y / 12.0 * PI)+ 320 * SIN(Y * PI / 30.0))* 2.0 / 3.0 。 リターンRET; } プライベート 静的 ダブル transformLon(ダブル X、ダブルY){ ダブル RET = 300.0 + X + 2.0 * Y + 0.1 * X * X + 0.1 * X * Y + 0.1 * SQRT(ABS(X))。 RET + =(20.0 * SIN(6.0 * X * PI)+ 20.0 * SIN(2.0 * X * PI))* 2.0 / 3.0 。 RET+ =(20.0 * SIN(X * PI)+ 40.0 * SIN(X / 3.0 * PI))* 2.0 / 3.0 ; RET + =(150.0 * SIN(X / 12.0 * PI)+ 300.0 * SIN(X / 30.0 PI *))* 2.0 / 3.0 ; リターンRET; } / ** 地球座標に*座標火星 *世界測地系==>火星測地系 *地図:緯度、経度 * * @paramのMGS地上座標座標 * @return 火星座標座標 * / パブリック 静的transform2Mars座標(MGS座標){ marsCoordinate座標 = getCoordinateInstance(); ダブル wgLat =mgs.getLatitude(); 二重 wgLon = mgs.getLongitude()。 もし(CoordinateUtil.outOfChina(wgLat、wgLon)){ marsCoordinate.setLongitude(wgLon)。 marsCoordinate.setLatitude(wgLat)。 返すmarsCoordinateを。 } // 地球坐标转火星坐标算法 ダブル DLAT = transformLat(wgLon - 105.0、wgLat - 35.0 )。 二重 dLon = transformLon(wgLon - 105.0、wgLat - 35.0 )。 ダブル radLat = wgLat / 180.0 *のパイ。 ダブルマジック= 罪(radLat)。 魔法 = 1 - EE *マジック*マジック; ダブル sqrtMagic = SQRT(マジック); DLAT =(DLAT * 180.0)/((A *(1 - EE))/(マジック* sqrtMagic)* PI); dlon =(* 180.0 dlon)/(A / sqrtMagic COS *(radLat)* PI); marsCoordinate.setLongitude(wgLon + dlon); marsCoordinate.setLatitude(wgLat + DLAT); 戻りmarsCoordinate; } / ** *百度座標座標に火星 *火星測地系==>百度測地システム *地図:緯度、経度 * * @param MGS火星座標は座標 *@return 座標百度坐标 * / パブリック 静的座標bdEncrypt(MGS座標){ 座標bdCoordinate = getCoordinateInstance()。 二重 X = mgs.getLongitude()。 二重 Y = mgs.getLatitude()。 二重 Z = SQRT(X * X + Y * Y)+ 0.00002 * SIN(Y * x_pi)。 ダブルシータ= ATAN2(Y、X)+ 0.000003 * COS(X * x_pi)。 bdCoordinate.setLongitude(Z * COS(シータ)+ 0.0065 )。 bdCoordinate.setLatitude(Z * SIN(シータ)+ 0.006 )。 リターン bdCoordinateを。 } / ** *百度座標火星への座標 *百度測地系==>火星測地系は、 * * @paramは百度座標座標BGS * @return 座標座標火星 * / パブリック 静的座標bdDecrypt(BGS座標){ 座標marsCoordinate = getCoordinateInstance()を; ダブル X = bgs.getLongitude() - 0.0065 ; ダブル Y = bgs.getLatitude() - 0.006 ; ダブル Z = SQRT(X * X + Y * Y) -のSiN 0.00002 *(Y * x_pi); ダブルシータのATAN2 = (Y、X) - 0.000003 * COS(X *x_pi); marsCoordinate.setLongitude(Z * COS(シータ)); marsCoordinate.setLatitude(Z * 罪(シータ)); 返すmarsCoordinateを。 } パブリック 静的getCoordinateInstance(){座標 戻り_COORDINATE_INSTANCEと、 } プライベート 静的 _COORDINATE_INSTANCE座標= 新 CoordinateUtil()。新)(座標; プライベート クラスは、{座標 プライベート ダブル経度。 プライベート ダブル緯度。 公共 ダブル getLongitude(){ 戻り経度。 } 公共 ボイド setLongitude(ダブル経度){ この .longitude = 経度。 } 公共 ダブルgetLatitude(){ 戻り緯度。 } 公共 ボイド setLatitude(ダブル緯度){ この .latitude = 緯度。 } } パブリック 静的 ボイドメイン(文字列[]引数){ // 百度坐标 // 116.40727,39.978862 // 高德坐标 // 116.400897,39.972546 座標座標 = CoordinateUtil.getCoordinateInstance()。 coordinate.setLongitude( 106.1013515 )。 coordinate.setLatitude( 30.758687 )。 marsCoordinate座標 = (座標)transform2Mars。 System.out.println(marsCoordinate.getLongitude())。 System.out.println(marsCoordinate.getLatitude())。 } }