[英]Why is this MySQL spatial query returning false rows?
我正在根據列 'latlng' 的空間值提取行,但我正在獲取查詢使用的多邊形之外的值。 例如,其中一個返回值位於多邊形外近 5 英里處的 39.245231、-094.41976。 我的查詢有什么問題?
SELECT class, address, latitude, longitude, callsign,
CONCAT(latitude,',',longitude) as koords,
CONCAT(name,'<br>',address,'<br>',city,'<br>',latitude,', ',longitude) as addr,
REPLACE(tactical,'-','') AS tactical
FROM poi
WHERE MBRContains(GeomFromText('POLYGON(( 39.6697989 -95.029305 , 39.6697989 -94.293333 , 38.899486 -94.293333 , 38.899486 -95.029305 , 39.6697989 -95.029305 ))'),latlng)
AND class = 'Sheriff'
ORDER BY class
您可以查看正在生產的 map; https://net-control.us/map1Rose3.php單擊右下角的“警察”標記以查看返回值。 map 顯示 4 個藍色標志標記多邊形的邊界,紅色標志是中心。 以及多邊形外部的兩個“P”標記。
MBRContains()
是最小邊界矩形 function。 它計算它的第一個參數的最小邊界矩形——在它周圍畫一個框——然后檢查第二個參數是否在那個框內。 它的設計目的是在計算機周期和 IO 中使用便宜,但權衡的是它可以拾取 MBR 中但多邊形之外的項目。
嘗試ST_Contains()
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.