1. 程式人生 > 實用技巧 >盤點十大GIS相關演算法

盤點十大GIS相關演算法

1、道格拉斯-普克演算法(Douglas–Peucker)

道格拉斯-普克演算法(Douglas–Peucker algorithm,亦稱為拉默-道格拉斯-普克演算法、迭代適應點演算法、分裂與合併演算法)是將曲線近似表示為一系列點,並減少點的數量的一種演算法。該演算法的原始型別分別由烏爾斯·拉默(Urs Ramer)於1972年以及大衛·道格拉斯(David Douglas)和托馬斯·普克(Thomas Peucker)於1973年提出,並在之後的數十年中由其他學者予以完善。 演算法的基本思路是:對每一條曲線的首末點虛連一條直線,求所有點與直線的距離,並找出最大距離值d
max ,用dmax與限差D相比:若dmax <D,這條曲線上的中間點全部捨去;若dmax ≥D,保留dmax 對應的座標點,並以該點為界,把曲線分為兩部分,對這兩部分重複使用該方法。

簡單來講,其實就是一種壓縮演算法,對線要素進行壓縮,是一個重複的以直代曲的過程。

2、D8單流向演算法

ArcGIS水文分析的兩個重要的基礎,一是使用DEM進行分析,二是分析的基礎演算法為D8單流向演算法。
D8演算法是假定雨水降落在地形中某一個格子上,改格子的水流將會流向周圍8個格子地形最低的格子中。如果多個像元格子的最大下降方向都相同,則會擴大相鄰像元範圍,直到找到最陡下降方向為止。如圖所示


其流向則用2的n次方表示,從0開始,按照逆時針分別為遞增,其方位編碼如下圖所示

這樣編碼的好處自然是通過數學的方式,讓計算機可以非常快的使用二進位制進行索引,加快大區域的流量累計統計。

所以,D8 演算法又稱作單流向演算法。其特點就計算速度快,能夠很好的反應出地形對地表徑流形成的作用。但其弊端也是顯而易見。因為水流只流向一個方向,是單線傳遞,一旦遇到某一窪地的時候,周邊的水流都會集中向該窪地流入,導致斷流現象,而現實中由於水會向多個方位不定向的流動,是不會輕易導致斷流的。如果要避免這種情況發生,就需要對地形中的窪地進行填平,確保水流也能從該窪地流出。這就是為什麼水文分析工具中出現了一些與水文分析完全沒有關係的一個工具–填窪 。

從D8演算法可以看出,ArcGIS的水文分析工具是依賴無凹陷的DEM地形的,所以在分析之前都必須對DEM資料進行檢查。【匯】工具和【填窪】工具就是為了分析前查詢和填平窪地而生的,在使用水文分析之前必須要使用這兩個工具對DEM進行處理。

單流向演算法影響限制了ArcGIS水文分析工具的使用。尤其是地勢平坦的地區和人工干預比較多的城市區域,基本上不適用。因為地勢平坦導致水流無法沿某一方向流動而形成徑流。
另一種情況是事實上的斷流形成,如存在地表水流匯流入地下水系的情況。一旦出現流入地下暗河,D8演算法就完全失效。因此,在喀斯特地貌中同樣也不適用。

D8演算法是完全不考慮降雨的多少、土壤滲透率、植被吸水以及水流擋阻等水文過程,它只是假定有無限的降雨並最終匯聚水流形成徑流,並通過匯流範圍來定義最終的河流。因此,它只是一個徑流匯成河流的定性分析(儘管流量計算看起來是有定量因子),並不能通過其流量演算法去做水文的預報。

最常用的是D8演算法:假設單個柵格中的水流只能流入與之相鄰的8 個柵格中。它用最陡坡度法來確定水流的方向,即在3×3 的DEM 柵格上,計算中心柵格與各相鄰柵格間的距離權落差(即柵格中心點落差除以柵格中心點之間的距離),取距離權落差最大的柵格為中心柵格的流出柵格。
所謂最陡坡度法的原理是假設地表不透水,降雨均勻.那麼流域單元上的水流總是流向最低的地方 “視窗滑動指以計算單元為中心,組合其相鄰的若干個單元形成一個視窗”,以“視窗”為計算基本元素,推及整個DEM,求取最終結果。
目前應用最廣泛的是基於流向分析和匯流分析的流域特徵提取技術。Jenson and Domingue (1988)設計了應用該技術的典型演算法,該演算法包括3個過程:流向分析,匯流分析和流域特徵提取。
流向分析:以數值表示每個單元的流向。數字變化範圍是1~255。其中1:東;2:東南;4南;8:西南;16:西;32:西北;64:北;128:東北。除上述數值之外的其它值代表流向不確定,這是由DEM中 窪地”和“平地”現象所造成的。所謂“窪地”即某個單元的高程值小於任何其所有相鄰單元的高程。這種現象是由於當河谷的寬度小於單元的寬度時,由於單元的高程值是其所覆蓋地區的平均高程,較低的河谷高度拉低了該單元的高程。這種現象往往出現在流域的上游。“平地 指相鄰的8個單元具有相同的高程,與測量精度、DEM單元尺寸或該地區地形有關。這兩種現象在DEM 中相當普遍,Jenson andDomingue在流向分析之前,將DEM進行填充;將“窪地”變成“平地”,再通過一套複雜的迭代演算法確定“平地”流向。
匯流分析:匯流分析的主要目的是確定流路。在流向柵格圖的基礎上生成匯流柵格圖.匯流柵格上每個單元的值代表上游匯流區內流入該單元的柵格點的總數,既匯入該單元的流入路徑數(NIP),NIP較大者,可視為河谷,NlP等於0,則是較高的地方,可能為流域s的分水嶺。
提取流域特徵:有了流域匯流柵格圖就可以很方便地提取流域的各種特徵引數。例如模擬流域水系,可以設定一個NIP閾值,大於該值的格點為溝谷線上的點,連線各個溝谷線上的點就形成了河網。在匯流矩陣(匯流柵格)上求子流域的方法如下:從河谷單元或孤立的窪單元開始,向上遊搜尋所有流向該單元的單元,這些單元構成以開始單元為流域出口的子流域。模擬出水系及流域邊界後,利用GIS的相關函式,就可以很方便地得到流域的各項特徵引數,如河流的長度、坡癬、流域面積等。
詳細介紹

3、不規則多邊形面積計算

這個演算法的思想就是不停地將多邊形,劃分成n個三角形,然後計算每個三角形的面積,這個可以用線性代數的知識解決。

大家可以參考這個網址https://blog.csdn.net/lemongirl131/article/details/51130659

無論是凸多邊形還是凹多邊形都是適用的。

4、點在多邊形內外的判斷

① 角度和法 首先,假如在一個二維平面上,有一個多邊形和一點P,按順時針或逆時針方向計算每兩點與點P的角度求和,若角度和<360°(2π),則點P在多邊形外;若角度和=360°(2π),則點P在多邊形內;若角度和=180°(π),則點P在多邊形上; ② 射點法 首先,假如在一個二維平面上,有一個多邊形和一點P,從該點處向某一方向做一條射線,若點P在多邊形外,則該射線與多邊形的交點個數必為偶數(包括0);若點P在多邊形內,則該射線與多邊形的交點個數必為奇數。 還有一些特殊情況要考慮。假如考慮邊(P1,P2), 1)如果射線正好穿過P1或者P2,那麼這個交點會被算作2次,處理辦法是如果P的從座標與P1,P2中較小的縱座標相同,則直接忽略這種情況 2)如果射線水平,則射線要麼與其無交點,要麼有無數個,這種情況也直接忽略。 3)如果射線豎直,而P0的橫座標小於P1,P2的橫座標,則必然相交。 4)再判斷相交之前,先判斷P是否在邊(P1,P2)的上面,如果在,則直接得出結論:P再多邊形內部。 ③ 叉乘法 想象一個凸多邊形,將凸多邊形中每一個邊AB,與被測點P,求PA×PB。判斷結果的符號是否發生變化,如果沒有變化,P在多邊形內;反之點處於凸多邊形外。但對於凹多邊形不再適用。 其每一個邊都將整個2D螢幕劃分成為左右兩邊,連線每一邊的第一個端點和要測試的點得到一個向量v,將兩個2維向量擴充套件成3維的,然後將該邊與v叉乘,判斷結果3維向量中Z分量的符號是否發生變化,進而推匯出點是否處於凸多邊形內外。這裡要注意的是,多邊形頂點究竟是左手序還是右手序,這對具體判斷方式有影響。 前兩種方法適合於所有多邊形,最後一種只適合凸多邊形。

5、曼哈頓距離演算法(Manhattan Distance)

圖中紅線代表曼哈頓距離,綠色代表歐氏距離,也就是直線距離,而藍色和黃色代表等價的曼哈頓距離。曼哈頓距離——兩點在南北方向上的距離加上在東西方向上的距離,即d(i,j)=|xi-xj|+|yi-yj|。對於一個具有正南正北、正東正西方向規則佈局的城鎮街道,從一點到達另一點的距離正是在南北方向上旅行的距離加上在東西方向上旅行的距離,因此,曼哈頓距離又稱為計程車距離。曼哈頓距離不是距離不變數,當座標軸變動時,點間的距離就會不同。曼哈頓距離示意圖在早期的計算機圖形學中,螢幕是由畫素構成,是整數,點的座標也一般是整數,原因是浮點運算很昂貴,很慢而且有誤差,如果直接使用AB的歐氏距離(歐幾里德距離:在二維和三維空間中的歐氏距離的就是兩點之間的距離),則必須要進行浮點運算,如果使用AC和CB,則只要計算加減法即可,這就大大提高了運算速度,而且不管累計運算多少次,都不會有誤差。

曼哈頓距離演算法,簡單來講其實就是根據曼哈頓距離來計算最優路徑的演算法,是一種啟發式的尋路演算法,對網路結構的要求是規則。

6、迪傑斯特拉演算法(Dijkstra)

迪傑斯特拉演算法(Dijkstra)是由荷蘭電腦科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉演算法。是從一個頂點到其餘各頂點的最短路徑演算法,解決的是有權圖中最短路徑問題。迪傑斯特拉演算法主要特點是從起始點開始,採用貪心演算法的策略,每次遍歷到始點距離最近且未訪問過的頂點的鄰接節點,直到擴充套件到終點為止。

Dijkstra演算法,簡單講是一種貪心演算法,通關權重矩陣進行計算,利用廣度優先演算法不停找其相鄰點的過程,這個可以參考百度,百度說的很清楚。

7、弗洛伊德演算法(Floyd)

在電腦科學中,Floyd-Warshall演算法是一種在具有正或負邊緣權重(但沒有負週期)的加權圖中找到最短路徑的演算法。演算法的單個執行將找到所有頂點對之間的最短路徑的長度(加權)。 雖然它不返回路徑本身的細節,但是可以通過對演算法的簡單修改來重建路徑。 該演算法的版本也可用於查詢關係R的傳遞閉包,或(與Schulze投票系統相關)在加權圖中所有頂點對之間的最寬路徑。 Floyd-Warshall演算法是動態規劃的一個例子,並在1962年由Robert Floyd以其當前公認的形式出版。然而,它基本上與Bernard Roy在1959年先前發表的演算法和1962年的Stephen Warshall中找到圖形的傳遞閉包基本相同,並且與Kleene的演算法密切相關 在1956年)用於將確定性有限自動機轉換為正則表示式。演算法作為三個巢狀for迴圈的現代公式首先由Peter Ingerman在1962年描述。 該演算法也稱為Floyd演算法,Roy-Warshall演算法,Roy-Floyd演算法或WFI演算法。

Floyd演算法,簡單講就是三層迴圈遍歷,這個也可以參考百度。Dijkstra演算法和Floyd演算法跟計算機專業聯絡密切,不僅用於GIS中圖的最短路徑的研究,在運籌學等多方面應用廣泛,博主在前段時間的一個電影較大資料的人物關係查詢還曾用到這兩個演算法,希望讀者可以深入瞭解下。

8、泰森多邊形(Voronoi圖)

泰森多邊形又叫馮洛諾伊圖(Voronoi diagram),得名於Georgy Voronoi,是一組由連線兩鄰點線段的垂直平分線組成的連續多邊形組成。一個泰森多邊形內的任一點到構成該多邊形的控制點的距離小於到其他多邊形控制點的距離。泰森多邊形是對空間平面的一種剖分,其特點是多邊形內的任何位置離該多邊形的樣點(如居民點)的距離最近,離相鄰多邊形內樣點的距離遠,且每個多邊形內含且僅包含一個樣點。由於泰森多邊形在空間剖分上的等分性特徵,因此可用於解決最近點、最小封閉圓等問題,以及許多空間分析問題,如鄰接、接近度和可達性分析等。

也就是我們常說的Voronoi圖,百度講的也比較清楚。

9、狄洛尼三角網(Delaunay)

這個需要先講一下TIN,我們常說的TIN就是不規則三角網。

不規則三角網(TIN, Triangulated Irregular Network)模型採用一系列相連線的三角形擬合地表或其他不規則表面,常用來構造數字地面模型,特別是數字高程模型。最常用的生成方法是Delaunay 剖分方法。TIN在表示複雜表面方面具有許多優越性,國面被廣就應用於數字制用、地用表面的模型化及分析以及LIS中。

在所有可能的三角網中,狄洛尼(Delaunay)三角網在地形擬合方面運用的較普遍,因此常被用於TIN的生成。在狄洛尼三角網中的每個三角形可視為一個平面,平面的幾何特徵完全由三個頂點的空間座標值(x,y,z)所決定。儲存的時候,每個三角形分別構成一個記錄,每個記錄包括:三角形標識碼、該三角形的相鄰三角形標識碼、該三角形的頂點標識碼等。頂點的空間座標值則另外儲存。

狄洛尼三角網是在所有可能的三角網中,Delaunay 三角網在離散點均勻分佈的情況下能夠避免產生有過小銳角的三角形。

在地形擬合方面也表現得最為出色,所以,人們一般把TIN構建成Delaunay 三角網。

Delaunay三角網,全稱應該是狄洛尼不規則三角網(Delaunay Triangulated Irregular Network),主要就是應用於TIN的構建,立體模型的生成。

10、分形圖

人們談論分形,常常有兩種含義。 其一,它的實際背景是什麼?其二,它的確切定義是什麼? 數學家研究分形,是力圖以數學方法,模擬自然界存在的、及科學研究中出現的那些看似無規律的各種現象。在過去的幾十年裡,分形在物理學、材料科學、地質勘探、乃至股價的預測等方面都得到了廣泛的應用或密切的注意,並且由於分形的引入,使得一些學科煥發了新的活力。數學上所說的分形,是抽象的。而人們認為是分形的那些自然界的具體物件,並不是數學家所說的分形,而是不同層次近似。 1985年,曼德布羅特獲得Barnard獎章。這項獎勵專門頒發給那些在物理科學或者其它自然科學中有重大貢獻、有重大影響的人物。在每五年一次的獲獎者名單中,有愛因斯坦、費米這樣一批享譽世界的科學家,可見曼德布羅特的分形研究在科學上的地位和影響。1995年應中國科學界的邀請,曼德布羅特訪問中國並進行演講。 分形圖形同常見的工程圖迥然不同,分形圖形一般都有自相似性,這就是說如果將分形圖形的區域性不斷放大並進行觀察,將發現精細的結構,如果再放大,就會再度出現更精細的結構,可謂層出不窮,永無止境。藝術家在分形畫面的不同區域塗上不同的色彩,展現在我們面前的,將會是非常美麗的畫面。 幾乎在曼德布羅特獲得Barnard獎章的同時,以德國布來梅大學的數學家和計算機專家H.Peotgen與P.Richter等為代表,在當時最先進的計算機圖形工作站上製作了大量的分形圖案;J. Hubbard等人還完成了一部名為《混沌》的計算機動畫。接著,印刷著分形的畫冊、掛曆、明信片、甚至T恤衫紛紛出籠。 80年代中期開始,首先在西方發達國家,接著在中國,分形逐漸成為膾炙人口的詞彙,甚至連十幾歲的兒童也迷上了計算機上的分形遊戲。 我國北京的北方工業大學計算機圖形學小組於1992年完成了一部計算機動畫電影《相似》,這部電影集中介紹了分形圖形的相似性,這也是我國採用計算機數字技術完成的第一部電影,獲得當年電影電視部頒發的科技進步獎。 更多的人陶醉於分形,並非出自科學,而是傾心於分形之美。數學上的審美很難為一般人所理解:一大堆數字、公式、符號怎麼體現出來呢?然而,計算機能讓數學的某些內在的美直
觀呈現出來,給出其形式化的表達。分形作為一類例證,為數學理論與實踐中所蘊涵的美,給出了一類精彩的註記。充分反映了數學科學中的簡單、和諧、統一的內涵! 一方面,從來不以科學內容本身為主題的藝術創作,也大量引用“動力系統”、“迭代逼近”、“混沌吸引子”等科學術語,進而極力採用計算機繪圖手段,創造出無比神奇的作品。由這一點出發,可以說,藝術家已經開始漫步於科學領地! 另一方面,一向以嚴肅表情面向讀者的科學著作一反常態,書名也竟然浪漫起來:《The Beauty of Fractals》(分形之美)(1986),《Fractals Everywhere》(分形處處可見),《The Algorithmic Beauty of Plants》(植物演算法中的美)(1990), ….大量精美的、顯示分形的科學掛圖,喬裝打扮,在美術館展廳登場,接受藝術鑑賞家的評頭論足,科學家也從此跨入了神聖的藝術殿堂! 分形圖(11張) 分形之美,往往須經計算機的處理才能表現出來的。今天,人們可以在網路上,瀏覽與欣賞各種不同風格的分形作品,有的針對科學研究中要表達的一些特別的物件,有的則完全是藝術。網路天地會給你提供許多、美妙驚奇的分形圖畫,令你心獷神怡,也有時令你眼花繚亂。

關於分形圖,大家也可以看百度,簡單的瞭解沒有問題,當然博主更推薦相關書籍。

至於演算法的重要性,演算法是電腦科學領域最重要的基石之一,對於程式設計者來說,演算法是解決問題的一種重要手段,現在不少人陷入了一個誤區,認為只有前沿的知識才是最重要的,這使他們在追逐前沿技術時忘記了那些根本的基礎的工具,整天趕時髦的人最後只懂得招式,沒有功力,是不可能成為高手的。

文中只提到了一些常用的GIS相關的演算法,博主會在之後對這些相關演算法的原始碼進行公佈,歡迎評論或後臺留言!

掃碼關注公眾號