MySQLでgeometry型を使ってみる。
2014年3月24日
まずはテーブルの作成から。
CREATE TABLE `maps` ( `id` bigint(16) unsigned NOT NULL AUTO_INCREMENT, `latlng` geometry NOT NULL, PRIMARY KEY (`id`), SPATIAL KEY (`latlng`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
geometry型のカラムにSPATIAL KEYを設定。
ENGINEはMyISAMを指定。
(InnoDBでもgeometry型は使えるようですが、SPATIAL KEYはMyISAMしか使えないようです)
INSERT INTO maps SET latlng = GeomFromText('POINT(35.658706 139.745419)');
緯度経度の指定ですが、DB上はどっちがどっちでも問題ない(もちろんアプリ内で共通化しないといけませんが)ようなので、先を緯度(lat)、後を経度(lng)にしました。
SELECT X(latlng) as lat, Y(latlng) as lng FROM maps;
INSERT時のPOINTでの指定を逆にした場合は、XとYで取得できる値が逆になります。
これだけの事であれば、ENGINEをMyISAMにする必要がない(SPATIAL KEYを使ってない)ですが、この辺は別エントリーで。
(SPATIAL KEYを指定する事で、ORDER BY ‘特定の位置から近い順’みたいな事ができます。)
よくあるサンプルでは、上記とは逆になってる場合が多いと思います。
(Xで経度、Yで緯度が取れる方が自然なので)
ただ、今回の場合はとある事情で順番を逆にした方が見やすかったのです・・。