Viva La Vida!|

Weltㅤ

园龄:3年3个月粉丝:83关注:12

2022-09-04 11:38阅读: 1429评论: 1推荐: 1

Python|使用Python实现tif文件转shpfile格式文件

前言

遥感图像像素级别分类(语义分割)结果是栅格图像,转成矢量shp更方便在arcgis中自定义展示以及进一步分析。

代码实现

因为分类结果中可能会含有背景类或者我们不需要转成矢量的类,所以这里增加了一个参数来实现删除不需要转成矢量的类别要素。代码比较简单易懂,如下:

from osgeo import gdal, ogr, osr
import os


def raster2vector(raster_path, vecter_path, field_name="class", ignore_values=None):
	# 读取路径中的栅格数据
	raster = gdal.Open(raster_path)
	# in_band 为想要转为矢量的波段,一般需要进行转矢量的栅格都是单波段分类结果
	# 若栅格为多波段,需要提前转换为单波段
	band = raster.GetRasterBand(1)

	# 读取栅格的投影信息,为后面生成的矢量赋予相同的投影信息
	prj = osr.SpatialReference()
	prj.ImportFromWkt(raster.GetProjection())

	drv = ogr.GetDriverByName("ESRI Shapefile")
	# 若文件已经存在,删除
	if os.path.exists(vecter_path):
		drv.DeleteDataSource(vecter_path)

	# 创建目标文件
	polygon = drv.CreateDataSource(vecter_path)
	# 创建面图层
	poly_layer = polygon.CreateLayer(vecter_path[:-4], srs=prj, geom_type=ogr.wkbMultiPolygon)
	# 添加浮点型字段,用来存储栅格的像素值
	field = ogr.FieldDefn(field_name, ogr.OFTReal)
	poly_layer.CreateField(field)

	# FPolygonize将每个像元转成一个矩形,然后将相似的像元进行合并
	# 设置矢量图层中保存像元值的字段序号为0
	gdal.FPolygonize(band, None, poly_layer, 0)

	# 删除ignore_value链表中的类别要素
	if ignore_values is not None:
		for feature in poly_layer:
			class_value = feature.GetField('class')
			for ignore_value in ignore_values:
				if class_value == ignore_value:
					# 通过FID删除要素
					poly_layer.DeleteFeature(feature.GetFID())
					break

	polygon.SyncToDisk()
	polygon = None


if __name__ == '__main__':
	raster_path = r"demo.tif"
	vecter_path = r"demo.shp" 
	field_name = "class"
	# 第0类删除,若实际情况不需要1类和2类,则ignore_values = [1,2]
	ignore_values = [0]
	raster2vector(raster_path, vecter_path, field_name=field_name, ignore_values=ignore_values)

 

本文作者:Weltㅤ

本文链接:https://www.cnblogs.com/tangjielin/p/16597360.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Weltㅤ  阅读(1429)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起