const Eprj_ProParameters *HFAGetProParameters( HFAHandle hHFA ) { HFAEntry *poMIEntry; Eprj_ProParameters *psProParms; int i; if( hHFA->nBands < 1 ) return NULL; /* -------------------------------------------------------------------- */ /* Do we already have it? */ /* -------------------------------------------------------------------- */ if( hHFA->pProParameters != NULL ) return( (Eprj_ProParameters *) hHFA->pProParameters ); /* -------------------------------------------------------------------- */ /* Get the HFA node. */ /* -------------------------------------------------------------------- */ poMIEntry = hHFA->papoBand[0]->poNode->GetNamedChild( "Projection" ); if( poMIEntry == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* Allocate the structure. */ /* -------------------------------------------------------------------- */ psProParms = (Eprj_ProParameters *)CPLCalloc(sizeof(Eprj_ProParameters),1); /* -------------------------------------------------------------------- */ /* Fetch the fields. */ /* -------------------------------------------------------------------- */ psProParms->proType = (Eprj_ProType) poMIEntry->GetIntField("proType"); psProParms->proNumber = poMIEntry->GetIntField("proNumber"); psProParms->proExeName =CPLStrdup(poMIEntry->GetStringField("proExeName")); psProParms->proName = CPLStrdup(poMIEntry->GetStringField("proName")); psProParms->proZone = poMIEntry->GetIntField("proZone"); for( i = 0; i < 15; i++ ) { char szFieldName[30]; sprintf( szFieldName, "proParams[%d]", i ); psProParms->proParams[i] = poMIEntry->GetDoubleField(szFieldName); } psProParms->proSpheroid.sphereName = CPLStrdup(poMIEntry->GetStringField("proSpheroid.sphereName")); psProParms->proSpheroid.a = poMIEntry->GetDoubleField("proSpheroid.a"); psProParms->proSpheroid.b = poMIEntry->GetDoubleField("proSpheroid.b"); psProParms->proSpheroid.eSquared = poMIEntry->GetDoubleField("proSpheroid.eSquared"); psProParms->proSpheroid.radius = poMIEntry->GetDoubleField("proSpheroid.radius"); hHFA->pProParameters = (void *) psProParms; return psProParms; }
const Eprj_MapInfo *HFAGetMapInfo( HFAHandle hHFA ) { HFAEntry *poMIEntry; Eprj_MapInfo *psMapInfo; if( hHFA->nBands < 1 ) return NULL; /* -------------------------------------------------------------------- */ /* Do we already have it? */ /* -------------------------------------------------------------------- */ if( hHFA->pMapInfo != NULL ) return( (Eprj_MapInfo *) hHFA->pMapInfo ); /* -------------------------------------------------------------------- */ /* Get the HFA node. */ /* -------------------------------------------------------------------- */ poMIEntry = hHFA->papoBand[0]->poNode->GetNamedChild( "Map_Info" ); if( poMIEntry == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* Allocate the structure. */ /* -------------------------------------------------------------------- */ psMapInfo = (Eprj_MapInfo *) CPLCalloc(sizeof(Eprj_MapInfo),1); /* -------------------------------------------------------------------- */ /* Fetch the fields. */ /* -------------------------------------------------------------------- */ psMapInfo->proName = CPLStrdup(poMIEntry->GetStringField("proName")); psMapInfo->upperLeftCenter.x = poMIEntry->GetDoubleField("upperLeftCenter.x"); psMapInfo->upperLeftCenter.y = poMIEntry->GetDoubleField("upperLeftCenter.y"); psMapInfo->lowerRightCenter.x = poMIEntry->GetDoubleField("lowerRightCenter.x"); psMapInfo->lowerRightCenter.y = poMIEntry->GetDoubleField("lowerRightCenter.y"); psMapInfo->pixelSize.width = poMIEntry->GetDoubleField("pixelSize.width"); psMapInfo->pixelSize.height = poMIEntry->GetDoubleField("pixelSize.height"); psMapInfo->units = CPLStrdup(poMIEntry->GetStringField("units")); hHFA->pMapInfo = (void *) psMapInfo; return psMapInfo; }
const Eprj_Datum *HFAGetDatum( HFAHandle hHFA ) { HFAEntry *poMIEntry; Eprj_Datum *psDatum; int i; if( hHFA->nBands < 1 ) return NULL; /* -------------------------------------------------------------------- */ /* Do we already have it? */ /* -------------------------------------------------------------------- */ if( hHFA->pDatum != NULL ) return( (Eprj_Datum *) hHFA->pDatum ); /* -------------------------------------------------------------------- */ /* Get the HFA node. */ /* -------------------------------------------------------------------- */ poMIEntry = hHFA->papoBand[0]->poNode->GetNamedChild( "Projection.Datum" ); if( poMIEntry == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* Allocate the structure. */ /* -------------------------------------------------------------------- */ psDatum = (Eprj_Datum *) CPLCalloc(sizeof(Eprj_Datum),1); /* -------------------------------------------------------------------- */ /* Fetch the fields. */ /* -------------------------------------------------------------------- */ psDatum->datumname = CPLStrdup(poMIEntry->GetStringField("datumname")); psDatum->type = (Eprj_DatumType) poMIEntry->GetIntField("type"); for( i = 0; i < 7; i++ ) { char szFieldName[30]; sprintf( szFieldName, "params[%d]", i ); psDatum->params[i] = poMIEntry->GetDoubleField(szFieldName); } psDatum->gridname = CPLStrdup(poMIEntry->GetStringField("gridname")); hHFA->pDatum = (void *) psDatum; return psDatum; }