使用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;
}
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;
}
相关文章推荐
- 使用GDAL读取necdf数据
- GDAL\OGR读取数据示例 C#版本
- 使用gdal读取图像数据,然后用构建gdi+位图显示
- 使用GDAL/OGR读取点、线矢量文件
- 关于OGR读取多边形-Polygon(GDAL 2.0版本之前)
- GDAL\OGR读取数据示例 C#版本
- 在开发中使用GDAL读取空间数据的使用心得一
- Python地理数据处理之GDAL/OGR使用
- Python地理数据处理之GDAL/OGR使用
- GDAL\OGR读取数据示例 C#版本
- C#使用GDAL读取DEM数据
- 使用gdal C#封装库读取DEM数据
- GDAL\OGR读取数据示例 C#版本
- 在开发中使用GDAL读取空间数据的使用心得一
- 使用SqlDataReader读取数据示例
- Linux下C语言实现的简单使用线程向FIFO里写入与读取数据的例子
- 从XML文件读取数据动态设置Tree控件使用
- vbs中使用 ADO 读取所有数据均在一行上的文本文件的代码
- 演练:使用 DataGrid Web 控件读取和写入数据
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片