回答:
Microsoftのコードでさえバグがあるため、変換用の正しい疑似コードを提供すると便利な場合があります。
小数度xを度(d)、分(m)、および(小数)秒(s)に変換するには、次のようにします。
Declare d, m as integer, s as float
If x < 0, then sign = -1 else sign = +1
Let y = Abs(x) ' Work with positive values only.
Let d = Int(y) ' Whole degrees. Floor() is ok too.
Let z = 60*(y - d) ' The fractional degrees, converted to minutes.
Let m = Int(z) ' Whole minutes.
Let s = 60*(z - m) ' The fractional minutes, converted to seconds.
Assert sign*(((s/60) + m)/60 + d) == x ' This confirms a correct result.
Return (sign*d, m, s)
署名された学位を返す代わりに、最後にN / SまたはE / Wを示すことができます。
If x is a latitude, then
If sign == -1 then hemisphere = "S" else hemisphere = "N"
Else {x is a longitude}
If sign == -1 then hemisphere = "W" else hemisphere = "E"
End if
Return (d, m, s, hemisphere)
必要に応じて、sを整数に丸め、質問で指定された形式に一致するように結果をフォーマットできます。
このpythonライブラリを見てくださいhttps://github.com/ewheeler/PyDecimalDegrees
または、Perl http://www.movable-type.co.uk/scripts/latlong.htmlに基づいたこのオンライン/オフラインスクリプト
それはあなたを助けるかもしれません。ちょうど試して。 http://transition.fcc.gov/mb/audio/bickel/DDDMMSS-decimal.html
C#のStackOverflowでこれを実行するための素晴らしいシンプルなクラスがあります。https: //stackoverflow.com/questions/4504956/formatting-double-to-latitude-longitude-human-readable-format