使用类别名称将 grc 文件转换为 shp 文件

Convert grc file to shp file using category names

我面临着一组 .grc 文件只有一个波段的问题。但是,此文件包含几个类别,最终属于图像的不同部分(我猜)。

当我由此(或直接生成 PostGIS 几何图形)生成形状文件时,所有这些类别都合并到一个文件中,该文件具有分隔的区域,但 DN 1、DN 2、DN 3 .. 作为它们的名称.我想保留形状文件中的类别名称。

此命令当前生成形状文件:

gdal_polygonize.py coverage.grc -f "ESRI Shapefile" output.shp

我的假设是否正确?我该怎么做?

我通过在 Python 中创建自定义脚本设法解决了这个问题:

catnames = rasterband.GetCategoryNames()
memdriver = ogr.GetDriverByName( 'Memory' )
dst_ds = memdriver.CreateDataSource( "out" )

# create a layer with a DN field that will contain the index of 
# each category automatically
dst_layer = dst_ds.CreateLayer("out", srs = None )
fd = ogr.FieldDefn( 'DN', ogr.OFTInteger )
dst_layer.CreateField(fd)

gdal.Polygonize( rasterband, None, dst_layer, 0)

# extract features map
featmap = {}
for feature in dst_layer:
    # use the field defined above, create a mapping between
    # index -> feature name
    featname = feature.GetField("DN")
    if featname not in featmap.keys():
        featmap[featname] = [feature]
    else:
        featmap[featname].append(feature)

从现在开始,dst_layer 包含可以使用以下方法轻松保存为形状的矢量形状:

driver = ogr.GetDriverByName("ESRI Shapefile")
shapeData = driver.CreateDataSource(args.output_folder) #so there we will store our data

for featidx, features in featmap.iteritems():
    featname = catnames[featidx]
    layer = shapeData.CreateLayer(featname, spatialReference, ogr.wkbPolygon)
for feature in features:
    layer.CreateFeature(feature)

shapeData.Destroy() #lets close the shapefile

这将为每个功能名称(类别)创建一个 .shp 文件。当然,这可以调整为创建一个文件,但这超出了我的问题范围。