The GIS Professional Group

緯度・経度の 1度はどれくらいの長さがあるのか

2018/10/21 (日)

地球上の緯度 1度、経度 1度は実際どれくらいの長さがあるのでしょうか。これが今回のテーマです。同じネタは他のブログや Yahoo知恵袋などで扱われているのですが、どれも地球を球として計算しているので、ここでは地球を回転楕円体として計算し、1度ずつ厳密に求めてみます。

経度1度間の距離

私は(現在のところ)年に数回 GIS ソフトウェアの実習講座を行っているのですが、GIS は空間参照を理解しなければ正しい使い方ができません。そのため測地系や投影法の説明をする単元を用意しており、その中で毎回こんな質問します。

はださん
下の図を見てください。
緯度0度、つまり赤道上で東経135度から東経136度までの経線間の距離は約111kmです。日本の関西地方付近である北緯35度上で東経135度から東経136度までの経線間の距離は約91kmです。

問題

はださん
では北緯90度上で経度135度から経度136度までの経線間の距離は何キロメートルでしょうか?
...
はださん
大人になると自分から手を挙げて回答するのは恥ずかしいですよね?では4択で手を挙げてください。
1.赤道上の距離と同じだと思う人?
2.赤道上の距離より短いと思う人?
3.赤道上の距離より長いと思う人?

というと、半分くらいが「2.」を選びますが、他の半分はまごまごします。ここで、

はださん
北緯90度ってどこですかね?

というと、半分くらいが

あっ(察し)

という顔になり、

はださん
北緯90度は北極点です。つまり北極点から北極点までの距離なので 0km です。

と答えるとほとんどの人が

なんだそんな簡単な問題か。

という顔をします。

この問題は私の受け持つ講座で延べ 300人ぐらいには質問してきましたが、正解が答えられた人はこれまで 4人しかいません。その 4人は一瞬で「0です。」と答えてくれたのですが、ほとんどの方が地図を専門に仕事をしている訳ではないためか答えられません。中学校の社会科で習ったはずなのに。世の中には地球平面協会という地球が平らだと本気で主張している人たちがいますが、彼らを笑うことはできないのです。

多くの人が答えられない原因は、緯度と経度が平面上で直交しているイメージしか持てないからだと考えます。メルカトル図法がその良い例です。私の質問ではホワイトボードにあえて緯度と経度を直交して書くのですが、このように書かれると地球が丸いことを忘れてしまうようです。


メルカトル図法
Globie
地球は丸いんだよ。僕を見て思い出して。

Google Maps の投影法が変更

そんな認識の問題もあってか、2018年8月3日に Google Maps はデフォルト設定が宇宙から見たように表現される外射図法に変更されました(従来のメルカトル図法で表示することもできます)。こちらの記事では正射図法と結論づけられています。

正射図法で世界を示すと「北緯90度上で経度135度から経度136度までの経線間の距離」は 0m であることがよく分かります。


外射図法

地球は丸いことを改めて認識したところで、冒頭の緯度・経度の 1度はどれくらいの距離があるのか考えてみます。

前提条件

地球の大きさには様々な定義がありますが、今回は赤道半径と極半径が異なる WGS84 楕円体を使用します。

WGS84楕円体
赤道半径:6,378,137m、偏平率の逆数:298.257223563
GCS_WGS_1984 (4326)

回転楕円体における計算式で長さを求めることもできますが、難しい計算は ArcGIS にやらせようということで arcpy という API を使用して計算しました。

経度0度上で北緯0度~90度まで1度ずつの間隔で点を置き、その点から経度を+1度とした2点、緯度は +-0.5度して求めた 2点で「東西・南北における 1度の線分」を作成します。作成した線分の測地線距離を測定します。

緯度・経度で1度、1分の距離と、その場所の測地線距離 1m が何度相当になるかを求めました。測地線距離の説明はこちらの記事をご覧ください。

緯度・経度1度の距離と1mの角距離

緯度経度1度長 (m)緯度1度長 (m)経度1分長 (m)緯度1分長 (m)経度1m角 (度)緯度1m角 (度)
900?0?None?
891949.302111693.60732.48841861.56010.00051300410.0000089531
883897.9983111692.575764.96661861.54290.00025654190.0000089531
875845.4833111690.858497.42471861.51430.00017107230.0000089533
867791.152111688.457129.85251861.47430.00012835070.0000089535
859734.4111685.3748162.241861.42290.00010272850.0000089537
8411674.6236111681.6154194.57711861.36030.00008565590.0000089540
8313611.2206111677.1837226.85371861.28640.00007346880.0000089544
8215543.5895111672.0851259.05981861.20140.00006433520.0000089548
8117471.1309111666.326291.18551861.10540.00005723730.0000089553
8019393.2468111659.9135323.22081860.99860.00005156430.0000089558
7921309.3412111652.8558355.15571860.88090.00004692780.0000089563
7823218.8202111645.1615386.98031860.75270.00004306850.0000089569
7725121.0924111636.8403418.68491860.6140.00003980720.0000089576
7627015.5689111627.9025450.25951860.4650.00003701570.0000089583
7528901.6635111618.3593481.69441860.3060.00003460010.0000089591
7430778.7931111608.2226512.97991860.1370.00003248990.0000089599
7332646.3777111597.505544.10631859.95840.00003063130.0000089608
7234503.8407111586.2197575.0641859.77030.00002898230.0000089617
7136350.6089111574.3809605.84351859.5730.00002750990.0000089626
7038186.1133111562.0033636.43521859.36670.00002618750.0000089636
6940009.7884111549.1022666.82981859.15170.00002499390.0000089647
6841821.0731111535.6936697.01791858.92820.00002391140.0000089657
6743619.4106111521.7943726.99021858.69660.00002292560.0000089669
6645404.2485111507.4213756.73751858.4570.00002202440.0000089680
6547175.0392111492.5926786.25071858.20990.00002119770.0000089692
6448931.2401111477.3265815.52071857.95540.00002043680.0000089704
6350672.3134111461.6419844.53861857.6940.00001973460.0000089717
6252397.7267111445.5582873.29541857.4260.00001908480.0000089730
6154106.9529111429.0952901.78251857.15160.00001848190.0000089743
6055799.4704111412.2734929.99121856.87120.00001792130.0000089757
5957474.7635111395.1134957.91271856.58520.00001739890.0000089771
5859132.3223111377.6364985.53871856.29390.00001691120.0000089785
5760771.6427111359.8641012.86071855.99770.00001645500.0000089799
5662392.2272111341.8181039.87051855.6970.00001602760.0000089814
5563993.5843111323.52061066.55971855.3920.00001562660.0000089828
5465575.229111304.99441092.92051855.08320.00001524970.0000089843
5367136.683111286.26211118.94471854.7710.00001489500.0000089858
5268677.4748111267.34661144.62461854.45580.00001456080.0000089874
5170197.1396111248.27121169.95231854.13790.00001424560.0000089889
5071695.2196111229.05931194.92031853.81770.00001394790.0000089905
4973171.2644111209.73431219.52111853.49560.00001366660.0000089920
4874624.8305111190.31991243.74721853.1720.00001340040.0000089936
4776055.482111170.83981267.59141852.84730.00001314830.0000089952
4677462.7903111151.31781291.04651852.5220.00001290940.0000089967
4578846.3347111131.77771314.10561852.19630.00001268290.0000089983
4480205.7019111112.24331336.76171851.87070.00001246790.0000089999
4381540.4864111092.73841359.00811851.54560.00001226380.0000090015
4282850.2908111073.28681380.83821851.22140.00001207000.0000090031
4184134.7255111053.91211402.24541850.89850.00001188570.0000090046
4085393.4091111034.63771423.22351850.57730.00001171050.0000090062
3986625.9685111015.48721443.76611850.25810.00001154390.0000090078
3887832.0385110996.48371463.86731849.94140.00001138540.0000090093
3789011.2625110977.65031483.5211849.62750.00001123450.0000090108
3690163.2924110959.00971502.72151849.31680.00001109100.0000090123
3591287.7885110940.58441521.46311849.00970.00001095440.0000090138
3492384.4194110922.39681539.74031848.70660.00001082430.0000090153
3393452.8629110904.46881557.54771848.40780.00001070060.0000090168
3294492.805110886.8221574.88011848.11370.00001058280.0000090182
3195503.9408110869.47771591.73231847.82460.00001047080.0000090196
3096485.9741110852.45681608.09961847.54090.00001036420.0000090210
2997438.6175110835.77981623.9771847.2630.00001026290.0000090224
2898361.5928110819.46671639.35991846.99110.00001016660.0000090237
2799254.6306110803.53711654.24381846.72560.00001007510.0000090250
26100117.4705110788.01011668.62451846.46680.00000998830.0000090262
25100949.8614110772.90441682.49771846.21510.00000990590.0000090275
24101751.5613110758.23811695.85941845.97060.00000982790.0000090287
23102522.3372110744.02881708.70561845.73380.00000975400.0000090298
22103261.9655110730.29351721.03281845.50490.00000968410.0000090310
21103970.2317110717.04851732.83721845.28410.00000961810.0000090320
20104646.9309110704.30981744.11551845.07180.00000955590.0000090331
19105291.8673110692.09261754.86451844.86820.00000949740.0000090341
18105904.8544110680.41151765.08091844.67350.00000944240.0000090350
17106485.7152110669.28041774.76191844.4880.00000939090.0000090359
16107034.2822110658.71261783.90471844.31190.00000934280.0000090368
15107550.3973110648.72071792.50661844.14530.00000929800.0000090376
14108033.9117110639.31661800.56521843.98860.00000925640.0000090384
13108484.6862110630.51151808.07811843.84190.00000921790.0000090391
12108902.5913110622.31591815.04321843.70530.00000918250.0000090398
11109287.5068110614.73961821.45841843.5790.00000915020.0000090404
10109639.3221110607.79161827.3221843.46320.00000912080.0000090410
9109957.9362110601.48021832.63231843.3580.00000909440.0000090415
8110243.2576110595.81281837.38761843.26350.00000907080.0000090419
7110495.2045110590.79621841.58671843.17990.00000905020.0000090423
6110713.7047110586.43631845.22841843.10730.00000903230.0000090427
5110898.6955110582.73841848.31161843.04560.00000901720.0000090430
4111050.124110579.70681850.83541842.99510.00000900490.0000090433
3111167.9466110577.34521852.79911842.95580.00000899540.0000090434
2111252.1298110575.65631854.20221842.92760.00000898860.0000090436
1111302.6493110574.64221855.04421842.91070.00000898450.0000090437
0111319.4908110574.3041855.32481842.90510.00000898320.0000090437

北緯 90度における緯度 1度の距離は求めることができますが作成したコードだと 0 で除算することになるので 89 度までの処理としました。

この結果を見ると、以前に書いた 1マイルの距離を求めた記事でも触れたように、厳密には緯度の場所によって緯度 1度の距離も異なることが分かります。緯度1度の長さは極付近で最大となり、赤道へ近づくにつれて微妙に短くなります。経度は赤道が最長で極が 0 となります。緯度1度と経度1度の距離がほぼ等しいのは緯度 5度~ 6度の間ということが分かります。また、以前に書いた地理座標系のデータをそのまま距離に関連する空間解析を行う際に指定するべき Z係数の値ですが、Esri のブログで提示された係数は「"経度" 間 1m 相当の角距離」であることが分かりました。より厳密に係数を求めたい場合はこちらの表が利用できます。

ソースコード

Python ウィンドウにそのまま貼り付けてご利用ください。ArcMap 10.4、AcGIS Pro 1.3、ArcGIS Pro 2.2 で動作確認しております。arcpy.SpatialReference の引数である EPSG 番号を変更して一般的に使用される球体としての地球で計算することもできます。

なお、arcpy を含め、ArcGIS で計測される線分の距離は頂点間となります。同一緯線上では赤道以外、線分の両端の最短距離(測地線距離を求めるための線分)と、緯線の長さは微妙に一致しませんが、経度 1度間では約100km に対して 1m 程度と微々たる誤差だったので無視しました。経度の距離間が長くなると誤差は大きくなるので、より正確に求めたいならば、arcpy.Polyline で生成したポリラインを densify で細かく頂点分割してください。

#coding:UTF-8

# ArcGIS での距離計測
# 地球上の 1度間の測地線距離を計算
# 経度0度、北緯0度~90度を中心とした東西1度、南北1度の測地線距離を計算

# ArcGIS Pro 2.2, ArcGIS Pro 1.3, ArcMap 10.4.1 で動作確認

import arcpy

# WGS84楕円体
# 赤道半径:6,378,137m、扁平率の逆数:298.257223563
# GCS_WGS_1984 (4326)
gcs = arcpy.SpatialReference(4326)

# 天文学における地球半径
# 赤道半径:6,371,000m、扁平率の逆数:0
# Authalic Shpere GCS_Shpere GCS_Sphere (4035)
#gcs = arcpy.SpatialReference(4035)

print("Spatial Reference: {0} ({1})".format(gcs.GCSName, gcs.GCSCode))
print("{}\t{}\t{}\t{}\t{}\t{}\t{}".format("緯度", "経度1度長 (m)".ljust(10), "緯度1度長 (m)".ljust(10), "経度1分長 (m)".ljust(10),
"緯度1分長 (m)".ljust(10), "経度1m角 (度)".ljust(10), "緯度1m角 (度)".ljust(10)))
print("{}\t{}\t{}\t{}\t{}\t{}\t{}".format("90", "0".ljust(10), "?".ljust(10), "0".ljust(10),
"?".ljust(10), "None".ljust(10), "?".ljust(10)))

for lat in range(89, -1, -1):
    # 経度
    point_width_from = arcpy.Point(0, lat)
    point_width_to = arcpy.Point(1, lat)
    polyline_width = arcpy.Polyline(arcpy.Array([point_width_from, point_width_to]), gcs)
    length_width = polyline_width.getLength("GEODESIC")

    # 緯度
    point_height_from = arcpy.Point(0, lat - 0.5)
    point_height_to = arcpy.Point(0, lat + 0.5)
    polyline_height = arcpy.Polyline(arcpy.Array([point_height_from, point_height_to]), gcs)
    length_height = polyline_height.getLength("GEODESIC")

    print("{:0=2}\t{:0=11.4f}\t{:0=11.4f}\t{:0=11.4f}\t{:0=11.4f}\t{:0=11.10f}\t{:0=11.10f}".format(
    lat, length_width, length_height, length_width / 60, length_height / 60, 1 / length_width, 1 / length_height))
  • B!