2010-07-09 36 views
4

我在一個MySQL數據庫中有一個POINT類型的空間幾何列的表。我希望能夠在地圖中心獲取一個點,並查找X英里(或任何距離)內的所有記錄。我似乎無法找到一個很好的例子或解釋如何做到這一點,並沒有嚴重到幾何數學。我很高興能夠走這條路,但首先會嘗試用真正的空間數據庫來解決它。如何使用MySQL空間查詢來查找X半徑中的所有記錄?

+0

只是想要說明的是,我正試圖用數據點的技術來解決這個問題(並不精確,但現在就試試這個)。我的查詢看起來像這樣。 SELECT * from business WHERE MBRContains(GeomFromText('Polygon((30 -100,30 -90,25 -90,25 -100,30 -100))'),geolocation) 我在表中有一條記錄經度爲39,長度爲-94。據我瞭解,這應該顯示在結果集中,而不是。所以這是另一個問題。 – 2010-07-09 00:46:58

+0

你做錯了(或者只是複雜)。使用https://github.com/anthonymartin/GeoLocation.php在PHP中計算邊界框,然後查詢「WHERE lat BETWEEN minL AND maxL AND lon BETWEEN minO AND maxO'。這是方形區域搜索而不是圓形,但是您的網絡地圖是矩形,不是嗎? – Slawa 2014-02-25 13:00:47

回答

3

它不會工作,因爲MySQL實際上沒有實現代碼來實現這個工作。他們只使用邊界框查詢。

注意有沒有在這裏列出的功能: http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html

我會建議使用的PostGIS或Spatialite代替。

+3

從MySQL 5.6.1開始不再是這樣:http://dev.mysql.com/doc/refman/5.6/en/functions-for-testing-spatial-relations-between-geometric-objects.html#function_st包含。但我還不能證實這些功能的表現。 – 2012-01-25 22:03:28

+0

同意 - 事情已經改變與MySQL 5.6.1,但我還沒有測試 – TheSteve0 2012-03-21 07:23:01

+1

我看到在該資源上列出的噸功能。你能澄清嗎? – 2012-07-25 15:33:21