9_OGR创建Shapefile

Python OGR教程:创建Shapefile及操作细节
本文介绍了如何使用OGR库在Python中创建Shapefile,包括新建shp驱动、判断文件是否存在、创建数据集与图层、添加字段、创建几何元素和写入特征。此外,还探讨了空间参考系设定、几何类型选择以及常见操作技巧,如线环和多边形的处理。

OGR创建Shapefile

# -*- coding: utf-8 -*-
# 学习时间: 2022/11/7 17:20

__author__ = 'He XK'

import os
from osgeo import ogr

# 新建shp驱动
driver = ogr.GetDriverByName('ESRI SHAPEFILE')
# 参考的shp文件、图层和参考系
driver_ref = ogr.Open('shp/province_1.shp')
layer_ref = driver_ref.GetLayer(0)
srs_ref = layer_ref.GetSpatialRef()
# 指定shp路径
output_filename = 'shp/demo17.shp'
# 判断是否存在新建文件,否则删除
if os.path.exists(output_filename):
    driver.DeleteDataSource(output_filename)
else:
    print('THIS SHP IS NOT EXIST!')
# 创建数据
new_shp_ds = driver.CreateDataSource(output_filename)
# 创建一个图层
# 当新建图层之后,shp文件才会生成
new_layer = new_shp_ds.CreateLayer('test', srs=srs_ref, geom_type=ogr.wkbPoint)
# 新建字段
new_field_def = ogr.FieldDefn('ID', ogr.OFTString)
new_field_def.SetWidth(4)
new_layer.CreateField(new_field_def)
new_field_def2 = ogr.FieldDefn('Name', ogr.OFTString)
new_field_def2.SetWidth(10)
new_layer.CreateField(new_field_def2)
# 为图层创建feature
feature_defn = new_layer.GetLayerDefn()
feature = ogr.Feature(feature_defn)
# 创建几何
new_point = ogr.Geometry(ogr.wkbPoint)
new_point.SetPoint(0, 500000.822960446, 3000000.31432952)
feature.SetGeometry(new_point)
# 设定要素字段的值
feature.SetField('ID', '1')
feature.SetField('Name', 'TEST1')
# 将要素写入图层
new_layer.CreateFeature(feature)
# 释放内存
new_point.Destroy()
feature.Destroy()
new_shp_ds.Destroy()
driver_ref.Destroy()

使用ogr创建一个shp文件,并且生成一个点坐标,添加两个字段并填入内容。

整个逻辑过程如下:

  1. 首先,生成SHPDriver

  2. 判断当前路径是否已经有同名的SHP文件存在,若存在则通过os模块删除;

  3. 通过Driver创建数据集,即创建矢量文件;

  4. 为矢量文件新建图层,同时在参数中设定图层名称、空间参考系、几何类型;

  5. 设定字段,并在矢量文件的图层中添加字段;

  6. 为图层创建feature

  7. 创建几何图形,并设定几何图形的坐标,将其添加到feature中;

  8. feature设定字段属性;

  9. feature写入layer中;

  10. 释放内存。

设定空间参考系的方式不止一种,可以通过引入等方式新建参考系并设定;

创建几何图形的方式还能通过wkb的方式创建,适合创建不定长度的几何图形;

使用时查阅相关资料,可以封装一个输入任意坐标系、字段、不定长几何坐标的函数。

注意:

new_layer = new_shp_ds.CreateLayer('test', srs=srs_ref, geom_type=ogr.wkbUnknown)

在上述代码创建新图层时,geom_type是一个约束选项,值是用于约束图层中的几何图形必须是该值类型的图形,如果没有约束那么使用wkbUnknown

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值