簡體   English   中英

MySQL無法檢查點是否在距離之內……MBR包含查詢錯誤還是錯誤?

[英]MySQL can't check if point is within distance … MBRContains query mistake or Bug?

我具有以下經度和緯度:

lat - 18.9802767 
lng - 72.8142511 

我正在嘗試對距景點10公里以內的地方進行以下查詢。

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

Linestring幾何對象是從我試圖確定的確切點派生的,該點是在使用mysql 5.1及更高版本的方法中,從示例中使用以下公式:

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 以上是遵循示例中給出的原理。

查詢出了什么問題? 我怎么知道該點是否在某個地理空間距離內(在這種情況下,MBR點是使用距坐標lat - 18.9802767, lng - 72.8142511給定點的10公里來計算的)。

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

您的點不在線的MBR范圍內。 看起來您已經顛倒了直線或點上的緯度或經度坐標。 'point(18.9802767 72.8142511)'切換X和Y以獲取該點,該點將位於該行的MBR范圍內:

POINT (72.8142511 18.9802767)

如果您綁定到MySQL,則可以考慮更新到MySQL 5.6,然后使用Buffer函數從您的興趣點創建一個圓形區域,然后使用ST_Within在該圓形區域中查找任何內容。

如果您不依賴MySQL,可以考慮PostGIS,它提供了一個不錯的ST_DWithin函數,使這些比較非常容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM