我面临着一组只有一个带的.grc文件的问题。但是,这个文件包含几个最终属于图像不同部分的类别(我猜)。
当我从中生成形状文件(或直接使用PostGIS几何体)时,所有这些类别都合并为一个文件,该文件具有分隔的区域,但DN 1,DN 2,DN 3 ..作为它们的名称。我想在形状文件中保留类别名称。
此命令当前生成形状文件:
gdal_polygonize.py coverage.grc -f "ESRI Shapefile" output.shp
我的假设是否正确?我怎么能这样做?
答案 0 :(得分:0)
我设法通过在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文件。当然,这可以调整为创建一个单独的文件,但这超出了我的问题范围。