創(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)建一個(gè)圖層
使用osgeo.ogr.FieldDefn()定義Shapefile文件的屬性字段
創(chuàng)建osgeo.ogr.Feature對象,設(shè)置每個(gè)屬性字段的值,使用Feature對象的SetGeometry()定義幾何屬性
創(chuàng)建Feature對象以后,使用osgeo.ogr.Layer的CreateFeature()添加Feature對象到當(dāng)前圖層
重復(fù)步驟4和5依次添加所有的Feature到當(dāng)前圖層即可
代碼實(shí)現(xiàn)
下面的例子中,我們讀取GeoJSON表示的中國省區(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文件并寫入數(shù)據(jù)的例子就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
tensorflow之變量初始化(tf.Variable)使用詳解
今天小編就為大家分享一篇tensorflow之變量初始化(tf.Variable)使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python實(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-06Scrapy爬蟲多線程導(dǎo)致抓取錯(cuò)亂的問題解決
本文針對Scrapy爬蟲多線程導(dǎo)致抓取錯(cuò)亂的問題進(jìn)行了深入分析,并提出了相應(yīng)的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11python?魔法方法之?__?slots?__的實(shí)現(xiàn)
本文主要介紹了python?魔法方法之?__?slots?__的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03解決安裝tensorflow遇到無法卸載numpy 1.8.0rc1的問題
今天小編就為大家分享一篇解決安裝tensorflow遇到無法卸載numpy 1.8.0rc1的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06python與mysql數(shù)據(jù)庫交互的實(shí)現(xiàn)
這篇文章主要介紹了python與mysql數(shù)據(jù)庫交互的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Python學(xué)習(xí)開發(fā)之圖形用戶界面詳解
當(dāng)前流行的計(jì)算機(jī)桌面應(yīng)用程序大多數(shù)為圖形化用戶界面(Graphic User Interface,GUI),python也提供了多個(gè)圖形開發(fā)界面的庫,這篇文章主要給大家介紹了關(guān)于Python學(xué)習(xí)開發(fā)之圖形用戶界面的相關(guān)資料,需要的朋友可以參考下2021-08-08