CPLErr GXFDataset::GetGeoTransform( double * padfTransform ) { CPLErr eErr; double dfXOrigin, dfYOrigin, dfXSize, dfYSize, dfRotation; eErr = GXFGetPosition( hGXF, &dfXOrigin, &dfYOrigin, &dfXSize, &dfYSize, &dfRotation ); if( eErr != CE_None ) return eErr; // Transform to radians. dfRotation = (dfRotation / 360.0) * 2 * M_PI; padfTransform[1] = dfXSize * cos(dfRotation); padfTransform[2] = dfYSize * sin(dfRotation); padfTransform[4] = dfXSize * sin(dfRotation); padfTransform[5] = -1 * dfYSize * cos(dfRotation); // take into account that GXF is point or center of pixel oriented. padfTransform[0] = dfXOrigin - 0.5*padfTransform[1] - 0.5*padfTransform[2]; padfTransform[3] = dfYOrigin - 0.5*padfTransform[4] - 0.5*padfTransform[5]; return CE_None; }
CPLErr GXFGetPROJ4Position( GXFHandle hGXF, double * pdfXOrigin, double * pdfYOrigin, double * pdfXPixelSize, double * pdfYPixelSize, double * pdfRotation ) { GXFInfo_t *psGXF = (GXFInfo_t *) hGXF; char *pszProj; /* -------------------------------------------------------------------- */ /* Get the raw position. */ /* -------------------------------------------------------------------- */ if( GXFGetPosition( hGXF, pdfXOrigin, pdfYOrigin, pdfXPixelSize, pdfYPixelSize, pdfRotation ) == CE_Failure ) return( CE_Failure ); /* -------------------------------------------------------------------- */ /* Do we know the units in PROJ.4? Get the PROJ.4 string, and */ /* check for a +units definition. */ /* -------------------------------------------------------------------- */ pszProj = GXFGetMapProjectionAsPROJ4( hGXF ); if( strstr(pszProj,"+unit") == NULL && psGXF->pszUnitName != NULL ) { if( pdfXOrigin != NULL ) *pdfXOrigin *= psGXF->dfUnitToMeter; if( pdfYOrigin != NULL ) *pdfYOrigin *= psGXF->dfUnitToMeter; if( pdfXPixelSize != NULL ) *pdfXPixelSize *= psGXF->dfUnitToMeter; if( pdfYPixelSize != NULL ) *pdfYPixelSize *= psGXF->dfUnitToMeter; } CPLFree( pszProj ); return( CE_None ); }