OGRBNALayer::OGRBNALayer( const char *pszFilename, const char* layerName, BNAFeatureType bnaFeatureType, OGRwkbGeometryType eLayerGeomType, int bWriter, OGRBNADataSource* poDS, int nIDs) { eof = FALSE; failed = FALSE; curLine = 0; nNextFID = 0; this->bWriter = bWriter; this->poDS = poDS; this->nIDs = nIDs; nFeatures = 0; partialIndexTable = TRUE; offsetAndLineFeaturesTable = NULL; const char* iKnowHowToCount[] = { "Primary", "Secondary", "Third", "Fourth", "Fifth" }; char tmp[32]; poFeatureDefn = new OGRFeatureDefn( CPLSPrintf("%s_%s", CPLGetBasename( pszFilename ) , layerName )); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( eLayerGeomType ); this->bnaFeatureType = bnaFeatureType; if (! bWriter ) { int i; for(i=0;i<nIDs;i++) { if (i < (int) (sizeof(iKnowHowToCount)/sizeof(iKnowHowToCount[0])) ) { sprintf(tmp, "%s ID", iKnowHowToCount[i]); OGRFieldDefn oFieldID(tmp, OFTString ); poFeatureDefn->AddFieldDefn( &oFieldID ); } else { sprintf(tmp, "%dth ID", i+1); OGRFieldDefn oFieldID(tmp, OFTString ); poFeatureDefn->AddFieldDefn( &oFieldID ); } } if (bnaFeatureType == BNA_ELLIPSE) { OGRFieldDefn oFieldMajorRadius( "Major radius", OFTReal ); poFeatureDefn->AddFieldDefn( &oFieldMajorRadius ); OGRFieldDefn oFieldMinorRadius( "Minor radius", OFTReal ); poFeatureDefn->AddFieldDefn( &oFieldMinorRadius ); } fpBNA = VSIFOpenL( pszFilename, "rb" ); if( fpBNA == NULL ) return; } else { fpBNA = NULL; } }
OGRBNALayer::OGRBNALayer( const char *pszFilename, const char* layerName, BNAFeatureType bnaFeatureTypeIn, OGRwkbGeometryType eLayerGeomType, int bWriterIn, OGRBNADataSource* poDSIn, int nIDsIn) : poDS(poDSIn), bWriter(bWriterIn), nIDs(nIDsIn), eof(FALSE), failed(FALSE), curLine(0), nNextFID(0), nFeatures(0), partialIndexTable(TRUE), offsetAndLineFeaturesTable(NULL) { static const char* const iKnowHowToCount[] = { "Primary", "Secondary", "Third", "Fourth", "Fifth" }; char tmp[32]; poFeatureDefn = new OGRFeatureDefn( CPLSPrintf( "%s_%s", CPLGetBasename( pszFilename ), layerName )); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( eLayerGeomType ); SetDescription( poFeatureDefn->GetName() ); this->bnaFeatureType = bnaFeatureTypeIn; if (! bWriter ) { for(int i=0;i<nIDs;i++) { if (i < static_cast<int>( sizeof(iKnowHowToCount)/sizeof(iKnowHowToCount[0]) ) ) { snprintf(tmp, sizeof(tmp), "%s ID", iKnowHowToCount[i]); OGRFieldDefn oFieldID(tmp, OFTString ); poFeatureDefn->AddFieldDefn( &oFieldID ); } else { snprintf(tmp, sizeof(tmp), "%dth ID", i+1); OGRFieldDefn oFieldID(tmp, OFTString ); poFeatureDefn->AddFieldDefn( &oFieldID ); } } if (bnaFeatureType == BNA_ELLIPSE) { OGRFieldDefn oFieldMajorRadius( "Major radius", OFTReal ); poFeatureDefn->AddFieldDefn( &oFieldMajorRadius ); OGRFieldDefn oFieldMinorRadius( "Minor radius", OFTReal ); poFeatureDefn->AddFieldDefn( &oFieldMinorRadius ); } fpBNA = VSIFOpenL( pszFilename, "rb" ); if( fpBNA == NULL ) return; } else { fpBNA = NULL; } }