2010-12-19 18 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

相關問題