2013-08-02 47 views
0

我有以下的緯度和經度:MySQL無法檢查點是否在距離內... MBRContains查詢錯誤或錯誤?

lat - 18.9802767 
lng - 72.8142511 

我想下面的查詢爲地方withint從關注點10公里。

select mbrcontains(geomfromtext(
'LINESTRING(72.8993663648088 19.0702857,72.72913583519122 18.8902677)' 
), 
geomfromtext(
'point(18.9802767 72.8142511)' 
) ); 

的線串幾何對象是從我試圖確定確切點導出是內使用下式使用該方法的MySQL 5.1及以上從 this例如:

linestring(point(@lng+10/(111.1/cos(radians(@lat))),@lat+10/111.1), point(@lng-10/(111.1/cos(radians(@lat))),@lat-10/111.1))

從我所理解的點屬於最小邊界矩形(MBR)。但是查詢返回0作爲答案。以上是遵循 this示例中給出的原則。

查詢有什麼問題?我怎麼知道這個點是否在特定的地理空間距離之內(在這種情況下,MBR點是使用座標給出的10 kms來計算的:lat - 18.9802767, lng - 72.8142511)。

順便說一句,我正在使用MySQL 5.5.32。

回答

0

你的觀點不屬於該行的MBR。看起來您已經將線或點上的緯度或經度座標反轉。交換機在'point(18.9802767 72.8142511)' X和Y得到了這一點,這將是該行的MBR中:

POINT (72.8142511 18.9802767)

如果你綁到MySQL,你可以考慮升級到MySQL 5.6,然後使用緩衝區函數根據您的興趣點創建一個圓形區域,然後使用ST_Within在該圓形區域內找到任何東西。

如果你不綁定到MySQL,可以考慮PostGIS,它提供了一個很好的ST_DWithin函數,使得這些比較非常簡單。

+0

這是我用作給定的公式[這裏](http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long-points?lq= 1):線串(點(@ lng + 10 /(111.1/cos(弧度(@lat))),@ lat + 10/111.1),點(@ lng-10 /(111.1/cos(弧度(@lat ))),@ lat-10/111.1))' 所以'Linestring'幾何對象是從我試圖確定的確切點派生而來的。我在這裏做錯了什麼? – woofmeow

+0

您的線串可能是正確的,但是您傳遞給geomfromtext的點將x和y翻轉,這使得它遠離線串。我已經更新了我的答案,以使其更加清晰 – lreeder

+0

謝謝我認爲它現在的工作。儘管表中的問題仍然存在:-(無論如何,你能否通過cos解釋除法背後的邏輯? – woofmeow