1. 程式人生 > >Python地學分析 — 建立向量資料緩衝區 06

Python地學分析 — 建立向量資料緩衝區 06

歡迎關注博主的微信公眾號:“智慧遙感”。

該公眾號將為您奉上Python地學分析、爬蟲、資料分析、Web開發、機器學習、深度學習等熱門原始碼。

Python的小夥伴們,你們好!上一節講的是向量資料重疊面積的解析應用,本節的應用主要建立緩衝區,來統計緩衝區內的向量點的個數,希望對大家有所幫助。

本人的GitHub程式碼資料主頁(持續更新中,多給Star,多Fork):

https://github.com/xbr2017

CSDN也在同步更新:

https://blog.csdn.net/XBR_2014

~~~~~~~~~~~~~~~~~~~~~~~~~~

程式設計環境:

作業系統:windows

Python版本:2.7

IDE版本:PyCharm 2018.2.4專業版

~~~~~~~~~~~~~~~~~~~~~~~~~~

分析地理特徵時的另一個常見問題是確定它們彼此之間的距離。例如,住房剛需者在買房前很可能綜合考慮多個候選小區到其周邊學校、醫院、超市、公交站等基礎設施的實際距離。此時,本節的知識可能就會有助於購房者先進行空間分析,再作出買房的決定。

OGR包含兩個測量工具:一個用於測量幾何之間的距離,另一個用於建立緩衝多邊形。緩衝區是一個多邊形,它與原始幾何體之間的距離延伸一定距離。 

點、線、多邊形緩衝區示意圖

這裡以美國有多少城市距離火山點15KM以內為例,下圖是美國地區城市(灰色點)與火山(紅色三角)分佈圖。

先將火山資料集緩衝15KM,由於整個圖層上沒有緩衝功能,因此需要單獨緩衝每個火山點並將其新增到臨時圖層。完成後,可以將緩衝層與城市圖層相交,以獲得落在該15KM半徑範圍內的城市數量。最後輸出符合要求的城市數量,具體實現程式碼如下:

# _*_ coding: utf-8 _*_
__author__ = 'xbr'
__date__ = '2018/11/6 12:17'

from osgeo import ogr

shp_ds = ogr.Open(r'D:\osgeopy-data\US')
volcano_lyr = shp_ds.GetLayer('us_volcanos_albers')  # 火山向量資料
cities_lyr = shp_ds.GetLayer('cities_albers')  # 城市向量資料
memory_driver = ogr.GetDriverByName('memory')
memory_ds = memory_driver.CreateDataSource('temp')
buff_lyr = memory_ds.CreateLayer('buffer')  # 建立緩衝區
buff_feat = ogr.Feature(buff_lyr.GetLayerDefn())
for volcano_feat in volcano_lyr:
    buff_geom = volcano_feat.geometry().Buffer(15000)  # 建立15KM的緩衝區
    tmp = buff_feat.SetGeometry(buff_geom)
    tmp = buff_lyr.CreateFeature(buff_feat)

result_lyr = memory_ds.CreateLayer('result')
# 將火山點與城市向量進行重疊
buff_lyr.Intersection (cities_lyr, result_lyr)
# 統計15KM內城市的個數
print('Cities: {}'.format(result_lyr.GetFeatureCount()))

可以分析出有72個城市距離火山點在15KM範圍之內:

Cities: 72