YouTube | Facebook | X(Twitter) | RSS

度分秒と十進度(十進経緯度)の相互換算

2014/3/17 (月)

地図でよく使われる座標として緯度経度があります。たとえば日本経緯度原点はこのような緯度経度になります。

東経139度44分28.8869秒 北緯35度39分29.1572秒(日本測地系2011)

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

計算フォーム

数値を入力して計算できるフォームです。取り急ぎ数値を確認したい場合に利用してください。南緯・西経は結果にマイナス (-) を掛けてください。

 --> 
 --> 
  

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

60秒 = 1分、60分 = 1度なので、それぞれ割った値を加算して計算します。

十進度 = 度 + (分 ÷ 60) + (秒 ÷ 3600)

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

この計算式で日本経緯度原点の十進度を求めると以下になります。

X:139.7413574722,Y:35.6580992222

Excel 関数

度分秒がセルで分かれている場合

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

緯度と経度を別々の方法で計算する場合

分と秒が0で桁埋めされ、秒の桁数がそろっていることが前提。

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

緯度と経度を 1つの式で計算する場合

分と秒が0で桁埋めされ、秒の桁数がそろっていることが前提。

A1セル:135度22分44.00秒(経度)、もしくは 35度22分44.00秒(緯度)の緯度と経度両方を1つの式で処理する場合(秒の桁数がそろっていることが前提)
十進度 = MID(A1,1,LEN(A1)-10) + (MID(A1,LEN(A1)-8,2)/60) + (MID(A1,LEN(A1)-5,5)/3600)
関数の考え方

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

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

度 = (十進度) の整数
分 = ((十進度 - 度) × 60) の整数
秒 = ((十進度- 度) × 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 pLatLonFormat As ILatLonFormat
  Set pLatLonFormat = New LatLonFormat
  
  Dim dms As Double
  dms = 45.0000000001
  
  Dim dd As Long
  Dim mm As Long
  Dim ss As Double
  
  Call pLatLonFormat.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")&"秒"

ユーザー定義の表示形式を使う方法もあります。

A1セル:十進度の場合
度分秒 = A1/24 と計算し、[セルの書式設定] から、[表示形式] → [ユーザー定義] とし、「[h]"度"mm"分"ss"秒"」と入力

ダウンロード

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

  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

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