【Python】GDAL批量栅格转矢量

最近需要实现批量栅格转矢量操作。一开始用Arcmap操作,全国34各省太多,就写了一个脚本,从文件夹里读取循环读取后缀是“.tif”的文件,使用GDAL读取,非常方便快捷,手点到抽筋的步骤,一会就自动读取转换,并自动分类存放。。。
在这里插入图片描述
在这里插入图片描述

话不多说,直接上代码吧,只需要修改文件夹路径到自己的目标路径,就可以直接运行下面代码(python3):

import datetime
import os
from osgeo import gdal, osr, ogr

start_time = datetime.datetime.now()
input_path = r'G:\viirs_sys_snpp2\点密度\光伏板栅格2020'
out_path = r"G:\viirs_sys_snpp2\点密度\guanfuban_shp"
os.chdir(input_path) # 设置默认路径
for province in os.listdir(input_path):
    for raster in os.listdir(province):
        filename, txt = os.path.splitext(raster)
        if txt == ".tif":
            raster_path = input_path + "\\" + province + "\\" + raster
            inraster = gdal.Open(raster_path)
            inband = inraster.GetRasterBand(1)  # 要转为矢量的波段
            prj = osr.SpatialReference()
            prj.ImportFromWkt(inraster.GetProjection())  #读取栅格数据结构投影信息

            outshp = out_path + '//' + raster[:-4] + ".shp"
            drv =ogr.GetDriverByName("ESRI Shapefile")
            if os.path.exists(outshp):  # 若文件已经存在,则删除它继续重新做一遍
                drv.DeleteDataSource(outshp)
            Polygon = drv.CreateDataSource(outshp)  #创建一个目标文件夹
            Poly_layer = Polygon.CreateLayer(raster[:-4], srs = prj, geom_type = ogr.wkbMultiPolygon)  #对shp文件创建一个图层,定义为多个面类
            newField = ogr.FieldDefn('value',ogr.OFTReal) # 给目标shp文件添加一个字段,用来存储原始栅格的pixel value
            Poly_layer.CreateField(newField)

            gdal.FPolygonize(inband, None, Poly_layer, 0) # 核心函数,执行的就是栅格转矢量操作
            Polygon.SyncToDisk()
            print(Polygon)
            Polygon = None
            print(raster)
end_time = datetime.datetime.now()
print ("Succeeded at",end_time)
print ("Elapsed Time:",end_time-start_time)  #输出程序运行所需时间

从上面的代码中可以看到,最核心的代码就是gdal.FPolygonize()这个函数。这个函数的参数有以下几:
在这里插入图片描述

  • srcBand: 想要转成矢量的那个波段
  • maskBand: 转换的范围。这里因为我的是单波段图像,无需掩膜处理,所以给的None。
  • outLayer:这个参数是指目标shp文件的图层名
  • iPixValField: 栅格值存储在目标shp文件属性表的第几个字段。0代表存储在第一个字段,即我们在代码中建立的’value’字段。
  • 后面的三个参数目前还不清楚有什么作用,只使用默认值就可以正常运行得到结果。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!要使用GDAL库在Python中进行矢量操作,您可以按照以下步骤进行: 1. 安装GDAL库:在Python环境中安装GDAL库,可以使用pip命令来安装,如下所示: ``` pip install gdal ``` 2. 导入GDAL库:在Python脚本中导入GDAL库,可以使用以下代码: ``` from osgeo import gdal, ogr ``` 3. 打开文件:使用GDAL库的Open函数打开文件,如下所示: ``` raster_ds = gdal.Open('path/to/raster/file.tif') ``` 4. 获取图层:使用GDAL库的GetRasterBand函数获取图层,如下所示: ``` band = raster_ds.GetRasterBand(1) ``` 5. 创建矢量数据源:使用GDAL库的CreateDataSource函数创建矢量数据源,如下所示: ``` driver = ogr.GetDriverByName('ESRI Shapefile') vector_ds = driver.CreateDataSource('path/to/vector/file.shp') ``` 6. 创建矢量图层:使用矢量数据源的CreateLayer函数创建矢量图层,如下所示: ``` layer = vector_ds.CreateLayer('layer_name', geom_type=ogr.wkbPolygon) ``` 7. 定义矢量属性:使用图层的CreateField函数定义矢量属性,如下所示: ``` field_defn = ogr.FieldDefn('attribute_name', ogr.OFTString) layer.CreateField(field_defn) ``` 8. 矢量:使用GDAL库的Polygonize函数将换为矢量,如下所示: ``` gdal.Polygonize(band, None, layer, 0, [], callback=None) ``` 9. 保存矢量文件:使用矢量数据源的SyncToDisk函数保存矢量文件,如下所示: ``` vector_ds.SyncToDisk() ``` 这些是使用GDAL库在Python中进行矢量的基本步骤。您可以根据自己的需求对代码进行进一步的调整和优化。希望对您有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全糖去冰_q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值