【问题标题】:Convert grc file to shp file using category names使用类别名称将 grc 文件转换为 shp 文件
【发布时间】:2015-11-16 15:51:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 目前如何生成shape文件?
  • gdal_polygonize.py coverage.grc -f "ESRI Shapefile" output.shp

标签: python postgis raster gdal shapefile


【解决方案1】:

我设法通过在 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 文件。当然,这可以调整为创建一个文件,但这超出了我的问题范围。

【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2018-07-04
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2021-05-13
    相关资源
    最近更新 更多