创建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使用MYSQLDB实现从数据库中导出XML文件的方法
May 11 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
python 整数越界问题详解
Jun 27 Python
Django自定义用户登录认证示例代码
Jun 30 Python
Python日志无延迟实时写入的示例
Jul 11 Python
python写程序统计词频的方法
Jul 29 Python
Python对接六大主流数据库(只需三步)
Jul 31 Python
使用Django清空数据库并重新生成
Apr 03 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
Django mysqlclient安装和使用详解
Sep 17 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查找指定目录下指定大小文件的方法
2014/11/28 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
一段实用的php验证码函数
2016/05/19 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
JavaScript高级程序设计
2006/12/29 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
在Python中使用元类的教程
2015/04/28 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
Python Process多进程实现过程
2019/10/22 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
python使用smtplib模块发送邮件
2020/12/17 Python
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
2014学年自我鉴定
2014/02/23 职场文书
入党自荐书范文
2014/03/09 职场文书
航班延误投诉信
2015/07/02 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
vue3不同环境下实现配置代理
2022/05/25 Vue.js