2016年1月23日土曜日

Hubeny : 2点間の緯度、経度から距離を算出するプログラム

Hubeny : 2点間の緯度、経度から距離を算出するプログラム : PHP版
Javaはこちら:https://github.com/smzn/Hubeny


        public function Hubeny_Distance_start($x1, $y1, $x2, $y2){
                $d;//二点間距離
                $X1; $Y1; $X2; $Y2;//各値のラジアン値
                $dx; $dy;//X値、Y値の差
                $MuY;//緯度の平均値
                $W;
                $M;//子午線曲率半径
                $N;//卯酉線曲率半径
                //double E =0.00669437999014;//第一離心率eの二乗
                $E;
                $a=6378137.0;//長半径(赤道半径)
                $b=6356752.314140;//短半径(極半径)

                $X1 = $this->_toRadians($x1);
                $Y1 = $this->_toRadians($y1);
                $X2 = $this->_toRadians($x2);
                $Y2 = $this->_toRadians($y2);
                $dx = $X1-$X2;
                $dy = $Y1-$Y2;
                $MuY = ($Y1+$Y2)/2;
                $E = (($a*$a)-($b*$b))/($a*$a);
                $W = sqrt( 1-($E*(sin($MuY)*sin($MuY))) );
                $M = ($a*(1-$E)) / ($W*$W*$W);
                $N = $a/$W;
                $d = sqrt((($dy*$M)*($dy*$M))+(($dx*$N*cos($MuY))*($dx*$N*cos($MuY))));
                return $d;
        }

        public function _toRadians($deg)
        {
                return $deg * M_PI / 180.0;
        }

    /*
     * ラジアンを角度に変換する
     */
        public function _toDegrees($rad)
        {
            return $rad * 180.0 / M_PI;
        }

0 件のコメント:

コメントを投稿