首页 > 编程语言 >Python|使用Python实现tif文件转shpfile格式文件

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

时间:2022-09-04 11:45:02浏览次数:51  
标签:ignore shpfile vecter Python 格式文件 field values path raster

前言

遥感图像像素级别分类(语义分割)结果是栅格图像,转成矢量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)

 

标签:ignore,shpfile,vecter,Python,格式文件,field,values,path,raster
From: https://www.cnblogs.com/tangjielin/p/16597360.html

相关文章

  • Python内置函数-isinstance() 函数详解
    描述isinstance()函数来判断一个对象是否是一个已知的类型,类似type()。isinstance()与type()区别:type()不会认为子类是一种父类类型,不考虑继承关系。is......
  • python小知识--使用pip/pip3 install 命令下载安装包时,速度慢、经常断连的情况
    直接提供方法设置源 WIN+R键cmd命令 执行如下两条命令----------------这使用国内的云pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/sim......
  • 使用 Python 改善您的交易
    使用Python改善您的交易Photoby奥斯汀蓟on不飞溅Python是一种具有多种应用程序的编程语言。特别是对于交易、分析、回测……它是你能找到的最好的语言之一。确......
  • Python机器学习-多元分类的5种模型
    Python机器学习-多元分类的5种模型最近上了些机器学习的课程,于是想透过Kaggle资料集来练习整个资料科学专案的流程,在模型训练阶段,虽然听过许多分类模型,但不是很了解其各别......
  • Python 中的命名空间、变量和范围
    Python中的命名空间、变量和范围什么是命名空间?首先,我们需要感知python中的名称(标识符)是什么。众所周知,在python中,一切都是对象。名称帮助我们访问底层对象。例如,当我们......
  • python3之35个关键字详解
    一、python35个关键字列举:help("keywords")查看运行结果:1.and、or、not2.if、elif、else3.for、while4.True、False5.continue、break6.pass7.try、except、f......
  • Python实现XMind测试用例快速转Excel用例
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/c2d10f21.html你好,我是测试蔡坨坨。今天分享一个Python编写的小工具,实现XMind测试用例转Excel用例。前言XMi......
  • Python操作Excel表格
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/b0277e1c.html你好,我是测试蔡坨坨。上期我们分享了一个Python编写的小工具——「Python实现XMind测试用例......
  • 用于数据科学的 Java 与 Python
    用于数据科学的Java与Python一个对比有时做出判断的一个有用策略是仔细研究解决问题的两种方法的优缺点。如果您是数据科学的新手或正在开始一个新的数据科学项目并......
  • “如何精通 Python?”——我 LinkedIn 上的一个常见问题。
    “如何精通Python?”——我LinkedIn上的一个常见问题。Photoby克里斯·里德on不飞溅1.你知道其他编程语言和数据结构的概念吗?不。由于您不了解任何基本的编......