python使用gdal对shp读取,新建和更新的实例

1.介绍

GDAL(Geo Data Abstraction Library)是一个在MIT许可证下发行的开源栅格数据处理库。它由加拿大Open Source Geospatial Foundation开发,目的是为了支持对常用地理空间文件格式(如TIF、DEM、SHP等)进行读取、写入以及修改。

本文将探讨使用Python Gdal库对Shp文件进行读取,新建和更新的实例。

2.安装

首先需要安装Gdal库,可以使用pip安装:

!pip install gdal

3.读取Shp文件

读取Shp文件需要导入GDAL库,然后指定需要读取的文件路径。接下来,使用GDAL库的OpenEx方法打开文件,并使用GetLayer方法获取Shp文件中的图层。最后,可以遍历该图层的每一个要素,获取要素的属性和几何体。

以下是一个示例代码,读取Shp文件中的所有要素并输出它们的属性信息和几何体:

import gdal

# 指定Shp文件路径

filename = 'path/to/shpfile.shp'

# 打开文件

ds = gdal.OpenEx(filename, gdal.OF_VECTOR)

# 获取Shp文件中的图层

layer = ds.GetLayer()

# 遍历每一个要素

for feature in layer:

# 获取属性信息

attributes = feature.items()

# 获取几何体

geometry = feature.GetGeometryRef()

# 输出属性信息

print(attributes)

# 输出几何体信息

print(geometry.ExportToWkt())

4.新建Shp文件

新建Shp文件需要先定义文件的投影和要素属性结构,然后创建文件和对应的图层,最后可以添加单个要素或多个要素。

4.1 定义投影和要素属性结构

定义投影需要用到SpatialReference类,定义属性结构需要用到Fields和FieldDefn类。

from osgeo import osr, ogr

# 定义投影

inSpatialRef = osr.SpatialReference()

inSpatialRef.SetWellKnownGeogCS("WGS84")

# 定义属性结构

fields = ogr.Fields()

fields.AddField("id", ogr.OFTInteger)

fields.AddField("name", ogr.OFTString)

# 定义属性结构的字段类型

fieldDefn = fields.GetFieldDefn(0)

fieldDefn.SetWidth(4)

fieldDefn = fields.GetFieldDefn(1)

fieldDefn.SetWidth(32)

4.2 创建文件和对应的图层

创建文件需要用到Driver类和Create方法,创建图层需要用到CreateLayer方法和LayerDefn类。

# 定义Driver

driver = ogr.GetDriverByName("ESRI Shapefile")

# 创建新的Shp文件和对应的图层

outDataSource = driver.CreateDataSource('path/to/newShpfile.shp')

outLayer = outDataSource.CreateLayer('layername', inSpatialRef, geom_type=ogr.wkbPolygon)

# 定义图层结构

outLayer.CreateFields(fields)

outLayerDefn = outLayer.GetLayerDefn()

4.3 添加单个或多个要素

定义要素需要用到Feature和Geometry类,在创建要素之前,还需要使用CreateFeature方法创建要素的实例,并设置要素的属性和几何体。

# 定义新要素

newFeature = ogr.Feature(outLayerDefn)

# 设置要素的属性

newFeature.SetField('id', 1)

newFeature.SetField('name', 'test')

# 创建几何体

ring = ogr.Geometry(ogr.wkbLinearRing)

ring.AddPoint(0, 0)

ring.AddPoint(0, 10)

ring.AddPoint(10, 10)

ring.AddPoint(10, 0)

ring.AddPoint(0, 0)

polygon = ogr.Geometry(ogr.wkbPolygon)

polygon.AddGeometry(ring)

# 设置要素的几何体

newFeature.SetGeometry(polygon)

# 添加单个要素

outLayer.CreateFeature(newFeature)

# 添加多个要素

for i in range(10):

newFeature = ogr.Feature(outLayerDefn)

newFeature.SetField('id', i + 1)

newFeature.SetField('name', 'test')

newFeature.SetGeometry(polygon)

outLayer.CreateFeature(newFeature)

5.更新Shp文件

更新Shp文件需要首先打开文件和对应的图层,然后遍历每个要素并修改它们的属性或几何体信息。最后需要使用SyncToDisk方法把更新的内容写入到文件中。

# 指定Shp文件路径

filename = 'path/to/shpfile.shp'

# 打开文件

ds = ogr.Open(filename, update=True)

# 获取Shp文件中的图层

layer = ds.GetLayer()

# 遍历每一个要素

for feature in layer:

# 修改属性信息

feature.SetField('id', feature.GetField('id') + 1)

# 修改几何体

geometry = feature.GetGeometryRef()

geometry.Scale(1.2, 1.2, 1.2)

# 更新要素

layer.SetFeature(feature)

# 将更改写入文件

ds.SyncToDisk()

6.总结

本文详细介绍了如何使用Python Gdal库对Shp文件进行读取、新建和更新。读取Shp文件需要使用GDAL库的OpenEx方法打开文件,然后使用GetLayer方法获取Shp文件中的图层。新建Shp文件需要定义文件的投影和要素属性结构,然后创建文件和对应的图层,最后可以添加单个要素或多个要素。更新Shp文件需要打开文件和对应的图层,然后遍历每个要素并修改它们的属性或几何体信息,最后使用SyncToDisk方法把更新的内容写入到文件中。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签