创建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实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
python简易远程控制单线程版
Jun 20 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
python中删除某个元素的方法解析
Nov 05 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
python django中8000端口被占用的解决
Dec 17 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
python在linux环境下安装skimage的示例代码
Oct 14 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
Oct 26 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中使用GD库创建圆形饼图的例子
2014/11/19 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
CI框架简单邮件发送类实例
2016/05/18 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
新浪的图片新闻效果
2007/01/13 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
2017/02/09 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
程序员机试试题汇总
2012/03/07 面试题
毕业生自我鉴定
2013/12/04 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
英语故事演讲稿
2014/04/29 职场文书
保护环境建议书300字
2014/05/13 职场文书
完美的中文自荐信
2014/05/24 职场文书
ktv好的活动方案
2014/08/17 职场文书
走群众路线剖析材料
2014/10/09 职场文书
2014年法院个人工作总结
2014/12/17 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Python初学者必备的文件读写指南
2021/06/23 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python