使用类别名称将 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 文件。当然,这可以调整为创建一个文件,但这超出了我的问题范围。
我面临着一组 .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 文件。当然,这可以调整为创建一个文件,但这超出了我的问题范围。