本文整理汇总了C++中CSLTokenizeStringComplex函数的典型用法代码示例。如果您正苦于以下问题:C++ CSLTokenizeStringComplex函数的具体用法?C++ CSLTokenizeStringComplex怎么用?C++ CSLTokenizeStringComplex使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CSLTokenizeStringComplex函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: return
char *GXFGetMapProjectionAsPROJ4( GXFHandle hGXF )
{
GXFInfo_t *psGXF = (GXFInfo_t *) hGXF;
char **papszMethods = NULL;
char szPROJ4[512];
/* -------------------------------------------------------------------- */
/* If there was nothing in the file return "unknown". */
/* -------------------------------------------------------------------- */
if( CSLCount(psGXF->papszMapProjection) < 2 )
return( CPLStrdup( "unknown" ) );
szPROJ4[0] = '\0';
/* -------------------------------------------------------------------- */
/* Parse the third line, looking for known projection methods. */
/* -------------------------------------------------------------------- */
if( psGXF->papszMapProjection[2] != NULL )
{
if( strlen(psGXF->papszMapProjection[2]) > 80 )
return( CPLStrdup( "" ) );
papszMethods = CSLTokenizeStringComplex(psGXF->papszMapProjection[2],
",", TRUE, TRUE );
}
#ifdef DBMALLOC
malloc_chain_check(1);
#endif
if( papszMethods == NULL
|| papszMethods[0] == NULL
|| EQUAL(papszMethods[0],"Geographic") )
{
SAFE_strcat( szPROJ4, "+proj=longlat" );
}
#ifdef notdef
else if( EQUAL(papszMethods[0],"Lambert Conic Conformal (1SP)")
&& CSLCount(papszMethods) > 5 )
{
/* notdef: It isn't clear that this 1SP + scale method is even
supported by PROJ.4
Later note: It is not. */
SAFE_strcat( szPROJ4, "+proj=lcc" );
SAFE_strcat( szPROJ4, " +lat_0=" );
SAFE_strcat( szPROJ4, papszMethods[1] );
SAFE_strcat( szPROJ4, " +lon_0=" );
SAFE_strcat( szPROJ4, papszMethods[2] );
SAFE_strcat( szPROJ4, " +k=" );
SAFE_strcat( szPROJ4, papszMethods[3] );
SAFE_strcat( szPROJ4, " +x_0=" );
SAFE_strcat( szPROJ4, papszMethods[4] );
SAFE_strcat( szPROJ4, " +y_0=" );
SAFE_strcat( szPROJ4, papszMethods[5] );
}
#endif
else if( EQUAL(papszMethods[0],"Lambert Conic Conformal (2SP)")
|| EQUAL(papszMethods[0],"Lambert Conformal (2SP Belgium)") )
{
/* notdef: Note we are apparently losing whatever makes the
Belgium variant different than normal LCC, but hopefully
they are close! */
SAFE_strcat( szPROJ4, "+proj=lcc" );
if( CSLCount(papszMethods) > 1 )
{
SAFE_strcat( szPROJ4, " +lat_1=" );
SAFE_strcat( szPROJ4, papszMethods[1] );
}
if( CSLCount(papszMethods) > 2 )
{
SAFE_strcat( szPROJ4, " +lat_2=" );
SAFE_strcat( szPROJ4, papszMethods[2] );
}
if( CSLCount(papszMethods) > 3 )
{
SAFE_strcat( szPROJ4, " +lat_0=" );
SAFE_strcat( szPROJ4, papszMethods[3] );
}
if( CSLCount(papszMethods) > 4 )
{
SAFE_strcat( szPROJ4, " +lon_0=" );
SAFE_strcat( szPROJ4, papszMethods[4] );
}
if( CSLCount(papszMethods) > 5 )
{
SAFE_strcat( szPROJ4, " +x_0=" );
SAFE_strcat( szPROJ4, papszMethods[5] );
//.........这里部分代码省略.........
示例2: Clear
OGRErr OGRSpatialReference::importFromOzi( const char *pszDatum,
const char *pszProj,
const char *pszProjParms )
{
Clear();
/* -------------------------------------------------------------------- */
/* Operate on the basis of the projection name. */
/* -------------------------------------------------------------------- */
char **papszProj = CSLTokenizeStringComplex( pszProj, ",", TRUE, TRUE );
char **papszProjParms = CSLTokenizeStringComplex( pszProjParms, ",",
TRUE, TRUE );
char **papszDatum = NULL;
if (CSLCount(papszProj) < 2)
{
goto not_enough_data;
}
if ( EQUALN(papszProj[1], "Latitude/Longitude", 18) )
{
}
else if ( EQUALN(papszProj[1], "Mercator", 8) )
{
if (CSLCount(papszProjParms) < 6) goto not_enough_data;
double dfScale = CPLAtof(papszProjParms[3]);
if (papszProjParms[3][0] == 0) dfScale = 1; /* if unset, default to scale = 1 */
SetMercator( CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
dfScale,
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]) );
}
else if ( EQUALN(papszProj[1], "Transverse Mercator", 19) )
{
if (CSLCount(papszProjParms) < 6) goto not_enough_data;
SetTM( CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[3]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]) );
}
else if ( EQUALN(papszProj[1], "Lambert Conformal Conic", 23) )
{
if (CSLCount(papszProjParms) < 8) goto not_enough_data;
SetLCC( CPLAtof(papszProjParms[6]), CPLAtof(papszProjParms[7]),
CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]) );
}
else if ( EQUALN(papszProj[1], "Sinusoidal", 10) )
{
if (CSLCount(papszProjParms) < 6) goto not_enough_data;
SetSinusoidal( CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]) );
}
else if ( EQUALN(papszProj[1], "Albers Equal Area", 17) )
{
if (CSLCount(papszProjParms) < 8) goto not_enough_data;
SetACEA( CPLAtof(papszProjParms[6]), CPLAtof(papszProjParms[7]),
CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]) );
}
else
{
CPLDebug( "OSR_Ozi", "Unsupported projection: \"%s\"", papszProj[1] );
SetLocalCS( CPLString().Printf("\"Ozi\" projection \"%s\"",
papszProj[1]) );
}
/* -------------------------------------------------------------------- */
/* Try to translate the datum/spheroid. */
/* -------------------------------------------------------------------- */
papszDatum = CSLTokenizeString2( pszDatum, ",",
CSLT_ALLOWEMPTYTOKENS
| CSLT_STRIPLEADSPACES
| CSLT_STRIPENDSPACES );
if ( papszDatum == NULL)
goto not_enough_data;
if ( !IsLocal() )
{
/* -------------------------------------------------------------------- */
/* Verify that we can find the CSV file containing the datums */
/* -------------------------------------------------------------------- */
if( CSVScanFileByName( CSVFilename( "ozi_datum.csv" ),
"EPSG_DATUM_CODE",
"4326", CC_Integer ) == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Unable to open OZI support file %s.\n"
"Try setting the GDAL_DATA environment variable to point\n"
"to the directory containing OZI csv files.",
CSVFilename( "ozi_datum.csv" ) );
goto other_error;
}
//.........这里部分代码省略.........
示例3: VSIFOpenL
GDALDataset *EIRDataset::Open( GDALOpenInfo * poOpenInfo )
{
int i;
VSILFILE *fp;
const char * pszLine;
if( !Identify( poOpenInfo ) )
return NULL;
fp = VSIFOpenL( poOpenInfo->pszFilename, "r" );
if( fp == NULL )
return NULL;
/* header example and description
IMAGINE_RAW_FILE // must be on first line, by itself
WIDTH 581 // number of columns in the image
HEIGHT 695 // number of rows in the image
NUM_LAYERS 3 // number of spectral bands in the image; default 1
PIXEL_FILES raw8_3n_ui_sanjack.bl // raster file
// default: same name with no extension
FORMAT BIL // BIL BIP BSQ; default BIL
DATATYPE U8 // U1 U2 U4 U8 U16 U32 S16 S32 F32 F64; default U8
BYTE_ORDER // LSB MSB; required for U16 U32 S16 S32 F32 F64
DATA_OFFSET // start of image data in raster file; default 0 bytes
END_RAW_FILE // end RAW file - stop reading
For a true color image with three bands (R, G, B) stored using 8 bits
for each pixel in each band, DATA_TYPE equals U8 and NUM_LAYERS equals
3 for a total of 24 bits per pixel.
Note that the current version of ERDAS Raw Raster Reader/Writer does
not support the LAYER_SKIP_BYTES, RECORD_SKIP_BYTES, TILE_WIDTH and
TILE_HEIGHT directives. Since the reader does not read the PIXEL_FILES
directive, the reader always assumes that the raw binary file is the
dataset, and the name of this file is the name of the header without the
extension. Currently, the reader does not support multiple raw binary
files in one dataset or a single file with both the header and the raw
binary data at the same time.
*/
bool bDone = FALSE;
int nRows = -1, nCols = -1, nBands = 1;
int nSkipBytes = 0;
int nLineCount = 0;
GDALDataType eDataType = GDT_Byte;
int nBits = 8;
char chByteOrder = 'M';
char szLayout[10] = "BIL";
char **papszHDR = NULL;
// default raster file: same name with no extension
CPLString osPath = CPLGetPath( poOpenInfo->pszFilename );
CPLString osName = CPLGetBasename( poOpenInfo->pszFilename );
CPLString osRasterFilename = CPLFormCIFilename( osPath, osName, "" );
// parse the header file
while( !bDone && (pszLine = CPLReadLineL( fp )) != NULL )
{
char **papszTokens;
nLineCount++;
if ( (nLineCount == 1) && !EQUAL(pszLine,"IMAGINE_RAW_FILE") ) {
return NULL;
}
if ( (nLineCount > 50) || EQUAL(pszLine,"END_RAW_FILE") ) {
bDone = TRUE;
break;
}
if( strlen(pszLine) > 1000 )
break;
papszHDR = CSLAddString( papszHDR, pszLine );
papszTokens = CSLTokenizeStringComplex( pszLine, " \t", TRUE, FALSE );
if( CSLCount( papszTokens ) < 2 )
{
CSLDestroy( papszTokens );
continue;
}
if( EQUAL(papszTokens[0],"WIDTH") )
{
nCols = atoi(papszTokens[1]);
}
else if( EQUAL(papszTokens[0],"HEIGHT") )
{
nRows = atoi(papszTokens[1]);
}
else if( EQUAL(papszTokens[0],"NUM_LAYERS") )
{
nBands = atoi(papszTokens[1]);
}
else if( EQUAL(papszTokens[0],"PIXEL_FILES") )
{
//.........这里部分代码省略.........
示例4: CPLError
OGRLayer *OGRDGNDataSource::CreateLayer( const char *pszLayerName,
OGRSpatialReference *poSRS,
OGRwkbGeometryType eGeomType,
char **papszExtraOptions )
{
const char *pszSeed, *pszMasterUnit = "m", *pszSubUnit = "cm";
const char *pszValue;
int nUORPerSU=1, nSUPerMU=100;
int nCreationFlags = 0, b3DRequested;
double dfOriginX = -21474836.0, /* default origin centered on zero */
dfOriginY = -21474836.0, /* with two decimals of precision */
dfOriginZ = -21474836.0;
/* -------------------------------------------------------------------- */
/* Ensure only one layer gets created. */
/* -------------------------------------------------------------------- */
if( nLayers > 0 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"DGN driver only supports one layer will all the elements in it." );
return NULL;
}
/* -------------------------------------------------------------------- */
/* If the coordinate system is geographic, we should use a */
/* localized default origin and resolution. */
/* -------------------------------------------------------------------- */
if( poSRS != NULL && poSRS->IsGeographic() )
{
dfOriginX = -200.0;
dfOriginY = -200.0;
pszMasterUnit = "d";
pszSubUnit = "s";
nSUPerMU = 3600;
nUORPerSU = 1000;
}
/* -------------------------------------------------------------------- */
/* Parse out various creation options. */
/* -------------------------------------------------------------------- */
CSLInsertStrings( papszOptions, 0, papszExtraOptions );
b3DRequested = CSLFetchBoolean( papszOptions, "3D",
(((int) eGeomType) & wkb25DBit) );
pszSeed = CSLFetchNameValue( papszOptions, "SEED" );
if( pszSeed )
nCreationFlags |= DGNCF_USE_SEED_ORIGIN | DGNCF_USE_SEED_UNITS;
else if( b3DRequested )
pszSeed = CPLFindFile( "gdal", "seed_3d.dgn" );
else
pszSeed = CPLFindFile( "gdal", "seed_2d.dgn" );
if( pszSeed == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"No seed file provided, and unable to find seed_2d.dgn." );
return NULL;
}
if( CSLFetchBoolean( papszOptions, "COPY_WHOLE_SEED_FILE", TRUE ) )
nCreationFlags |= DGNCF_COPY_WHOLE_SEED_FILE;
if( CSLFetchBoolean( papszOptions, "COPY_SEED_FILE_COLOR_TABLE", TRUE ) )
nCreationFlags |= DGNCF_COPY_SEED_FILE_COLOR_TABLE;
pszValue = CSLFetchNameValue( papszOptions, "MASTER_UNIT_NAME" );
if( pszValue != NULL )
{
nCreationFlags &= ~DGNCF_USE_SEED_UNITS;
pszMasterUnit = pszValue;
}
pszValue = CSLFetchNameValue( papszOptions, "SUB_UNIT_NAME" );
if( pszValue != NULL )
{
nCreationFlags &= ~DGNCF_USE_SEED_UNITS;
pszSubUnit = pszValue;
}
pszValue = CSLFetchNameValue( papszOptions, "SUB_UNITS_PER_MASTER_UNIT" );
if( pszValue != NULL )
{
nCreationFlags &= ~DGNCF_USE_SEED_UNITS;
nSUPerMU = atoi(pszValue);
}
pszValue = CSLFetchNameValue( papszOptions, "UOR_PER_SUB_UNIT" );
if( pszValue != NULL )
{
nCreationFlags &= ~DGNCF_USE_SEED_UNITS;
nUORPerSU = atoi(pszValue);
}
pszValue = CSLFetchNameValue( papszOptions, "ORIGIN" );
if( pszValue != NULL )
{
char **papszTuple = CSLTokenizeStringComplex( pszValue, " ,",
//.........这里部分代码省略.........
示例5: CPLAssert
int OGROCIDataSource::Open( const char * pszNewName,
char** papszOpenOptionsIn,
int bUpdate,
int bTestOpen )
{
CPLAssert( nLayers == 0 && poSession == NULL );
/* -------------------------------------------------------------------- */
/* Verify Oracle prefix. */
/* -------------------------------------------------------------------- */
if( !STARTS_WITH_CI(pszNewName,"OCI:") )
{
if( !bTestOpen )
{
CPLError( CE_Failure, CPLE_AppDefined,
"%s does not conform to Oracle OCI driver naming convention,"
" OCI:*\n", pszNewName );
}
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Try to parse out name, password and database name. */
/* -------------------------------------------------------------------- */
char *pszUserid;
const char *pszPassword = "";
const char *pszDatabase = "";
char **papszTableList = NULL;
const char *pszWorkspace = "";
int i;
if( pszNewName[4] == '\0' )
{
pszUserid = CPLStrdup(CSLFetchNameValueDef(papszOpenOptionsIn, "USER", ""));
pszPassword = CSLFetchNameValueDef(papszOpenOptionsIn, "PASSWORD", "");
pszDatabase = CSLFetchNameValueDef(papszOpenOptionsIn, "DBNAME", "");
const char* pszTables = CSLFetchNameValue(papszOpenOptionsIn, "TABLES");
if( pszTables )
papszTableList = CSLTokenizeStringComplex(pszTables, ",", TRUE, FALSE );
pszWorkspace = CSLFetchNameValueDef(papszOpenOptions, "WORKSPACE", "");
}
else
{
pszUserid = CPLStrdup( pszNewName + 4 );
// Is there a table list?
for( i = static_cast<int>(strlen(pszUserid))-1; i > 1; i-- )
{
if( pszUserid[i] == ':' )
{
papszTableList = CSLTokenizeStringComplex( pszUserid+i+1, ",",
TRUE, FALSE );
pszUserid[i] = '\0';
break;
}
if( pszUserid[i] == '/' || pszUserid[i] == '@' )
break;
}
for( i = 0;
pszUserid[i] != '\0' && pszUserid[i] != '/' && pszUserid[i] != '@';
i++ ) {}
if( pszUserid[i] == '/' )
{
pszUserid[i++] = '\0';
pszPassword = pszUserid + i;
for( ; pszUserid[i] != '\0' && pszUserid[i] != '@'; i++ ) {}
}
if( pszUserid[i] == '@' )
{
pszUserid[i++] = '\0';
pszDatabase = pszUserid + i;
}
}
/* -------------------------------------------------------------------- */
/* Try to establish connection. */
/* -------------------------------------------------------------------- */
CPLDebug( "OCI", "Userid=%s, Password=%s, Database=%s",
pszUserid, pszPassword, pszDatabase );
if( EQUAL(pszDatabase, "") &&
EQUAL(pszPassword, "") &&
EQUAL(pszUserid, "") )
{
/* Use username/password OS Authentication and ORACLE_SID database */
poSession = OGRGetOCISession( "/", "", "" );
}
else
{
poSession = OGRGetOCISession( pszUserid, pszPassword, pszDatabase );
}
if( poSession == NULL )
//.........这里部分代码省略.........
示例6: CPLStrdup
CPLErr VRTDataset::XMLInit( CPLXMLNode *psTree, const char *pszVRTPath )
{
if( pszVRTPath != NULL )
this->pszVRTPath = CPLStrdup(pszVRTPath);
/* -------------------------------------------------------------------- */
/* Check for an SRS node. */
/* -------------------------------------------------------------------- */
if( strlen(CPLGetXMLValue(psTree, "SRS", "")) > 0 )
{
OGRSpatialReference oSRS;
CPLFree( pszProjection );
pszProjection = NULL;
if( oSRS.SetFromUserInput( CPLGetXMLValue(psTree, "SRS", "") )
== OGRERR_NONE )
oSRS.exportToWkt( &pszProjection );
}
/* -------------------------------------------------------------------- */
/* Check for a GeoTransform node. */
/* -------------------------------------------------------------------- */
if( strlen(CPLGetXMLValue(psTree, "GeoTransform", "")) > 0 )
{
const char *pszGT = CPLGetXMLValue(psTree, "GeoTransform", "");
char **papszTokens;
papszTokens = CSLTokenizeStringComplex( pszGT, ",", FALSE, FALSE );
if( CSLCount(papszTokens) != 6 )
{
CPLError( CE_Warning, CPLE_AppDefined,
"GeoTransform node does not have expected six values.");
}
else
{
for( int iTA = 0; iTA < 6; iTA++ )
adfGeoTransform[iTA] = atof(papszTokens[iTA]);
bGeoTransformSet = TRUE;
}
CSLDestroy( papszTokens );
}
/* -------------------------------------------------------------------- */
/* Check for GCPs. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psGCPList = CPLGetXMLNode( psTree, "GCPList" );
if( psGCPList != NULL )
{
CPLXMLNode *psXMLGCP;
OGRSpatialReference oSRS;
const char *pszRawProj = CPLGetXMLValue(psGCPList, "Projection", "");
CPLFree( pszGCPProjection );
if( strlen(pszRawProj) > 0
&& oSRS.SetFromUserInput( pszRawProj ) == OGRERR_NONE )
oSRS.exportToWkt( &pszGCPProjection );
else
pszGCPProjection = CPLStrdup("");
// Count GCPs.
int nGCPMax = 0;
for( psXMLGCP = psGCPList->psChild; psXMLGCP != NULL;
psXMLGCP = psXMLGCP->psNext )
nGCPMax++;
pasGCPList = (GDAL_GCP *) CPLCalloc(sizeof(GDAL_GCP),nGCPMax);
for( psXMLGCP = psGCPList->psChild; psXMLGCP != NULL;
psXMLGCP = psXMLGCP->psNext )
{
GDAL_GCP *psGCP = pasGCPList + nGCPCount;
if( !EQUAL(psXMLGCP->pszValue,"GCP") ||
psXMLGCP->eType != CXT_Element )
continue;
GDALInitGCPs( 1, psGCP );
CPLFree( psGCP->pszId );
psGCP->pszId = CPLStrdup(CPLGetXMLValue(psXMLGCP,"Id",""));
CPLFree( psGCP->pszInfo );
psGCP->pszInfo = CPLStrdup(CPLGetXMLValue(psXMLGCP,"Info",""));
psGCP->dfGCPPixel = atof(CPLGetXMLValue(psXMLGCP,"Pixel","0.0"));
psGCP->dfGCPLine = atof(CPLGetXMLValue(psXMLGCP,"Line","0.0"));
psGCP->dfGCPX = atof(CPLGetXMLValue(psXMLGCP,"X","0.0"));
psGCP->dfGCPY = atof(CPLGetXMLValue(psXMLGCP,"Y","0.0"));
psGCP->dfGCPZ = atof(CPLGetXMLValue(psXMLGCP,"Z","0.0"));
nGCPCount++;
}
}
//.........这里部分代码省略.........
示例7: GXFOpen
//.........这里部分代码省略.........
{
psGXF->dfXOrigin = CPLAtof(papszList[0]);
}
else if( EQUALN(szTitle,"#YORI",5) )
{
psGXF->dfYOrigin = CPLAtof(papszList[0]);
}
else if( EQUALN(szTitle,"#ZMIN",5) )
{
psGXF->dfZMinimum = CPLAtof(papszList[0]);
}
else if( EQUALN(szTitle,"#ZMAX",5) )
{
psGXF->dfZMaximum = CPLAtof(papszList[0]);
}
else if( EQUALN(szTitle,"#SENS",5) )
{
psGXF->nSense = atoi(papszList[0]);
}
else if( EQUALN(szTitle,"#MAP_PROJECTION",8) )
{
psGXF->papszMapProjection = papszList;
papszList = NULL;
}
else if( EQUALN(szTitle,"#MAP_D",5) )
{
psGXF->papszMapDatumTransform = papszList;
papszList = NULL;
}
else if( EQUALN(szTitle,"#UNIT",5) )
{
char **papszFields;
papszFields = CSLTokenizeStringComplex( papszList[0], ", ",
TRUE, TRUE );
if( CSLCount(papszFields) > 1 )
{
psGXF->pszUnitName = VSIStrdup( papszFields[0] );
psGXF->dfUnitToMeter = CPLAtof( papszFields[1] );
if( psGXF->dfUnitToMeter == 0.0 )
psGXF->dfUnitToMeter = 1.0;
}
CSLDestroy( papszFields );
}
else if( EQUALN(szTitle,"#TRAN",5) )
{
char **papszFields;
papszFields = CSLTokenizeStringComplex( papszList[0], ", ",
TRUE, TRUE );
if( CSLCount(papszFields) > 1 )
{
psGXF->dfTransformScale = CPLAtof(papszFields[0]);
psGXF->dfTransformOffset = CPLAtof(papszFields[1]);
}
if( CSLCount(papszFields) > 2 )
psGXF->pszTransformName = CPLStrdup( papszFields[2] );
CSLDestroy( papszFields );
}
else if( EQUALN(szTitle,"#GTYPE",5) )
{
示例8: MITABCoordSys2TABProjInfo
/**********************************************************************
* MITABCoordSys2TABProjInfo()
*
* Convert a MIF COORDSYS string into a TABProjInfo structure.
*
* Returns 0 on success, -1 on error.
**********************************************************************/
int MITABCoordSys2TABProjInfo(const char * pszCoordSys, TABProjInfo *psProj)
{
char **papszFields;
// Set all fields to zero, equivalent of NonEarth Units "mi"
memset(psProj, 0, sizeof(TABProjInfo));
if( pszCoordSys == NULL )
return -1;
/*-----------------------------------------------------------------
* Parse the passed string into words.
*----------------------------------------------------------------*/
while(*pszCoordSys == ' ') pszCoordSys++; // Eat leading spaces
if( EQUALN(pszCoordSys,"CoordSys",8) )
pszCoordSys += 9;
papszFields = CSLTokenizeStringComplex( pszCoordSys, " ,", TRUE, FALSE );
/*-----------------------------------------------------------------
* Clip off Bounds information.
*----------------------------------------------------------------*/
int iBounds = CSLFindString( papszFields, "Bounds" );
while( iBounds != -1 && papszFields[iBounds] != NULL )
{
CPLFree( papszFields[iBounds] );
papszFields[iBounds] = NULL;
iBounds++;
}
/*-----------------------------------------------------------------
* Fetch the projection.
*----------------------------------------------------------------*/
char **papszNextField;
if( CSLCount( papszFields ) >= 3
&& EQUAL(papszFields[0],"Earth")
&& EQUAL(papszFields[1],"Projection") )
{
int nProjId = atoi(papszFields[2]);
if (nProjId>=3000) nProjId -=3000;
else if (nProjId>=2000) nProjId -=2000;
else if (nProjId>=1000) nProjId -=1000;
psProj->nProjId = (GByte)nProjId;
papszNextField = papszFields + 3;
}
else if (CSLCount( papszFields ) >= 2
&& EQUAL(papszFields[0],"NonEarth") )
{
// NonEarth Units "..." Bounds (x, y) (x, y)
psProj->nProjId = 0;
papszNextField = papszFields + 2;
if( papszNextField[0] != NULL && EQUAL(papszNextField[0],"Units") )
papszNextField++;
}
else
{
// Invalid projection string ???
if (CSLCount(papszFields) > 0)
CPLError(CE_Warning, CPLE_IllegalArg,
"Failed parsing CoordSys: '%s'", pszCoordSys);
CSLDestroy(papszFields);
return -1;
}
/*-----------------------------------------------------------------
* Fetch the datum information.
*----------------------------------------------------------------*/
int nDatum = 0;
if( psProj->nProjId != 0 && CSLCount(papszNextField) > 0 )
{
nDatum = atoi(papszNextField[0]);
papszNextField++;
}
if( (nDatum == 999 || nDatum == 9999)
&& CSLCount(papszNextField) >= 4 )
{
psProj->nEllipsoidId = (GByte)atoi(papszNextField[0]);
psProj->dDatumShiftX = CPLAtof(papszNextField[1]);
psProj->dDatumShiftY = CPLAtof(papszNextField[2]);
psProj->dDatumShiftZ = CPLAtof(papszNextField[3]);
papszNextField += 4;
if( nDatum == 9999
&& CSLCount(papszNextField) >= 5 )
{
psProj->adDatumParams[0] = CPLAtof(papszNextField[0]);
//.........这里部分代码省略.........
示例9: Clear
OGRErr OGRSpatialReference::importFromOzi(const char *pszDatum,
const char *pszProj,
const char *pszProjParms)
{
Clear();
/* -------------------------------------------------------------------- */
/* Operate on the basis of the projection name. */
/* -------------------------------------------------------------------- */
char **papszProj = CSLTokenizeStringComplex(pszProj, ",", TRUE, TRUE);
char **papszProjParms = CSLTokenizeStringComplex(pszProjParms, ",",
TRUE, TRUE);
char **papszDatum = NULL;
if (CSLCount(papszProj) < 2)
{
goto not_enough_data;
}
if (EQUALN(papszProj[1], "Latitude/Longitude", 18))
{}
else if (EQUALN(papszProj[1], "Mercator", 8))
{
if (CSLCount(papszProjParms) < 6)
goto not_enough_data;
double dfScale = CPLAtof(papszProjParms[3]);
if (papszProjParms[3][0] == 0)
dfScale = 1; /* if unset, default to scale = 1 */
SetMercator(CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
dfScale,
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]));
}
else if (EQUALN(papszProj[1], "Transverse Mercator", 19))
{
if (CSLCount(papszProjParms) < 6)
goto not_enough_data;
SetTM(CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[3]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]));
}
else if (EQUALN(papszProj[1], "Lambert Conformal Conic", 23))
{
if (CSLCount(papszProjParms) < 8)
goto not_enough_data;
SetLCC(CPLAtof(papszProjParms[6]), CPLAtof(papszProjParms[7]),
CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]));
}
else if (EQUALN(papszProj[1], "Sinusoidal", 10))
{
if (CSLCount(papszProjParms) < 6)
goto not_enough_data;
SetSinusoidal(CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]));
}
else if (EQUALN(papszProj[1], "Albers Equal Area", 17))
{
if (CSLCount(papszProjParms) < 8)
goto not_enough_data;
SetACEA(CPLAtof(papszProjParms[6]), CPLAtof(papszProjParms[7]),
CPLAtof(papszProjParms[1]), CPLAtof(papszProjParms[2]),
CPLAtof(papszProjParms[4]), CPLAtof(papszProjParms[5]));
}
else
{
CPLDebug("OSR_Ozi", "Unsupported projection: \"%s\"", papszProj[1]);
SetLocalCS(CPLString().Printf("\"Ozi\" projection \"%s\"",
papszProj[1]));
}
/* -------------------------------------------------------------------- */
/* Try to translate the datum/spheroid. */
/* -------------------------------------------------------------------- */
papszDatum = CSLTokenizeString2(pszDatum, ",",
CSLT_ALLOWEMPTYTOKENS
| CSLT_STRIPLEADSPACES
| CSLT_STRIPENDSPACES);
if (papszDatum == NULL)
goto not_enough_data;
if (!IsLocal())
{
const OZIDatums *paoDatum = aoDatums;
// Search for matching datum
while (paoDatum->pszOziDatum)
{
//.........这里部分代码省略.........
示例10: GDALSimpleImageWarp
//.........这里部分代码省略.........
/* -------------------------------------------------------------------- */
const int nDstXSize = GDALGetRasterXSize( hDstDS );
const int nDstYSize = GDALGetRasterYSize( hDstDS );
GByte **papabyDstLine = static_cast<GByte **>(
CPLCalloc(nBandCount, sizeof(GByte*)) );
for( int iBand = 0; iBand < nBandCount; iBand++ )
papabyDstLine[iBand] = static_cast<GByte *>(CPLMalloc( nDstXSize ));
/* -------------------------------------------------------------------- */
/* Allocate x,y,z coordinate arrays for transformation ... one */
/* scanlines worth of positions. */
/* -------------------------------------------------------------------- */
double *padfX = static_cast<double *>(
CPLMalloc(sizeof(double) * nDstXSize) );
double *padfY = static_cast<double *>(
CPLMalloc(sizeof(double) * nDstXSize) );
double *padfZ = static_cast<double *>(
CPLMalloc(sizeof(double) * nDstXSize) );
int *pabSuccess = static_cast<int *>( CPLMalloc(sizeof(int) * nDstXSize) );
/* -------------------------------------------------------------------- */
/* Establish the value we will use to initialize the bands. We */
/* default to -1 indicating the initial value should be read */
/* and preserved from the source file, but allow this to be */
/* overridden by passed */
/* option(s). */
/* -------------------------------------------------------------------- */
int * const panBandInit =
static_cast<int *>( CPLCalloc(sizeof(int), nBandCount) );
if( CSLFetchNameValue( papszWarpOptions, "INIT" ) )
{
char **papszTokens =
CSLTokenizeStringComplex( CSLFetchNameValue( papszWarpOptions,
"INIT" ),
" ,", FALSE, FALSE );
const int nTokenCount = CSLCount(papszTokens);
for( int iBand = 0; iBand < nBandCount; iBand++ )
{
if( nTokenCount == 0 )
panBandInit[iBand] = 0;
else
panBandInit[iBand] =
atoi(papszTokens[MIN(iBand,nTokenCount-1)]);
}
CSLDestroy(papszTokens);
}
/* -------------------------------------------------------------------- */
/* Loop over all the scanlines in the output image. */
/* -------------------------------------------------------------------- */
for( int iDstY = 0; iDstY < nDstYSize; iDstY++ )
{
// Clear output buffer to "transparent" value. Should not we
// really be reading from the destination file to support overlay?
for( int iBand = 0; iBand < nBandCount; iBand++ )
{
if( panBandInit[iBand] == -1 )
{
if( GDALRasterIO( GDALGetRasterBand(hDstDS,iBand+1), GF_Read,
0, iDstY, nDstXSize, 1,
papabyDstLine[iBand], nDstXSize, 1, GDT_Byte,
0, 0 ) != CE_None )
示例11: VSIMalloc
CPLErr VRTWarpedDataset::ProcessBlock( int iBlockX, int iBlockY )
{
if( poWarper == NULL )
return CE_Failure;
const GDALWarpOptions *psWO = poWarper->GetOptions();
/* -------------------------------------------------------------------- */
/* Allocate block of memory large enough to hold all the bands */
/* for this block. */
/* -------------------------------------------------------------------- */
int iBand;
GByte *pabyDstBuffer;
int nDstBufferSize;
int nWordSize = (GDALGetDataTypeSize(psWO->eWorkingDataType) / 8);
// FIXME? : risk of overflow in multiplication if nBlockXSize or nBlockYSize are very large
nDstBufferSize = nBlockXSize * nBlockYSize * psWO->nBandCount * nWordSize;
pabyDstBuffer = (GByte *) VSIMalloc(nDstBufferSize);
if( pabyDstBuffer == NULL )
{
CPLError( CE_Failure, CPLE_OutOfMemory,
"Out of memory allocating %d byte buffer in VRTWarpedDataset::ProcessBlock()",
nDstBufferSize );
return CE_Failure;
}
memset( pabyDstBuffer, 0, nDstBufferSize );
/* -------------------------------------------------------------------- */
/* Process INIT_DEST option to initialize the buffer prior to */
/* warping into it. */
/* NOTE:The following code is 99% similar in gdalwarpoperation.cpp and */
/* vrtwarped.cpp. Be careful to keep it in sync ! */
/* -------------------------------------------------------------------- */
const char *pszInitDest = CSLFetchNameValue( psWO->papszWarpOptions,
"INIT_DEST" );
if( pszInitDest != NULL && !EQUAL(pszInitDest, "") )
{
char **papszInitValues =
CSLTokenizeStringComplex( pszInitDest, ",", FALSE, FALSE );
int nInitCount = CSLCount(papszInitValues);
for( iBand = 0; iBand < psWO->nBandCount; iBand++ )
{
double adfInitRealImag[2];
GByte *pBandData;
int nBandSize = nBlockXSize * nBlockYSize * nWordSize;
const char *pszBandInit = papszInitValues[MIN(iBand,nInitCount-1)];
if( EQUAL(pszBandInit,"NO_DATA")
&& psWO->padfDstNoDataReal != NULL )
{
adfInitRealImag[0] = psWO->padfDstNoDataReal[iBand];
adfInitRealImag[1] = psWO->padfDstNoDataImag[iBand];
}
else
{
CPLStringToComplex( pszBandInit,
adfInitRealImag + 0, adfInitRealImag + 1);
}
pBandData = ((GByte *) pabyDstBuffer) + iBand * nBandSize;
if( psWO->eWorkingDataType == GDT_Byte )
memset( pBandData,
MAX(0,MIN(255,(int)adfInitRealImag[0])),
nBandSize);
else if( adfInitRealImag[0] == 0.0 && adfInitRealImag[1] == 0 )
{
memset( pBandData, 0, nBandSize );
}
else if( adfInitRealImag[1] == 0.0 )
{
GDALCopyWords( &adfInitRealImag, GDT_Float64, 0,
pBandData,psWO->eWorkingDataType,nWordSize,
nBlockXSize * nBlockYSize );
}
else
{
GDALCopyWords( &adfInitRealImag, GDT_CFloat64, 0,
pBandData,psWO->eWorkingDataType,nWordSize,
nBlockXSize * nBlockYSize );
}
}
CSLDestroy( papszInitValues );
}
/* -------------------------------------------------------------------- */
/* Warp into this buffer. */
/* -------------------------------------------------------------------- */
CPLErr eErr;
eErr =
poWarper->WarpRegionToBuffer(
//.........这里部分代码省略.........
示例12: CSLTokenizeStringComplex
void ERSDataset::ReadGCPs()
{
const char *pszCP =
poHeader->Find( "RasterInfo.WarpControl.ControlPoints", NULL );
if( pszCP == NULL )
return;
/* -------------------------------------------------------------------- */
/* Parse the control points. They will look something like: */
/* */
/* "1035" Yes No 2344.650885 3546.419458 483270.73 3620906.21 3.105 */
/* -------------------------------------------------------------------- */
char **papszTokens = CSLTokenizeStringComplex( pszCP, "{ \t}", TRUE,FALSE);
int nItemsPerLine;
int nItemCount = CSLCount(papszTokens);
/* -------------------------------------------------------------------- */
/* Work out if we have elevation values or not. */
/* -------------------------------------------------------------------- */
if( nItemCount == 7 )
nItemsPerLine = 7;
else if( nItemCount == 8 )
nItemsPerLine = 8;
else if( nItemCount < 14 )
{
CPLAssert( FALSE );
return;
}
else if( EQUAL(papszTokens[8],"Yes") || EQUAL(papszTokens[8],"No") )
nItemsPerLine = 7;
else if( EQUAL(papszTokens[9],"Yes") || EQUAL(papszTokens[9],"No") )
nItemsPerLine = 8;
else
{
CPLAssert( FALSE );
return;
}
/* -------------------------------------------------------------------- */
/* Setup GCPs. */
/* -------------------------------------------------------------------- */
int iGCP;
CPLAssert( nGCPCount == 0 );
nGCPCount = nItemCount / nItemsPerLine;
pasGCPList = (GDAL_GCP *) CPLCalloc(nGCPCount,sizeof(GDAL_GCP));
GDALInitGCPs( nGCPCount, pasGCPList );
for( iGCP = 0; iGCP < nGCPCount; iGCP++ )
{
GDAL_GCP *psGCP = pasGCPList + iGCP;
CPLFree( psGCP->pszId );
psGCP->pszId = CPLStrdup(papszTokens[iGCP*nItemsPerLine+0]);
psGCP->dfGCPPixel = atof(papszTokens[iGCP*nItemsPerLine+3]);
psGCP->dfGCPLine = atof(papszTokens[iGCP*nItemsPerLine+4]);
psGCP->dfGCPX = atof(papszTokens[iGCP*nItemsPerLine+5]);
psGCP->dfGCPY = atof(papszTokens[iGCP*nItemsPerLine+6]);
if( nItemsPerLine == 8 )
psGCP->dfGCPZ = atof(papszTokens[iGCP*nItemsPerLine+7]);
}
CSLDestroy( papszTokens );
/* -------------------------------------------------------------------- */
/* Parse the GCP projection. */
/* -------------------------------------------------------------------- */
OGRSpatialReference oSRS;
CPLString osProjection = poHeader->Find(
"RasterInfo.WarpControl.CoordinateSpace.Projection", "RAW" );
CPLString osDatum = poHeader->Find(
"RasterInfo.WarpControl.CoordinateSpace.Datum", "WGS84" );
CPLString osUnits = poHeader->Find(
"RasterInfo.WarpControl.CoordinateSpace.Units", "METERS" );
oSRS.importFromERM( osProjection, osDatum, osUnits );
CPLFree( pszGCPProjection );
oSRS.exportToWkt( &pszGCPProjection );
}
示例13: ParseGMLCoordinates
int ParseGMLCoordinates( CPLXMLNode *psGeomNode, OGRGeometry *poGeometry )
{
CPLXMLNode *psCoordinates = FindBareXMLChild( psGeomNode, "coordinates" );
int iCoord = 0;
/* -------------------------------------------------------------------- */
/* Handle <coordinates> case. */
/* -------------------------------------------------------------------- */
if( psCoordinates != NULL )
{
const char *pszCoordString = GetElementText( psCoordinates );
if( pszCoordString == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"<coordinates> element missing value." );
return FALSE;
}
while( *pszCoordString != '\0' )
{
double dfX, dfY, dfZ = 0.0;
int nDimension = 2;
// parse out 2 or 3 tuple.
dfX = atof( pszCoordString );
while( *pszCoordString != '\0'
&& *pszCoordString != ','
&& !isspace(*pszCoordString) )
pszCoordString++;
if( *pszCoordString == '\0' || isspace(*pszCoordString) )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Corrupt <coordinates> value." );
return FALSE;
}
pszCoordString++;
dfY = atof( pszCoordString );
while( *pszCoordString != '\0'
&& *pszCoordString != ','
&& !isspace(*pszCoordString) )
pszCoordString++;
if( *pszCoordString == ',' )
{
pszCoordString++;
dfZ = atof( pszCoordString );
nDimension = 3;
while( *pszCoordString != '\0'
&& *pszCoordString != ','
&& !isspace(*pszCoordString) )
pszCoordString++;
}
while( isspace(*pszCoordString) )
pszCoordString++;
if( !AddPoint( poGeometry, dfX, dfY, dfZ, nDimension ) )
return FALSE;
iCoord++;
}
return iCoord > 0;
}
/* -------------------------------------------------------------------- */
/* Is this a "pos"? I think this is a GML 3 construct. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psPos = FindBareXMLChild( psGeomNode, "pos" );
if( psPos != NULL )
{
char **papszTokens = CSLTokenizeStringComplex(
GetElementText( psPos ), " ,", FALSE, FALSE );
int bSuccess = FALSE;
if( CSLCount( papszTokens ) > 2 )
{
bSuccess = AddPoint( poGeometry,
atof(papszTokens[0]),
atof(papszTokens[1]),
atof(papszTokens[2]), 3 );
}
else if( CSLCount( papszTokens ) > 1 )
{
bSuccess = AddPoint( poGeometry,
atof(papszTokens[0]),
atof(papszTokens[1]),
0.0, 2 );
}
else
{
CPLError( CE_Failure, CPLE_AppDefined,
"Did not get 2+ values in <gml:pos>%s</gml:pos> tuple.",
GetElementText( psPos ) );
}
//.........这里部分代码省略.........
示例14: H5Dopen
void BAGDataset::LoadMetadata()
{
/* -------------------------------------------------------------------- */
/* Load the metadata from the file. */
/* -------------------------------------------------------------------- */
hid_t hMDDS = H5Dopen( hHDF5, "/BAG_root/metadata" );
hid_t datatype = H5Dget_type( hMDDS );
hid_t dataspace = H5Dget_space( hMDDS );
hid_t native = H5Tget_native_type( datatype, H5T_DIR_ASCEND );
hsize_t dims[3], maxdims[3];
H5Sget_simple_extent_dims( dataspace, dims, maxdims );
pszXMLMetadata = (char *) CPLCalloc(dims[0]+1,1);
H5Dread( hMDDS, native, H5S_ALL, dataspace, H5P_DEFAULT, pszXMLMetadata );
H5Sclose( dataspace );
H5Tclose( datatype );
H5Dclose( hMDDS );
if( strlen(pszXMLMetadata) == 0 )
return;
/* -------------------------------------------------------------------- */
/* Try to get the geotransform. */
/* -------------------------------------------------------------------- */
CPLXMLNode *psRoot = CPLParseXMLString( pszXMLMetadata );
if( psRoot == NULL )
return;
CPLStripXMLNamespace( psRoot, NULL, TRUE );
CPLXMLNode *psGeo = CPLSearchXMLNode( psRoot, "=MD_Georectified" );
if( psGeo != NULL )
{
char **papszCornerTokens =
CSLTokenizeStringComplex(
CPLGetXMLValue( psGeo, "cornerPoints.Point.coordinates", "" ),
" ,", FALSE, FALSE );
if( CSLCount(papszCornerTokens ) == 4 )
{
double dfLLX = atof( papszCornerTokens[0] );
double dfLLY = atof( papszCornerTokens[1] );
double dfURX = atof( papszCornerTokens[2] );
double dfURY = atof( papszCornerTokens[3] );
adfGeoTransform[0] = dfLLX;
adfGeoTransform[1] = (dfURX - dfLLX) / (GetRasterXSize()-1);
adfGeoTransform[3] = dfURY;
adfGeoTransform[5] = (dfLLY - dfURY) / (GetRasterYSize()-1);
adfGeoTransform[0] -= adfGeoTransform[1] * 0.5;
adfGeoTransform[3] -= adfGeoTransform[5] * 0.5;
}
CSLDestroy( papszCornerTokens );
}
CPLDestroyXMLNode( psRoot );
/* -------------------------------------------------------------------- */
/* Try to get the coordinate system. */
/* -------------------------------------------------------------------- */
OGRSpatialReference oSRS;
if( OGR_SRS_ImportFromISO19115( &oSRS, pszXMLMetadata )
== OGRERR_NONE )
{
oSRS.exportToWkt( &pszProjection );
}
}
示例15: CPLGetPath
GDALDataset *SAGADataset::Open( GDALOpenInfo * poOpenInfo )
{
/* -------------------------------------------------------------------- */
/* We assume the user is pointing to the binary (ie. .sdat) file. */
/* -------------------------------------------------------------------- */
if( !EQUAL(CPLGetExtension( poOpenInfo->pszFilename ), "sdat"))
{
return NULL;
}
CPLString osPath = CPLGetPath( poOpenInfo->pszFilename );
CPLString osName = CPLGetBasename( poOpenInfo->pszFilename );
CPLString osHDRFilename;
osHDRFilename = CPLFormCIFilename( osPath, osName, ".sgrd" );
VSILFILE *fp;
fp = VSIFOpenL( osHDRFilename, "r" );
if( fp == NULL )
{
return NULL;
}
/* -------------------------------------------------------------------- */
/* Is this file a SAGA header file? Read a few lines of text */
/* searching for something starting with nrows or ncols. */
/* -------------------------------------------------------------------- */
const char *pszLine;
int nRows = -1, nCols = -1;
double dXmin = 0.0, dYmin = 0.0, dCellsize = 0.0, dNoData = 0.0, dZFactor = 0.0;
int nLineCount = 0;
char szDataFormat[20] = "DOUBLE";
char szByteOrderBig[10] = "FALSE";
char szTopToBottom[10] = "FALSE";
char **papszHDR = NULL;
while( (pszLine = CPLReadLineL( fp )) != NULL )
{
char **papszTokens;
nLineCount++;
if( nLineCount > 50 || strlen(pszLine) > 1000 )
break;
papszHDR = CSLAddString( papszHDR, pszLine );
papszTokens = CSLTokenizeStringComplex( pszLine, " =", TRUE, FALSE );
if( CSLCount( papszTokens ) < 2 )
{
CSLDestroy( papszTokens );
continue;
}
if( EQUALN(papszTokens[0],"CELLCOUNT_X",strlen("CELLCOUNT_X")) )
nCols = atoi(papszTokens[1]);
else if( EQUALN(papszTokens[0],"CELLCOUNT_Y",strlen("CELLCOUNT_Y")) )
nRows = atoi(papszTokens[1]);
else if( EQUALN(papszTokens[0],"POSITION_XMIN",strlen("POSITION_XMIN")) )
dXmin = CPLAtofM(papszTokens[1]);
else if( EQUALN(papszTokens[0],"POSITION_YMIN",strlen("POSITION_YMIN")) )
dYmin = CPLAtofM(papszTokens[1]);
else if( EQUALN(papszTokens[0],"CELLSIZE",strlen("CELLSIZE")) )
dCellsize = CPLAtofM(papszTokens[1]);
else if( EQUALN(papszTokens[0],"NODATA_VALUE",strlen("NODATA_VALUE")) )
dNoData = CPLAtofM(papszTokens[1]);
else if( EQUALN(papszTokens[0],"DATAFORMAT",strlen("DATAFORMAT")) )
strncpy( szDataFormat, papszTokens[1], sizeof(szDataFormat)-1 );
else if( EQUALN(papszTokens[0],"BYTEORDER_BIG",strlen("BYTEORDER_BIG")) )
strncpy( szByteOrderBig, papszTokens[1], sizeof(szByteOrderBig)-1 );
else if( EQUALN(papszTokens[0],"TOPTOBOTTOM",strlen("TOPTOBOTTOM")) )
strncpy( szTopToBottom, papszTokens[1], sizeof(szTopToBottom)-1 );
else if( EQUALN(papszTokens[0],"Z_FACTOR",strlen("Z_FACTOR")) )
dZFactor = CPLAtofM(papszTokens[1]);
CSLDestroy( papszTokens );
}
VSIFCloseL( fp );
CSLDestroy( papszHDR );
/* -------------------------------------------------------------------- */
/* Did we get the required keywords? If not we return with */
/* this never having been considered to be a match. This isn't */
/* an error! */
/* -------------------------------------------------------------------- */
if( nRows == -1 || nCols == -1 )
{
return NULL;
}
if (!GDALCheckDatasetDimensions(nCols, nRows))
{
return NULL;
//.........这里部分代码省略.........