[Shapelib] Adding new shape to shapefile

thecrashteam didier.romain at gmail.com
Fri Jun 13 06:16:53 PDT 2008


Hi,

I have something new. Like you said Bram, my files are created but they are
not created in the specified folder. They are created on the system root.
But there is something weird. I want to create test.shp, test.shx and
test.dbf files but files which are created are named "dbf", "shp" and "shx".
They have no extension. Moreover, when I add an extension to my dbf file, in
order to view its content, I have a string which does not match with the one
I want to put in (I put "to" and it contains " þ").
Even if I want to create my files in another folder (created on the system
root for example) they are created on the system root...
can you tell me if this is normal?

Romain


Bram de Greve wrote:
> 
> 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
>>>
>>>
>>>     
>>
>>   
> 
> _______________________________________________
> Shapelib mailing list
> Shapelib at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/shapelib
> 
> 

-- 
View this message in context: http://www.nabble.com/Adding-new-shape-to-shapefile-tp17536792p17823180.html
Sent from the ShapeLib mailing list archive at Nabble.com.





More information about the Shapelib mailing list