創(chuàng)建Shapefile文件并寫(xiě)入數(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)建一個(gè)圖層
使用osgeo.ogr.FieldDefn()定義Shapefile文件的屬性字段
創(chuàng)建osgeo.ogr.Feature對(duì)象,設(shè)置每個(gè)屬性字段的值,使用Feature對(duì)象的SetGeometry()定義幾何屬性
創(chuàng)建Feature對(duì)象以后,使用osgeo.ogr.Layer的CreateFeature()添加Feature對(duì)象到當(dāng)前圖層
重復(fù)步驟4和5依次添加所有的Feature到當(dāng)前圖層即可
代碼實(shí)現(xiàn)
下面的例子中,我們讀取GeoJSON表示的中國(guó)省區(qū)數(shù)據(jù),然后其轉(zhuǎn)為Shapefile格式。
GeoJSON編碼片段如下:

可以看到每個(gè)Feature都有一個(gè)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])
# 設(shè)置Feature的幾何屬性Geometry
polygon = ogr.CreateGeometryFromJson(str(f['geometry']))
feature.SetGeometry(polygon)
# 創(chuàng)建Feature
layer.CreateFeature(feature)
del feature
ds.FlushCache()
del ds
以上這篇?jiǎng)?chuàng)建Shapefile文件并寫(xiě)入數(shù)據(jù)的例子就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
tensorflow之變量初始化(tf.Variable)使用詳解
今天小編就為大家分享一篇tensorflow之變量初始化(tf.Variable)使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python實(shí)現(xiàn)TCP/IP協(xié)議下的端口轉(zhuǎn)發(fā)及重定向示例
這篇文章主要介紹了Python實(shí)現(xiàn)TCP/IP協(xié)議下的端口轉(zhuǎn)發(fā)及重定向示例,以一個(gè)webpy站點(diǎn)在本機(jī)的兩個(gè)端口雙向通信下演示,需要的朋友可以參考下2016-06-06
Scrapy爬蟲(chóng)多線程導(dǎo)致抓取錯(cuò)亂的問(wèn)題解決
本文針對(duì)Scrapy爬蟲(chóng)多線程導(dǎo)致抓取錯(cuò)亂的問(wèn)題進(jìn)行了深入分析,并提出了相應(yīng)的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
python?魔法方法之?__?slots?__的實(shí)現(xiàn)
本文主要介紹了python?魔法方法之?__?slots?__的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
解決安裝tensorflow遇到無(wú)法卸載numpy 1.8.0rc1的問(wèn)題
今天小編就為大家分享一篇解決安裝tensorflow遇到無(wú)法卸載numpy 1.8.0rc1的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
python與mysql數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn)
這篇文章主要介紹了python與mysql數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python學(xué)習(xí)開(kāi)發(fā)之圖形用戶界面詳解
當(dāng)前流行的計(jì)算機(jī)桌面應(yīng)用程序大多數(shù)為圖形化用戶界面(Graphic User Interface,GUI),python也提供了多個(gè)圖形開(kāi)發(fā)界面的庫(kù),這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)開(kāi)發(fā)之圖形用戶界面的相關(guān)資料,需要的朋友可以參考下2021-08-08

