[英]Point in Polygon: Invalid GIS data provided to function st_within
[英]mysql GIS (point within polygon and near by points)
我已經看到了這個問題: 看看lat / long是否屬於使用mysql的多邊形
這表明mysql GIS擴展尚未完全實現。 有人可以為我清除這個 - 這是否意味着如果我存儲了一個多邊形並想要檢測一個點是否落在某個多邊形內,它將不會100%准確? 如果是這樣,它會有多准確?
此外,這需要的SQL,在我的頭頂,它將是這樣的東西:
SELECT * WHERE WITHIN(POINT(_LAT_ _LONG_), `polygon`)
(其中polygon是一個表列,並且該點是根據給定的lat和long值構造的。)
如果精度足夠,你會如何找到接近給定Lat和Long的點? 關於使用COS / SQRT或內置DISTANCE功能有不同的意見,這是最好的和/或最好的方法嗎?
實質上:
根據文檔 ,除Distance()和Related()之外的所有函數僅測試MBR關系。
目前,MySQL沒有根據規范實現這些功能。 實現的那些返回與相應的基於MBR的函數相同的結果。 這包括除Distance()和Related()之外的以下列表中的函數。
不可能說MBR測試的准確性是否足夠,因為這很大程度上取決於多邊形的形狀。
“mySQL GIS擴展是否適用於檢測點是否在多邊形內(必須相當准確,多邊形不是定義的形狀或大小)?”
沒有。
如果可以,請使用PostGIS。
替代方案可以是針對多邊形點問題實現Ray Casting算法 。
它似乎完全在MySQL5.6.1及更高版本( Docs )中實現。
MySQL最初實現了這些函數,使得它們使用對象邊界矩形並返回與相應的基於MBR的函數相同的結果。 從MySQL 5.6.1開始,可以使用相應的版本來使用精確的對象形狀。 這些版本以ST_前綴命名。 例如,Contains()使用對象邊界矩形,而ST_Contains()使用對象形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.