Re: [MySQL ] 所在位置
版本是 Server version: 5.1.36-log MySQL Community Server (GPL)
CREATE TABLE `UserLocation` (
`ID` int(20) NOT NULL DEFAULT '0',
`location` point NOT NULL,
PRIMARY KEY (`ID`),
SPATIAL KEY `location` (`location`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
location 那個欄位就可以存入使用者的經緯度了。
INSERT INTO `UserLocation` SET `ID`=123,`location`=GeomFromText('POINT($lng $lat)')
mysql> SELECT X(location),Y(location) FROM UserLocation LIMIT 1;
+---------------+--------------+
| X(location) | Y(location) |
+---------------+--------------+
| 121.698457484 | 25.091923619 |
+---------------+--------------+
1 row in set (0.00 sec)
然後你要列出在某個區域裡面的人..
SELECT ID FROM UserLocation JOIN Area WHERE MBRContains(Area.polygon,location)
(這行沒測過, 只拿我目前在用的改一改)
記得,要對地理位置設定索引的話,是 "SPATIAL KEY",不能用 phpmyadmin,加了索引
速度,當然就快很多了!
但是要怎麼把「松山區」放到資料庫裡面,這個我就不知道了....我只會放過四角形。
※ 引述《evilkids (背著蒙古包睡你家)》之銘言:
: 假設現在小明在台北市松山區
: 有GPS手機可以定位
: 他的經緯度座標上傳到server
: 我要如何藉由經緯度
: 就知道他在台北市松山區??
: 現在MySQL有支援這種空間的計算嗎?
: 現在想法是
: 我把每個區域的邊界座標找出來 (每個區域等於一個多邊形)
: 座標資訊先存在資料庫裡
: 然後藉由比對小明的經緯度
: 去判斷他在哪一區
: 可是這樣要一個區塊一個區塊慢慢比對 好像有點慢 -.-
: 一個人還好
: 一百個人同時比對的話
: 好像就會拖垮效能了(?)
: 有沒有更有效率的方法 orz
: 還有一個問題是
: 通常在存經緯度座標時
: 大家是切兩個欄位分別去存X和Y座標?
: 還是MYSQL有特定格式可以存經緯度阿?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.166.132.94
※ 編輯: KC73 來自: 118.166.132.94 (10/15 03:30)
討論串 (同標題文章)