我發現如何找到包含在某個地點周圍繪製(使用haversine公式)MySQL中的圓圈所有的點了很多圈相交的所有多邊形。獲取與圍繞給定的點
我的函數應該返回至少與圓相交的所有多邊形。
如何創建該圈子?
如何檢查是否多邊形與圓的交點?
我發現如何找到包含在某個地點周圍繪製(使用haversine公式)MySQL中的圓圈所有的點了很多圈相交的所有多邊形。獲取與圍繞給定的點
我的函數應該返回至少與圓相交的所有多邊形。
如何創建該圈子?
如何檢查是否多邊形與圓的交點?
這是舊的,但它仍然是搜索此問題時最頂級的Google點擊之一。現有的答案是無用的,因爲它不能合理地在MySQL中使用 - 至少不能以任何具有遠程可接受性能的方式實現。
的解決方案是使用ST_Buffer與點/半徑:
ST_Buffer(point, radius)
示例查詢,一個表包含其中包含的多邊形數據的列「多邊形」,返回行與中心在圓點半徑爲9的mypoint相交:
SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9))
你忽略提及你是否在2D或3D工作。鑑於你說的circle
而不是sphere
,我假設你的意思是2D。
要查找與一個圓,你需要知道所有的相交多邊形:
一)每個多邊形(更具體地說,多邊形的中心的原點)。
b)圓的起源。
c)圓的直徑(或半徑)。
利用這些值,可以判定圓的中心和每個多邊形的中心之間的距離。如果圓心與多邊形中心之間的距離大小小於圓的半徑,則該多邊形相交。
我不是太相信你會怎麼插入一個SQL查詢這是你首先需要計算每個多邊形的幅度相對於圓,然後評估他們對圓的半徑。它已經有一段時間,因爲我已經寫了和SQL,但我想這將遵循以下的線某處:
爲進一步說明見這個方便的圖像:
這將只提供一個非常粗略的和基本的方法來確定交叉口這並沒有考慮到複雜的形狀。從本質上講,這更多地沿着球體與球體相交的線條,其中球體將包圍您的多邊形。它可能會在某些情況下提供誤報,但您可以輕鬆地將這些結果傳遞給更細粒度的碰撞檢測,以根據需要過濾結果。
希望有幫助!