作者KC73 (肯先生)
看板Database
标题Re: [MySQL ] 所在位置
时间Thu Oct 15 03:28:21 2009
版本是 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)