使用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;    
   }


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值