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

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、點在多邊形內外的判斷

5、曼哈頓距離算法(Manhattan Distance)
曼哈頓距離算法,簡單來講其實就是根據曼哈頓距離來計算最優路徑的算法,是一種啟發式的尋路算法,對網絡結構的要求是規則。
6、迪傑斯特拉算法(Dijkstra)
迪傑斯特拉算法(Dijkstra)是由荷蘭計算機科學家狄克斯特拉於1959 年提出的,因此又叫狄克斯特拉算法。是從一個頂點到其余各頂點的最短路徑算法,解決的是有權圖中最短路徑問題。迪傑斯特拉算法主要特點是從起始點開始,采用貪心算法的策略,每次遍歷到始點距離最近且未訪問過的頂點的鄰接節點,直到擴展到終點為止。
Dijkstra算法,簡單講是一種貪心算法,通關權重矩陣進行計算,利用廣度優先算法不停找其相鄰點的過程,這個可以參考百度,百度說的很清楚。
7、弗洛伊德算法(Floyd)
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 三角網在離散點均勻分布的情況下能夠避免產生有過小銳角的三角形。

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


至於算法的重要性,算法是計算機科學領域最重要的基石之一,對於編程者來說,算法是解決問題的一種重要手段,現在不少人陷入了一個誤區,認為只有前沿的知識才是最重要的,這使他們在追逐前沿技術時忘記了那些根本的基礎的工具,整天趕時髦的人最后只懂得招式,沒有功力,是不可能成為高手的。
文中只提到了一些常用的GIS相關的算法,博主會在之后對這些相關算法的源碼進行公布,歡迎評論或后台留言!
掃碼關注公眾號