创建Shapefile文件并写入数据的例子


Posted in Python onNovember 26, 2019

基本思路

使用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编码片段如下:

创建Shapefile文件并写入数据的例子

可以看到每个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文件并写入数据的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python入门篇之文件
Oct 20 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
Mar 30 Python
python 性能提升的几种方法
Jul 15 Python
Python 处理数据的实例详解
Aug 10 Python
numpy自动生成数组详解
Dec 15 Python
Python实现的redis分布式锁功能示例
May 29 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
Python中glob库实现文件名的匹配
Jun 18 Python
python使用opencv在Windows下调用摄像头实现解析
Nov 26 #Python
使用Python实现 学生学籍管理系统
Nov 26 #Python
python redis 批量设置过期key过程解析
Nov 26 #Python
python3 tkinter实现添加图片和文本
Nov 26 #Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 #Python
Python小程序之在图片上加入数字的代码
Nov 26 #Python
基于Python获取城市近7天天气预报
Nov 26 #Python
You might like
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python中精确输出JSON浮点数的方法
2014/04/18 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python实现杨氏矩阵查找
2019/03/02 Python
python如何制作英文字典
2019/06/25 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
香港交友网站:be2香港
2018/07/22 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
综合办公室主任职责
2013/12/16 职场文书
大学生入党思想汇报
2014/01/14 职场文书
婚礼司仪主持词
2014/03/14 职场文书
政治表现评语
2014/05/04 职场文书
师德模范事迹材料
2014/06/03 职场文书
公司委托书怎么写
2014/08/02 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python