[Shapelib] Adding a polygon to a shapefile
Joaquin Perez Valera
joaquinperezvalera at gmail.com
Sun Feb 17 14:30:21 PST 2008
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]
-------------- 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