您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何創建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文件并寫入數據”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。