JXUC 2026 & XGRIDS Meetup vol.2 参加

XGRIDSのPortalCamに一目惚れしてしまったのが4月末のジオ展のこと。
sakaik.hateblo.jp


その「直後」とも言える5月15日に、Japan XGRIDS Users Community 2026 (JXUC)とXGRIDS Meetup vol.2 が開催されたので参加してきました。そんな毎月開催されているわけではない大イベントが、こんな直近のタイミングで開催されるなんて、ツイてる! 開催ありがとうございます。

jxuc.connpass.com
jxuc.connpass.com

この2週間

 ジオ展で関心を持った経緯は上のジオ展のブログを見てもらうことにして、あれから2週間、色々調べまくりました。空いている時間はすべてXGRIDSに捧げたと言っていいくらい。 各社が公開してくれているサンプル画像(というかモデル?)やMeetup Vol.1の動画はほぼ全てと言ってよいくらい見ましたし、PortalCamを買ったらその購入代金くらいは稼ぎたい*1という目標のもと、想定顧客や価格プラン、提供できるメニューについて検討したりと、非常に濃厚な2週間でした。もう買ったつもりになってる(笑)。

展示

 今回の目玉は,今月発表されたばかりの新機種 K2 でした。PortalCamは点群データを出力できない(ということを今回の展示で知ったのですが)のに対して、より精度の高い点群データを得られる「測量機器」的な位置づけの最新機種。 先代 K1 と比べて価格は安くなるしスペックはあがるしと良いところだらけのもの。先代よりも安いとは言っても、私が欲しいと思っていたPortalCamと比べると倍くらいの予算を用意する必要があるシロモノなので、この瞬間に私の目標が「PortalCamで購入代金ぶんを越えて稼ぐだけでなくそれを越えて K2(またはその時点の後継最新機種)買い増しできるぶんまで稼ぐ」に変わったのでありました。まぁお客さん次第ではありますが K2の能力を手に入れることで得られるお仕事に拡がりそうかどうかを、まずは PortalCamで検証していければと考えています。

 という最新情報を尻目に、私のお目当ては PortalCam情報。気になっていたポイントをブースで色々と教えていただきました。ホロラボさん、アクティブリテックさん、ありがとうございました。誰でも高品質なものを短時間で、がウリの機材ではありますが、やはり綺麗に取るコツ、失敗するコツ(コツとは言わないか)はあるようで、「私が撮ってもかなりきれいなものが撮れるんですが、○○さんが撮ると全然違うんですよ!」という言葉が印象的でした。自分のところのサービスにしようとするなら、ある程度の技術の差が出ないと差別化ができないので、頑張って「sakaikが撮るときれいなんだよね」と言ってもらえるような技術を身につけていきたいと思います。
 購入に向けて、そして購入後の扱いや情報収集について、気になっていたポイントがほぼ全て解消した(「できないことが明らかになった」のも含めて)ので、いよいよ私もこちらの世界のお仲間に入れていただければと思います。どうぞ先達のみなさま、そして興味を持っているこれからのみなさま、よろしくお願いします。

トーク

 展示の部で書きすぎて既に力尽きた(時間切れ)ので、各個の内容は多分誰かが書いてくれるであろう「レポート」に期待して、全体的な印象を。

 私にとっては、突然興味を持って突然入り込んできた世界なので、(頑張って公開資料は読み込んできたとは言え)知らないことだらけの状態でしたが、界隈の動向や歴史から、市場、実際のアウトプットや失敗例など、幅広く盛り沢山で、とても勉強になりました。一応システム屋さんなので、きれいな映像を撮った後の処理に何ができるのか、どういう活用をされているのか(「きれいに見えるね」のその先)に強く興味があるのだな、ということを認識できました。
 パネルディスカッションも、この界隈を牽引されている皆さんの持つ感覚を披露していただいて、とても刺激的な時間でした。XGRIDSについて「どの業界にも刺さる」「現場まるごと撮れるが当たり前に」という言葉が私に刺さりました。

懇親会

 夜の部の後半は懇親会。単騎参加だったので居場所があるかドキドキしていたのですが、乾杯時に同テーブル付近だった方と会話が始まり、登壇者の方を含めて多くの方とお話させていただくことができました。特に私が欲しいと思っている機種を既にお使いの方の肌感覚のお話がとても参考になりました。登壇していないけれども存在感があった方にご挨拶突撃させていただいたりして、個人的には大満足の充実した懇親会でした。みなさん暖かい。XGRIDSを使ってやりたいことは様々だけど、みんな楽しそうなのが印象的でした。はやく機材を触りたい。。

まとめ

 ホテルに泊まったときとか、おもしろい銅像などを見つけた時などにiPhoneでScaniverseを使ってスキャンする程度には、ほんの少しだけこちらの世界に足を突っ込んでいた私ですが、距離の短さに制約を感じていました。一方で、 Unitree L2などを使って自分で点群取得を試みてみたもののすぐに発生するドリフトが解消できずに行き詰まっていました(どちらも単なる趣味)。これらの背景を以て出会った PortalCamはある意味「全部入り」の神製品に見えなくもないといったところです(持って回った言い方になっているのは、その神様のお力をいただくには、大きな大きなお布施が必要なのだという点が、いや、あのその(笑))。 登壇トークの中でもありましたが本当に「どの業界にも刺さる」製品で、私も手に入れる前から「これを使ったら誰を喜ばせることができるかなー、誰を喜ばせてやろうかな-」と考えるのがとても楽しいです。
 講演を聞かせてくださった登壇者のみなさま、ブースや懇親会でお話させていただいたみなさま、そして今回のイベントを企画してくださったアクティブリテックさま、ホロラボさま、どうもありがとうございました! この楽しげなユーザコミュニティ、これからもっともっと拡げていきたいですね。







 

*1:小さい目標ですが、きっかけが「これで儲けてやろう、うしし」というものではなく純粋に「これほしい!」なのでせめて元を取れればというマインドに

MySQL GIS拡張関数: STX_AsSvg

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_AsSvg(geom [, rel [, prec]])

 ジオメトリをSVGパースデータに変換する。

動作紹介

 正直、正しく動作しているかどうかよくわからないので、ネット上に存在した他システムの実行例を参考に試してみた。

mysql> SELECT STX_AsSVG(ST_GeomFromText('POINT(40 116)',4326));
+--------------------------------------------------+
| STX_AsSVG(ST_GeomFromText('POINT(40 116)',4326)) |
+--------------------------------------------------+
| cx="116" cy="-40"                                |
+--------------------------------------------------+
  • 見慣れた地域に変更してみる。
mysql> SELECT STX_AsSVG(ST_GeomFromText('POINT(35 135)',6668));
+--------------------------------------------------+
| STX_AsSVG(ST_GeomFromText('POINT(35 135)',6668)) |
+--------------------------------------------------+
| cx="135" cy="-35"                                |
+--------------------------------------------------+
  • LINESTRING だとこういう表示になる
mysql> SELECT STX_AsSVG(ST_GeomFromText('LINESTRING(35 135, 36 135, 36 137)',6668));
+-----------------------------------------------------------------------+
| STX_AsSVG(ST_GeomFromText('LINESTRING(35 135, 36 135, 36 137)',6668)) |
+-----------------------------------------------------------------------+
| M 135 -35 L 135 -36 L 137 -36                                         |
+-----------------------------------------------------------------------+
1 row in set (0.000 sec)
mysql> SELECT STX_AsSVG(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'), false, 15);
+-----------------------------------------------------------------------------+
| STX_AsSVG(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'), false, 15) |
+-----------------------------------------------------------------------------+
| M 0 0 L 0 -1 L 1 -1 L 1 0 L 0 0 Z                                           |
+-----------------------------------------------------------------------------+
1 row in set (0.017 sec)

重なるLは省略できるという仕様になっているようですが、本関数は省略せずに全体を出力します。



MySQL GIS拡張関数: STX_Segmentize

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_Segmentize(geom, max_length)

動作紹介

  • 一辺が10の正方形を、ひとつの線が「6」を越えないように分割 → なるべく等分になるように頑張ってくれるので各辺5の長さのところに中間点を打ったPOLYGONになる
SET @g=ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
mysql> SELECT ST_AsText(STX_Segmentize( @g , 6 )) g;
+------------------------------------------------------+
| g                                                    |
+------------------------------------------------------+
| POLYGON((0 0,0 5,0 10,5 10,10 10,10 5,10 0,5 0,0 0)) |
+------------------------------------------------------+
  • 最大長を「3」として指定するとそれを越えないように0.25単位で切ってくれる。ちなみに 「4」を指定すると 3.333...., 6.666666, 10 というように切ってくる
mysql> SELECT ST_AsText(STX_Segmentize(@g, 3));
+----------------------------------------------------------------------------------------------------------+
| ST_AsText(STX_Segmentize(@g, 3))                                                                         |
+----------------------------------------------------------------------------------------------------------+
| POLYGON((0 0,0 2.5,0 5,0 7.5,0 10,2.5 10,5 10,7.5 10,10 10,10 7.5,10 5,10 2.5,10 0,7.5 0,5 0,2.5 0,0 0)) |
+----------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
  • 指定数値よりも短い辺は分割されずにもとのままとなる
mysql> SELECT ST_AsText(STX_Segmentize(@g, 12));
+------------------------------------+
| ST_AsText(STX_Segmentize(@g, 12))  |
+------------------------------------+
| POLYGON((0 0,0 10,10 10,10 0,0 0)) |
+------------------------------------+
  • なお、ここで加えた「余計な」点を取り除くのは ST_Simplify()を活用できる
mysql> SELECT ST_AsText(ST_Simplify(STX_Segmentize(@g, 6),1));
+-------------------------------------------------+
| ST_AsText(ST_Simplify(STX_Segmentize(@g, 6),1)) |
+-------------------------------------------------+
| POLYGON((10 10,0 10,0 0,10 0,10 10))            |
+-------------------------------------------------+
1 row in set (0.000 sec)

MySQL GIS拡張関数: STX_SnapToGrid()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_SnapToGrid(geom, size [, size_y])

 座標を、与えられたサイズのグリッドにスナップ(吸着)させます。複雑な形をシンプルにするのに便利。

動作紹介

  • linestringを 0.5単位に吸着させる(=まるめる)
SET @g=ST_GeomFromText('LINESTRING(1.2 1.2, 1.2 1.4, 1.6 1.4, 2.1 1.7, 2.6 1.4)',6668);
SELECT ST_SnapToGrid(@g, 0.5)
mysql> SELECT St_AsText(STX_SnapToGrid(@g, 0.5));
+---------------------------------------------+
| St_AsText(STX_SnapToGrid(@g, 0.5))          |
+---------------------------------------------+
| LINESTRING(1 1,1 1.5,1.5 1.5,2 1.5,2.5 1.5) |
+---------------------------------------------+
1 row in set (0.000 sec)
  • 我孫子市のPOLYGONを0.005度単位に吸着させる(我孫子市のポリゴンの登録は本稿末尾)
mysql> SELECT ST_AsText(STX_SnapToGrid(geom,0.005)) FROM g WHERE id=11\G
*************************** 1. row ***************************
ST_AsText(STX_SnapToGrid(geom,0.005)): POLYGON((35.89 140.055,35.89 140.06,35.89 140.06,35.89 140.06,35.89 140.06,35.89 140.06,35.89 140.06,35.89 140.06,35.885 140.06,35.885 140.06,35.885 140.065,35.885 140.065,35.885 140.065,35.885 140.065,35.885 140.065,35.885 140.065,35.885 140.065,35.88 140.065,35.88 140.065,35.88 140.065,35.88 140.065,35.88 140.065,35.88 140.07,35.88 140.07,35.88 140.07,35.88 140.07,35.875 140.07,35.875 140.07500000000002,35.875 140.07500000000002,35.875 140.07500000000002,35.875 140.07500000000002,35.875 140.07500000000002,35.875 140.07500000000002,35.88 140.08,35.88 140.08,35.88 140.08,35.88 140.08,35.88 140.08,35.88 140.08,35.88 140.085,35.88 140.085,35.88 140.085,35.88 140.085,35.88 140.085,35.885 140.085,35.885 140.085,35.885 140.085,35.885 140.085,35.885 140.09,35.885 140.09,35.885 140.09,35.885 140.095,35.885 140.095,35.885 140.095,35.885 140.095,35.885 140.095,35.885 140.095,35.88 140.1,35.88 140.1,35.88 140.1,35.88 140.105,35.88 140.105,35.88 140.105,35.88 140.11,35.88 140.11,35.875 140.11,35.875 140.11,35.875 140.11,35.875 140.115,35.875 140.115,35.875 140.115,35.875 140.115,35.875 140.115,35.875 140.115,35.875 140.115,35.875 140.12,35.875 140.125,35.875 140.125,35.87 140.125,35.87 140.125,35.87 140.125,35.87 140.125,35.87 140.125,35.87 140.13,35.87 140.13,35.865 140.13,35.865 140.13,35.865 140.13,35.865 140.13,35.865 140.13,35.865 140.13,35.865 140.13,35.86 140.135,35.86 140.135,35.86 140.135,35.86 140.135,35.86 140.135,35.86 140.135,35.86 140.135,35.855000000000004 140.135,35.855000000000004 140.14000000000001,35.855000000000004 140.14000000000001,35.85 140.14000000000001,35.85 140.14000000000001,35.85 140.14000000000001,35.85 140.145,35.85 140.145,35.85 140.145,35.85 140.145,35.85 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.145,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.14000000000001,35.845 140.135,35.845 140.135,35.845 140.135,35.845 140.135,35.84 140.135,35.84 140.135,35.84 140.135,35.84 140.135,35.84 140.135,35.84 140.135,35.84 140.135,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.84 140.13,35.845 140.13,35.845 140.125,35.845 140.125,35.845 140.125,35.845 140.125,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.12,35.845 140.115,35.845 140.115,35.845 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.12,35.85 140.12,35.85 140.12,35.85 140.12,35.85 140.12,35.85 140.12,35.85 140.12,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.85 140.115,35.845 140.115,35.85 140.115,35.85 140.115,35.85 140.11,35.85 140.11,35.85 140.11,35.85 140.11,35.85 140.11,35.85 140.11,35.85 140.11,35.85 140.105,35.85 140.105,35.85 140.105,35.85 140.105,35.85 140.105,35.85 140.105,35.85 140.1,35.85 140.1,35.85 140.1,35.85 140.1,35.85 140.1,35.85 140.1,35.85 140.095,35.85 140.095,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.09,35.855000000000004 140.085,35.855000000000004 140.085,35.855000000000004 140.08,35.855000000000004 140.08,35.855000000000004 140.08,35.855000000000004 140.07500000000002,35.855000000000004 140.07500000000002,35.855000000000004 140.07500000000002,35.855000000000004 140.07500000000002,35.855000000000004 140.07500000000002,35.855000000000004 140.07,35.855000000000004 140.07,35.855000000000004 140.07,35.855000000000004 140.065,35.855000000000004 140.065,35.855000000000004 140.065,35.855000000000004 140.065,35.855000000000004 140.065,35.855000000000004 140.065,35.855000000000004 140.065,35.85 140.06,35.85 140.06,35.85 140.06,35.85 140.055,35.85 140.055,35.85 140.055,35.85 140.055,35.855000000000004 140.055,35.855000000000004 140.05,35.855000000000004 140.05,35.855000000000004 140.05,35.855000000000004 140.05,35.855000000000004 140.05,35.855000000000004 140.05,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04500000000002,35.86 140.04,35.86 140.04,35.86 140.04,35.86 140.04,35.86 140.04,35.86 140.04,35.86 140.035,35.86 140.035,35.86 140.035,35.855000000000004 140.035,35.855000000000004 140.035,35.855000000000004 140.035,35.855000000000004 140.035,35.855000000000004 140.035,35.855000000000004 140.03,35.855000000000004 140.03,35.855000000000004 140.03,35.855000000000004 140.03,35.86 140.03,35.86 140.03,35.86 140.03,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.025,35.86 140.02,35.86 140.01500000000001,35.86 140.01500000000001,35.86 140.01500000000001,35.86 140.01500000000001,35.86 140.01500000000001,35.86 140.01500000000001,35.86 140.01,35.86 140.01,35.86 140.01,35.86 140.01,35.865 140,35.865 140,35.865 140,35.865 139.995,35.865 139.995,35.865 139.995,35.865 139.995,35.865 139.995,35.865 139.995,35.865 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.995,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.87 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.995,35.875 139.995,35.875 139.99,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.995,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.99,35.875 139.995,35.875 139.995,35.875 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.99,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 139.995,35.88 140,35.88 140,35.88 140,35.88 140,35.88 140,35.88 140,35.88 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.005,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.885 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01500000000001,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.89 140.01,35.895 140.01,35.895 140.01,35.895 140.01,35.895 140.01,35.895 140.01,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.01500000000001,35.895 140.02,35.895 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.02,35.89 140.025,35.89 140.025,35.895 140.025,35.895 140.025,35.895 140.025,35.895 140.025,35.895 140.025,35.895 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.03,35.9 140.035,35.9 140.035,35.9 140.035,35.895 140.04,35.895 140.04,35.895 140.04,35.895 140.04,35.895 140.04,35.895 140.04500000000002,35.895 140.04500000000002,35.895 140.04500000000002,35.89 140.04500000000002,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.05,35.89 140.055,35.89 140.055,35.89 140.055))

小数点計算誤差が発生しているがそれを除けば正しく0.005に吸着されているのが見える。
しかし構成するポイント数は元の833個のままで、減りはしない。
よく見ると同じポイントが連続しているのが見える(同じポイントに吸着されている)。
これを取り除くのに便利なのが、STX_RemoveRepeatedPoints()関数

SELECT ST_AsText(STX_RemoveRepeatedPoints(STX_SnapToGrid(geom,0.005))) FROM g WHERE id=11\G
*************************** 1. row ***************************
ST_AsText(STX_RemoveRepeatedPoints(STX_SnapToGrid(geom,0.005))): POLYGON((35.89 140.055,35.89 140.06,35.885 140.06,35.885 140.065,35.88 140.065,35.88 140.07,35.875 140.07,35.875 140.07500000000002,35.88 140.08,35.88 140.085,35.885 140.085,35.885 140.09,35.885 140.095,35.88 140.1,35.88 140.105,35.88 140.11,35.875 140.11,35.875 140.115,35.875 140.12,35.875 140.125,35.87 140.125,35.87 140.13,35.865 140.13,35.86 140.135,35.855000000000004 140.135,35.855000000000004 140.14000000000001,35.85 140.14000000000001,35.85 140.145,35.845 140.145,35.845 140.14000000000001,35.845 140.135,35.84 140.135,35.84 140.13,35.845 140.13,35.845 140.125,35.845 140.12,35.845 140.115,35.85 140.115,35.85 140.12,35.85 140.115,35.845 140.115,35.85 140.115,35.85 140.11,35.85 140.105,35.85 140.1,35.85 140.095,35.855000000000004 140.09,35.855000000000004 140.085,35.855000000000004 140.08,35.855000000000004 140.07500000000002,35.855000000000004 140.07,35.855000000000004 140.065,35.85 140.06,35.85 140.055,35.855000000000004 140.055,35.855000000000004 140.05,35.86 140.04500000000002,35.86 140.04,35.86 140.035,35.855000000000004 140.035,35.855000000000004 140.03,35.86 140.03,35.86 140.025,35.86 140.02,35.86 140.01500000000001,35.86 140.01,35.865 140,35.865 139.995,35.87 139.995,35.87 139.99,35.875 139.99,35.875 139.995,35.875 139.99,35.875 139.995,35.875 139.99,35.875 139.995,35.88 139.995,35.88 139.99,35.88 139.995,35.88 139.99,35.88 139.995,35.88 140,35.885 140,35.885 140.005,35.885 140.01,35.89 140.01,35.89 140.01500000000001,35.89 140.01,35.895 140.01,35.895 140.01500000000001,35.895 140.02,35.89 140.02,35.89 140.025,35.895 140.025,35.895 140.03,35.9 140.03,35.9 140.035,35.895 140.04,35.895 140.04500000000002,35.89 140.04500000000002,35.89 140.05,35.89 140.055))

わずか 102個のポイントへと整理された。

  • 本来の我孫子市の形

  • 0.005に吸着させた我孫子市の形


  • 重ねて見たところ


おまけ: 我孫子市ポリゴンの登録方法(出典:国土数値情報)

SET @wkt='POLYGON((35.890629721 140.055758807,35.889586946 140.058110441,35.889480892 140.058333333,35.889478027 140.058339339,35.889142225 140.059045162,35.888578333 140.060231284,35.88856 140.060269611,35.888056387 140.061116835,35.887082225 140.061754306,35.886338892 140.062240415,35.885937775 140.062531245,35.885277505 140.0630107,35.884722225 140.063413722,35.884007225 140.063991777,35.883333333 140.064536304,35.883332505 140.064537004,35.882728306 140.06502511,35.882140802 140.065500078,35.882065802 140.065560636,35.880871919 140.06659869,35.880824694 140.066666667,35.880820586 140.066672581,35.880184135 140.067588418,35.879796919 140.068145331,35.879512468 140.068554773,35.879374135 140.068788664,35.87741664 140.072098366,35.876718027 140.073673359,35.876626892 140.074325863,35.876790171 140.075,35.876791586 140.075005863,35.877034387 140.076008366,35.877383838 140.077225305,35.877820505 140.078299196,35.877975225 140.078515863,35.878562721 140.079336978,35.879968 140.080813917,35.880799081 140.08168725,35.881156865 140.082482802,35.881477135 140.083194747,35.881539387 140.083333333,35.881542027 140.083339196,35.881673252 140.083631414,35.882167135 140.084729754,35.883006306 140.08607642,35.883332414 140.086599559,35.883333333 140.086601051,35.883884919 140.087485863,35.884030198 140.088130026,35.883905387 140.091666667,35.883905198 140.091672529,35.883864613 140.092823359,35.883381279 140.095216667,35.883333333 140.095386472,35.883332387 140.095389857,35.883014865 140.096514721,35.88298264 140.096608054,35.881816333 140.1,35.881814333 140.100005811,35.881510694 140.100888859,35.88073736 140.102755772,35.878766505 140.106357134,35.878641225 140.106585746,35.877646973 140.108333333,35.877643694 140.108339079,35.877322892 140.108902944,35.876901775 140.109781556,35.876042333 140.111730726,35.875343414 140.113806809,35.875 140.115201894,35.874998973 140.115206057,35.87475536 140.116195694,35.874639387 140.116666667,35.874638 140.116672361,35.874507586 140.117202049,35.873663108 140.121731751,35.873369225 140.122635357,35.872508946 140.12459703,35.872277919 140.125,35.872274694 140.125005642,35.871591171 140.126197834,35.871220054 140.126736719,35.870855892 140.127141725,35.870383667 140.127582827,35.869334225 140.128103087,35.866666667 140.129228418,35.866665613 140.129228885,35.866651721 140.129234747,35.865539505 140.129823333,35.864412279 140.130419728,35.863864225 140.130774721,35.862615613 140.131546939,35.860824225 140.132654968,35.859961081 140.133333333,35.859954054 140.133338859,35.859927559 140.133359689,35.858919225 140.134243865,35.858333333 140.134832218,35.858332279 140.134833307,35.855985054 140.137190506,35.855283108 140.137919105,35.854847559 140.138371336,35.852117 140.141204942,35.851575946 140.141666667,35.851569505 140.141672166,35.850575054 140.142520778,35.85 140.1429738,35.849998946 140.142974643,35.848387838 140.144243839,35.848055613 140.144512724,35.846652586 140.145649105,35.846232027 140.146018275,35.845718135 140.146469663,35.845156748 140.145307717,35.845015919 140.145006329,35.844858694 140.144670778,35.844541468 140.14399214,35.844533694 140.143967134,35.84450036 140.143862698,35.844414802 140.14359214,35.844351468 140.14339214,35.844165919 140.142806589,35.84413564 140.142711025,35.844113135 140.142640195,35.84398564 140.142237691,35.843944252 140.142083528,35.843833694 140.14167214,35.843832225 140.141666667,35.843763973 140.141412698,35.843735081 140.141203528,35.843704532 140.140984358,35.843666468 140.140708249,35.843656468 140.140636861,35.843659252 140.140590195,35.843687865 140.14012131,35.843708135 140.139888807,35.843720081 140.139750467,35.843827027 140.138521855,35.843776468 140.138226861,35.843643694 140.13769131,35.843343171 140.136864358,35.843270946 140.136665473,35.843100387 140.136269922,35.842509279 140.135568807,35.841666667 140.134624838,35.841665667 140.134623722,35.841088721 140.133977419,35.841019279 140.133814358,35.840917775 140.133338807,35.840916613 140.133333333,35.840771775 140.132654916,35.840752892 140.13238297,35.840797054 140.132072412,35.841175667 140.131210752,35.841226225 140.13093131,35.841264279 140.130624643,35.841270387 140.130574358,35.841425108 140.130171855,35.841665667 140.129545811,35.841666667 140.129543217,35.841826225 140.129127977,35.841895108 140.128949079,35.842133441 140.128328807,35.842209279 140.128243256,35.842442892 140.12845297,35.842599279 140.128177691,35.844403414 140.125005499,35.844406559 140.125,35.845726505 140.122679105,35.845607892 140.122562724,35.844761252 140.121732996,35.844030694 140.120996887,35.843226532 140.120356887,35.843553468 140.119686887,35.84337264 140.119463281,35.84357736 140.118834112,35.844364027 140.118374942,35.844377919 140.118366615,35.844440414 140.11833022,35.844906802 140.118082166,35.845167081 140.117943554,35.845339027 140.11785192,35.845373748 140.11783358,35.845770414 140.117626641,35.84598264 140.117515811,35.846089865 140.117459689,35.846339306 140.117329689,35.846880973 140.117059974,35.847603468 140.116884137,35.847939306 140.117043307,35.848473198 140.117066355,35.848921532 140.117359689,35.849882613 140.117989144,35.849894279 140.117996641,35.849999 140.118065331,35.85 140.118066005,35.850870946 140.118636083,35.850950108 140.118388029,35.851081505 140.117976913,35.850127333 140.117319689,35.85 140.117232114,35.849999027 140.117231414,35.849984027 140.117221089,35.849334748 140.116672192,35.849328198 140.116666667,35.848940135 140.116338586,35.847520414 140.115079144,35.847491252 140.114737471,35.847588468 140.113872477,35.847674865 140.113103307,35.847879586 140.111475837,35.847894306 140.11135834,35.848015414 140.110592776,35.848487387 140.109238885,35.848801225 140.108338885,35.848803135 140.108333333,35.848949333 140.107914163,35.849106838 140.107477782,35.849272667 140.107017782,35.849999054 140.105004553,35.85 140.10500192,35.850787108 140.102820856,35.850894333 140.102545305,35.851424333 140.101180856,35.851498225 140.10098978,35.851677775 140.100005616,35.851678802 140.1,35.851742667 140.099650052,35.851769613 140.099409494,35.852037135 140.09701144,35.852300748 140.094646446,35.852632559 140.091672309,35.852633198 140.091666667,35.852792414 140.090239533,35.852833252 140.089873139,35.852959946 140.088738145,35.852870505 140.088725084,35.852767171 140.088710363,35.852718 140.088703139,35.852663838 140.088695357,35.852581892 140.088683411,35.85323936 140.083339001,35.853240054 140.083333333,35.853764414 140.079071505,35.853818586 140.078630143,35.853909135 140.077823476,35.85419136 140.075307082,35.854203027 140.075200973,35.854224973 140.075005694,35.854225613 140.075,35.854330532 140.074066524,35.85452 140.072375966,35.854604171 140.071679857,35.854892775 140.069287393,35.855208387 140.066672387,35.855209081 140.066666667,35.855398333 140.065098781,35.854786946 140.065546005,35.853769441 140.066290143,35.852770306 140.064157082,35.852585865 140.063762918,35.850859748 140.060077639,35.851093198 140.058339027,35.851093973 140.058333333,35.851248108 140.057185422,35.851692838 140.055682088,35.852162 140.054427951,35.852204225 140.054315162,35.852524225 140.053624332,35.853382279 140.051773217,35.854364441 140.05000572,35.85436764 140.05,35.854388667 140.049962114,35.855233694 140.04881406,35.856411748 140.047556861,35.857819252 140.045884358,35.858240081 140.045164086,35.858332586 140.045006057,35.858333333 140.045004773,35.858619532 140.044517691,35.859042027 140.043451582,35.859419802 140.04252214,35.859553135 140.04183856,35.859563946 140.041672438,35.859564333 140.041666667,35.859597586 140.041155499,35.85949564 140.039958807,35.859206775 140.038674358,35.858333333 140.036916278,35.858332613 140.036914812,35.857736505 140.035714916,35.857470667 140.035130467,35.856906225 140.033889053,35.856688586 140.033339053,35.856686333 140.033333333,35.856455667 140.032750441,35.856455694 140.03228572,35.856566802 140.031739339,35.85672236 140.031383774,35.857367081 140.030618495,35.85833264 140.029516083,35.858333333 140.029515279,35.859165694 140.028564916,35.860410414 140.026951855,35.860695414 140.026439922,35.860699586 140.026432412,35.860832919 140.026022412,35.860876252 140.025657977,35.860953892 140.025005746,35.860954586 140.025,35.860966252 140.024901855,35.861301838 140.017860752,35.861383802 140.016672387,35.861384198 140.016666667,35.861390441 140.016576005,35.861543775 140.015433774,35.861724054 140.014088781,35.861835198 140.012667108,35.861901586 140.010999883,35.861803108 140.008339053,35.861802892 140.008333333,35.861802135 140.008312672,35.865433532 140.00000572,35.865436027 140,35.866069946 139.998549883,35.866666054 139.997186161,35.866666667 139.997184747,35.866858838 139.996745162,35.866892171 139.996596835,35.866997721 139.99603489,35.867253 139.994715162,35.867483279 139.993673217,35.867515505 139.993586835,35.867553559 139.993532944,35.867638559 139.993471556,35.867917171 139.99331406,35.868148279 139.993183502,35.868546613 139.992913502,35.868633279 139.992875162,35.868759667 139.992819053,35.869399387 139.992411829,35.869809108 139.992104617,35.869879667 139.992051556,35.869951613 139.992022672,35.870633838 139.992195447,35.870669108 139.992184617,35.870689667 139.992130726,35.870748 139.992058495,35.870894108 139.992007951,35.870949667 139.991993502,35.870993559 139.991964617,35.871005505 139.991903502,35.871017171 139.991795447,35.871040505 139.991741284,35.871263279 139.991716278,35.871283838 139.991705447,35.871298279 139.991690999,35.871296694 139.991672387,35.871296198 139.991666667,35.871295505 139.991658495,35.871292441 139.991609611,35.871286613 139.991518223,35.871186892 139.991100441,35.871207441 139.991089611,35.871575775 139.991023217,35.871686333 139.991003217,35.871704108 139.991001556,35.871852171 139.990988495,35.872210505 139.990957134,35.872301333 139.990949079,35.872356892 139.990909637,35.872379108 139.990835473,35.872452441 139.990750752,35.872549667 139.990715746,35.872809667 139.990680752,35.872838279 139.990715746,35.872846333 139.991234916,35.872954414 139.991666667,35.872955865 139.991672412,35.873001613 139.991855188,35.873127441 139.992284086,35.873172171 139.992359079,35.873216613 139.992389079,35.873376333 139.992432698,35.873399387 139.992439079,35.873756613 139.992508807,35.874007171 139.992514086,35.874458 139.992484086,35.874644667 139.992504086,35.874726613 139.992536031,35.874734108 139.992539079,35.874823559 139.9926738,35.874999387 139.992985642,35.875 139.992986719,35.875133559 139.993223554,35.875222441 139.993290778,35.875341333 139.993381051,35.875459667 139.99347022,35.875500225 139.993501051,35.875793559 139.993722996,35.876106892 139.993913839,35.876150225 139.99394022,35.876260775 139.994007717,35.876593838 139.994207445,35.876659946 139.994222438,35.876703559 139.994232438,35.876756333 139.994207445,35.876788559 139.994172438,35.876853559 139.993987717,35.876911892 139.993821608,35.876960225 139.993684384,35.876991892 139.993594669,35.876973279 139.993510506,35.876947171 139.993474112,35.876879667 139.993380506,35.876879667 139.99338022,35.876678559 139.993284669,35.876512171 139.993180778,35.876381054 139.993119663,35.876485775 139.992915499,35.876491892 139.992838275,35.876491892 139.992768275,35.876485775 139.992705772,35.876752171 139.992264669,35.876784946 139.992212996,35.876808838 139.992212996,35.876887721 139.992253839,35.877125225 139.99244022,35.877342171 139.992610506,35.877446892 139.992783281,35.877497721 139.992812724,35.877545775 139.992801608,35.877597441 139.992734669,35.877579667 139.99267939,35.877600505 139.992624112,35.877843 139.992396057,35.877866892 139.992326329,35.877938559 139.992146057,35.878253559 139.991872438,35.878280505 139.991832166,35.878277441 139.991799105,35.878226613 139.991773281,35.878187721 139.991721894,35.878160892 139.991672438,35.878157748 139.991666667,35.878157721 139.991666615,35.878148838 139.991626329,35.878150775 139.991600506,35.878155225 139.991537445,35.878157721 139.991504942,35.878199667 139.991402166,35.878241613 139.991339663,35.878244108 139.991337173,35.878304387 139.991269663,35.878448 139.991137173,35.878489946 139.991096887,35.878493 139.991078275,35.878474946 139.991041608,35.878466054 139.991004942,35.878467171 139.991001336,35.878474946 139.990975499,35.878489946 139.990960778,35.878618559 139.990806329,35.878627441 139.990739948,35.878627441 139.990655499,35.878615505 139.990596615,35.878594667 139.990563554,35.878540775 139.990559948,35.878459946 139.990581894,35.878183838 139.990809948,35.878008 139.99096022,35.877879667 139.991069663,35.877795775 139.990954669,35.877767721 139.99088022,35.877889387 139.990767717,35.878013279 139.990653281,35.878157441 139.990476329,35.878434667 139.990144942,35.878623838 139.989812724,35.878870775 139.989315499,35.879054387 139.98897939,35.879193 139.988753839,35.879234108 139.988679948,35.879293559 139.988670778,35.879294108 139.988670778,35.879395225 139.988707717,35.879568838 139.988753839,35.879684946 139.988864384,35.880035225 139.989257445,35.880391054 139.989626083,35.880443279 139.98965358,35.880536892 139.989658301,35.880671613 139.989694968,35.880934946 139.989959144,35.881208559 139.990299689,35.881414387 139.990709689,35.881470775 139.990944423,35.881560505 139.991390804,35.881589468 139.991666667,35.881590081 139.991672477,35.881590505 139.991676355,35.881583 139.991975811,35.881560775 139.992051362,35.881530505 139.992155253,35.881438279 139.992289689,35.881388279 139.992362477,35.881263 139.992478029,35.880722441 139.992878859,35.880591054 139.992926913,35.880583838 139.992929416,35.880560505 139.992925811,35.880490225 139.992915525,35.880422721 139.992869416,35.880378 139.992777471,35.880283279 139.992611634,35.880219667 139.992508586,35.879953838 139.992077471,35.879905225 139.992054423,35.879875505 139.992069689,35.879860225 139.992077471,35.879708 139.992261634,35.879642721 139.992340804,35.879631892 139.992353865,35.879523 139.992501089,35.879380775 139.992740532,35.879290775 139.992814137,35.879283279 139.99284192,35.879343279 139.993012192,35.879395775 139.993081362,35.879433279 139.993081362,35.879733 139.992906355,35.879822721 139.992883307,35.879894667 139.992897198,35.880101613 139.993382192,35.880154108 139.993469689,35.880232721 139.993511362,35.880307721 139.993515811,35.880637171 139.993363865,35.880678559 139.993382192,35.880697441 139.993416083,35.880727171 139.993469689,35.880741333 139.993524423,35.880775775 139.993658586,35.880794667 139.993746083,35.880782721 139.99385275,35.880768279 139.993981089,35.880754946 139.993997471,35.880715198 139.994045811,35.880631027 139.994148586,35.880489081 139.994236083,35.880306306 139.994402192,35.880007694 139.994631362,35.879848532 139.99474358,35.879607694 139.994913865,35.879468802 139.994797471,35.879397973 139.994776641,35.879330198 139.994822477,35.879171306 139.995015525,35.879012135 139.995209144,35.878978252 139.995275525,35.878995198 139.995329689,35.879089919 139.995479416,35.879093532 139.995508586,35.87904936 139.995658301,35.879035748 139.995724695,35.879046027 139.995812192,35.87906964 139.995874423,35.879165468 139.995948859,35.879235468 139.996003307,35.879252135 139.996013865,35.879315468 139.99605358,35.87936964 139.996157471,35.879677135 139.996444695,35.879707694 139.996456913,35.87973464 139.99645275,35.879890198 139.996190804,35.879924081 139.996091089,35.879924081 139.996041089,35.879866586 139.995878859,35.879717694 139.995729144,35.879687414 139.995654423,35.879694081 139.995596083,35.879721027 139.995567198,35.879771865 139.995558859,35.879860748 139.995550532,35.879965748 139.995488029,35.880091027 139.995377756,35.880192414 139.995288301,35.880253252 139.995196913,35.880446027 139.994976641,35.88067436 139.994864137,35.881053252 139.994789416,35.881316865 139.994718586,35.881347135 139.994710532,35.881483532 139.99481083,35.881781306 139.99521,35.881903252 139.995418885,35.881920198 139.995448054,35.88148964 139.995651673,35.881197414 139.99578917,35.881178802 139.995797782,35.881096027 139.995868885,35.881049081 139.99594,35.881032694 139.996025006,35.881060198 139.996146939,35.881151306 139.996303061,35.881173532 139.996483333,35.881178802 139.996618885,35.881167973 139.996635837,35.880966586 139.996625837,35.880925468 139.99663917,35.880896027 139.99666,35.880853532 139.996690272,35.880829919 139.996745279,35.880962694 139.997023891,35.881135468 139.99722,35.881219919 139.997254721,35.881255198 139.99726917,35.881306306 139.997326394,35.881401306 139.997432503,35.881361586 139.997498054,35.881002414 139.997465279,35.881069081 139.997645006,35.881241865 139.997710558,35.88153436 139.997988054,35.881751306 139.998255006,35.881827973 139.99834917,35.881919919 139.998462218,35.882096865 139.998437497,35.882787973 139.998159442,35.883199919 139.998208612,35.883332694 139.99830856,35.883333333 139.998309053,35.883498802 139.998433645,35.883526306 139.998454475,35.883593252 139.998504747,35.883742135 139.998616978,35.883934919 139.998880026,35.884109081 139.999259754,35.884144081 139.99933642,35.884163532 139.999378638,35.884308802 139.999913359,35.884327 140,35.884328252 140.000005863,35.884415198 140.000419754,35.884441586 140.00123725,35.884387694 140.001580311,35.884361865 140.001743917,35.884893802 140.002283359,35.884970748 140.002266135,35.885039919 140.002250856,35.885372414 140.002348911,35.885492108 140.00256144,35.885607108 140.004675888,35.885846279 140.005198949,35.886032667 140.005493113,35.886471 140.005640052,35.886524333 140.005868949,35.886417946 140.00666978,35.886245171 140.007274773,35.886112387 140.007372827,35.885696 140.007449494,35.885589613 140.007613113,35.885576279 140.007972555,35.885523225 140.00825061,35.885390171 140.008315888,35.884951559 140.008315888,35.884891441 140.008333333,35.884871171 140.008339222,35.884725721 140.00838144,35.884526279 140.008642827,35.884499613 140.00878978,35.884619333 140.009231167,35.884739054 140.009787004,35.884925171 140.00990144,35.885242946 140.010013385,35.885400441 140.010068664,35.885500171 140.010103943,35.886045441 140.010038418,35.886324613 140.010152866,35.886404333 140.010152866,35.886497387 140.010071193,35.886705441 140.009825914,35.886770171 140.009749805,35.886816279 140.009695357,35.886846 140.009707588,35.886936 140.009744254,35.887213225 140.009901479,35.887838225 140.010457302,35.888786 140.01132703,35.889407919 140.01184594,35.889516252 140.011936226,35.889304586 140.01232428,35.889840694 140.012958716,35.890019865 140.013102892,35.890128748 140.013190389,35.890289865 140.01288594,35.890607081 140.01315345,35.890929306 140.013496783,35.890796532 140.013823722,35.891040694 140.014031505,35.891314865 140.01426511,35.89102236 140.01485345,35.891093198 140.014943995,35.891291532 140.015197639,35.891354865 140.01527847,35.891275135 140.015376524,35.891235135 140.015425422,35.891115694 140.015675422,35.891200414 140.016007912,35.891208468 140.016161245,35.891128748 140.016291803,35.891012081 140.016374864,35.890994865 140.016387367,35.890876252 140.016471803,35.890880414 140.016542633,35.890955973 140.016602633,35.891106802 140.016560415,35.891366252 140.016423748,35.891610135 140.016270143,35.891665973 140.016223061,35.891666667 140.016222477,35.892293198 140.015694034,35.892213748 140.01558153,35.891681252 140.014827639,35.89200264 140.0142793,35.892015135 140.014257912,35.891666667 140.013959053,35.891665973 140.013958444,35.891664027 140.013956783,35.891300973 140.013645383,35.891217919 140.013573995,35.891384586 140.013300389,35.890735973 140.012707886,35.890865414 140.012229001,35.891291802 140.012251777,35.891329027 140.012137886,35.891050973 140.011910117,35.890910135 140.01187345,35.890775973 140.011838716,35.890420135 140.011790947,35.89040236 140.011537613,35.890586802 140.011522607,35.890919027 140.011574838,35.89104264 140.011617056,35.891458748 140.011759559,35.891557081 140.011808444,35.891665973 140.011862529,35.891666667 140.011862866,35.891850694 140.01195428,35.89207236 140.011909001,35.892073198 140.011908716,35.892295694 140.011657886,35.892351252 140.011536783,35.89246236 140.01129345,35.892774865 140.011437613,35.892779306 140.012027367,35.892779586 140.012043748,35.892781532 140.012300415,35.892813468 140.012452633,35.89288264 140.012779857,35.892909865 140.012909585,35.893059586 140.013144034,35.893487919 140.013607082,35.89340236 140.013847367,35.893086252 140.014736809,35.893726532 140.015256809,35.893819865 140.015332361,35.894211802 140.014683748,35.895993748 140.016270441,35.895586613 140.016666667,35.895580441 140.016672672,35.895548748 140.016703502,35.894630414 140.017217108,35.893456532 140.017526252,35.893512081 140.018050415,35.892253198 140.018351245,35.891666667 140.018491245,35.891665973 140.018491414,35.89160264 140.018506524,35.890510973 140.018757912,35.889584027 140.019077056,35.889136252 140.019344838,35.888249306 140.019874838,35.888360414 140.020125668,35.889139306 140.019578716,35.890003748 140.020261245,35.890550387 140.020752918,35.890632333 140.020826524,35.890740667 140.020924034,35.890224 140.021786252,35.890916505 140.022401803,35.891665946 140.023068392,35.891666667 140.023069027,35.892732892 140.024017393,35.893385387 140.024610169,35.893762721 140.025,35.893768532 140.025006005,35.893880108 140.025121284,35.896690387 140.027568521,35.898135081 140.028871608,35.898199802 140.02893022,35.898258135 140.028982996,35.898315919 140.029034942,35.899999252 140.030553502,35.9 140.030554163,35.90020536 140.030739416,35.900612306 140.031106641,35.9 140.032382802,35.899999252 140.032384358,35.899543946 140.033333333,35.899541027 140.033339416,35.898418694 140.035678586,35.896820054 140.038912724,35.896233108 140.039737173,35.895736721 140.040391894,35.894769919 140.041666667,35.894765333 140.041672724,35.894090333 140.042562724,35.893365892 140.043726615,35.892782838 140.044932412,35.892412 140.045942412,35.891961414 140.047539364,35.891672802 140.049961855,35.891670306 140.049983256,35.891667946 140.05,35.891667081 140.050006031,35.891666667 140.050008975,35.891665865 140.050014553,35.891454468 140.05150297,35.891111973 140.053677419,35.890699721 140.05560131,35.890629721 140.055758807))';

-- 既存のテーブルgに登録した。idとgemだけがあるテーブル。
INSERT INTO g VALUES (11, ST_GeomFromText(@wkt, 6668));

MySQL GIS拡張関数: STX_Affine()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_Affine(geom, a, b, d, e, xoff, yoff)

 与えられたジオメトリを、与えられた条件に従ってアフィン変換します。
アフィン変換自体を私がよく分かっていなかったので、整理しながら動作検証。

アフィン変換とは

 各点の座標を与えられた4つのパラメタと2つのオフセットに従って、各点を移動させるもの、とざっくり理解。パラメタの値がどの程度移動に影響するのかは私もまだ理解できていないので、どなたか活用してみて期待と異なる挙動があればぜひ報告ください。

  ┌──────┬─────────┬────────────────┐
  │ パラメータ │       役割       │             説明               │
  ├──────┼─────────┼────────────────┤
  │ a          │ X方向のXスケール │ x座標がx'にどれだけ影響するか  │
  ├──────┼─────────┼────────────────┤
  │ b          │ Y→Xせん断       │ y座標がx'にどれだけ影響するか  │
  ├──────┼─────────┼────────────────┤
  │ d          │ X→Yせん断       │ x座標がy'にどれだけ影響するか  │
  ├──────┼─────────┼────────────────┤
  │ e          │ Y方向のYスケール │ y座標がy'にどれだけ影響するか  │
  ├──────┼─────────┼────────────────┤
  │ xoff       │ X平行移動        │                                │
  ├──────┼─────────┼────────────────┤
  │ yoff       │ Y平行移動        │                                │
  └──────┴─────────┴────────────────┘

esriさんの説明が端的で良い。「サイズ変更」「回転」「スキュー」「平行移動y」
support.esri.com

回転や平行移動程度ならば専用関数があるので、それ以外のもっと複雑な変換をしたいときに活きてくる関数なのだと思います。
(地図上での位置合わせに活用したという話も耳にしたことがあるようなないような気がします)

動作紹介

  • 平行移動。x->x', y->y' のみ(a,eのみを与える。オフセットには移動距離)
mysql> SET @g=ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))');
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Affine(@g, 1, 0, 0, 1, 2, 3));
+--------------------------------+---------------------------------------------+
| ST_AsText(@g)                  | ST_AsText(STX_Affine(@g, 1, 0, 0, 1, 2, 3)) |
+--------------------------------+---------------------------------------------+
| POLYGON((1 1,3 1,3 3,1 3,1 1)) | POLYGON((3 4,3 6,5 6,5 4,3 4))              |
+--------------------------------+---------------------------------------------+

  • 剪断
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Affine(@g, 1, 2, 0, 1, 0, 0));
+--------------------------------+---------------------------------------------+
| ST_AsText(@g)                  | ST_AsText(STX_Affine(@g, 1, 2, 0, 1, 0, 0)) |
+--------------------------------+---------------------------------------------+
| POLYGON((1 1,3 1,3 3,1 3,1 1)) | POLYGON((3 1,7 3,9 3,5 1,3 1))              |
+--------------------------------+---------------------------------------------+

MySQL GIS拡張関数: STX_Scale()

自作の、Spatial(GIS)関連の関数をMySQLに追加するプラグインの関数をひとつひとつ動作確認しながら紹介するシリーズ。
https://sakaik.hateblo.jp/entry/20260215/mysql_spatial_functions_plugin

STX_Scale(geom, sx, sy [,CenterPoint]) / STX_Scale(geom, sx, sy [,CenterX, CenterY])

 geomをタテヨコに指定した割合(sx, sy)だけ拡大縮小する。中心点を指定することができる。省略時の原点は (0,0)なので、多くの場合は拡大縮小を行う起点(原点)を指定して使うことになると思う(独自拡張)。中心点を指定する機能がない場合は、一旦STX_Translateで平行移動したあとで拡大縮小し、また元の位置に戻すという演算が必要になってしまう。

動作紹介

  • (1,1)-(3,3)の正方形を横3.5倍、縦2倍にする例((0,0)が原点)
mysql> SET @g=ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))');
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Scale(@g, 3.5,2)) ;
+--------------------------------+--------------------------------------------+
| ST_AsText(@g)                  | ST_AsText(STX_Scale(@g, 3.5,2))            |
+--------------------------------+--------------------------------------------+
| POLYGON((1 1,3 1,3 3,1 3,1 1)) | POLYGON((3.5 2,3.5 6,10.5 6,10.5 2,3.5 2)) |
+--------------------------------+--------------------------------------------+


  • (1,1)-(3,3)の正方形を横3.5倍、縦2倍にする例((1,1)を原点として指定)
mysql> SET @g=ST_GeomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))');
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Scale(@g, 3.5,2, 1, 1)) ;
+--------------------------------+---------------------------------------+
| ST_AsText(@g)                  | ST_AsText(STX_Scale(@g, 3.5,2, 1, 1)) |
+--------------------------------+---------------------------------------+
| POLYGON((1 1,3 1,3 3,1 3,1 1)) | POLYGON((1 1,1 5,8 5,8 1,1 1))        |
+--------------------------------+---------------------------------------+

  • 中心位置はPOINT型で与えることもできる
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Scale(@g, 3.5,2, ST_GeomFromText('POINT(1 1)'))) g;
+--------------------------------+--------------------------------+
| ST_AsText(@g)                  | g                              |
+--------------------------------+--------------------------------+
| POLYGON((1 1,3 1,3 3,1 3,1 1)) | POLYGON((1 1,1 5,8 5,8 1,1 1)) |
+--------------------------------+--------------------------------+
  • 地球上の場所の場合は、(0,0)を原点とする拡大縮小は多くの場合意味を持たないので、中心点を指定して使う
mysql> SET @g=ST_GeomFromText('POLYGON((35 135, 35 137, 37 137, 37 135, 35 135))',6668);
mysql> SET @g_center=ST_GeomFromText('POINT(36 136)',6668);
mysql> SELECT ST_AsText(@g), ST_AsText(STX_Scale(@g, 2,3, @g_center)) ;
+-----------------------------------------------+-----------------------------------------------+
| ST_AsText(@g)                                 | ST_AsText(STX_Scale(@g, 2,3, @g_center))      |
+-----------------------------------------------+-----------------------------------------------+
| POLYGON((35 135,35 137,37 137,37 135,35 135)) | POLYGON((33 134,39 134,39 138,33 138,33 134)) |
+-----------------------------------------------+-----------------------------------------------+

MySQLについて最近のOracle Blog記事のまとめ(2)~技術話など

最近のOracle発表のMySQL関連記事から。タイトルとリンクの紹介第二弾。
第一弾は以下のページを参照ください。
sakaik.hateblo.jp

最近Oracleから発表された技術記事など

A New Era of MySQL Monitoring: OpenTelemetry Metrics with Prometheus

最近流行りの「オブザーバビリティ」的な機能。MySQL 9.7から(Community版にも)実装された、OpenTelemetryの機能を使って情報を継続的に取得、閲覧できる仕組みの紹介です。

The hypergraph optimizer is now available in MySQL 9.7 Community Edition

MySQL 9.7 からは、Enterprise Editionのみならず Community Edition にも搭載されることになった「ハイパーグラフオプティマイザ」に関する紹介記事。Communityではデフォルトではオフ。

SET optimizer_switch='hypergraph_optimizer=on';

で有効化できる。概ねイイカンジだが、特に行数見積が正しく得られない場合に以前よりも性能劣化するケースもあるとのこと。今までのオプティマイザと異なり、各テーブルをグラフ構造として扱うことからスタートする、、、という話が詳細に書かれています。まだ難しいので、読まれた方の解説に期待。

MySQL Tuning: Is It Mostly MySQL, or Does the Operating System Matter Also?

チューニングは、MySQL側の設定だけではなく、OS側も大事だよというお話。チェックすべきパラメタやスキーマ、設定値などについて詳細に紹介。

MySQL 9.7.0 LTS Is Now Available: Expanded Community Capabilities and Dynamic Data Masking for Enterprise

 MySQL 9.7 LTSがリリースされたので主な見所の案内など。 ざっくりと全体像やリリースへの思いなどを知りたい場合に必読。

4大エリア
    レプリケーションの観測可能性とHAの動作
        流量制御モニタリング
        マルチスレッド・アプライヤーの拡張統計
        自動立ち退き&再加入
        最新情報 小選挙区
    テレメトリーと観測可能性の統合
        テレメトリー / OpenTelemetryのサポート
    最新のアプリケーション開発
        MySQLのJSONデュアルビュー
    クエリの最適化とパフォーマンス
        ハイパーグラフ・オプティマイザー
        プロファイルガイド付き最適化(PGO)
Monitoring MySQL data locks, or the tip of the iceberg

 監視の方法や、今まで起こったバグの歴史の振り返りなど。

Introducing the Change Stream Applier (CSA): A New MySQL Replication Applier in Labs
  • Karolina Szczepankiewicz
  • 2026/04/29
  • Change Stream Applier (CSA) のご紹介: ラボの新しい MySQL レプリケーション・アプライヤ

Application のレプリカ側で変更情報を反映する「アプライヤ」の新しい実装 CSA についての解説。現在 Labsで公開中。
レプリケーションチャンネルごとに設定可能で、「APPLIER_VERSION=2」とすることでCSAになる(1にすると従来の MTA=Muylti Thread Applier)。
原理の紹介(依存性のために"待ち"になっているものがあったときに、後続の関係ないやつは "お先に!"とできるとか)やパフォーマンスの紹介などが書かれています。