ユーザ用ツール

サイト用ツール


mysqlのgeometry型空間情報データ
Writing /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/lei_wiki/data/cache/8/852a8af21a05efb86a582377d2de3927.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /var/www/vhosts/w629.ws.domainking.cloud/enjoy-lei.com/lei_wiki/data/cache/8/852a8af21a05efb86a582377d2de3927.metadata failed

SQLでよく使う関数

MySQLのgeometry型空間情報データ

まずテーブルを作る時の型設定

'latlng' geometry NOT NULL,
'zoom' tinyint(2) unsigned default NULL,

インサート文

INSERT INTO 'spot' ('name', 'latlng', 'zoom') VALUES ('アシアル株式会社', GeomFromText('POINT(139.762522 35.706752)'), 19);

SELECT文

SELECT * FROM spot;これだと「latlng」カラムデータがおかしくなるから、

このポイント周辺のデータを取り出す。 これを使わないといけない。

SELECT id, name, X(latlng) as lng, Y(latlng) as lat, zoom, AsText(latlng) as geomtext FROM spot;
SELECT id, name, X(latlng) as lng, Y(latlng) as lat, zoom 
FROM spot
WHERE MBRContains(GeomFromText('LineString(140.05508422851562 36.00134056648952, 139.20089721679688 35.55345722493522)'), latlng);

実際のサンプル

位置情報を取得する

SELECT 
id
, X(`latlng`)AS lon
, Y(`latlng`)AS lat
, ASTEXT(`latlng`)AS geomtext
FROM`db_tbl` 
LIMIT 0 , 30
結果:
id	lon	lat	geomtext
1	35.713768	139.777254	POINT(35.713768 139.777254)
2	35.713768	139.777254	POINT(35.713768 139.777254)
3	35.713768	139.777254	POINT(35.713768 139.777254)
4	35.713768	139.777254	POINT(35.713768 139.777254)
10	35.713768	139.777254	POINT(35.713768 139.777254)
9	35.713768	139.777254	POINT(35.713768 139.777254)
7	35.713768	139.777254	POINT(35.713768 139.777254)
8	35.713768	139.777254	POINT(35.713768 139.777254)
11	35.713768	139.777254	POINT(35.713768 139.777254)

指定した範囲内の位置情報を取得する

SELECT 
id
, X(`latlng`)AS lon
, Y(`latlng`)AS lat
FROM`db_tbl` 
WHERE 
MBRContains(
 GeomFromText(
  'LineString( 139.787254 35.743768, 139.777232 35.713736)' 
 ) 
 ,`latlng`
) 
LIMIT 0 , 30

結果:
返り値が空でした(行数0) ( クエリの実行時間 0.0002 秒 )

2点間で一番近い位置情報を取得する

SELECT 
id
, X(`latlng`)AS lon
, Y(`latlng`)AS lat
, GLength(
 GeomFromText(
   CONCAT(
   'LineString(139.777254 35.713768,', X(`latlng`) ,' ', Y(`latlng`) ,')'
   )
  )
 )AS len
FROM`db_tbl`
MBRContains(
GeomFromText(Concat(
'LineString(',139.777254 + 0.1,' ',35.713768 + 0.1,',',139.777254 - 0.1,' ',35.713768 - 0.1,')'))
,latlng)
AND
TO_DAYS(date) - TO_DAYS(NOW()) < 5

LIMIT 0 , 30
結果:
 id	lon	lat	len
1	35.713768	139.777254	147.1679932
2	35.713768	139.777254	147.1679932
3	35.713768	139.777254	147.1679932
4	35.713768	139.777254	147.1679932
10	35.713768	139.777254	147.1679932
9	35.713768	139.777254	147.1679932
7	35.713768	139.777254	147.1679932
8	35.713768	139.777254	147.1679932
11	35.713768	139.777254	147.1679932

とても参考になったサイト http://www.s-quad.com/wordpress/?p=1198

mysqlのgeometry型空間情報データ.txt · 最終更新: 2013/11/28 11:16 by luis_lee