~ubuntu-branches/debian/sid/gdal/sid

« back to all changes in this revision

Viewing changes to frmts/gxf/gxfdataset.cpp

  • Committer: Package Import Robot
  • Author(s): Francesco Paolo Lovergine
  • Date: 2012-05-07 15:04:42 UTC
  • mfrom: (5.5.16 experimental)
  • Revision ID: package-import@ubuntu.com-20120507150442-2eks97loeh6rq005
Tags: 1.9.0-1
* Ready for sid, starting transition.
* All symfiles updated to latest builds.
* Added dh_numpy call in debian/rules to depend on numpy ABI.
* Policy bumped to 3.9.3, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/******************************************************************************
2
 
 * $Id: gxfdataset.cpp 21087 2010-11-07 18:02:49Z warmerdam $
 
2
 * $Id: gxfdataset.cpp 22401 2011-05-18 22:20:45Z warmerdam $
3
3
 *
4
4
 * Project:  GXF Reader
5
5
 * Purpose:  GDAL binding for GXF reader.
30
30
#include "gxfopen.h"
31
31
#include "gdal_pam.h"
32
32
 
33
 
CPL_CVSID("$Id: gxfdataset.cpp 21087 2010-11-07 18:02:49Z warmerdam $");
 
33
CPL_CVSID("$Id: gxfdataset.cpp 22401 2011-05-18 22:20:45Z warmerdam $");
34
34
 
35
35
#ifndef PI
36
36
#  define PI 3.14159265358979323846
56
56
 
57
57
    char        *pszProjection;
58
58
    double      dfNoDataValue;
 
59
    GDALDataType eDataType;
59
60
 
60
61
  public:
61
62
                GXFDataset();
96
97
    this->poDS = poDS;
97
98
    this->nBand = nBand;
98
99
    
99
 
    eDataType = GDT_Float32;
 
100
    eDataType = poDS->eDataType;
100
101
 
101
102
    nBlockXSize = poDS->GetRasterXSize();
102
103
    nBlockYSize = 1;
112
113
    GXFDataset  *poGXF_DS = (GXFDataset *) poDS;
113
114
    if (bGotNoDataValue)
114
115
        *bGotNoDataValue = (fabs(poGXF_DS->dfNoDataValue - -1e12) > .1);
115
 
    return poGXF_DS->dfNoDataValue;
 
116
    if (eDataType == GDT_Float32)
 
117
        return (double)(float)poGXF_DS->dfNoDataValue;
 
118
    else
 
119
        return poGXF_DS->dfNoDataValue;
116
120
}
117
121
 
118
122
/************************************************************************/
131
135
 
132
136
    CPLAssert( nBlockXOff == 0 );
133
137
 
134
 
    padfBuffer = (double *) CPLMalloc(sizeof(double) * nBlockXSize);
135
 
    eErr = GXFGetScanline( poGXF_DS->hGXF, nBlockYOff, padfBuffer );
 
138
    if (eDataType == GDT_Float32)
 
139
    {
 
140
        padfBuffer = (double *) CPLMalloc(sizeof(double) * nBlockXSize);
 
141
        eErr = GXFGetScanline( poGXF_DS->hGXF, nBlockYOff, padfBuffer );
 
142
        
 
143
        for( i = 0; i < nBlockXSize; i++ )
 
144
            pafBuffer[i] = (float) padfBuffer[i];
136
145
    
137
 
    for( i = 0; i < nBlockXSize; i++ )
138
 
        pafBuffer[i] = (float) padfBuffer[i];
139
 
 
140
 
    CPLFree( padfBuffer );
 
146
        CPLFree( padfBuffer );
 
147
    }
 
148
    else if (eDataType == GDT_Float64)
 
149
        eErr = GXFGetScanline( poGXF_DS->hGXF, nBlockYOff, (double*)pImage );
 
150
    else
 
151
        eErr = CE_Failure;
141
152
    
142
153
    return eErr;
143
154
}
158
169
    pszProjection = NULL;
159
170
    hGXF = NULL;
160
171
    dfNoDataValue = 0;
 
172
    eDataType = GDT_Float32;
161
173
}
162
174
 
163
175
/************************************************************************/
306
318
    GXFDataset  *poDS;
307
319
 
308
320
    poDS = new GXFDataset();
 
321
    
 
322
    const char* pszGXFDataType = CPLGetConfigOption("GXF_DATATYPE", "Float32");
 
323
    GDALDataType eDT = GDALGetDataTypeByName(pszGXFDataType);
 
324
    if (!(eDT == GDT_Float32 || eDT == GDT_Float64))
 
325
    {
 
326
        CPLError(CE_Warning, CPLE_NotSupported,
 
327
                 "Unsupported value for GXF_DATATYPE : %s", pszGXFDataType);
 
328
        eDT = GDT_Float32;
 
329
    }
309
330
 
310
331
    poDS->hGXF = hGXF;
 
332
    poDS->eDataType = eDT;
311
333
    
312
334
/* -------------------------------------------------------------------- */
313
335
/*      Establish the projection.                                       */
341
363
    poDS->SetDescription( poOpenInfo->pszFilename );
342
364
    poDS->TryLoadXML();
343
365
 
 
366
/* -------------------------------------------------------------------- */
 
367
/*      Check for external overviews.                                   */
 
368
/* -------------------------------------------------------------------- */
 
369
    poDS->oOvManager.Initialize( poDS, poOpenInfo->pszFilename, poOpenInfo->papszSiblingFiles );
 
370
 
344
371
    return( poDS );
345
372
}
346
373