[Shapelib] Adding a polygon to a shapefile

Joaquin Perez Valera joaquinperezvalera at gmail.com
Sun Feb 17 14:30:21 PST 2008


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?


#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,

    string  shape_name, Col1;
    Col1= "Column";

    SHPObject    *psObject;

    cout << "Name of the new Shapefile" << endl;

    cout << "The shapefile is: " << shape_name << endl;

    //Here I define the type of shapefile, the 5 is for a polygon.

    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
    nParts = 1;
    //I give a shape id for this unique object.

//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;

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/shapelib/attachments/20080217/88536964/attachment.html>

More information about the Shapelib mailing list