MySQL2021~地理情報(spatial)機能の進化

この記事は、『RDBMS-GIS(MySQL,PostgreSQLなど) Advent Calendar 2021』の1日目のエントリーです。


2021年のMySQLは、以下の5つのバージョンがリリースされました。

MySQL 8.0.23 (2021/01 リリース)
MySQL 8.0.24 (2021/04 リリース)
MySQL 8.0.25 (2021/05 リリース)
MySQL 8.0.26 (2021/07 リリース)
MySQL 8.0.27 (2021/10 リリース)

全体として、地理情報機能(spatial/GIS)の観点からは、どちらかというと地味な進化の一年だったという印象でした。各バージョンでの進化を以下にまとめます。


MySQL 8.0.23 (2021/01 リリース)

ST_HausdorffDistance() 関数と、ST_FrechetDistance() 関数が追加されました。
それぞれ、ハウスドルフ距離とフレシェ距離を求める関数なのですが、正直なところ私も使い所がよくわかっていません。わからないなりに調べながら、とりあえず挙動を紹介してみたのが、本ブログの以下の記事になります。

https://sakaik.hateblo.jp/entry/20210227/try_mysql_frechetdistance_and_haussdorffdistance

MySQL 8.0.24 (2021/04 リリース)

 GIS的には、今年最大の進化となったバージョンです。4つの関数の追加と、既存関数のGISへの拡張が行われました。

 追加されたのは以下の4つの関数。

ST_LineInterpolatePoint()
ST_LineInterpolatePoints()
ST_PointAtDistance()
ST_Collect()

最初の3つは、指定した条件に従ってLINESTRING上の経過点を返す関数です。本ブログでは以下の記事で紹介しました。
https://sakaik.hateblo.jp/entry/20210501/mysql_spatial_new_functions_8024_1

ST_Collect() は、POINTなどの単一型を、MULTIPOINTなどのマルチ型へとまとめる集約関数です。以下の記事で紹介しました。
https://sakaik.hateblo.jp/entry/20210512/mysql_spatial_new_functions_8024_3_ST_Collect


 さらに、MySQL 8.0.24では、CAST()、CONVERT()の2つの既存関数が、Spatial(GIS)型も扱えるよう拡張されました。この拡張により、POINT/LINESTRING/POLYGON および各マルチ型の各型どうしで変換できるパターンが格段に拡がりました。
 詳しくは、本ブログの以下の記事を参照ください。
https://sakaik.hateblo.jp/entry/20210515/mysql_spatial_new_functions_8024_4_CAST_Function

リリースに先立って、リファレンスマニュアルに機能変更の記述が加えられたことを受けての「超先出し(期待記事)」は以下のリンクとなります。
https://sakaik.hateblo.jp/entry/20210123/mysql_spatial_cast_function_in_8_0_24


MySQL 8.0.25 (2021/05 リリース)

 MySQL 8.0.24 に問題があったとのことで、緊急リリースです。GIS関連機能の変化はありません。


MySQL 8.0.26 (2021/07 リリース)

 いままで平面座標系のみを扱うことができた ST_Buffer()、ST_Difference()、ST_Union() の各関数が、多くのSRSに対応しました。平たく言うと「丸い地球」に対応しました(平たく言ったつもりなのに丸くなっちゃった)。
 あと、内部で使っていた関数が開放後のメモリを参照しちゃってた問題が、このバージョンで直されたっぽい。

MySQL 8.0.27 (2021/10 リリース)

 いままで平面座標系のみを扱うことができた ST_SymDifference()、ST_Intersection()の両関数が、他のSRSにも対応しました。平たく言..(略)



まとめ

 以上見てきたように、2021年のMySQL spatial(GIS)は、いくつかの関数追加と、いくつかの関数がSRS対応した、という進化でした。PostGIS並の関数充実に到達するために、もっと派手に関数が追加される1年になると予想していたので、ちょっと拍子抜けしたというのが正直な感想です。
 とは言え、放置されているわけではなく着実に進化はしているので、2022年も引き続きMySQLのspatial機能の変化を楽しみに、注目していきたいと思います。関係ないけど、2022年ってなんか文字集合っぽくて格好良いですね。

f:id:sakaik:20211130225559p:plain:w1