建立Shapefile檔案並寫入資料的例子
阿新 • • 發佈:2020-01-09
基本思路
使用GDAL建立Shapefile資料的基本步驟如下:
使用osgeo.ogr.Driver的CreateDataSource()方法建立osgeo.ogr.DataSource向量資料集
使用osgeo.ogr.DataSource的CreateLayer()方法建立一個圖層
使用osgeo.ogr.FieldDefn()定義Shapefile檔案的屬性欄位
建立osgeo.ogr.Feature物件,設定每個屬性欄位的值,使用Feature物件的SetGeometry()定義幾何屬性
建立Feature物件以後,使用osgeo.ogr.Layer的CreateFeature()新增Feature物件到當前圖層
重複步驟4和5依次新增所有的Feature到當前圖層即可
程式碼實現
下面的例子中,我們讀取GeoJSON表示的中國省區資料,然後其轉為Shapefile格式。
GeoJSON編碼片段如下:
可以看到每個Feature都有一個properties欄位和geometry欄位,我們需要根據properties欄位的資訊建立Shapefile資料的屬性表,根據geometry欄位建立Shapefile中的幾何資料。
from osgeo import ogr from osgeo import osr import json import os os.environ['SHAPE_ENCODING'] = "utf-8" with open('China.json') as f: china = json.load(f) # 建立DataSource driver = ogr.GetDriverByName('ESRI Shapefile') ds = driver.CreateDataSource('China.shp') # 建立WGS84空間參考 srs = osr.SpatialReference() srs.ImportFromEPSG(4326) # 建立圖層 layer = ds.CreateLayer('province',srs,ogr.wkbPolygon) # 新增屬性定義 fname = ogr.FieldDefn('Name',ogr.OFTString) fname.SetWidth(24) layer.CreateField(fname) fcx = ogr.FieldDefn('CenterX',ogr.OFTReal) layer.CreateField(fcx) fcy = ogr.FieldDefn('CenterY',ogr.OFTReal) layer.CreateField(fcy) # 變數GeoJSON中的features for f in china['features']: # 新建Feature並且給其屬性賦值 feature = ogr.Feature(layer.GetLayerDefn()) feature.SetField('Name',f['properties']['name']) feature.SetField('CenterX',f['properties']['cp'][0]) feature.SetField('CenterY',f['properties']['cp'][1]) # 設定Feature的幾何屬性Geometry polygon = ogr.CreateGeometryFromJson(str(f['geometry'])) feature.SetGeometry(polygon) # 建立Feature layer.CreateFeature(feature) del feature ds.FlushCache() del ds
以上這篇建立Shapefile檔案並寫入資料的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。