如何在Raster to Polygon转换中为矢量添加像素值属性字段?
解决栅格转矢量后缺失像素值属性字段的问题
原代码未预先创建存储像素值的属性字段,且gdal.Polygonize函数未指定字段索引,导致生成的矢量文件没有像素值属性。按以下方式修改代码即可解决:
修改步骤
- 在创建输出矢量图层后,添加用于存储像素值的属性字段
- 调用
Polygonize时指定该字段的索引,而非默认的-1 - 修正Linux系统下的路径分隔符(用
/替代\\)
修改后的完整代码
from osgeo import ogr from osgeo import gdal # 读取栅格数据 open_image = gdal.Open("/home/sat/Projects/asu/Crop_Stage/Baliya.tif") input_band = open_image.GetRasterBand(1) # 创建输出矢量数据源 output_shp_dir = "/home/sat/Projects/asu/Crop_Stage/Baliya/" shp_driver = ogr.GetDriverByName("ESRI Shapefile") output_shapefile = shp_driver.CreateDataSource(output_shp_dir + "/baliya_rasTOvec.shp") # 创建矢量图层,指定坐标系与输入栅格一致 new_shapefile = output_shapefile.CreateLayer("baliya_rasTOvec", srs=open_image.GetSpatialRef()) # 创建存储像素值的属性字段(命名为DN,类型为整数,若为浮点型栅格可改为ogr.OFTReal) field_defn = ogr.FieldDefn("DN", ogr.OFTInteger) new_shapefile.CreateField(field_defn) # 执行栅格转矢量,指定将像素值写入索引为0的字段(即刚创建的DN字段) gdal.Polygonize(input_band, None, new_shapefile, 0, [], callback=None) new_shapefile.SyncToDisk()
关键修改说明
- 添加属性字段:通过
ogr.FieldDefn创建字段并调用CreateField添加到图层,字段名和类型可根据栅格实际像素类型调整(比如浮点型栅格用ogr.OFTReal) - 指定字段索引:
gdal.Polygonize的第四个参数设置为0,表示将栅格像素值写入第一个属性字段(DN) - 修正坐标系:创建图层时传入输入栅格的坐标系
srs=open_image.GetSpatialRef(),保证矢量与栅格坐标一致 - 路径修正:Linux系统下路径分隔符用
/,避免路径错误
内容的提问来源于stack exchange,提问作者Asmita Guha
相关产品推荐
相关产品推荐

