WebGIS中一種根據網格索引判斷點麵關係的方法

2021-09-07 05:20:34 字數 1239 閱讀 9808

判斷點麵關係的演算法有很多,在我之前的博文中有一篇專門對其進行了描述:判斷點是否落在麵中的oracle儲存過程描述。其中提到了三種常見判斷點麵關係的演算法:

a差乘判別法(只針對凸多邊形)

b.面積判別法(只針對凸多邊形)

c.角度和判別法等(任意多邊形均可)

但是以上直接判斷點麵關係的演算法,其時間複雜度是相對很高的。假設乙個面有n個點,那麼判斷1個點與該面的關係所需要花費的時間為:n*n。

這裡,我要跟大家討論的是一種以數學公式為核心,通過建立高效的空間索引來快速提高點麵關係判斷的演算法。

如圖,有ab兩個多邊形,需要判斷p點是落在哪個多邊形?

建立覆蓋了a、b多邊形的格網,每個格網中包含了其屬於哪些多邊形的具體資訊。判斷點與面的關係時,首先獲得這個點落在哪個格網,然後獲取該格網隸屬於哪幾個多變形。比如以上的p點,我們獲取到p點所在的格網隸屬於兩個多邊形a和b。最後呼叫點麵關係演算法,判斷點p和麵a、b之間的關係。

生成的索引分為多邊形資訊索引和網格索引兩個,下面分別描述。

多邊形資訊索引中包含了三部分資訊:屬性資訊、幾何資訊、資訊大小。具體實現流程如下:

網格索引中包含這樣兩類資訊:網格編號、網格隸屬於的多邊形具體資訊(多邊形編號、多邊形標識)。具體實現流程如下:

這裡直接給出實現流程圖:

a.該演算法避免了判斷點屬於哪個多邊形時,要將所有多邊形都遍歷一遍,提高了效率。

b.當點所在網格只包含於乙個多邊形時,此時連點面具體關係判斷都能避免,進一步提高了效率。

c.多邊形資訊索引檔案中可以包含該多邊形的屬性資訊,在點麵關係判斷成功後,還能提取到該多邊形的屬性資訊,避免了對地理伺服器的依賴。

一種根據輸入動態執行函式

typedef int brewfunction 函式指標型別變數 typedef std map brewmap brewmap g brew map 全域性變數 define registerbrewfunction func namespace registerer func g regist...

JS中一種實現sleep函式的方案

困擾了我很久的問題,在此留個記錄 原生js setinterval和settimeout 近似遞迴的處理方法 因為js是單執行緒,所以計時器也是有順序的 問題描述 我想實現乙個網頁的左右滑動效果 不是切換 解決思路 給滑動寫乙個方法,執行一次移動一小點距離,n次後移動完整張,使用setinterva...

關於android中一種簡單的分享方式

目前第三方分享方式有兩種 優點 無縫整合,功能多 缺點 整合官方sdk包進行開發,且需要申請官方的授權 優點 及其簡單,不需要sdk和官方授權 這裡我介紹下第二種分享方式,這種分享方式在應用寶和android版百變相機中有應用。典型的 如下 override public void onclick ...