int OGRESRIFeatureServiceLayer::TestCapability( const char* pszCap ) { if( EQUAL(pszCap, OLCFastFeatureCount) ) return m_poAttrQuery == NULL && m_poFilterGeom == NULL; if( EQUAL(pszCap, OLCFastGetExtent) ) return FALSE; return poDS->GetUnderlyingLayer()->TestCapability(pszCap); }
OGRFeature* OGRESRIFeatureServiceLayer::GetNextFeature() { while( TRUE ) { int bWasInFirstPage = !bOtherPage; OGRFeature* poSrcFeat = poDS->GetUnderlyingLayer()->GetNextFeature(); if( poSrcFeat == NULL ) { if( !poDS->LoadNextPage() ) return NULL; poSrcFeat = poDS->GetUnderlyingLayer()->GetNextFeature(); if( poSrcFeat == NULL ) return NULL; bOtherPage = TRUE; } if( bOtherPage && bWasInFirstPage && poSrcFeat->GetFID() == 0 && nLastFID == nFeaturesRead - 1 ) { bUseSequentialFID = TRUE; } OGRFeature* poFeature = new OGRFeature(poFeatureDefn); poFeature->SetFrom(poSrcFeat); if( bUseSequentialFID ) poFeature->SetFID(nFeaturesRead); else poFeature->SetFID(poSrcFeat->GetFID()); nLastFID = poFeature->GetFID(); nFeaturesRead ++; delete poSrcFeat; if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } delete poFeature; } }