[gdal-dev] Polygon

Alexandre Leclerc a.leclerc at valabre.com
Thu Mar 3 08:04:05 EST 2011


Hello I try to draw a polygon from shapefile on geoconcept.

 

But the points that I get are corrupted.

 

Strangely a shapefile with no prj, and one ring in WGS84 works.

 

Here I try with a prj with lambert 2 extend projection.

 

The shapefile contains 2 rings.

 

See my code below.

 

 

ifstream Prj;

                     Prj.open(PrjPath,ios::in);

                     if(Prj.is_open())


                     {

 

                        /*-----------read of PRJ--------------*/

                        Prj.seekg(0, ios::end);


                        int size = Prj.tellg();


                        Prj.seekg(0,ios::beg);


                        char *  Buffer = new char[size+1];

                        Prj.read(Buffer,size);

                        /*---------------------------------------*/

 

                        Buffer[size+1]='\0';

 

                        OGRSpatialReference oSRS, oSRS2;

                        OGRCoordinateTransformation *poCT;

 

                        oSRS.importFromESRI(&Buffer);

                        oSRS2.SetGeogCS( "My geographic coordinate system",

                                        "WGS_1984",

                                        "My WGS84 Spheroid",

                                        SRS_WGS84_SEMIMAJOR,
SRS_WGS84_INVFLATTENING,

                                        "Greenwich", 0.0,

                                        "degree", atoi(SRS_UA_DEGREE_CONV));

 

                        poCT =
OGRCreateCoordinateTransformation(&oSRS,&oSRS2);

 

 

                        if((poCT == NULL)||(poPoly->transform(poCT)!=
OGRERR_NONE))             //Convert lambert 2 to WGS84

                        {

                         MessageBox(NULL,"Erreur,
Réessayez","Erreur",MB_ICONERROR);

                         PRJ = true;

                         return;

                        }

 

                     }

                     Prj.close();

 

int nparts = poPoly->getNumInteriorRings();

 

                   if(nparts==0)

                      nparts = 1;

                      

                  for(int n=0;n<nparts;n++)
//for npart


                  {

                     OGRLinearRing *poRing;

 

                      if(poPoly->getNumInteriorRings()>0)
//if I understand correctly, through the function 

                        poRing = poPoly->getInteriorRing(n);
// OGRGeometryFactory::organizePolygons() of

                      else
//SHPReadOGRObject, all the outer rings are converted in inner rings

                        poRing = poPoly->getExteriorRing();
//so if there is more rings than 0, there is many interior rings 

 
//else getInteriorRing(n) should be give the N rings

 
//but the function gives one ring with one point which as an incorrect value


 

                     const LPXTNPOINT3D tabPoints = new
XTNPOINT3D[poRing->getNumPoints()];        //Tab of points for draw ring

 

                     for(i=0;i<poRing->getNumPoints();i++)
// Loop To Assign Points good projection

                     {

                        XTNPROJECTIONINFO xtnProjectionInfo =
XtnStartMapProjection(xtnMapID);        // Creating a projection for the
coordinates

                        LPXTNPROJECTION lpxtnProjection = new XTNPROJECTION;
//---------------------------------------------------------------

                        

                        lpxtnProjection->prLongitude =
poRing->getX(i)*3.1415926535/180;                            //Longitude
point conversion in Projected

                        lpxtnProjection->prLatitude =
poRing->getY(i)*3.1415926535/180;
//Latitude--------------------------------------

 

                        XtnProjection_Do(xtnProjectionInfo,
lpxtnProjection);
//Projection conversion

                        XtnProjection_Destroy(xtnProjectionInfo);

 

                        tabPoints[i].X
=((long)((double)(lpxtnProjection->prX * 100.0 + 1.0))) / 100;
//Conversion long

                        tabPoints[i].Y
=((long)((double)(lpxtnProjection->prY * 100.0 + 1.0))) / 100;

                        tabPoints[i].Z = 0 ;

                     }

 
XtnGeom_SetPoints(MaForme,n,poRing->getNumPoints(),tabPoints);
// Insertion Points in the figure

                   }

 

 

So, can you help me to fix my problem please ? 

 

Sincerely.

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20110303/ebbb9051/attachment-0001.html


More information about the gdal-dev mailing list