以下の内容はhttps://sakaik.hateblo.jp/entry/20260222/STX_dms2deg_STX_deg2dms_funcより取得しました。


MySQL GIS拡張関数: STX_dms2deg, STX_deg2dms_*

MySQL Spatial Functions Plugin、関数を動作確認して紹介するシリーズ。度分秒を変換する関数が欲しかったので追加しました。

STX_dms2deg(d, m, s)

 度、分、秒の数字を与えて、小数点の度の数値へ変換する機能です。GISツールどこにもそんな機能はない(と思う)のですが、私が頻繁に使うので、関数として追加することにしました。

STX_deg2dms_deg/_min/_sec (d)

 小数点表示の「度」の数値を度分秒に変換する関数です。3つの値を同時に返すことはできないので、それぞれの値を返す3つの関数にしました。度、分は整数、秒は(必要であれば)小数付きで返ります。

動作紹介

  • 度分秒を与える(分と秒がゼロのときは度の値が返ってくることの確認)
mysql> SELECT STX_dms2deg(135,0,0);
+----------------------+
| STX_dms2deg(135,0,0) |
+----------------------+
|                  135 |
+----------------------+
1 row in set (0.001 sec)
  • 度分秒を与える(秒がゼロのとき。30分なので0.5度と正しい値が加わっている)
mysql> SELECT STX_dms2deg(135,30,0);
+-----------------------+
| STX_dms2deg(135,30,0) |
+-----------------------+
|                 135.5 |
+-----------------------+
1 row in set (0.000 sec)
  • 度分秒を与える(すべての値)
mysql> SELECT STX_dms2deg(135,30,30);
+------------------------+
| STX_dms2deg(135,30,30) |
+------------------------+
|     135.50833333333333 |
+------------------------+
1 row in set (0.000 sec)
  • 度分秒を与える(秒に小数点があってもOK)
mysql> SELECT STX_dms2deg(135,30,10.1234);
+-----------------------------+
| STX_dms2deg(135,30,10.1234) |
+-----------------------------+
|          135.50281205555555 |
+-----------------------------+
  • 度分を与える(もともと度分で持っている値(Garmin eTexのような)は度分だけを与えて実行もできる)
mysql> SELECT STX_dms2deg(135,30.1234);
+--------------------------+
| STX_dms2deg(135,30.1234) |
+--------------------------+
|       135.50205666666668 |
+--------------------------+
1 row in set (0.000 sec)
  • 上の例は秒にゼロを与えても構わない(引数自体を省略しても構わない)。値が同じであることの確認。
mysql> SELECT STX_dms2deg(135,30.1234,0);
+----------------------------+
| STX_dms2deg(135,30.1234,0) |
+----------------------------+
|         135.50205666666668 |
+----------------------------+
1 row in set (0.000 sec)
  • 単なる計算なので、分や秒が60未満である必要はまったくない。120分=2度 として正しく計算される
mysql> SELECT STX_dms2deg(135,120,0);
+------------------------+
| STX_dms2deg(135,120,0) |
+------------------------+
|                    137 |
+------------------------+
1 row in set (0.000 sec)
  • 逆の変換。135.5度が 135度30分になることを確認
mysql> SELECT STX_deg2dms_deg(135.5), STX_deg2dms_min(135.5), STX_deg2dms_sec(135.5);
+------------------------+------------------------+------------------------+
| STX_deg2dms_deg(135.5) | STX_deg2dms_min(135.5) | STX_deg2dms_sec(135.5) |
+------------------------+------------------------+------------------------+
|                    135 |                     30 |                      0 |
+------------------------+------------------------+------------------------+
1 row in set (0.000 sec)
  • 上のほうで実施したものの逆変換。135度30分10.1234秒だが計算誤差が発生している
mysql> SET @d=135.50281205555555;
mysql> SELECT STX_deg2dms_deg(@d), STX_deg2dms_min(@d), STX_deg2dms_sec(@d);
+---------------------+---------------------+---------------------+
| STX_deg2dms_deg(@d) | STX_deg2dms_min(@d) | STX_deg2dms_sec(@d) |
+---------------------+---------------------+---------------------+
|                 135 |                  30 |  10.123399999986304 |
+---------------------+---------------------+---------------------+
1 row in set (0.000 sec)


.




以上の内容はhttps://sakaik.hateblo.jp/entry/20260222/STX_dms2deg_STX_deg2dms_funcより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14