创建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中xrange和range的区别
May 13 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
Python字符串处理实例详解
May 18 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
python读取并写入mat文件的方法
Jul 12 Python
django 简单实现登录验证给你
Nov 06 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
python批量修改文件名的示例
Sep 27 Python
pytorch 中autograd.grad()函数的用法说明
May 12 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php 什么是PEAR?
2009/03/19 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
php curl常用的5个经典例子
2017/01/20 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
Python中删除文件的程序代码
2011/03/13 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
入党自荐书范文
2014/03/09 职场文书
会计核算科岗位职责
2014/03/19 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS