3

緯度経度と高度(標高)を使用して、2点間の距離を計算しようとしています。

私は距離を得るためにユークリッド式を使用していました:

D=√((Long1-Long2)²+(Lat1-Lat2)²+(Alt1-Alt2)²)

私のポイントは地理座標であり、もちろん高度は海からの私の高さです。私は緯度と経度しか持っていません。高度を取得するためにGOOGLE API Elevationを使用しています。

(スキーで) 移動距離を計算するアプリケーションを開発しています。私が使用したすべてのアプリケーションは、高度を含めて移動距離を取得します。#Endomondo や #Garmin のように、実際の距離は返された距離とは異なるため、2D 空間で距離を取得することはできません。

距離を計算するのに最適な式はどれですか? もちろん高度も含めて。

PostGis を使用して、Python でアプリを作成しています。

4

3 に答える 3

3

John Moutafis が提供するソリューションを使用しましたが、正しい答えが得られませんでした。式にはいくつかの修正が必要です。http://electron9.phys.utk.edu/vectors/3dcoordinates.htmで、極座標から直交座標 (x、y、z) への変換を取得できます。上記の式を使用して、球面座標 (極座標) をデカルト座標に変換し、ユークリッド距離を計算します。

コンソール アプリで次の c# を使用しました。以下のダミー緯度経度を考慮

       double lat_1 = 18.457793 * (Math.PI / 180);
       double lon_1 = 73.3951930277778 *(Math.PI/180);
       double alt_1 = 270.146;

       double lat_2 = 18.4581253333333 * (Math.PI / 180);
       double lon_2 = 73.3963755277778 * (Math.PI / 180);
       double alt_2 = 317.473;

       const Double r = 6376.5 *1000; // Radius of Earth in metres

       double x_1 = r * Math.Sin(lon_1) * Math.Cos(lat_1);
       double y_1 = r * Math.Sin(lon_1) * Math.Sin(lat_1);
       double z_1 = r * Math.Cos(lon_1);

       double x_2 = r * Math.Sin(lon_2) * Math.Cos(lat_2);
       double y_2 = r * Math.Sin(lon_2) * Math.Sin(lat_2);
       double z_2 = r * Math.Cos(lon_2);

       double dist = Math.Sqrt((x_2 - x_1) * (x_2 - x_1) + (y_2 - y_1) *    
                               (y_2 - y_1) + (z_2 - z_1) * (z_2 - z_1));
于 2018-02-01T10:57:46.243 に答える
3

geopyパッケージまたはVincentyの式を使用して、座標を直接貼り付けることにより、たとえばメートル単位で平面座標間の距離を計算できます。結果がdメートルであるとします。次に、移動した合計距離はsqrt(d**2 + h**2)hメートル単位の標高の変化です。

于 2015-10-13T20:10:37.237 に答える