使用GDAL/OGR讀取多邊形資料
這裡的多邊形考慮了wkbPolygon和wkbMultiPolygon兩種型別。首先是wkbPolygon型別:
poPolygon=(OGRPolygon*) poGeometry;
poPolygon->closeRings(); //閉合環,使起點與終點重合
poEnvelope=new OGREnvelope; //獲取該要素的四至範圍
poGeometry->getEnvelope(poEnvelope);
if(0==GNum)
{
minX=poEnvelope->MinX;
minY=poEnvelope->MinY;
maxX=poEnvelope->MaxX;
maxY=poEnvelope->MaxY;
}
else
{
if((poEnvelope->MinX)<minX) minX=poEnvelope->MinX;
if((poEnvelope->MinY)<minY) minY=poEnvelope->MinY;
if((poEnvelope->MaxX)>maxX) maxX=poEnvelope->MaxX;
if((poEnvelope->MaxY)>maxY) maxY=poEnvelope->MaxY;
}
int NumInteriorRings = poPolygon->getNumInteriorRings(); //內環個數
//while (NumInteriorRings!=0) //如果內環個數為零,即是簡單多邊形
poOGRLinearRing = poPolygon->getExteriorRing(); //內環為零時,簡單多變形的外環即是其多邊形本身
GPointNum.push_back(poOGRLinearRing->getNumPoints());
OGRRawPoint *Gpoints=new OGRRawPoint[GPointNum.at(GNum)];
poOGRLinearRing->getPoints(Gpoints,NULL);
for (int k=0;k<GPointNum.at(GNum);k++)
{
PointX.push_back(Gpoints[k].x);
PointY.push_back(Gpoints[k].y);
}
GNum++;
delete []Gpoints;
而當有的多邊形物件包含有好幾個多邊形時,則為wkbMultiPolygon。其獲取的方法類似,只不過要判斷該多邊形幾何體中幾何體的個數,得到個數之後再依次迴圈每個幾何體:
int NumMPolygon=MultiPolygon->getNumGeometries();//集合幾何體中幾何體的個數
for (int i=0; i<NumMPolygon;i++) //迴圈每個幾何體
{
OGRGeometry * FirstGeometry = MultiPolygon->getGeometryRef(i);
OGRPolygon*poMultiPolygon = (OGRPolygon *)FirstGeometry;
OGRLinearRing *poMultiLinearRing = poMultiPolygon->getExteriorRing();
GPointNum.push_back(poMultiLinearRing->getNumPoints());
OGRRawPoint *Gpoints=new OGRRawPoint[GPointNum.at(GNum)];
poMultiLinearRing->getPoints(Gpoints,NULL);
for (int k=0;k<GPointNum.at(GNum);k++)
{
PointX.push_back(Gpoints[k].x);
PointY.push_back(Gpoints[k].y);
}
GNum++;
delete []Gpoints;
}