[Shapelib] Adding new shape to shapefile

Bram de Greve bram.degreve at bramz.net
Tue Jun 3 14:29:08 EDT 2008


Hi Romain,

- First, creating-closing-opening probably should not be necessary.  I 
believe you're just fine if you only do the create step.
- I see you don't close the shapefile after writing.  Not sure if this 
is relevant in this case as I see this isn't plain C, so there might be 
an automatic close I'm not aware of.
- Before writing data to a DBF, you first must create the fields (see 
DBFAddField)
- you should not use -1 as record number for a DBF file.  This is just 
fine with adding objects to the shapefile to indicate you want to append 
it to the end, but the DBF API does not understand this.  It just 
returns false as error code (check your error codes!).  Always make sure 
the record number is between 0 and DBFGetRecordCount, 0 and 
DBFGetRecordCount included.  When index is DBFGetRecordCount, it will 
append a new record (but only while writing of course, don't do that for 
reading).

Hope this helps,
Bram

thecrashteam wrote:
> hi,
>
> I post my new code. It doesn't function but there is no error. My shapeFile
> and its dbf file are not created. Someone could say to me why it doesn't
> work please ?
>
> Thank you for your help
>
> Romain
>
>
>
>
> IntPtr ptrCreateSHP = shpFile.SHPCreate(@"\SD-MMCard\TestParcelle\test.shp",
> ShapeFile.ShapeFile.ShapeType.Point);
> shpFile.SHPClose(ptrCreateSHP);
>
> IntPtr ptrCreateDBF =
> shpFile.DBFCreate(@"\SD-MMCard\TestParcelle\test.dbf");
> shpFile.DBFClose(ptrCreateDBF);
>
> IntPtr ptrOpenDBF = shpFile.DBFOpen(@"\SD-MMCard\TestParcelle\test.dbf",
> "rb+");
>
> IntPtr ptrOpenSHP = shpFile.SHPOpen(@"\SD-MMCard\TestParcelle\test.shp",
> "rb+");
>
> double[] x = new double[1];
> double[] y = new double[1];
> double[] z = new double[1];
> x[0] = 803606;
> y[0] = 803606;
> z[0] = 0;
>
> IntPtr psObject =
> shpFile.SHPCreateSimpleObject(ShapeFile.ShapeFile.ShapeType.Point, 1, x, y,
> z);
>
> shpFile.SHPWriteObject(ptrOpenSHP, -1, psObject);
> shpFile.SHPDestroyObject(psObject);
>
> shpFile.DBFWriteDoubleAttribute(ptrOpenDBF, -1, 0, 0d);
> shpFile.DBFWriteStringAttribute(ptrOpenDBF, -1, 1, "toto");
> shpFile.DBFWriteStringAttribute(ptrOpenDBF, -1, 2, "aime");
> shpFile.DBFWriteStringAttribute(ptrOpenDBF, -1, 3, "les");
> shpFile.DBFWriteStringAttribute(ptrOpenDBF, -1, 4, "fraises");
>
> shpFile.DBFClose(ptrOpenDBF);
>
>   


More information about the Shapelib mailing list