十進経緯度・度分秒の相互変換

      2018/02/05

地図でよく使われる座標として緯度経度があります。たとえば東京タワーの場所はこのような緯度経度になります。

東経139度44分43.559秒 北緯35度39分30.888秒(WGS84)

度分秒から受信経緯度への換算

座標は「度(°)」「分(′)」「秒(″)」で表されますが、「度」は十進数で「分」と「秒」は六十進数です。このような異なる位取り記数法をコンピュータで計算するのは困難です。そのため GIS の世界では一般的に「分」と「秒」を「度」に換算した「十進経緯度(十進度)」を用います。

十進経緯度 = 度 + (分 / 60) + (秒 / 3600)

度は東経や北緯で正の値、西経や南緯で負の値を使用して計算します。

この計算式で東京タワーの十進経緯度を XY 座標で求めると以下になります。

X:139.745433,Y:35.65858

Excel 関数

A1セル:度 B1セル:分 C1セル:秒 の場合
十進経緯度 = A1+B1/60+C1/3600

A1セル: 35度22分44.00秒(緯度)の場合
十進経緯度 = LEFT(A1,2) + (MID(A1,4,2)/60) + (MID(A1,7,5)/3600)

A1セル:135度22分44.00秒(経度)の場合 十進経緯度 = LEFT(A1,3) + (MID(A1,5,2)/60) + (MID(A1,8,5)/3600)

十進経緯度から度分秒への換算

「度」は整数部分、「分」は小数点以下と 60 の積の整数部分、「秒」は分の小数点以下と 60 の積となります。

Python

def GetDMS(DecimalDegree):
    degree = int(DecimalDegree)
    minute = int((DecimalDegree - degree) * 60)
    second = ((DecimalDegree - degree) * 60 - minute) * 60
    return str(degree) + "度" + str(minute) + "分" + str(second) + "秒"

print GetDMS(135.5902778)

ArcObjects

ArcObjects を使えばもっと簡単で、ILatLonFormat::GetDMS メソッドで一発取得できます。

Private Function DD2DMS(ByRef DecimalDegree As Double, ByRef Degree As Long, ByRef Minute As Long, ByRef Second As Double, Optional Reverce As Boolean = False)
 '十進経緯から度分秒に変換
 If Reverce = False Then
 Dim pLatLonFormat As ILatLonFormat
 Set pLatLonFormat = New LatLonFormat
 pLatLonFormat.GetDMS DecimalDegree, Degree, Minute, Second
 
 '度分秒から十進経緯度に変換
 Else
 DecimalDegree = Degree + Minute / 60 + Second / 3600
 
 End If
 
End Function
 
Sub GetDMS()
 Dim aa As ILatLonFormat
 Set aa = New LatLonFormat
 
 Dim dms As Double
 dms = 45.0000000001
 
 Dim dd As Long
 Dim mm As Long
 Dim ss As Double
 
 Call aa.GetDMS(dms, dd, mm, ss)
 
 Debug.Print dd, mm, ss
 
End Sub

Excel 関数

A1セル:十進経緯度の場合
度分秒 = INT(A1)&"度"&TEXT(INT((A1-INT(A1))60),"00")&"分"&TEXT(((A1 -INT(A1)) * 60 -INT((A1-INT(A1))60)) * 60,"00.000")&"秒"

ダウンロード

上記の Excel 関数を記述したスプレッド シートです。

 - プログラミング, 基礎知識, ArcGIS , ,