創(chuàng)建Shapefile文件并寫入數(shù)據(jù)的例子
基本思路
使用GDAL創(chuàng)建Shapefile數(shù)據(jù)的基本步驟如下:
使用osgeo.ogr.Driver的CreateDataSource()方法創(chuàng)建osgeo.ogr.DataSource矢量數(shù)據(jù)集
使用osgeo.ogr.DataSource的CreateLayer()方法創(chuàng)建一個圖層
使用osgeo.ogr.FieldDefn()定義Shapefile文件的屬性字段
創(chuàng)建osgeo.ogr.Feature對象,設置每個屬性字段的值,使用Feature對象的SetGeometry()定義幾何屬性
創(chuàng)建Feature對象以后,使用osgeo.ogr.Layer的CreateFeature()添加Feature對象到當前圖層
重復步驟4和5依次添加所有的Feature到當前圖層即可
代碼實現(xiàn)
下面的例子中,我們讀取GeoJSON表示的中國省區(qū)數(shù)據(jù),然后其轉(zhuǎn)為Shapefile格式。
GeoJSON編碼片段如下:

可以看到每個Feature都有一個properties字段和geometry字段,我們需要根據(jù)properties字段的信息創(chuàng)建Shapefile數(shù)據(jù)的屬性表,根據(jù)geometry字段創(chuàng)建Shapefile中的幾何數(shù)據(jù)。
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)
# 創(chuàng)建DataSource
driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.CreateDataSource('China.shp')
# 創(chuàng)建WGS84空間參考
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)
# 創(chuàng)建圖層
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)
# 創(chuàng)建Feature
layer.CreateFeature(feature)
del feature
ds.FlushCache()
del ds
以上這篇創(chuàng)建Shapefile文件并寫入數(shù)據(jù)的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python matplotlib擬合直線的實現(xiàn)
這篇文章主要介紹了python matplotlib擬合直線的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
python虛擬環(huán)境創(chuàng)建的兩種方法
本文主要介紹了python虛擬環(huán)境創(chuàng)建的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
如何在Win10系統(tǒng)使用Python3連接Hive
這篇文章主要介紹了如何在Win10系統(tǒng)使用Python3連接Hive,幫助大家更好的利用python讀取數(shù)據(jù),進行探索、分析和挖掘工作。感興趣的朋友可以了解下2020-10-10
淺析python中numpy包中的argsort函數(shù)的使用
這篇文章主要介紹了python中numpy包中的argsort函數(shù)的使用,argsort()函數(shù)在模塊numpy.core.fromnumeric中,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2018-08-08
python網(wǎng)絡爬蟲之如何偽裝逃過反爬蟲程序的方法
本篇文章主要介紹了python網(wǎng)絡爬蟲之如何偽裝逃過反爬蟲程序的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

