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文件,并且生成一个点坐标,添加两个字段并填入内容。
整个逻辑过程如下:
-
首先,生成
SHP的Driver; -
判断当前路径是否已经有同名的
SHP文件存在,若存在则通过os模块删除; -
通过
Driver创建数据集,即创建矢量文件; -
为矢量文件新建图层,同时在参数中设定图层名称、空间参考系、几何类型;
-
设定字段,并在矢量文件的图层中添加字段;
-
为图层创建
feature; -
创建几何图形,并设定几何图形的坐标,将其添加到
feature中; -
为
feature设定字段属性; -
将
feature写入layer中; -
释放内存。
设定空间参考系的方式不止一种,可以通过引入等方式新建参考系并设定;
创建几何图形的方式还能通过wkb的方式创建,适合创建不定长度的几何图形;
使用时查阅相关资料,可以封装一个输入任意坐标系、字段、不定长几何坐标的函数。
注意:
new_layer = new_shp_ds.CreateLayer('test', srs=srs_ref, geom_type=ogr.wkbUnknown)
在上述代码创建新图层时,geom_type是一个约束选项,值是用于约束图层中的几何图形必须是该值类型的图形,如果没有约束那么使用wkbUnknown。
Python OGR教程:创建Shapefile及操作细节

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

被折叠的 条评论
为什么被折叠?



