[Shapelib] Adding new shape to shapefile

Bram de Greve bram.degreve at bramz.net
Thu Jun 5 16:42:31 EDT 2008


OK, this is _really_ weird, as _all_ return values indicate that every 
single call was successful.

DBFCreate and SHPCreate return values different than zero, meaning they 
were actually able to create files and return handles to them.
DBFAddField return the field number and -1 on failure.  0 just means 
this is the first field successfully added.
DBFWriteStringAttribute returns true on success, 1 is true.
SHPCreateSimpleObject returns a handle to an object which is non-zero, 
and thus a success.
SHPWriteObject returns the index of the object within the file.  0 just 
means this is the first object, and thus a success.

So, from everything I can see here, a file _must_ have been created 
somewhere, as none of these calls (except SHPCreateSimpleObject ) could 
have been successful if this wasn't the case.  As far I as understand 
shapelib, there is no other way possible.

I can imagine only two things:
- the filename is doing something funny.  Please, try simpler cases.
- the C# layer is doing something funny.  Who has created the C# 
library?  Maybe he/her can help you better ...

Bram

thecrashteam wrote:
> Thank you for your help Bram, it is very nice !
> So, I did a list of return values of functions used in my code :
> DBFCreate returns 375328,
> SHPCreate = 379776,
> DBFAddField = 0,
> DBFWriteStringAttribute = 1,
> SHPCreateSimpleObject = 410704,
> SHPWriteObject = 0.
>
> I hope you could tell me what these figures mean... And do you know where
> could I find documentation about shapelib ?
>
> Thank you again for your help
>
> Romain.
>
>
>
> Bram de Greve wrote:
>   
>> The extension has nothing to do with it.  At worst, it would create 
>> something like test.shp.shp.
>>
>> As no files AT ALL are created, the problem probably is within DBFCreate 
>> and SHPCreate, as they should create file files straight away, even 
>> without the data being added.  Please, check the return values of 
>> DBFCreate and SHPCreate.   Are they null?  Probably they are, and that 
>> means the creation of the files simply fail.  And thus everything else 
>> fails too.
>>
>> Try a more simple filename like just "test".
>>
>> Are you prepared to step through the code in a debug session.  Maybe you 
>> can figure out what exactly fails ...
>>
>> Good luck =)
>> Bram
>>
>> thecrashteam schreef:
>>     
>>> Hi  Vassilis,
>>>
>>>
>>> I tried what you told me too, but it still not work. No error, but no
>>> files... It's hopeless !! ^^
>>> I think there is something wrong against me with this library !!!
>>>
>>> Thank you for your reply !
>>>
>>> Romain
>>>
>>> My code : 
>>>
>>> //création du dbf
>>> IntPtr ptrDBFCreate = shpFile.DBFCreate(@"\SD-MMCard\TestParcelle\test");
>>>
>>> //création du shapefile
>>> IntPtr ptrSHPCreate = shpFile.SHPCreate(@"\SD-MMCard\TestParcelle\test",
>>> ShapeFile.ShapeFile.ShapeType.Point);
>>>
>>> //nouvelle colonne dans le dbf
>>> shpFile.DBFAddField(ptrDBFCreate, @"\SD-MMCard\TestParcelle\test",
>>> ShapeFile.ShapeFile.DBFFieldType.FTString, 255, 0);
>>>
>>> //écriture de la valeur liée au futur shape
>>> shpFile.DBFWriteStringAttribute(ptrDBFCreate,
>>> shpFile.DBFGetRecordCount(ptrDBFCreate), 0, "to");
>>>
>>> //création du point
>>> 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);
>>>
>>> //écriture du point dans le shape
>>> shpFile.SHPWriteObject(ptrSHPCreate, -1, psObject);
>>>
>>> //fermeture du dbf et du shapefile
>>> shpFile.SHPClose(ptrSHPCreate);
>>> shpFile.DBFClose(ptrDBFCreate);
>>>   
>>>       
>> _______________________________________________
>> Shapelib mailing list
>> Shapelib at lists.maptools.org
>> http://lists.maptools.org/mailman/listinfo/shapelib
>>
>>
>>     
>
>   



More information about the Shapelib mailing list