連載 [第1回] :
  MySQLで学ぶGIS入門

ちきゅうは丸い ー地球上の位置情報を示す「度」の基本を学ぼう

2025年9月25日(木)
坂井 恵 (さかい けい)
第1回の今回は、位置情報を示すデータの1つである「度表記」について、その基礎知識とMySQLでの表現方法について解説します。

位置情報データの時代がやってきた

コンピュータ上で取り扱ったり管理したりするデータの種類は年々拡がっています。その中で近年注目されているものの1つが位置情報に関するデータです。線路や道路の線、土地の形、人流データのような人が居る地点などがあります。これらのデータを一般に「地理情報」と呼びます。

本連載では、様々な話題を通して、MySQLで地理情報を扱うために必要な知識をアラカルトで紹介していきます。「なぜMySQLなのか?」と言うと、それは筆者の「推しデータベース」だからです。ただし、MySQLの機能を使いながら説明はしていきますが、特にMySQLに興味がない方でも地理情報データに関する様々な知識を得られるような趣向になっているので、楽しんでお読みいただければと思います。

MySQLで扱う位置情報

MySQLには地球上の位置情報を扱うための専用の仕組みが用意されています(詳しくは第2回で解説します)。位置情報というのは要するに「座標」で表される情報のことですから、ちょっとした計算のルールを知っていれば、わざわざ専用の仕組みを作るほどでもないように感じるかもしれません。

例えば、座標(3,4)と(7,6)の間の距離(図1(a))を知りたければ、ピタゴラスの定理を使って、次のような数式で計算できます。

$$\sqrt{(7-3)^2 + (6-4)^2} \; = \, \sqrt{4^2 + 2^2} \: = \: \sqrt{20 } \: ≒ 4.47$$

ところが、地球上の2点間の距離と言うと、少し状況が異なります。先ほどのピタゴラスの定理は平面座標(デカルト座標)上で成立するものですが、現代人たる私たちの認識として地球は平らではありません。つまり、曲面に沿った長さを求める必要があります(図2(a)(b))。この計算は非常に複雑で、先ほどの計算式のように「ちょっと自分でやってみよう」というには荷が重いものです。

そこで、こういった計算を行うために提供された専用の機能(俗に「GIS機能」と呼んだりします)が力強い味方となります。GIS機能はMySQLの専売特許というわけではなく、他のRDBMSにも搭載されていますし、そもそもRDBMSではなく様々なプログラム言語から使用するためのライブラリが公開されていたりもします。

位置の基本は緯度経度

地球上の位置を表すには様々な方法があります。狭いエリアであれば、土地勘のある人同士の「一本松の下」は場所を特定するための十分な情報となり得るでしょう。仲間うちならば「いつもの居酒屋で」で場所を特定できるかもしれません。とはいえ、このような狭い範囲の共通のコンテキストを持たない人にも正確な場所を伝えるための手段が必要です。その中の1つが「緯度」と「経度」です。

緯度と経度は誰もが知っているようで、実はあまりきちんとは知られていないものです。本連載でも、何度か取り上げていきたいと考えています。

緯度と経度の色々

緯度と経度の表し方はいくつかあります。例えば、東京駅の緯度と経度は次のように表されます。

北緯 35度40分52秒3272(または 35度40分52.3272秒)
東経 139度46分1秒6320(または 139度46分1.6320秒)

「度」と「分」と「秒」を使用したこの表現方法は、すでにご存じの方も多いでしょう。これをここでは「度分秒表記」と呼びます。このほか、「度」と「分」のみを使用した「度分表記」があります。同じ緯度経度を度分表記で表すと、次のようになります。

北緯 35度40.87212分
東経 139度46.02720分

度分表記は比較的目にすることが少ないかもしれません。筆者が愛用しているGPSロガー(GARMINの「etrex 20x」)では度分表記となっています。

もう1つ「度表記」を紹介します。度表記は「度分秒」「度分」のように複数の単位を使った場合と比べて、単位が「度」1つでシンプルに表現できています。

北緯 35.681202度
東経 139.767120度

この度表記は、MySQLをはじめとして多くのGISツールで使用されています。例えば、Googleマップではある地点を表示したときのURLに、この度表記での緯度経度が表示されていることが分かります。

(地図データ ©Google)

1度は60分、1分は60秒であることを利用すれば、これらの表記は簡単に変換できます。電卓を使って変換したいところですが、一応「MySQLの連載」ということになっているので、MySQLを使って計算してみましょう。ここでは、度表記のデータがあるときに、それを度分表記や度分秒表記に変換する例を示します。

・テーブルを作成して「度」のデータを登録
mysql> CREATE TABLE t (degree DOUBLE);
mysql> INSERT INTO t VALUES ('139.767120');

mysql> SELECT degree  FROM t;
+-----------+
| degree    |
+-----------+
| 139.76712 |
+-----------+
1 row in set (0.000 sec)

・度分に変換
度は整数部分を採用、分は度以外の部分に60をかけたもの

mysql> SELECT floor(degree) degree, degree*60%60 min  FROM t;
+--------+-------------------+
| degree | min               |
+--------+-------------------+
|    139 | 46.02720000000045 |
+--------+-------------------+
1 row in set (0.000 sec)

・度分秒に変換
度は整数部分を採用、分は度以外の部分に60をかけたものの整数部分、秒は度分以外の部分に60をかけたもの

mysql> SELECT degree, floor(degree) deg, floor(degree*60%60) min, degree*60*60%60 second  FROM t;
+-----------+------+------+--------------------+
| degree    | deg  | min  | second             |
+-----------+------+------+--------------------+
| 139.76712 |  139 |   46 | 1.6320000000414439 |
+-----------+------+------+--------------------+
1 row in set (0.000 sec)

さまざまな計算方法がありますが、ここでは「度や分が60ごとに周期している」ことに着目し、剰余を使用してシンプルな式で表せるように工夫しています。浮動小数点計算による丸め誤差が発生していますが、そこは気にしないということで。

【コラム】秒はなぜ「second」なのか

英語では、度は「degree」、分は「minute」、秒は「second」と呼びます。でもsecond(=2nd;2番目の)があるのに「first」がないのはなぜでしょう。その疑問は、時刻や角度が名付けられた歴史を知ることで解決します。

まず、時刻における「時」や角度における「度」が基本単位としてあります。これよりも細かい時間や角度(以後「角度」)を扱うようになったときに基本単位を60分割した単位を作り、「細かく分けたもの」という意味を持つ「minute」と名付けられました。さらにminuteを60分割して「2番目の細かいもの」という意味で「second minute」と名付けられました。最初のminute(分割)はいわばfirst minute(ラテン語で minuta prima)で、2番目のさらなるminuteはsecond minute(同minuta secunda)だったのが、分は単に“minute”、秒は単に“second"と呼ばれるようになったという経緯です。

度分秒の表記方法は、上で説明したように「35度40分52秒」と漢字を使って書く方法のほか「35°40′52″」のように記号を用いて記述することもできます。「°」「′」「″」がそれぞれ 度、分、秒に相当しますが、「′」と「″」のどちらが分だったか秒だったか、混乱してしまう人もいるのではないでしょうか(昔の私がそうでした)。secondが“2番目(2nd)”の意味だと知ってからは、プライム(′)記号が2つ重なった「″」が秒であることを間違えなくなりました。

著者
坂井 恵 (さかい けい)
有限会社アートライ 代表取締役
MySQLや地理情報系などのコミュニティ活動を通して様々な情報に触れるのが好き。データベースについては、業務や世の中の流れが見える「データそのもの」や「その変化」に強い関心を持っているが、最近はPG-Stromのプロジェクトに参加したこともあり、改めて性能評価への関心も高まっている。

連載バックナンバー

データベース技術解説
第1回

ちきゅうは丸い ー地球上の位置情報を示す「度」の基本を学ぼう

2025/9/25
第1回の今回は、位置情報を示すデータの1つである「度表記」について、その基礎知識とMySQLでの表現方法について解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています