?? ogrs57datasource.cpp
字號:
AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateVectorPrimitiveFeatureDefn( RCNM_VF, poModule->GetOptionFlags()); AddLayer( new OGRS57Layer( this, poDefn ) ); }/* -------------------------------------------------------------------- *//* Initialize a layer for each type of geometry. Eventually *//* we will do this by object class. *//* -------------------------------------------------------------------- */ if( OGRS57Driver::GetS57Registrar() == NULL ) { OGRFeatureDefn *poDefn; poDefn = S57GenerateGeomFeatureDefn( wkbPoint, poModule->GetOptionFlags() ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateGeomFeatureDefn( wkbLineString, poModule->GetOptionFlags() ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateGeomFeatureDefn( wkbPolygon, poModule->GetOptionFlags() ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateGeomFeatureDefn( wkbNone, poModule->GetOptionFlags() ); AddLayer( new OGRS57Layer( this, poDefn ) ); }/* -------------------------------------------------------------------- *//* Initialize a feature definition for each class that actually *//* occurs in the dataset. *//* -------------------------------------------------------------------- */ else { OGRFeatureDefn *poDefn; int *panClassCount; int iClass, bGeneric = FALSE; for( iModule = 0; iModule < nModules; iModule++ ) { papoModules[iModule]->SetClassBased( OGRS57Driver::GetS57Registrar() ); } panClassCount = (int *) CPLCalloc(sizeof(int),MAX_CLASSES); for( iModule = 0; iModule < nModules; iModule++ ) papoModules[iModule]->CollectClassList(panClassCount,MAX_CLASSES); for( iClass = 0; iClass < MAX_CLASSES; iClass++ ) { if( panClassCount[iClass] > 0 ) { poDefn = S57GenerateObjectClassDefn( OGRS57Driver::GetS57Registrar(), iClass, poModule->GetOptionFlags() ); if( poDefn != NULL ) AddLayer( new OGRS57Layer( this, poDefn, panClassCount[iClass] ) ); else { bGeneric = TRUE; CPLDebug( "S57", "Unable to find definition for OBJL=%d\n", iClass ); } } } if( bGeneric ) { poDefn = S57GenerateGeomFeatureDefn( wkbUnknown, poModule->GetOptionFlags() ); AddLayer( new OGRS57Layer( this, poDefn ) ); } CPLFree( panClassCount ); }/* -------------------------------------------------------------------- *//* Attach the layer definitions to each of the readers. *//* -------------------------------------------------------------------- */ for( iModule = 0; iModule < nModules; iModule++ ) { for( int iLayer = 0; iLayer < nLayers; iLayer++ ) { papoModules[iModule]->AddFeatureDefn( papoLayers[iLayer]->GetLayerDefn() ); } } return TRUE;}/************************************************************************//* GetLayer() *//************************************************************************/OGRLayer *OGRS57DataSource::GetLayer( int iLayer ){ if( iLayer < 0 || iLayer >= nLayers ) return NULL; else return papoLayers[iLayer];}/************************************************************************//* AddLayer() *//************************************************************************/void OGRS57DataSource::AddLayer( OGRS57Layer * poNewLayer ){ papoLayers = (OGRS57Layer **) CPLRealloc( papoLayers, sizeof(void*) * ++nLayers ); papoLayers[nLayers-1] = poNewLayer;}/************************************************************************//* GetModule() *//************************************************************************/S57Reader * OGRS57DataSource::GetModule( int i ){ if( i < 0 || i >= nModules ) return NULL; else return papoModules[i];}/************************************************************************//* GetDSExtent() *//************************************************************************/OGRErr OGRS57DataSource::GetDSExtent( OGREnvelope *psExtent, int bForce ){/* -------------------------------------------------------------------- *//* If we have it, return it immediately. *//* -------------------------------------------------------------------- */ if( bExtentsSet ) { *psExtent = oExtents; return OGRERR_NONE; } if( nModules == 0 ) return OGRERR_FAILURE;/* -------------------------------------------------------------------- *//* Otherwise try asking each of the readers for it. *//* -------------------------------------------------------------------- */ for( int iModule=0; iModule < nModules; iModule++ ) { OGREnvelope oModuleEnvelope; OGRErr eErr; eErr = papoModules[iModule]->GetExtent( &oModuleEnvelope, bForce ); if( eErr != OGRERR_NONE ) return eErr; if( iModule == 0 ) oExtents = oModuleEnvelope; else { oExtents.MinX = MIN(oExtents.MinX,oModuleEnvelope.MinX); oExtents.MaxX = MAX(oExtents.MaxX,oModuleEnvelope.MaxX); oExtents.MinY = MIN(oExtents.MinY,oModuleEnvelope.MinY); oExtents.MaxX = MAX(oExtents.MaxY,oModuleEnvelope.MaxY); } } *psExtent = oExtents; bExtentsSet = TRUE; return OGRERR_NONE;}/************************************************************************//* Create() *//* *//* Create a new S57 file, and represent it as a datasource. *//************************************************************************/int OGRS57DataSource::Create( const char *pszFilename, char **papszOptions ){/* -------------------------------------------------------------------- *//* Instantiate the class registrar if possible. *//* -------------------------------------------------------------------- */ if( OGRS57Driver::GetS57Registrar() == NULL ) { CPLError( CE_Failure, CPLE_AppDefined, "Unable to load s57objectclasses.csv, unable to continue." ); return FALSE; }/* -------------------------------------------------------------------- *//* Create the S-57 file with definition record. *//* -------------------------------------------------------------------- */ poWriter = new S57Writer(); if( !poWriter->CreateS57File( pszFilename ) ) return FALSE; poWriter->SetClassBased( OGRS57Driver::GetS57Registrar() ); pszName = CPLStrdup( pszFilename );/* -------------------------------------------------------------------- *//* Add the primitive layers if they are called for. *//* -------------------------------------------------------------------- */ OGRFeatureDefn *poDefn; int nOptionFlags = S57M_RETURN_LINKAGES | S57M_LNAM_REFS; poDefn = S57GenerateVectorPrimitiveFeatureDefn( RCNM_VI, nOptionFlags ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateVectorPrimitiveFeatureDefn( RCNM_VC, nOptionFlags ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateVectorPrimitiveFeatureDefn( RCNM_VE, nOptionFlags ); AddLayer( new OGRS57Layer( this, poDefn ) ); poDefn = S57GenerateVectorPrimitiveFeatureDefn( RCNM_VF, nOptionFlags ); AddLayer( new OGRS57Layer( this, poDefn ) );/* -------------------------------------------------------------------- *//* Initialize a feature definition for each object class. *//* -------------------------------------------------------------------- */ for( int iClass = 0; iClass < MAX_CLASSES; iClass++ ) { poDefn = S57GenerateObjectClassDefn( OGRS57Driver::GetS57Registrar(), iClass, nOptionFlags ); if( poDefn == NULL ) continue; AddLayer( new OGRS57Layer( this, poDefn, 0, iClass ) ); }/* -------------------------------------------------------------------- *//* Write out "header" records. *//* -------------------------------------------------------------------- */ poWriter->WriteDSID( pszFilename, "20010409", "03.1", 540, "" ); poWriter->WriteDSPM(); return TRUE;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -