[gdal-dev] Polygonize: are these steps the right ones?

Jorge Arevalo jorgearevalo at gis4free.org
Thu Mar 11 18:59:40 EST 2010


I'm using GDALPolygonize to polygonize a dataset with one band created
using MEM driver:

memdataset = GDALCreate(GDALGetDriverByName("MEM"),"", width, height,
0, GDT_Byte, NULL);
GDALAddBand(memdataset, nPixelType, apszOptions); // in apszOptions[0]
there are the band data

Then, I create a MEM datasource, to store the polygons. Using MEM
driver for OGR:

memdatasource = OGR_Dr_CreateDataSource(OGRGetDriverByName("Memory"), "", NULL);

Of course, I create a Layer to store the pols:
hLayer = OGR_DS_CreateLayer(memdatasource, "Polygonized layer", NULL,
wkbPolygon, NULL);

As I can read in the source code of GDALPolygonize function
(http://trac.osgeo.org/gdal/browser/trunk/gdal/alg/polygonize.cpp), a
new Feature is created, based on the Feature Definition of the layer.

hFeat = OGR_F_Create( OGR_L_GetLayerDefn( hOutLayer ) );

Then, the field of the Feature with index "iPixValue" is set with a
pixel value (the pixel value of all the raster cells with the same
value, polygonized in the same geometry, really)

 if( iPixValField >= 0 )
       OGR_F_SetFieldInteger( hFeat, iPixValField, poRPoly->nPolyValue
); //poRPoly->nPolyValue is the pixel value

The problem is that the MEM-based layer doesn't have fields. So, if I
use "0" as iPixValField, I get an error, because there's no field with
index 0 in the Feature. Of course, the same result if I use any value
> 0.

I thought the solution was to "modify" the Layer's Feature Definition
to allow fields in the Features created. So, I created a new Feature
Defintion, with a Field Definition of one field, of type OFTReal.
Then, I created a new Feature following this schema, and I added this
Feature to the Layer. I know, it's not the best way, and it didn't
work. But I don't know how to "force" the MEM-based layer to allow
fields in its features. Is it possible? If not, how could I polygonize
a mem-based raster?

Thanks in advance, and best regards,

More information about the gdal-dev mailing list