创建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登录Gmail并发送Gmail邮件的教程
Apr 17 Python
详解django中自定义标签和过滤器
Jul 03 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
Python 调用 Windows API COM 新法
Aug 22 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Python logging模块原理解析及应用
Aug 13 Python
python 实现逻辑回归
Dec 30 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
php获取根域名方法汇总
2014/10/28 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
Python中asyncore的用法实例
2014/09/29 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
TensorFlow实现创建分类器
2018/02/06 Python
详解python中sort排序使用
2019/03/23 Python
Django框架序列化与反序列化操作详解
2019/11/01 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
招商业务员岗位职责
2013/12/16 职场文书
教师产假请假条
2014/04/10 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
出国签证在职证明范本
2014/11/24 职场文书
小班教师个人总结
2015/02/05 职场文书