1. 程式人生 > 程式設計 >建立Shapefile檔案並寫入資料的例子

建立Shapefile檔案並寫入資料的例子

基本思路

使用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檔案並寫入資料的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。