はじめに
前回は、MySQL を使って「経度1度の長さ」を 確認してみました。今回は、「緯度1度の長さ」について考察してみましょう。
緯度は均等?
前回の地球の模式図をもう一度見てみましょう。
北極と南極とを結ぶ経線上の位置が「緯度」です。言い換えると、赤道からどれくらい北極または南極方面に離れているかを表しているのが緯度です。タマネギの輪切りのように場所によって周長が変化する経度とは異なり、経線は常に地球の大円を描くので、どの部分の1度を切り取っても「緯度1度」の長さは同じになるように思えます。実際はどうなのでしょうか。
地球のモデルが「完全な球体」であるならばそれは正しいのですが、実際の地球のモデルは「回転楕円体」として表されます。実際の扁平率は約298分の1なので、図はかなり誇張して描いています。このとき、緯度1度の距離はどのようになっているのでしょうか。
緯度1度は高緯度ほど長い?短い?
地球が球体であるならば、緯度1度は「地球上のどの場所でも等しくなる」はずです。しかし現在日本で主に使われるWGS84やJGD2011などの測地系において、地球は回転楕円体として表されます。回転楕円体の場合、弧の長さはどうなるでしょうか。下図のように地点Aや地点Bの緯度を考えてみると、高緯度ほど弧が中心(重心)に近くなりますから、1度あたりの長さは短くなりそうな気がします。
では、実際にMySQLで試してみましょう。経度はどこを取っても良いので、ここでは東経135度で固定してみました。まずは赤道付近。東経135度線上で、北緯(南緯)0度から北緯1度までの距離を求めています。
mysql> SELECT ST_Distance(
-> ST_GeomFromText('POINT(0 135)', 4326),
-> ST_GeomFromText('POINT(1 135)', 4326)
-> ) d;
+--------------------+
| d |
+--------------------+
| 110573.13812782218 |
+--------------------+
1 row in set (0.000 sec)次に、より高緯度である日本付近を代表して、北緯35度から36度の距離を求めてみます。
mysql> SELECT ST_Distance(
-> ST_GeomFromText('POINT(35 135)', 4326),
-> ST_GeomFromText('POINT(36 135)', 4326)
-> ) d;
+--------------------+
| d |
+--------------------+
| 110950.61420449754 |
+--------------------+
1 row in set (0.000 sec)同様に、より高緯度である北緯88度から89度のあいだの距離はどうなるでしょうか。
mysql> SELECT ST_Distance(
-> ST_GeomFromText('POINT(88 135)', 4326),
-> ST_GeomFromText('POINT(89 135)', 4326)
-> ) d;
+--------------------+
| d |
+--------------------+
| 111691.92833060957 |
+--------------------+
1 row in set (0.000 sec)まとめると、下表のようになります。高緯度ほど1度の長さが長くなり、「高緯度ほど緯度1度は短い」とした予想とは異なる結果を得ました。これはなぜでしょうか(実は、これは筆者が地理情報の世界に興味を持った初期の頃に悩み、解決までに半年以上かかったテーマなのです)。
表:緯度別、緯度1度の長さ
| 緯度 | 1度の長さ |
| 北緯89度 | 約111.69km |
| 北緯35度 | 約110.95km |
| 北緯0度 | 約110.57km |
地心緯度と地理緯度
答えをズバリ書いてしまうと「緯度の考え方が異なっているから」ということになります。みんなが使っている地図や測量の世界では、実は緯度というのは、上図に示したような地球中心(重心)からの角度ではないということです。
地図や測量の世界で使われる緯度は「楕円体面から垂直に下ろした線(法線)が赤道面と交わる角度」として定められています。低緯度である地点Aでは下図のようになります。
より高緯度の地点Bの例は下図です。赤道面と角度をなす場所がまったく異なることが分かるでしょう。
もちろん、これはかなり誇張した楕円として描いているので、実際にはもっと重心近くで、ほんの少しずつずれた場所で赤道面に接することになります。
冒頭で紹介した中心(重心)からの角度を「地心緯度」、地図で使われる法線による角度を「地理緯度」と呼びます。
MySQLで緯度の場所ごとの「緯度1度」を確認してみよう
前回紹介した CTE(Common Table Expression)を使って、緯度ごとの「緯度1度」の長さを算出してみましょう。赤道付近では110.6km、極付近では111.7kmと緩やかに変化していることが分かります(「北が上でないと気持ち悪い」という人は、ORDER BY 句を使って、北→南の順序で結果を得るよう工夫しましょう)。
mysql> WITH RECURSIVE lats AS (
-> SELECT -89 AS lat
-> UNION ALL SELECT lat + 15 FROM lats WHERE lat < 75
-> )
-> SELECT lat,
-> ST_DISTANCE(
-> ST_GeomFromText(CONCAT('POINT(',lat,' 135)'), 4326),
-> ST_GeomFromText(CONCAT('POINT(',lat+1,' 135)'), 4326)
-> ) d
-> FROM lats;
+------+--------------------+
| lat | d |
+------+--------------------+
| -89 | 111691.92833060957 |
| -74 | 111602.37988730613 |
| -59 | 111387.02777567226 |
| -44 | 111103.57542010397 |
| -29 | 110827.97365037305 |
| -14 | 110634.06973810866 |
| 1 | 110573.82008001186 |
| 16 | 110663.36852331436 |
| 31 | 110878.72063494986 |
| 46 | 111162.17299051676 |
| 61 | 111437.77476024814 |
| 76 | 111631.67867251113 |
+------+--------------------+
12 rows in set (0.000 sec)経度1度は場所によって大きく異なりますが、緯度については概算に使用するときなどのために「緯度1度はおよそ111km」と覚えておいて損はないでしょう。
地理情報の数字を実感として理解する最良の方法は、その地点や距離、角度などを体感することです(諸説あります)。前回と今回で取り上げた「1度」の距離も、ぜひ自分の足で体験してみましょう。そのために最良の場所が、つくば市の「地図と測量の科学館」にあります。
科学館の屋外展示では日本列島の球体模型図があり、実際に上に乗って地球の丸さを体験できます。
この球体模型の周りに「地球上の1秒の距離を歩いてみよう!」というコーナーがあります。この地点の東西(経度)1秒=25.01mと、南北(緯度)1秒=30.82m が示されていて、実際に歩くことができます。30往復すれば1分を、1800往復すれば1度を体験できますね。
