我正在嘗試查詢 SQL 以回傳落在邊界框內的點。我找到的最好的答案是這種想法:
lng1 <= lng2 AND (lng1 <= lng AND lng <= lng2) /* both edges on same side */
OR
lng1 > lng2 AND (lng1 <= lng OR lng <= lng2) /* edges on opposite sides */
這可以在這里看到:DBfiddle
但是,我使用的是較新版本的 MySQL,我將坐標存盤為“點”型別。我一直試圖了解這個較新版本的 MySQL (8) 是否可以讓我更好地選擇帶有邊界框內的點的行,但我沒有運氣。這種能力存在嗎?
uj5u.com熱心網友回復:
MySQL對于簡單的邊界框可以很容易地做到這一點,但它不支持反子午線交叉框,所以這會很復雜。
如果你沒有任何穿過反正中線的盒子,你可以簡單地寫下這樣的運算式
ST_Intersects(
ST_MakeEnvelope(Point(lng1, lat1), Point(lng2, lat2)),
Point(lng, lat))
但是因為在 MySQL ST_MakeEnvelope只支持笛卡爾 CRS,你需要自己編碼反子午線交叉框,例如通過構造兩個框 - 一個從 lng1 到 180,一個從 -180 到 lng2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/395391.html
