1

空間データを使用するアプリケーションに取り組んでいます。ここで、重心から点までの距離を見つける必要があります。Javaでマイルを度に変換する方法を知っていますか?

4

4 に答える 4

21

最終編集: Great Circle DistanceGeodesicsを調べて、この質問で実際に求めていたものの複雑さを発見してください。これは確かに私の数学に対する知識からは程遠いものです。

[歴史的な理由から、元の提案を残します。ピースはあなたを助けるかもしれませんが、あなたの質問に直接答えることはありません.]

この質問への回答については、https://stackoverflow.com/a/1253545/1964221を参照してください。

緯度: 1 度 = 110.54 km

経度: 1 度 = 111.320*cos(緯度) km

他の方向に進むには、これができるかどうか疑問に思います (私の代数は錆びています):

緯度: 1 km = 1 度 / 110.54 km
経度: 1 km = 1 度 / (111.320*cos(緯度) km)

応用

あなたの距離は常に厳密に東西または南北ですか? もしそうなら、あなたは言うことができるはずです:

Integer latTraveledMiles = 100;
Double latTraveledKM = 100 * 0.621371;
Double latTraveledDeg = (1 / 110.54) * latTraveledKM;

また

Double currentLat = 74.0064;
Integer longTraveledMiles = 100;
Double longTraveledKM = 100 * 0.621371;
Double longTraveledDeg = (1 / (111.320 * Math.cos(currentLat))) * longTraveledKM;

おそらく、南北方向と東西方向の両方の距離を知る必要があります(これを「単純ではない」の領域に取り入れます)。ピタゴラスの定理を見ることができます。「長い側面」を知っています。三角形の (c^2) と経度 (a^2) と緯度 (b^2) を計算できます。

前のコード スニペットの一部を適用して、
c = sqrt(a^2 + b^2) を計算できるはずです。

幸運を。

于 2013-01-15T18:27:51.523 に答える
5

これが本当に簡単な質問である場合、緯度と経度を無視して、半径と 2 点の間の角度を調べて、2 点を含む大円に沿って、2 点間の距離が m マイルになるようにします。

わかりやすくするために、地球は球形であると仮定して、答えが場所に依存しないようにする必要があります。平均半径 3,958.761 マイルを使用しています。

1 ラジアンは長さ 3,958.761 マイルの線の角度なので、長さ m マイルの線の角度は m/3,958.761 ラジアンです。度単位の角度が必要な場合は、Math.toDegrees を使用します。

于 2013-01-15T19:21:22.507 に答える
2

距離を度で表すことは、地球上のすべての位置で度が表す距離が同じではなく、緯度と経度で異なる方法で表されるため、誤ったアプローチです。

例:赤道の経度1°は約70マイルですが、北極周辺は数フィートです。

緯度は地球の表面上では変化しませんが、子午線または平行線に沿っていない距離はどうでしょうか。あなたはそれらをどの尺度で表現しますか?

于 2013-01-15T18:22:58.813 に答える
2

dwight-degroff による回答は素晴らしいものですが (おかげで助かりました)、1 つのミスタイプが含まれていますが、これはもちろん重要性が非常に低いものです。より正確にしたい場合 (たとえば、小数点以下の桁数が多いソースからの外部データに基づいてテストを準備している場合)、次のようにする必要があります。

緯度: 1 km = 1 度 / 110.574 km

それ以外の:

緯度: 1 km = 1 度 / 110.54 km

したがって、緯度の場合は次のようになります。

    Integer latTraveledMiles = 100;
    Double latTraveledKM = 100 * 0.621371;
    Double latTraveledDeg = (1 / 110.574) * latTraveledKM;

実際には、経度は 111.320 ではなく 111.319 なので、次のようになります。

    Double currentLat = 74.0064;
    Integer longTraveledMiles = 100;
    Double longTraveledKM = 100 * 0.621371;
    Double longTraveledDeg = (1 / (111.319 * Math.cos(currentLat))) * longTraveledKM;

ただし、どちらの修正も無視できる場合があります。

于 2016-04-18T11:29:33.350 に答える