MySQLのSpatial(GIS)機能をもっと充実させたい ~ MyNA望年会2025LT
by
sakaik
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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の力を借りてないので結構難しそ う