OGR:getExteriorRing无法读取多边形外边界的问题
最近做项目遇到了一个问题,在读取一个shp文件时,需要读取多边形的外边界,我的程序片段如下:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
……
OGRGeometry *pGeometry = NULL;
pGeometry = pFeature->GetGeometryRef();//获取该要素的几何形状
OGRPolygon *pPolygon;
pPolygon = (OGRPolygon*)pGeometry;
OGRLinearRing *pLinearRing = NULL;
pLinearRing = pPolygon->getExteriorRing();//获取该多边形的外环
int Nums = pLinearRing->getNumPoints();
……
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
结果有些含有洞的多边形读取无误,而有些怎么也读取不出来,且Nums的值等于1.我以为是多边形顺逆时针的问题,调试后发现不是这个问题。最后研究的结果是,该多边形对象的类型出了问题!有一些含洞多边形的类型是OGRPolygon,有一些是OGRMultiPolygon。最后,程序修改如下即可:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
……
OGRGeometry *Geometry=NULL;
Geometry=_Feature->GetGeometryRef();//获取该要素的几何形状
OGRwkbGeometryType geotype;
geotype=Geometry->getGeometryType();//获取该要素的几何形状类型
OGRPolygon *Polygon;
OGRMultiPolygon *MultiPolygon;
OGRLinearRing *Ring;
if (wkbPolygon == geotype) // 判断类型
{
Polygon = (OGRPolygon *)Geometry;
Ring = Polygon->getExteriorRing();
}
else if(wkbMultiPolygon == geotype)
{
MultiPolygon = (OGRMultiPolygon *)Geometry;
MultiPolygon->closeRings();
OGRGeometry *FirstGeometry = NULL;
FirstGeometry = MultiPolygon->getGeometryRef(0);
Polygon = (OGRPolygon *)FirstGeometry;
Ring = Polygon->getExteriorRing();
}
……
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
转载自:https://blog.csdn.net/JUne20106/article/details/37612863