OGRBoolean OGRPolygon::Equal( OGRGeometry * poOther ) { OGRPolygon *poOPoly = (OGRPolygon *) poOther; if( poOther == this ) return TRUE; if( poOther->getGeometryType() != getGeometryType() ) return FALSE; if( getNumInteriorRings() != poOPoly->getNumInteriorRings() ) return FALSE; if( !getExteriorRing()->Equal( poOPoly->getExteriorRing() ) ) return FALSE; // we should eventually test the SRS. for( int iRing = 0; iRing < getNumInteriorRings(); iRing++ ) { if( !getInteriorRing(iRing)->Equal(poOPoly->getInteriorRing(iRing)) ) return FALSE; } return TRUE; }
bool is_valid_polygon(const OGRGeometry* geometry) { if (geometry && geometry->getGeometryType() == wkbPolygon) { const auto polygon = static_cast<const OGRPolygon*>(geometry); return (polygon->getExteriorRing()->getNumPoints() > 3) && (polygon->getNumInteriorRings() == 0) && geometry->IsValid(); } return false; }
OGRBoolean OGRCurvePolygon::ContainsPoint( const OGRPoint* p ) const { if( getExteriorRingCurve() != NULL && getNumInteriorRings() == 0 ) { int nRet = getExteriorRingCurve()->ContainsPoint(p); if( nRet >= 0 ) return nRet; } return OGRGeometry::Contains(p); }
double OGRPolygon::get_Area() const { double dfArea = 0.0; if( getExteriorRing() != NULL ) { int iRing; dfArea = getExteriorRing()->get_Area(); for( iRing = 0; iRing < getNumInteriorRings(); iRing++ ) dfArea -= getInteriorRing( iRing )->get_Area(); } return dfArea; }