OGRFeature *OGRIdrisiLayer::GetNextFeature() { OGRFeature *poFeature; while(TRUE) { if (bEOF) return NULL; poFeature = GetNextRawFeature(); if (poFeature == NULL) { bEOF = TRUE; return NULL; } if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGRHTFLayer::GetNextFeature() { OGRFeature *poFeature; if (fpHTF == NULL || bEOF) return NULL; while(!bEOF) { poFeature = GetNextRawFeature(); if (poFeature == NULL) return NULL; if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } return NULL; }
OGRFeature *OGRGFTLayer::GetNextFeature() { GetLayerDefn(); while( true ) { if (nNextInSeq < nOffset || nNextInSeq >= nOffset + static_cast<int>(aosRows.size())) { if (bEOF) return nullptr; nOffset += static_cast<int>(aosRows.size()); if (!FetchNextRows()) return nullptr; } OGRFeature *poFeature = GetNextRawFeature(); if (poFeature == nullptr) return nullptr; if((m_poFilterGeom == nullptr || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == nullptr || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGROGDILayer::GetNextFeature() { OGRFeature *poFeature; /* Reset reading if we are not the current layer */ /* WARNING : this does not allow interleaved reading of layers */ if( m_poODS->GetCurrentLayer() != this ) { m_poODS->SetCurrentLayer(this); ResetReading(); } while( true ) { poFeature = GetNextRawFeature(); if( poFeature == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* Do we need to apply an attribute test? */ /* -------------------------------------------------------------------- */ if( (m_poAttrQuery != NULL && !m_poAttrQuery->Evaluate( poFeature ) ) || (m_poFilterGeom != NULL && !FilterGeometry( poFeature->GetGeometryRef() ) ) ) { m_nFilteredOutShapes ++; delete poFeature; } else return poFeature; } }
OGRFeature *OGRWalkTableLayer::GetFeature( long nFeatureId ) { if( pszFIDColumn == NULL ) return OGRWalkLayer::GetFeature( nFeatureId ); ClearStatement(); iNextShapeId = nFeatureId; poStmt = new CPLODBCStatement( poDS->GetSession() ); poStmt->Append( "SELECT * FROM " ); poStmt->Append( poFeatureDefn->GetName() ); poStmt->Append( "Features" ); poStmt->Appendf( " WHERE %s = %ld", pszFIDColumn, nFeatureId ); if( !poStmt->ExecuteSQL() ) { delete poStmt; poStmt = NULL; return NULL; } return GetNextRawFeature(); }
OGRFeature *OGRPGResultLayer::GetNextFeature() { OGRPGGeomFieldDefn* poGeomFieldDefn = NULL; if( poFeatureDefn->GetGeomFieldCount() != 0 ) poGeomFieldDefn = poFeatureDefn->myGetGeomFieldDefn(m_iGeomFieldFilter); for( ; TRUE; ) { OGRFeature *poFeature; poFeature = GetNextRawFeature(); if( poFeature == NULL ) return NULL; if( (m_poFilterGeom == NULL || poGeomFieldDefn == NULL || poGeomFieldDefn->ePostgisType == GEOM_TYPE_GEOMETRY || poGeomFieldDefn->ePostgisType == GEOM_TYPE_GEOGRAPHY || FilterGeometry( poFeature->GetGeomFieldRef(m_iGeomFieldFilter) ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) return poFeature; delete poFeature; } }
OGRFeature *OGRGFTLayer::GetNextFeature() { OGRFeature *poFeature; GetLayerDefn(); while(TRUE) { if (nNextInSeq < nOffset || nNextInSeq >= nOffset + (int)aosRows.size()) { if (bEOF) return NULL; nOffset += aosRows.size(); if (!FetchNextRows()) return NULL; } poFeature = GetNextRawFeature(); if (poFeature == NULL) return NULL; if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGRGMELayer::GetNextFeature() { OGRFeature *poFeature = NULL; while( TRUE ) { poFeature = GetNextRawFeature(); if( poFeature == NULL ) break; // incremeted in GetNextRawFeature() // m_nFeaturesRead++; if( (m_poFilterGeom == NULL || poFeature->GetGeometryRef() == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) break; delete poFeature; } return poFeature; }
OGRFeature *OGRIDBTableLayer::GetFeature( GIntBig nFeatureId ) { if( pszFIDColumn == NULL ) return OGRIDBLayer::GetFeature( nFeatureId ); ClearQuery(); iNextShapeId = nFeatureId; poCurr = new ITCursor( *poDS->GetConnection() ); // Create list of fields CPLString osFields; if ( poFeatureDefn->GetFieldIndex( pszFIDColumn ) == -1 ) osFields += pszFIDColumn; if ( pszGeomColumn ) { if ( ! osFields.empty() ) osFields += ","; osFields += "st_asbinary("; osFields += pszGeomColumn; osFields += ") as "; osFields += pszGeomColumn; } for( int i = 0; i < poFeatureDefn->GetFieldCount(); i++ ) { if ( ! osFields.empty() ) osFields += ","; osFields += poFeatureDefn->GetFieldDefn(i)->GetNameRef(); } CPLString sql; sql.Printf( "SELECT %s FROM %s WHERE %s = %d", osFields.c_str(), poFeatureDefn->GetName(), pszFIDColumn, nFeatureId ); CPLDebug( "OGR_IDB", "ExecuteSQL(%s)", sql.c_str() ); if( !poCurr->Prepare( sql.c_str() ) || !poCurr->Open(ITCursor::ReadOnly) ) { delete poCurr; poCurr = NULL; return NULL; } return GetNextRawFeature(); }
OGRFeature *OGRSQLiteViewLayer::GetFeature( long nFeatureId ) { if (HasLayerDefnError()) return NULL; /* -------------------------------------------------------------------- */ /* If we don't have an explicit FID column, just read through */ /* the result set iteratively to find our target. */ /* -------------------------------------------------------------------- */ if( pszFIDColumn == NULL ) return OGRSQLiteLayer::GetFeature( nFeatureId ); /* -------------------------------------------------------------------- */ /* Setup explicit query statement to fetch the record we want. */ /* -------------------------------------------------------------------- */ CPLString osSQL; int rc; ClearStatement(); iNextShapeId = nFeatureId; osSQL.Printf( "SELECT \"%s\", * FROM '%s' WHERE \"%s\" = %d", OGRSQLiteEscapeName(pszFIDColumn).c_str(), pszEscapedTableName, OGRSQLiteEscapeName(pszFIDColumn).c_str(), (int) nFeatureId ); CPLDebug( "OGR_SQLITE", "exec(%s)", osSQL.c_str() ); rc = sqlite3_prepare( poDS->GetDB(), osSQL, osSQL.size(), &hStmt, NULL ); if( rc != SQLITE_OK ) { CPLError( CE_Failure, CPLE_AppDefined, "In GetFeature(): sqlite3_prepare(%s):\n %s", osSQL.c_str(), sqlite3_errmsg(poDS->GetDB()) ); return NULL; } /* -------------------------------------------------------------------- */ /* Get the feature if possible. */ /* -------------------------------------------------------------------- */ OGRFeature *poFeature = NULL; poFeature = GetNextRawFeature(); ResetReading(); return poFeature; }
OGRFeature *OGRPLScenesLayer::GetNextFeature() { if( !bFilterMustBeClientSideEvaluated ) return GetNextRawFeature(); while( true ) { OGRFeature *poFeature = NULL; poFeature = GetNextRawFeature(); if (poFeature == NULL) return NULL; if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGROGDILayer::GetFeature( GIntBig nFeatureId ) { ecs_Result *psResult; if (m_nTotalShapeCount != -1 && nFeatureId > m_nTotalShapeCount) return NULL; /* Unset spatial filter */ OGRGeometry* poOldFilterGeom = ( m_poFilterGeom != NULL ) ? m_poFilterGeom->clone() : NULL; if( poOldFilterGeom != NULL ) SetSpatialFilter(NULL); /* Reset reading if we are not the current layer */ /* WARNING : this does not allow interleaved reading of layers */ if( m_poODS->GetCurrentLayer() != this ) { m_poODS->SetCurrentLayer(this); ResetReading(); } else if ( nFeatureId < m_iNextShapeId ) ResetReading(); while(m_iNextShapeId != nFeatureId) { psResult = cln_GetNextObject(m_nClientID); if (ECSSUCCESS(psResult)) m_iNextShapeId++; else { // We probably reached EOF... keep track of shape count. m_nTotalShapeCount = m_iNextShapeId; if( poOldFilterGeom != NULL ) { SetSpatialFilter(poOldFilterGeom); delete poOldFilterGeom; } return NULL; } } // OK, we're ready to read the requested feature... OGRFeature* poFeature = GetNextRawFeature(); if( poOldFilterGeom != NULL ) { SetSpatialFilter(poOldFilterGeom); delete poOldFilterGeom; } return poFeature; }
OGRFeature *OGRWalkLayer::GetNextFeature() { while( true ) { OGRFeature *poFeature = GetNextRawFeature(); if( poFeature == nullptr ) return nullptr; if( (m_poFilterGeom == nullptr || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == nullptr || m_poAttrQuery->Evaluate( poFeature )) ) return poFeature; delete poFeature; } }
OGRFeature *OGRIngresLayer::GetNextFeature() { while( true ) { OGRFeature *poFeature = GetNextRawFeature(); if( poFeature == NULL ) return NULL; if( (m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) return poFeature; delete poFeature; } }
OGRFeature *OGRMDBLayer::GetNextFeature() { for( ; TRUE; ) { OGRFeature *poFeature; poFeature = GetNextRawFeature(); if( poFeature == NULL ) return NULL; if( (m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) return poFeature; delete poFeature; } }
OGRFeature *OGRXLSLayer::GetNextFeature() { GetLayerDefn(); while( true ) { OGRFeature *poFeature = GetNextRawFeature(); if (poFeature == nullptr) return nullptr; if(/*(m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && */ (m_poAttrQuery == nullptr || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGROpenAirLayer::GetNextFeature() { OGRFeature *poFeature; while(TRUE) { poFeature = GetNextRawFeature(); if (poFeature == NULL) return NULL; if((m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGRAeronavFAALayer::GetNextFeature() { while( true ) { if( bEOF ) return nullptr; OGRFeature *poFeature = GetNextRawFeature(); if (poFeature == nullptr) return nullptr; if((m_poFilterGeom == nullptr || FilterGeometry( poFeature->GetGeometryRef() ) ) && (m_poAttrQuery == nullptr || m_poAttrQuery->Evaluate( poFeature )) ) { return poFeature; } else delete poFeature; } }
OGRFeature *OGRMSSQLSpatialTableLayer::GetFeature( long nFeatureId ) { if( pszFIDColumn == NULL ) return OGRMSSQLSpatialLayer::GetFeature( nFeatureId ); ClearStatement(); iNextShapeId = nFeatureId; poStmt = new CPLODBCStatement( poDS->GetSession() ); CPLString osFields = BuildFields(); poStmt->Appendf( "select %s from %s where %s = %ld", osFields.c_str(), poFeatureDefn->GetName(), pszFIDColumn, nFeatureId ); if( !poStmt->ExecuteSQL() ) { delete poStmt; poStmt = NULL; return NULL; } return GetNextRawFeature(); }