[英]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.