変換Utilsの座標

変換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())。
    } 
}

おすすめ

転載: www.cnblogs.com/wangquanyi/p/12106523.html