您的位置:首页 > 其它

使用GDAL/OGR读取多边形数据

2014-07-30 14:30 976 查看
这里的多边形考虑了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;

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: