You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

关键修改说明

  1. 添加属性字段:通过ogr.FieldDefn创建字段并调用CreateField添加到图层,字段名和类型可根据栅格实际像素类型调整(比如浮点型栅格用ogr.OFTReal)
  2. 指定字段索引:gdal.Polygonize的第四个参数设置为0,表示将栅格像素值写入第一个属性字段(DN)
  3. 修正坐标系:创建图层时传入输入栅格的坐标系srs=open_image.GetSpatialRef(),保证矢量与栅格坐标一致
  4. 路径修正:Linux系统下路径分隔符用/,避免路径错误

内容的提问来源于stack exchange,提问作者Asmita Guha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:43