mysqlの全文検索拡張mroongaは、POINT要素しか含めないながら、GEOMETRY型が使えるらしい。
全文検索+位置検索系の要件があるので、ちょっと使ってみた。
位置情報えきすぱあとであれば、関数インデックスの使えるPostGIS等ならばともかく、mysqlならGEOMETRY型には経緯度ではなくメルカトル座標を入れるのが常道。
メルカトル座標と緯度毎の距離倍率を計算するphp関数を用意してやって、メルカトル座標をGEOMETRY型に蓄積してやりました。
mysql> INSERT INTO `spot` (`geom`) VALUES (GeomFromText('POINT(15028131.257091932 4163881.144064294)'));
Query OK, 1 row affected, 2 warnings (0.00 sec)
表示してやる。
mysql> SELECT AsText(`geom`) FROM `spot` WHERE `id` = 30;
+----------------------------------------------+
| AsText(`geom`) |
+----------------------------------------------+
| POINT(-596.5232355555555 -596.5232355555555) |
+----------------------------------------------+
1 row in set (0.00 sec)
はあああああ?
なんかmroongaのGEOMETRY型には経緯度で取り得る値の周辺の値しか突っ込めないみたい。
それやったらメルカトル座標値使えんやんけーーー!距離ベースの周辺検索どないすんねんあほー。
と思ったけど、どうも独自で円検索するインタフェースがmroonga_commandとかいう独自SQL拡張で用意されてるようなので許す。
…と思ったけど、独自拡張の書式が特殊すぎて他のSQLと混ぜるの面倒そうやな…。
メルカトル座標値を10万分の1とかにして、突っ込むかな…。