MySQLのSpatial(GIS)機能をもっと充実させたい ~ MyNA望年会2025LT
by
sakaik
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
MySQLの Spatial(GIS)機能を もっと充実させたい 2025/12/19 日本MySQLユーザ会 坂井 恵 ( @sakaik) 日本MySQLユーザ会 望年LT大会2025
Slide 2
Slide 2 text
自己紹介 (略)
Slide 3
Slide 3 text
閑古鳥アドベント毎年やってます • RDBMS-GIS • 毎年閑古鳥 • たぶん今年で最後にします
Slide 4
Slide 4 text
MySQLのSpatial機能 • わかりやすくいうと「GIS機能」 • 「地理情報」とか「空間情報」という言い方をするときも • MySQL 8.0 で「丸い地球」に対応した本格機能に • 類似機能は他のDBMSにもだいたいある • OSSとしての先行は PostgreSQLのExtension である PostGIS
Slide 5
Slide 5 text
MySQL vs PostGIS • PostGISのほうが歴史が長い • 積み上げられた実績もけた違いに多い • 事実上のデファクト(重言)、事実上唯一の選択肢 • PostGISのほうが機能が充実 • 関数の数を見ても全然桁が違う • 特に空間分析系の関数が充実
Slide 6
Slide 6 text
MySQLのSpatial機能のいいところ • 拡張機能ではなく本体の標準機能 • 追加インストールが不要 • バージョンアップ時にも本体のみのupdateでOK • 拡張機能ではなく本体の標準機能 • 拡張機能ではなく本体の標準機能
Slide 7
Slide 7 text
MySQLのSpatial機能のいいところ • 地理座標と投影座標をシームレスに扱えるのは、いいところな んじゃないかな、、と思っています • (SRS_IDにより判別可能) • (もう少し正確に言うと、SRS_IDにより ST_SPATIAL_REFERENCE _SYSTEMSテーブル上にある定義を見て判別)
Slide 8
Slide 8 text
MySQLのSpatial機能の足りない所 • とにかく関数が少ない! • POINT, LINESTRING, POLYGONの管理や判別、距離等の、通 常使うと思われる関数群は充分にある • 分析関数を中心に、まだまだ不足している。(集約系も弱い気 がする、、ちょっと詳細追い切れていませんが) • 出力系は致命的に足りない。ST_AsXXXX()系
Slide 9
Slide 9 text
MySQLのspatial機能の実装 • MySQL 5.7 で、Boost::Geometryライブラリを使用してSpatial機 能をとりあえず再実装 • MySQL 8.0で「丸い地球(回転楕円体)上の位置」を表せるよう に拡張。関数名もSQL標準に沿った ST_*()という名前に統一 → 現在のMySQLのspatial機能の処理は Boost::Geometryライブラリに任せている
Slide 10
Slide 10 text
大事なこと spatial機能の処理は Boost::Geometryライブラリに任せている MySQLの関数がまだまだ足りない spatial機能の処理は Boost::Geometryライブラリに任せている MySQLの関数がまだまだ足りない spatial機能の処理は Boost::Geometryライブラリに任せている
Slide 11
Slide 11 text
いいこと思いついた! Boostライブラリを 呼んでるだけなら、 簡単に 関数追加 できるんじゃね?
Slide 12
Slide 12 text
できました • ST_Perimeter() 関数。 Polygonの周長を返す
Slide 13
Slide 13 text
実行例
Slide 14
Slide 14 text
実行例(測地系付)
Slide 15
Slide 15 text
spatial関数追加のポイント • 引数と戻り値 • 何を受け取り、何を返すのか • SRS対応か非対応か • 測地系に依らず計算できるものもある • LINESTRINGの結合や中心座標算出など • 長さに関するものは基本的にSRSを考慮した計算が必要 → 似たような特徴を持つ既存関数を探す
Slide 16
Slide 16 text
コントリビュートしてみた Bug #119566 • https://bugs.mysql.com/bug.php?id=119566 • よかったら Affects me を!
Slide 17
Slide 17 text
Thanks • コントリビュート出してみるにあたって • 2年前のけんつさんのブログ • 現代のyoku0825さんの助言 に助けられました。 ありがとうございました。 https://rabbitfoot141.hatenablog.com/entry/2023/12/06/170449
Slide 18
Slide 18 text
タイミングが悪かった • 年末なので(?)OCAの申請の最終承認の連絡がまだ来ない • 年末なので(?)ステータスが "Open" のまま • 迅速に取り込んでもらえたとしても 1月のリリースには入らない • 4月のリリースは 新LTS(9.7LTS!!!)なので、おそらく Innovation Releaseはされない • 最短で7月かぁ。。。。 そもそも昨今の対応の遅さ(悪さ)から、完全に無視されたま ま終わってしまう可能性も、心配し始めました...
Slide 19
Slide 19 text
今後 • この方法で受け入れてもらえることが分かれば、他の関数も実 装してみたい • 出力系(ST_As*() )は Boostの力を借りてないので結構難しそ う