源码:
/************************************************************************/
/* OGR_GT_IsSubClassOf) */
/************************************************************************/
/**
* \brief Returns if a type is a subclass of another one
*
* @param eType Type.
* @param eSuperType Super type
*
* @return TRUE if eType is a subclass of eSuperType.
*
* @since GDAL 2.0
*/
int OGR_GT_IsSubClassOf(OGRwkbGeometryType eType, OGRwkbGeometryType eSuperType)
{
eSuperType = wkbFlatten(eSuperType);
eType = wkbFlatten(eType);
if (eSuperType == eType || eSuperType == wkbUnknown)
return TRUE;
if (eSuperType == wkbGeometryCollection)
return eType == wkbMultiPoint || eType == wkbMultiLineString ||
eType == wkbMultiPolygon || eType == wkbMultiCurve ||
eType == wkbMultiSurface;
if (eSuperType == wkbCurvePolygon)
return eType == wkbPolygon || eType == wkbTriangle;
if (eSuperType == wkbMultiCurve)
return eType == wkbMultiLineString;
if (eSuperType == wkbMultiSurface)
return eType == wkbMultiPolygon;
if (eSuperType == wkbCurve)
return eType == wkbLineString || eType == wkbCircularString ||
eType == wkbCompoundCurve;
if (eSuperType == wkbSurface)
return eType == wkbCurvePolygon || eType == wkbPolygon ||
eType == wkbTriangle || eType == wkbPolyhedralSurface ||
eType == wkbTIN;
if (eSuperType == wkbPolygon)
return eType == wkbTriangle;
if (eSuperType == wkbPolyhedralSurface)
return eType == wkbTIN;
return FALSE;
}