簡體   English   中英

為什么這個 MySQL 空間查詢返回假行?

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

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