Changeset 19052


Ignore:
Timestamp:
Mar 11, 2010 7:01:36 PM (6 years ago)
Author:
warmerdam
Message:

added -multi so we can inspect progressiveness

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/normanb/gdal/apps/gdalasyncread.cpp

    r19051 r19052  
    3636CPL_CVSID("$Id$");
    3737
    38 /*  ******************************************************************* */
     38/* ******************************************************************** */
    3939/*                               Usage()                                */
    4040/* ******************************************************************** */
     
    5151            "       [-outsize xsize[%%] ysize[%%]]\n"
    5252            "       [-srcwin xoff yoff xsize ysize]\n"
    53             "       [-co \"NAME=VALUE\"]* [-ao \"NAME=VALUE\"]\n"
     53            "       [-co \"NAME=VALUE\"]* [-ao \"NAME=VALUE\"] -multi\n"
    5454            "       src_dataset dst_dataset\n\n" );
    5555
     
    9393    GDALProgressFunc    pfnProgress = GDALTermProgress;
    9494    int                 iSrcFileArg = -1, iDstFileArg = -1;
     95    int                 bMulti = FALSE;
    9596
    9697    anSrcWin[0] = 0;
     
    198199        }   
    199200
     201        else if( EQUAL(argv[i],"-multi") )
     202        {
     203            bMulti = TRUE;
     204        }   
    200205        else if( argv[i][0] == '-' )
    201206        {
     
    385390
    386391/* -------------------------------------------------------------------- */
    387 /*      Create the output file.                                         */
    388 /* -------------------------------------------------------------------- */
    389     hDstDS = GDALCreate( hDriver, pszDest, nOXSize, nOYSize,
    390                          nBandCount, eOutputType,
    391                          papszCreateOptions );
    392     poDstDS = (GDALDataset *) hDstDS;
    393                                      
    394 /* -------------------------------------------------------------------- */
    395 /*      Copy georeferencing.                                            */
    396 /* -------------------------------------------------------------------- */
    397     double adfGeoTransform[6];
    398 
    399     if( poSrcDS->GetGeoTransform( adfGeoTransform ) == CE_None )
    400     {
    401         adfGeoTransform[0] += anSrcWin[0] * adfGeoTransform[1]
    402             + anSrcWin[1] * adfGeoTransform[2];
    403         adfGeoTransform[3] += anSrcWin[0] * adfGeoTransform[4]
    404             + anSrcWin[1] * adfGeoTransform[5];
    405        
    406         adfGeoTransform[1] *= anSrcWin[2] / (double) nOXSize;
    407         adfGeoTransform[2] *= anSrcWin[3] / (double) nOYSize;
    408         adfGeoTransform[4] *= anSrcWin[2] / (double) nOXSize;
    409         adfGeoTransform[5] *= anSrcWin[3] / (double) nOYSize;
    410        
    411         poDstDS->SetGeoTransform( adfGeoTransform );
    412     }
    413 
    414     poDstDS->SetProjection( poSrcDS->GetProjectionRef() );
    415    
    416 /* -------------------------------------------------------------------- */
    417 /*      Transfer generally applicable metadata.                         */
    418 /* -------------------------------------------------------------------- */
    419     poDstDS->SetMetadata( poSrcDS->GetMetadata() );
    420 
    421 /* -------------------------------------------------------------------- */
    422392/*      Allocate one big buffer for the whole imagery area to           */
    423393/*      transfer.                                                       */
     
    452422    GDALAsyncStatusType eAStatus;
    453423    CPLErr eErr = CE_None;
     424    int iMultiCounter = 0;
     425
     426    hDstDS = NULL;
    454427
    455428    do
    456429    { 
     430/* ==================================================================== */
     431/*      Create the output file, and initialize if needed.               */
     432/* ==================================================================== */
     433        if( hDstDS == NULL )
     434        {
     435            CPLString osOutFilename = pszDest;
     436
     437            if( bMulti )
     438                osOutFilename.Printf( "%s_%d", pszDest, iMultiCounter++ );
     439
     440            hDstDS = GDALCreate( hDriver, osOutFilename, nOXSize, nOYSize,
     441                                 nBandCount, eOutputType,
     442                                 papszCreateOptions );
     443            poDstDS = (GDALDataset *) hDstDS;
     444                                     
     445/* -------------------------------------------------------------------- */
     446/*      Copy georeferencing.                                            */
     447/* -------------------------------------------------------------------- */
     448            double adfGeoTransform[6];
     449   
     450            if( poSrcDS->GetGeoTransform( adfGeoTransform ) == CE_None )
     451            {
     452                adfGeoTransform[0] += anSrcWin[0] * adfGeoTransform[1]
     453                    + anSrcWin[1] * adfGeoTransform[2];
     454                adfGeoTransform[3] += anSrcWin[0] * adfGeoTransform[4]
     455                    + anSrcWin[1] * adfGeoTransform[5];
     456               
     457                adfGeoTransform[1] *= anSrcWin[2] / (double) nOXSize;
     458                adfGeoTransform[2] *= anSrcWin[3] / (double) nOYSize;
     459                adfGeoTransform[4] *= anSrcWin[2] / (double) nOXSize;
     460                adfGeoTransform[5] *= anSrcWin[3] / (double) nOYSize;
     461               
     462                poDstDS->SetGeoTransform( adfGeoTransform );
     463            }
     464
     465            poDstDS->SetProjection( poSrcDS->GetProjectionRef() );
     466   
     467/* -------------------------------------------------------------------- */
     468/*      Transfer generally applicable metadata.                         */
     469/* -------------------------------------------------------------------- */
     470            poDstDS->SetMetadata( poSrcDS->GetMetadata() );
     471        }
     472
     473/* ==================================================================== */
     474/*      Fetch an update and write it to the output file.                */
     475/* ==================================================================== */
     476
     477
    457478        int nUpXOff, nUpYOff, nUpXSize, nUpYSize;
    458479
     
    481502        poAsyncReq->UnlockBuffer();
    482503
    483         GDALFlushCache( hDstDS );
     504/* -------------------------------------------------------------------- */
     505/*      In multi mode we will close this file and reopen another for    */
     506/*      the next request.                                               */
     507/* -------------------------------------------------------------------- */
     508        if( bMulti )
     509        {
     510            GDALClose( hDstDS );
     511            hDstDS = NULL;
     512        }
     513        else
     514            GDALFlushCache( hDstDS );
    484515
    485516    } while( eAStatus != GARIO_ERROR && eAStatus != GARIO_COMPLETE
     
    493524    VSIFree( pImage );
    494525
    495     GDALClose( hDstDS );
     526    if( hDstDS )
     527        GDALClose( hDstDS );
     528
    496529    GDALClose( hSrcDS );
    497530
Note: See TracChangeset for help on using the changeset viewer.