GIS空間分析之Buffer


版權聲明:本文爲博主原創文章,轉載請註明原文出處!

作者:阿振

寫作時間:2020-06-14 週末 夏夜


開篇

GIS空間分析是通過對GIS系統中的空間地物的空間位置以及分佈形態等空間特性進行分析推理等得到額外有用信息的過程。GIS空間分析包含廣泛的內容,是GIS系統的核心功能。

從這篇博文開始,我們會簡單介紹幾種GIS系統中最常見最簡單的空間分析功能,並使用Python的GDAL API進行實現。

首先,我們來看一下開源GIS軟件QGIS中提供的幾種簡單的空間分析工具,我們接下來的幾篇博文會介紹如何使用Python腳本實現這些功能。

QGIS空間分析

雖然,這些都是最基礎的空間分析操作,但是很多複雜的分析功能就是這些簡單操作的組合,所以掌握這些基礎操作很重要。

案例介紹

本文我們將使用緩衝區分析工具Buffer製作中國地圖的暈線。中國地圖邊界的暈線就是我們經常看到的國界外面的突出色淺色部分。

那麼我們如何製作暈線呢?一個解決方案是我們給國界做一個緩衝區,然後將緩衝區圖層放置在邊界圖層的上面就可以形成這樣的效果。

代碼展示

下面的代碼展示瞭如何製作面狀地物的緩衝區。

from pathlib import Path
import ogr

ogr.UseExceptions()

in_ds: ogr.DataSource = ogr.Open('../data/China.shp')
in_lyr: ogr.Layer = in_ds.GetLayer()

fname: str = 'Buffer.shp'
# 創建輸出Buffer文件
driver: ogr.Driver = ogr.GetDriverByName('ESRI Shapefile')
if Path(fname).exists():
    driver.DeleteDataSource(fname)
# 新建DataSource,Layer
out_ds: ogr.DataSource = driver.CreateDataSource(fname)
out_lyr: ogr.Layer = out_ds.CreateLayer(fname,
                                        in_lyr.GetSpatialRef(), ogr.wkbPolygon)
def_feature: ogr.FeatureDefn = out_lyr.GetLayerDefn()

# 遍歷原始的Shapefile文件給每個Geometry做Buffer操作
for feature in in_lyr:
    geometry = feature.GetGeometryRef()
    buffer = geometry.Buffer(20000.0)
    out_feature = ogr.Feature(def_feature)
    out_feature.SetGeometry(buffer)
    out_lyr.CreateFeature(out_feature)
    out_feature = None
out_ds.FlushCache()
del in_ds, out_ds

結果展示(紫色部分就是我們的緩衝區):

緩衝區分析

方法總結

  1. 首先我們使用Driver類的CreateDataSource()方法創建輸出緩衝區文件。
  2. 然後使用DataSource類的CreateLayer()方法創建一個圖層,該方法有三個參數,分別是圖層名,空間投影以及空間幾何體類型。這裏我們的空間投影直接從原始的Shapefile中進行讀取,輸入的空間幾何體類型設置爲ogr.wkbPolygon
  3. 加下來我們對原始數據圖層中的每個Feature要素進行遍歷,取出其中的Geometry,然後利用Geometry類的Buffer()方法生成新的緩衝區Feature。Buffer的參數是緩衝區的距離,距離的單位是投影座標系中的默認單位。
  4. 生成新的緩衝區Geometry以後,我們新建一個Feature並使用SetGeometry()將緩衝區Geometry設置爲該Feature的Geometry。最後使用CreateFeature()方法將該Feature添加到圖層中。
  5. 如此循環,直到遍歷完所有的Feature爲止。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章