我需要將給定點(lat,lon)與幾個多邊形進行匹配,以確定是否存在匹配。在多個多邊形上搜索點的最佳方法
最簡單的方法是遍歷每個多邊形並應用點多邊形檢查算法,但這是非常昂貴的。
我做的下一個優化是爲每個多邊形(上邊界,下邊界)定義一個邊界矩形,並針對每個邊界框迭代檢查點(比較檢查多邊形中所有點的比較較少)。
是否有其他優化可能?綁定矩形點上的空間索引或geohash會有幫助嗎?
我需要將給定點(lat,lon)與幾個多邊形進行匹配,以確定是否存在匹配。在多個多邊形上搜索點的最佳方法
最簡單的方法是遍歷每個多邊形並應用點多邊形檢查算法,但這是非常昂貴的。
我做的下一個優化是爲每個多邊形(上邊界,下邊界)定義一個邊界矩形,並針對每個邊界框迭代檢查點(比較檢查多邊形中所有點的比較較少)。
是否有其他優化可能?綁定矩形點上的空間索引或geohash會有幫助嗎?
進一步優化:
邊界框的想法是好的。檢查點是否在邊界框中速度非常快。
如果您還需要更多的速度,你可以做更多的預先計算是這樣的:
在搜索時,這樣做:
我已經使用了這個算法幾次,它非常快。通過改變分塊大小,你可以選擇內存佔用和性能之間取得平衡:
想到的極端情況:
覆蓋整個地圖的一個巨大的瓷磚:
你會得到你的地圖中所有元素的一個列表,你必須檢查所有的邊界框。
非常小的瓷磚(每個國家只有一個多邊形的地圖只有1x1米):
您將獲得大量瓷磚。所有的多邊形將被分割成多個瓦片,每個瓦片將只有一個多邊形。但是,一旦你發現了哪個點(快),幾乎100%肯定只有一個多邊形需要檢查。
你需要在兩者之間的某個地方。如果您只需要這一段時間,則可能需要在性能上選擇較低的內存佔用量。最佳瓷磚尺寸也取決於多邊形尺寸的均勻性。所以,沒有自動的方法來計算最佳的瓷磚尺寸,你只需稍微調整一下,直到你找到正確的尺寸。