[Shapelib] Adding a polygon to a shapefile
Tom Kazimiers
2voodoo at gmx.de
Sun Feb 17 15:43:00 PST 2008
Joaquin,
sorry - I missed that you actually do have first and last elements the
same of your vertex arrays :)
But could you please write down where the error appears and what kind of
error it is?
cheers,
Tom
Tom Kazimiers schrieb:
> 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
>>
>
> _______________________________________________
> Shapelib mailing list
> Shapelib at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/shapelib
>
More information about the Shapelib
mailing list