[Shapelib] Adding a polygon to a shapefile

Tom Kazimiers 2voodoo at gmx.de
Sun Feb 17 18:34:51 EST 2008


Hi Joaquin,

as fas as I understood you can not make this call:
psObject = SHPCreateObject(nShapeType, ShapeId, nParts, panParts, NULL, 
vertexcount, X, Y, NULL, NULL );

have you checked if osObject is null afterwards? Please try it.
Could it be that the first and the last vertex of a polygon need to be 
the same? In your code they are different.
For my writing I use: SHPCreateSimpleObject which implys some NULLs of 
yours - maybe you could try this, too.

bye,
Tom


Joaquin Perez Valera schrieb:
> Hi
>
> I can create shapefiles and they are valid when I work with 
> ArcCatalog. But the shapefiles are empty.
>
> Now I'm trying to add objects to my shapefile. I want to add polygons.
>
> First I create a shapefile and a dbf file with an a simple column. 
> Then it becomes valid for ArcCatalog.
> Then I create 2 arrays of 7 elements X[7] and Y[7], and give a valor 
> to each element. Seven elements because
> I want to draw a polygon of six vertices.
>
> After it I use psObject = SHPCreateObject to create my polygon and 
> after   SHPWriteObject( hSHP, -1, psObject ); to write it
> in my shapefile.
>
> It's obviously that I'm doing something wrong.
> But I don't know what.
>
> Can somebody help me or say me what I'm doing wrong?
>
> Thanks.
>
>
> [CODE]
> #include <iostream>
> #include <cstdlib>
> #include "shapefil.h"
> #include "string.h"
>
>
> using namespace std;
> int main()
>
> {
>     SHPHandle    hSHP;
>     DBFHandle    hDBF;
>     int        nShapeType,   nWidth = 3, vertexcount, *panParts, 
> ShapeId, nParts;
>
>     string  shape_name, Col1;
>     Col1= "Column";
>   
>     SHPObject    *psObject;
>    
>   
>     cout << "Name of the new Shapefile" << endl;
>     getline(cin,shape_name);
>
>     cout << "The shapefile is: " << shape_name << endl;
>
>     //Here I define the type of shapefile, the 5 is for a polygon.
>     nShapeType=5;
>    
>    
>     hSHP = SHPCreate( shape_name.c_str(), nShapeType );
>  
>     hDBF = DBFCreate( shape_name.c_str() );
>         
>      
>     cout <<"The shape has "<< DBFGetFieldCount( hDBF ) <<" columns" << 
> endl;
>   
>   
>    
>     DBFAddField( hDBF, Col1.c_str(), FTInteger,   nWidth, 0 );
>     cout <<"Now the shape has " << DBFGetFieldCount( hDBF ) << " columns";
>    
>     //At this point the shape is valid for ArcView
>
>     //Here I define an array of seven elements and I'll give a 
> coordinate for each element
>    
>     double X[7], Y[7];
>     X[0] = 220764;
>     Y[0]= 2343777;
>     X[1] = 220610;
>     Y[1]= 2343627;
>     X[2] = 220818;
>     Y[2]= 2343477;
>     X[3] = 221109;
>     Y[3]= 2343777;
>     X[4] = 230504;
>     Y[4]= 2343627;
>     X[5] = 221102;
>     Y[5]= 2343477;
>     X[6] = X[0];
>     Y[6] = Y[0];
>    
>    
>     //I know the number of vertex is 7, six of my polygon and an extra
>     //vertex to close the polygon.
>    
>     vertexcount = 7;
>    
>     //I can't understand what is exactly the panParts variable. :(
>    
>     panParts[0] = 1;
>     //What is nParts? For me my polygon has 1 part, an entire part. It 
> is true?
>     nParts = 1;
>     //I give a shape id for this unique object.
>     ShapeId=1;
>    
> //From the shp_api I took this line of code to create a feature/object
> //SHPCreateObject( nSHPType, iShape, nParts, panPartStart, 
> panPartType,int nVertices, *padfX, * padfY, *padfZ, *padfM );
> //I have the nShapeType;
> //I give the ShapeId
> //I give the nParts
> //I don't know what is panParts
> //panPartType is NULL because it isn't a multipatch file
> //I know the numer of vertex
> //I now the number of vertex I have two arrays of coordinates.
> //padfZ and padfM are NULL, zero.
>
>     psObject = SHPCreateObject(nShapeType, ShapeId, nParts, panParts, 
> NULL, vertexcount, X, Y, NULL, NULL );
>    
>     SHPWriteObject( hSHP, -1, psObject );
>    
>     SHPDestroyObject( psObject );
>    
>     DBFClose( hDBF );
>   
>     SHPClose( hSHP );
>    
>        
>     return 0;
> }
>
> [/CODE]
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Shapelib mailing list
> Shapelib at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/shapelib
>   



More information about the Shapelib mailing list