今回は、位置情報(緯度、経度)の保存方法を紹介します。
これもまた得意のググりで見つけたものです。
・位置情報サービスのはじめ方
・Google MapsとMySQLの連携
MySQL(v5.0)のGeometry型.... 便利そう!とういうことで使ってみることにしました。
....
くわしいことは、先輩方のサイトを参考にしてください。詳しく載ってます。
ここでは、ポイントだけ。※ 例の位置情報は適当です。
1.Geometry型とは
MySQL4.1以降で用意されている空間情報を扱うデータ型
2.テーブル定義
対象カラムの型をGeometryとするだけ。
CREATE TABLE points ( point_id INT NOT NULL ,latlon GEOMETRY NOT NULL ,PRIMARY KEY (point_id) ,SPATIAL KEY (latlon) ) Engine=MyISAM;latlonカラムをSPATIAL INDEXとするため、MyISAMで使用します。
3.データの挿入
INSERT INTO points ( point_id ,latlon ) VALUES ( 1 ,GeomFromText('POINT(137.111 35.222)') );GeomFromTextはGeometry型に変換するMySQLの関数です。
4.データの取得
① 位置情報を取得する
SELECT point_id ,X(latlon) as lon ,Y(latlon) as lat ,ASTEXT(latlon) as geomtext FROM points;Xは経度、Yは緯度、ASTEXTは文字表現を返す関数です。
② 指定した範囲内の位置情報を取得する
SELECT point_id ,X(latlon) as lon ,Y(latlon) as lat FROM points WHERE MBRContains(GeomFromText('LINESTRING(140.00 36.00, 139.20 35.55)'), latlon);MBRContains、LINESTRING関数については、このサイトに詳しく載ってます。
③ 2点間で一番近い位置情報を取得する
SELECT point_id ,X(latlon) as lon ,Y(latlon) as lat ,GLength(GeomFromText(CONCAT('LineString(137.111 35.222,', X(latlon), ' ', Y(latlon),')'))) AS len FROM points ORDER BY len LIMIT 0 , 1GLength関数は、2点間の距離を取得します。
かなり、省略してしまいましたが、こんな感じです。
足りない情報は、追記していきます。では。
0 件のコメント:
コメントを投稿