我的烏拉拉練功坊

請來參觀移植到 Google Firebase 的成績 https://oolala.xyz/ken73chen/

2012年6月15日

mysql 的 spatial extensions

怎麼存位置?我建議是多多用 command line 了解一下特性,再著手使用。例如說要 存一個長方形,可以先這樣看:

mysql> SELECT AsText(Envelope(GeomFromText('LineString(1 1,5 5)')));
+-------------------------------------------------------+
| AsText(Envelope(GeomFromText('LineString(1 1,5 5)'))) |
+-------------------------------------------------------+
| POLYGON((1 1,5 1,5 5,1 5,1 1)) |
+-------------------------------------------------------+
1 row in set (0.00 sec)


這個長方形的端點兩端的座標是 1 1 和 5 5,用 Envelope 封起來,就會變成一個長 方形,四個點的座標就是 SELECT 出來的結果。

當然也可以直接存

GeomFromText('POLYGON((1 1,5 1,5 5,1 5,1 1))')

加上 AsText 是把結果給人看,要存到 db 裡面,就把 AsText 拿掉。

點 2 2 有沒有在長方形裡面?

mysql> SELECT MBRContains(Envelope(GeomFromText('LineString(1 1,5 5)')),GeomFromText('POINT(2 2)')) AS ret;
+------+
| ret |
+------+
| 1 |
+------+
1 row in set (0.00 sec)


點 8 8 沒有沒有在長方形裡面?

mysql> SELECT MBRContains(Envelope(GeomFromText('LineString(1 1,5 5)')),GeomFromText('POINT(8 8)')) AS ret;
+------+
| ret |
+------+
| 0 |
+------+
1 row in set (0.00 sec)