2010-12-19 51 views
0

我是MySQL的新手,它融化了我的大脑!MySQL地理信息系统/空间扩展 - 融化我的大脑

我创建了一个表“的地方”像这样:

CREATE TABLE `places` (
    `id` int(6) unsigned zerofill NOT NULL auto_increment, 
    `business_name` varchar(100) NOT NULL, 
    `street_postcode` varchar(10) NOT NULL, 
    `longitude` decimal(22,20) NOT NULL, 
    `latitude` decimal(22,20) NOT NULL, 
    `coord` point NOT NULL, 
    UNIQUE KEY `id` (`id`), 
) ENGINE=InnoDB AUTO_INCREMENT=25080 DEFAULT CHARSET=utf8 

ID,BUSINESS_NAME和street_postcode其中插入到表

我然后用经度和纬度更新的表在PHP中的坐标为所以:

UPDATE `places` SET `longitude` = '".$longitude."', `latitude` = '".$latitude."', `coord` = GeomFromText('POINT(".$coord.")') WHERE `id` = '".$row->id."' LIMIT 1 

这一切似乎都很顺利,但我试图找到最接近X坐标的位置时卡住了。我如何找到X经度和纬度10个最近的地方?

这似乎并不工作:

SELECT business_name, street_postcode, ROUND(GLength(LineStringFromWKB(LineString(AsBinary(coord), AsBinary('51.49437081 -0.2275573'))))) 
AS distance FROM places ORDER BY distance ASC LIMIT 10; 

永恒在此先感谢!

回答

1

这是因为空间函数在MySQL中并没有真正实现。他们剔除了所有的代码,但没有实现所有的方法。

我推荐使用PostGIS或SpatiaLite。

+1

请参阅:http://dev.mysql.com/doc/refman/5.5/en/relations-on-geometry-mbr.html – 2011-02-24 09:48:12

+0

是的,我很肯定在5.5他们已经开始实施更多的空间功能,但仅限于MyISAM表类型(这对您的数据库是一个相当大的限制) http://dev.mysql.com/doc/refman/5.5/en/creating-spatial-indexes.html – TheSteve0 2013-10-07 04:37:42