[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