创建Shapefile文件并写入数据的例子
作者:TheOneGIS 发布时间:2023-06-21 23:27:12
标签:Shapefile,写入数据
基本思路
使用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编码片段如下:
可以看到每个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
来源:https://blog.csdn.net/theonegis/article/details/80554993


猜你喜欢
- 创建云函数目录首先,我们需要在uni-app项目文件夹下,创建一个云函数目录,路径随意,我这里是functions。然后先随便在里面放一些文
- 为表和字段取别名阿文之前介绍过MySQL的分组查询、集合函数查询和嵌套子查询,在编写SQL语句时有的地方使用到AS关键字为查询结果中的某一列
- 本文以实例形式介绍了python turtle模块即海龟绘图的使用方法,对于需要进行图形编程的朋友相信会有一定的借鉴价值。python tu
- MyBatis 如何写配置文件和简单使用MyBatis3.x这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。MyBatis的
- 在页面层次结构,数据较多的时候,用v-if或者v-show就会出现div闪现,或者部分闪烁的结果。可以在根元素添加v-cloak来解决,并且
- API:statuses/public_timeline 返回最新的200条公共微博,返回结果非完全实时CODE:#!/usr/
- 在服务器上训练的网络放到本地台式机进行infer,结果出现报错:AssertionError: Invalid device id仔细检查后
- 匿名函数匿名函数就是不需要显示式的指定函数名首先看一行代码:def calc(x,y): re
- 系统环境:64位win7企业版python2.7.102016.08.16修改内容:1)read_until()函数是可以设置timeout
- 本文实例讲述了Symfony2之session与cookie用法。分享给大家供大家参考,具体如下:session操作:1. Set Sess
- Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于
- 可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。什么是峰值信噪比峰值信噪比(Peak
- 打包pyinstaller 02.py --noconsole --hidden-import PySide2.QtXml报错0:The &
- 小计: 开发中遇到子组件需要调用兄弟组件中的方法,如下写个小demo记录下心得,如果你有好的方法,请到评论区域指教父组件示例代码:组件功能解
- 首先mysql更新数据的某个字段,一般这样写:UPDATE mytable SET myfield = 'value' WH
- 利用序列产生主键值。 序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提
- 目录什么是引用?引用在数组和对象中的使用引用的传递引用的返回引用的取消总结什么是引用?在 PHP 中引用意味着用不同的名字访问同一个变量内容
- python封装简介1.效果图:对比一:对比二:2.学习来源代码:# 封装是面向对象的三大特性之一# 封装指的是隐藏对象中一些不希望被外部所
- 一、问题来源进行项目交接时运行sql文件出现报错Unknown collation: 'utf8mb4_0900_ai_ci'
- 不废话,直接看代码,需要的根据需求完善。var getKeyCode = function (key) { var key_co