static int GDALInfoReportCorner( GDALDatasetH hDataset, OGRCoordinateTransformationH hTransform, const char * corner_name, double x, double y ) { double dfGeoX, dfGeoY; double adfGeoTransform[6]; printf( "%-11s ", corner_name ); /* -------------------------------------------------------------------- */ /* Transform the point into georeferenced coordinates. */ /* -------------------------------------------------------------------- */ if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None ) { dfGeoX = adfGeoTransform[0] + adfGeoTransform[1] * x + adfGeoTransform[2] * y; dfGeoY = adfGeoTransform[3] + adfGeoTransform[4] * x + adfGeoTransform[5] * y; } else { printf( "(%7.1f,%7.1f)\n", x, y ); return FALSE; } /* -------------------------------------------------------------------- */ /* Report the georeferenced coordinates. */ /* -------------------------------------------------------------------- */ if( ABS(dfGeoX) < 181 && ABS(dfGeoY) < 91 ) { printf( "(%12.7f,%12.7f) ", dfGeoX, dfGeoY ); } else { printf( "(%12.3f,%12.3f) ", dfGeoX, dfGeoY ); } /* -------------------------------------------------------------------- */ /* Transform to latlong and report. */ /* -------------------------------------------------------------------- */ if( hTransform != NULL && OCTTransform(hTransform,1,&dfGeoX,&dfGeoY,NULL) ) { printf( "(%s,", GDALDecToDMS( dfGeoX, "Long", 2 ) ); printf( "%s)", GDALDecToDMS( dfGeoY, "Lat", 2 ) ); } printf( "\n" ); return TRUE; }
static int GDALInfoReportCorner( GDALDatasetH hDataset, const char * corner_name, double x, double y ) { double dfGeoX, dfGeoY; const char *pszProjection; double adfGeoTransform[6]; OGRCoordinateTransformationH hTransform = NULL; printf( "%-11s ", corner_name ); /* -------------------------------------------------------------------- */ /* Transform the point into georeferenced coordinates. */ /* -------------------------------------------------------------------- */ if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None ) { pszProjection = GDALGetProjectionRef(hDataset); dfGeoX = adfGeoTransform[0] + adfGeoTransform[1] * x + adfGeoTransform[2] * y; dfGeoY = adfGeoTransform[3] + adfGeoTransform[4] * x + adfGeoTransform[5] * y; } else { printf( "(%7.1f,%7.1f)\n", x, y ); return FALSE; } /* -------------------------------------------------------------------- */ /* Report the georeferenced coordinates. */ /* -------------------------------------------------------------------- */ if( fabs(dfGeoX) < 181 && fabs(dfGeoY) < 91 ) { printf( "(%12.7f,%12.7f) ", dfGeoX, dfGeoY ); } else { printf( "(%12.3f,%12.3f) ", dfGeoX, dfGeoY ); } /* -------------------------------------------------------------------- */ /* Setup transformation to lat/long. */ /* -------------------------------------------------------------------- */ if( pszProjection != NULL && strlen(pszProjection) > 0 ) { OGRSpatialReferenceH hProj, hLatLong = NULL; hProj = OSRNewSpatialReference( pszProjection ); if( hProj != NULL ) hLatLong = OSRCloneGeogCS( hProj ); if( hLatLong != NULL ) { hTransform = OCTNewCoordinateTransformation( hProj, hLatLong ); OSRDestroySpatialReference( hLatLong ); } if( hProj != NULL ) OSRDestroySpatialReference( hProj ); } /* -------------------------------------------------------------------- */ /* Transform to latlong and report. */ /* -------------------------------------------------------------------- */ if( hTransform != NULL && OCTTransform(hTransform,1,&dfGeoX,&dfGeoY,NULL) ) { printf( "(%s,", GDALDecToDMS( dfGeoX, "Long", 2 ) ); printf( "%s)", GDALDecToDMS( dfGeoY, "Lat", 2 ) ); } if( hTransform != NULL ) OCTDestroyCoordinateTransformation( hTransform ); printf( "\n" ); return TRUE; }