本文整理汇总了C++中CPLString::length方法的典型用法代码示例。如果您正苦于以下问题:C++ CPLString::length方法的具体用法?C++ CPLString::length怎么用?C++ CPLString::length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CPLString
的用法示例。
在下文中一共展示了CPLString::length方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VSIFPrintfL
int VSIFPrintfL( VSILFILE *fp, const char *pszFormat, ... )
{
va_list args;
CPLString osResult;
va_start( args, pszFormat );
osResult.vPrintf( pszFormat, args );
va_end( args );
return VSIFWriteL( osResult.c_str(), 1, osResult.length(), fp );
}
示例2: ReadLine
int ERSHdrNode::ReadLine( VSILFILE * fp, CPLString &osLine )
{
int nBracketLevel = 0;
bool bInQuote = false;
size_t i = 0;
bool bLastCharWasSlashInQuote = false;
osLine = "";
do
{
const char *pszNewLine = CPLReadLineL( fp );
if( pszNewLine == nullptr )
return FALSE;
osLine += pszNewLine;
for( ; i < osLine.length(); i++ )
{
const char ch = osLine[i];
if( bLastCharWasSlashInQuote )
{
bLastCharWasSlashInQuote = false;
}
else if( ch == '"' )
bInQuote = !bInQuote;
else if( ch == '{' && !bInQuote )
nBracketLevel++;
else if( ch == '}' && !bInQuote )
nBracketLevel--;
// We have to ignore escaped quotes and backslashes in strings.
else if( ch == '\\' && bInQuote )
{
bLastCharWasSlashInQuote = true;
}
}
} while( nBracketLevel > 0 );
return TRUE;
}
示例3: ReadLine
int ERSHdrNode::ReadLine( VSILFILE * fp, CPLString &osLine )
{
int nBracketLevel;
osLine = "";
do
{
const char *pszNewLine = CPLReadLineL( fp );
if( pszNewLine == NULL )
return FALSE;
osLine += pszNewLine;
int bInQuote = FALSE;
size_t i;
nBracketLevel = 0;
for( i = 0; i < osLine.length(); i++ )
{
if( osLine[i] == '"' )
bInQuote = !bInQuote;
else if( osLine[i] == '{' && !bInQuote )
nBracketLevel++;
else if( osLine[i] == '}' && !bInQuote )
nBracketLevel--;
// We have to ignore escaped quotes and backslashes in strings.
else if( osLine[i] == '\\' && osLine[i+1] == '"' && bInQuote )
i++;
else if( osLine[i] == '\\' && osLine[i+1] == '\\' && bInQuote )
i++;
}
} while( nBracketLevel > 0 );
return TRUE;
}
示例4: VFKReader
/*!
\brief VFKReaderSQLite constructor
*/
VFKReaderSQLite::VFKReaderSQLite(const char *pszFilename) : VFKReader(pszFilename)
{
const char *pszDbNameConf;
CPLString osDbName;
CPLString osCommand;
VSIStatBufL sStatBufDb, sStatBufVfk;
/* open tmp SQLite DB (re-use DB file if already exists) */
pszDbNameConf = CPLGetConfigOption("OGR_VFK_DB_NAME", NULL);
if (pszDbNameConf) {
osDbName = pszDbNameConf;
}
else {
osDbName = CPLResetExtension(m_pszFilename, "db");
}
size_t nLen = osDbName.length();
if( nLen > 2048 )
{
nLen = 2048;
osDbName.resize(nLen);
}
m_pszDBname = new char [nLen+1];
std::strncpy(m_pszDBname, osDbName.c_str(), nLen);
m_pszDBname[nLen] = 0;
CPLDebug("OGR-VFK", "Using internal DB: %s",
m_pszDBname);
if (CPLTestBool(CPLGetConfigOption("OGR_VFK_DB_SPATIAL", "YES")))
m_bSpatial = TRUE; /* build geometry from DB */
else
m_bSpatial = FALSE; /* store also geometry in DB */
m_bNewDb = TRUE;
if (VSIStatL(osDbName, &sStatBufDb) == 0) {
if (CPLTestBool(CPLGetConfigOption("OGR_VFK_DB_OVERWRITE", "NO"))) {
m_bNewDb = TRUE; /* overwrite existing DB */
CPLDebug("OGR-VFK", "Internal DB (%s) already exists and will be overwritten",
m_pszDBname);
VSIUnlink(osDbName);
}
else {
if (VSIStatL(pszFilename, &sStatBufVfk) == 0 &&
sStatBufVfk.st_mtime > sStatBufDb.st_mtime) {
CPLDebug("OGR-VFK",
"Found %s but ignoring because it appears\n"
"be older than the associated VFK file.",
osDbName.c_str());
m_bNewDb = TRUE;
VSIUnlink(osDbName);
}
else {
m_bNewDb = FALSE; /* re-use existing DB */
}
}
}
/*
if (m_bNewDb) {
CPLError(CE_Warning, CPLE_AppDefined,
"INFO: No internal SQLite DB found. Reading VFK data may take some time...");
}
*/
CPLDebug("OGR-VFK", "New DB: %s Spatial: %s",
m_bNewDb ? "yes" : "no", m_bSpatial ? "yes" : "no");
if (SQLITE_OK != sqlite3_open(osDbName, &m_poDB)) {
CPLError(CE_Failure, CPLE_AppDefined,
"Creating SQLite DB failed");
}
else {
char* pszErrMsg = NULL;
CPL_IGNORE_RET_VAL(sqlite3_exec(m_poDB, "PRAGMA synchronous = OFF", NULL, NULL, &pszErrMsg));
sqlite3_free(pszErrMsg);
}
if (m_bNewDb) {
/* new DB, create support metadata tables */
osCommand.Printf("CREATE TABLE %s (file_name text, table_name text, num_records integer, "
"num_features integer, num_geometries integer, table_defn text)",
VFK_DB_TABLE);
ExecuteSQL(osCommand.c_str());
/* header table */
osCommand.Printf("CREATE TABLE %s (key text, value text)", VFK_DB_HEADER);
ExecuteSQL(osCommand.c_str());
}
}
示例5: ScanForGCPs
//.........这里部分代码省略.........
else if( EQUALN(pszPR,"PR=TRANSVERSE MERCATOR", 22)
&& osPP.size() > 0 )
{
osUnderlyingSRS.Printf(
"PROJCS[\"unnamed\",%s,PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",%s],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0]]",
pszGEOGCS, osPP.c_str() );
}
else if( EQUALN(pszPR,"PR=UNIVERSAL TRANSVERSE MERCATOR", 32)
&& osPP.size() > 0 )
{
// This is not *really* UTM unless the central meridian
// matches a zone which it does not in some (most?) maps.
osUnderlyingSRS.Printf(
"PROJCS[\"unnamed\",%s,PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",%s],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0]]",
pszGEOGCS, osPP.c_str() );
}
else if( EQUALN(pszPR,"PR=POLYCONIC", 12) && osPP.size() > 0 )
{
osUnderlyingSRS.Printf(
"PROJCS[\"unnamed\",%s,PROJECTION[\"Polyconic\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",%s],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0]]",
pszGEOGCS, osPP.c_str() );
}
else if( EQUALN(pszPR,"PR=LAMBERT CONFORMAL CONIC", 26)
&& osPP.size() > 0 && pszKNQ != NULL )
{
CPLString osP2, osP3;
// Capture the KNQ/P2 string.
pszValue = strstr(pszKNQ,"P2=");
if( pszValue )
pszEnd = strstr(pszValue,",");
if( pszValue && pszEnd )
osP2.assign(pszValue+3,pszEnd-pszValue-3);
// Capture the KNQ/P3 string.
pszValue = strstr(pszKNQ,"P3=");
if( pszValue )
pszEnd = strstr(pszValue,",");
if( pszValue )
{
if( pszEnd )
osP3.assign(pszValue+3,pszEnd-pszValue-3);
else
osP3.assign(pszValue+3);
}
if( osP2.size() > 0 && osP3.size() > 0 )
osUnderlyingSRS.Printf(
"PROJCS[\"unnamed\",%s,PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",%s],PARAMETER[\"standard_parallel_2\",%s],PARAMETER[\"latitude_of_origin\",0.0],PARAMETER[\"central_meridian\",%s],PARAMETER[\"false_easting\",0.0],PARAMETER[\"false_northing\",0.0]]",
pszGEOGCS, osP2.c_str(), osP3.c_str(), osPP.c_str() );
}
}
/* -------------------------------------------------------------------- */
/* If we got an alternate underlying coordinate system, try */
/* converting the GCPs to that coordinate system. */
/* -------------------------------------------------------------------- */
if( osUnderlyingSRS.length() > 0 )
{
OGRSpatialReference oGeog_SRS, oProjected_SRS;
OGRCoordinateTransformation *poCT;
oProjected_SRS.SetFromUserInput( osUnderlyingSRS );
oGeog_SRS.CopyGeogCSFrom( &oProjected_SRS );
poCT = OGRCreateCoordinateTransformation( &oGeog_SRS,
&oProjected_SRS );
if( poCT != NULL )
{
for( i = 0; i < nGCPCount; i++ )
{
poCT->Transform( 1,
&(pasGCPList[i].dfGCPX),
&(pasGCPList[i].dfGCPY),
&(pasGCPList[i].dfGCPZ) );
}
osGCPProjection = osUnderlyingSRS;
delete poCT;
}
else
CPLErrorReset();
}
/* -------------------------------------------------------------------- */
/* Attempt to prepare a geotransform from the GCPs. */
/* -------------------------------------------------------------------- */
if( GDALGCPsToGeoTransform( nGCPCount, pasGCPList, adfGeoTransform,
FALSE ) )
{
bGeoTransformSet = TRUE;
}
}
示例6: if
//.........这里部分代码省略.........
eType = GDT_UInt32;
else if( EQUAL(osCellType,"Signed32BitInteger") )
eType = GDT_Int32;
else if( EQUAL(osCellType,"IEEE4ByteReal") )
eType = GDT_Float32;
else if( EQUAL(osCellType,"IEEE8ByteReal") )
eType = GDT_Float64;
else
{
CPLDebug( "ERS", "Unknown CellType '%s'", osCellType.c_str() );
eType = GDT_Byte;
}
/* -------------------------------------------------------------------- */
/* Pick up the word order. */
/* -------------------------------------------------------------------- */
int bNative;
#ifdef CPL_LSB
bNative = EQUAL(poHeader->Find( "ByteOrder", "LSBFirst" ),
"LSBFirst");
#else
bNative = EQUAL(poHeader->Find( "ByteOrder", "MSBFirst" ),
"MSBFirst");
#endif
/* -------------------------------------------------------------------- */
/* Figure out the name of the target file. */
/* -------------------------------------------------------------------- */
CPLString osPath = CPLGetPath( poOpenInfo->pszFilename );
CPLString osDataFile = poHeader->Find( "DataFile", "" );
CPLString osDataFilePath;
if( osDataFile.length() == 0 ) // just strip off extension.
{
osDataFile = CPLGetFilename( poOpenInfo->pszFilename );
osDataFile = osDataFile.substr( 0, osDataFile.find_last_of('.') );
}
osDataFilePath = CPLFormFilename( osPath, osDataFile, NULL );
/* -------------------------------------------------------------------- */
/* DataSetType = Translated files are links to things like ecw */
/* files. */
/* -------------------------------------------------------------------- */
if( EQUAL(poHeader->Find("DataSetType",""),"Translated") )
{
poDS->poDepFile = (GDALDataset *)
GDALOpenShared( osDataFilePath, poOpenInfo->eAccess );
if( poDS->poDepFile != NULL
&& poDS->poDepFile->GetRasterCount() >= nBands )
{
int iBand;
for( iBand = 0; iBand < nBands; iBand++ )
{
// Assume pixel interleaved.
poDS->SetBand( iBand+1,
poDS->poDepFile->GetRasterBand( iBand+1 ) );
}
}
}
/* ==================================================================== */
/* While ERStorage indicates a raw file. */
示例7: IWriteBlock
CPLErr GSAGRasterBand::IWriteBlock( int nBlockXOff, int nBlockYOff,
void * pImage )
{
if( eAccess == GA_ReadOnly )
{
CPLError( CE_Failure, CPLE_NoWriteAccess,
"Unable to write block, dataset opened read only.\n" );
return CE_Failure;
}
if( nBlockYOff < 0 || nBlockYOff > nRasterYSize - 1 || nBlockXOff != 0 )
return CE_Failure;
GSAGDataset *poGDS = (GSAGDataset *)poDS;
assert( poGDS != NULL );
if( padfRowMinZ == NULL || padfRowMaxZ == NULL
|| nMinZRow < 0 || nMaxZRow < 0 )
{
padfRowMinZ = (double *)VSIMalloc2( nRasterYSize,sizeof(double) );
if( padfRowMinZ == NULL )
{
CPLError( CE_Failure, CPLE_OutOfMemory,
"Unable to allocate space for row minimums array.\n" );
return CE_Failure;
}
padfRowMaxZ = (double *)VSIMalloc2( nRasterYSize,sizeof(double) );
if( padfRowMaxZ == NULL )
{
VSIFree( padfRowMinZ );
padfRowMinZ = NULL;
CPLError( CE_Failure, CPLE_OutOfMemory,
"Unable to allocate space for row maximums array.\n" );
return CE_Failure;
}
CPLErr eErr = ScanForMinMaxZ();
if( eErr != CE_None )
return eErr;
}
if( panLineOffset[nBlockYOff+1] == 0 )
IReadBlock( nBlockXOff, nBlockYOff, NULL );
if( panLineOffset[nBlockYOff+1] == 0 || panLineOffset[nBlockYOff] == 0 )
return CE_Failure;
std::ostringstream ssOutBuf;
ssOutBuf.precision( GSAGDataset::nFIELD_PRECISION );
ssOutBuf.setf( std::ios::uppercase );
double *pdfImage = (double *)pImage;
padfRowMinZ[nBlockYOff] = DBL_MAX;
padfRowMaxZ[nBlockYOff] = -DBL_MAX;
for( int iCell=0; iCell<nBlockXSize; )
{
for( int iCol=0; iCol<10 && iCell<nBlockXSize; iCol++, iCell++ )
{
if( AlmostEqual( pdfImage[iCell], GSAGDataset::dfNODATA_VALUE ) )
{
if( pdfImage[iCell] < padfRowMinZ[nBlockYOff] )
padfRowMinZ[nBlockYOff] = pdfImage[iCell];
if( pdfImage[iCell] > padfRowMaxZ[nBlockYOff] )
padfRowMaxZ[nBlockYOff] = pdfImage[iCell];
}
ssOutBuf << pdfImage[iCell] << " ";
}
ssOutBuf << poGDS->szEOL;
}
ssOutBuf << poGDS->szEOL;
CPLString sOut = ssOutBuf.str();
if( sOut.length() != panLineOffset[nBlockYOff+1]-panLineOffset[nBlockYOff] )
{
int nShiftSize = (int) (sOut.length() - (panLineOffset[nBlockYOff+1]
- panLineOffset[nBlockYOff]));
if( nBlockYOff != poGDS->nRasterYSize
&& GSAGDataset::ShiftFileContents( poGDS->fp,
panLineOffset[nBlockYOff+1],
nShiftSize,
poGDS->szEOL ) != CE_None )
{
CPLError( CE_Failure, CPLE_FileIO,
"Failure writing block, "
"unable to shift file contents.\n" );
return CE_Failure;
}
for( size_t iLine=nBlockYOff+1;
iLine < static_cast<unsigned>(poGDS->nRasterYSize+1)
&& panLineOffset[iLine] != 0; iLine++ )
panLineOffset[iLine] += nShiftSize;
}
if( VSIFSeekL( poGDS->fp, panLineOffset[nBlockYOff], SEEK_SET ) != 0 )
{
//.........这里部分代码省略.........
示例8: if
GDALDataset *GSAGDataset::CreateCopy( const char *pszFilename,
GDALDataset *poSrcDS,
int bStrict, char **papszOptions,
GDALProgressFunc pfnProgress,
void *pProgressData )
{
if( pfnProgress == NULL )
pfnProgress = GDALDummyProgress;
int nBands = poSrcDS->GetRasterCount();
if (nBands == 0)
{
CPLError( CE_Failure, CPLE_NotSupported,
"GSAG driver does not support source dataset with zero band.\n");
return NULL;
}
else if (nBands > 1)
{
if( bStrict )
{
CPLError( CE_Failure, CPLE_NotSupported,
"Unable to create copy, Golden Software ASCII Grid "
"format only supports one raster band.\n" );
return NULL;
}
else
CPLError( CE_Warning, CPLE_NotSupported,
"Golden Software ASCII Grid format only supports one "
"raster band, first band will be copied.\n" );
}
if( !pfnProgress( 0.0, NULL, pProgressData ) )
{
CPLError( CE_Failure, CPLE_UserInterrupt, "User terminated\n" );
return NULL;
}
VSILFILE *fp = VSIFOpenL( pszFilename, "w+b" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Attempt to create file '%s' failed.\n",
pszFilename );
return NULL;
}
int nXSize = poSrcDS->GetRasterXSize();
int nYSize = poSrcDS->GetRasterYSize();
double adfGeoTransform[6];
poSrcDS->GetGeoTransform( adfGeoTransform );
std::ostringstream ssHeader;
ssHeader.precision( nFIELD_PRECISION );
ssHeader.setf( std::ios::uppercase );
ssHeader << "DSAA\x0D\x0A";
ssHeader << nXSize << " " << nYSize << "\x0D\x0A";
ssHeader << adfGeoTransform[0] + adfGeoTransform[1] / 2 << " "
<< adfGeoTransform[1] * (nXSize - 0.5) + adfGeoTransform[0]
<< "\x0D\x0A";
ssHeader << adfGeoTransform[5] * (nYSize - 0.5) + adfGeoTransform[3] << " "
<< adfGeoTransform[3] + adfGeoTransform[5] / 2
<< "\x0D\x0A";
if( VSIFWriteL( (void *)ssHeader.str().c_str(), 1, ssHeader.str().length(),
fp ) != ssHeader.str().length() )
{
VSIFCloseL( fp );
CPLError( CE_Failure, CPLE_FileIO,
"Unable to create copy, writing header failed.\n" );
return NULL;
}
/* Save the location and write placeholders for the min/max Z value */
vsi_l_offset nRangeStart = VSIFTellL( fp );
const char *szDummyRange = "0.0000000000001 0.0000000000001\x0D\x0A";
size_t nDummyRangeLen = strlen( szDummyRange );
if( VSIFWriteL( (void *)szDummyRange, 1, nDummyRangeLen,
fp ) != nDummyRangeLen )
{
VSIFCloseL( fp );
CPLError( CE_Failure, CPLE_FileIO,
"Unable to create copy, writing header failed.\n" );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Copy band data. */
/* -------------------------------------------------------------------- */
double *pdfData = (double *)VSIMalloc2( nXSize, sizeof( double ) );
if( pdfData == NULL )
{
VSIFCloseL( fp );
CPLError( CE_Failure, CPLE_OutOfMemory,
"Unable to create copy, unable to allocate line buffer.\n" );
//.........这里部分代码省略.........
示例9: UpdateHeader
CPLErr GSAGDataset::UpdateHeader()
{
GSAGRasterBand *poBand = (GSAGRasterBand *)GetRasterBand( 1 );
if( poBand == NULL )
{
CPLError( CE_Failure, CPLE_FileIO, "Unable to open raster band.\n" );
return CE_Failure;
}
std::ostringstream ssOutBuf;
ssOutBuf.precision( nFIELD_PRECISION );
ssOutBuf.setf( std::ios::uppercase );
/* signature */
ssOutBuf << "DSAA" << szEOL;
/* columns rows */
ssOutBuf << nRasterXSize << " " << nRasterYSize << szEOL;
/* x range */
ssOutBuf << poBand->dfMinX << " " << poBand->dfMaxX << szEOL;
/* y range */
ssOutBuf << poBand->dfMinY << " " << poBand->dfMaxY << szEOL;
/* z range */
ssOutBuf << poBand->dfMinZ << " " << poBand->dfMaxZ << szEOL;
CPLString sOut = ssOutBuf.str();
if( sOut.length() != poBand->panLineOffset[0] )
{
int nShiftSize = (int) (sOut.length() - poBand->panLineOffset[0]);
if( ShiftFileContents( fp, poBand->panLineOffset[0], nShiftSize,
szEOL ) != CE_None )
{
CPLError( CE_Failure, CPLE_FileIO,
"Unable to update grid header, "
"failure shifting file contents.\n" );
return CE_Failure;
}
for( size_t iLine=0;
iLine < static_cast<unsigned>(nRasterYSize+1)
&& poBand->panLineOffset[iLine] != 0;
iLine++ )
poBand->panLineOffset[iLine] += nShiftSize;
}
if( VSIFSeekL( fp, 0, SEEK_SET ) != 0 )
{
CPLError( CE_Failure, CPLE_FileIO,
"Unable to seek to start of grid file.\n" );
return CE_Failure;
}
if( VSIFWriteL( sOut.c_str(), 1, sOut.length(), fp ) != sOut.length() )
{
CPLError( CE_Failure, CPLE_FileIO,
"Unable to update file header. Disk full?\n" );
return CE_Failure;
}
return CE_None;
}
示例10: if
static herr_t HDF5AttrIterate( hid_t hH5ObjID,
const char *pszAttrName,
// TODO(schwehr): void * -> HDF5Dataset *
void *pDS )
{
char **papszTokens = nullptr;
CPLString osKey;
HDF5Dataset *const poDS = static_cast<HDF5Dataset *>(pDS);
// Convert "/" into "_" for the path component
const char *pszPath = poDS->poH5CurrentObject->pszUnderscorePath;
if(pszPath != nullptr && strlen(pszPath) > 0)
{
papszTokens = CSLTokenizeString2(pszPath, "/", CSLT_HONOURSTRINGS);
for( hsize_t i = 0; papszTokens != nullptr && papszTokens[i] != nullptr; ++i )
{
if( i != 0)
osKey += '_';
osKey += papszTokens[i];
}
CSLDestroy(papszTokens);
}
// Convert whitespaces into "_" for the attribute name component
papszTokens = CSLTokenizeString2(
pszAttrName, " ", CSLT_STRIPLEADSPACES | CSLT_STRIPENDSPACES);
for( hsize_t i = 0; papszTokens != nullptr && papszTokens[i] != nullptr; ++i )
{
if(!osKey.empty())
osKey += '_';
osKey += papszTokens[i];
}
CSLDestroy(papszTokens);
const hid_t hAttrID = H5Aopen_name(hH5ObjID, pszAttrName);
const hid_t hAttrTypeID = H5Aget_type(hAttrID);
const hid_t hAttrNativeType =
H5Tget_native_type(hAttrTypeID, H5T_DIR_DEFAULT);
const hid_t hAttrSpace = H5Aget_space(hAttrID);
if( H5Tget_class(hAttrNativeType) == H5T_VLEN )
return 0;
hsize_t nSize[64] = {};
const unsigned int nAttrDims =
H5Sget_simple_extent_dims(hAttrSpace, nSize, nullptr);
unsigned int nAttrElmts = 1;
for( hsize_t i = 0; i < nAttrDims; i++ )
{
nAttrElmts *= static_cast<int>(nSize[i]);
}
char *szData = nullptr;
hsize_t nAttrSize = 0;
char *szValue = nullptr;
if( H5Tget_class(hAttrNativeType) == H5T_STRING )
{
if ( H5Tis_variable_str(hAttrNativeType) )
{
char **papszStrings =
static_cast<char **>(CPLMalloc(nAttrElmts * sizeof(char *)));
// Read the values.
H5Aread(hAttrID, hAttrNativeType, papszStrings);
// Concatenate all values as one string separated by a space.
CPLString osVal = papszStrings[0];
for( hsize_t i = 1; i < nAttrElmts; i++ )
{
osVal += " ";
osVal += papszStrings[i];
}
szValue = static_cast<char *>(CPLMalloc(osVal.length() + 1));
strcpy(szValue, osVal.c_str());
H5Dvlen_reclaim(hAttrNativeType, hAttrSpace, H5P_DEFAULT,
papszStrings);
CPLFree(papszStrings);
}
else
{
nAttrSize = H5Aget_storage_size(hAttrID);
szValue = static_cast<char *>(CPLMalloc((size_t)(nAttrSize + 1)));
H5Aread(hAttrID, hAttrNativeType, szValue);
szValue[nAttrSize] = '\0';
}
}
else
{
const size_t nDataLen = 8192;
void *buf = nullptr;
if( nAttrElmts > 0 )
{
buf = CPLMalloc(nAttrElmts * H5Tget_size(hAttrNativeType));
szData = static_cast<char *>(CPLMalloc(nDataLen));
//.........这里部分代码省略.........
示例11: if
herr_t HDF5AttrIterate( hid_t hH5ObjID,
const char *pszAttrName,
void *pDS )
{
hid_t hAttrID;
hid_t hAttrTypeID;
hid_t hAttrNativeType;
hid_t hAttrSpace;
char *szData = NULL;
hsize_t nSize[64];
unsigned int nAttrElmts;
hsize_t nAttrSize;
hsize_t i;
void *buf = NULL;
unsigned int nAttrDims;
char **papszTokens;
HDF5Dataset *poDS;
CPLString osKey;
char *szValue = NULL;
poDS = (HDF5Dataset *) pDS;
// Convert "/" into "_" for the path component
const char* pszPath = poDS->poH5CurrentObject->pszUnderscorePath;
if(pszPath != NULL && strlen(pszPath) > 0)
{
papszTokens = CSLTokenizeString2( pszPath, "/", CSLT_HONOURSTRINGS );
for( i = 0; papszTokens != NULL && papszTokens[i] != NULL; ++i )
{
if( i != 0)
osKey += '_';
osKey += papszTokens[i];
}
CSLDestroy( papszTokens );
}
// Convert whitespaces into "_" for the attribute name component
papszTokens = CSLTokenizeString2( pszAttrName, " ",
CSLT_STRIPLEADSPACES | CSLT_STRIPENDSPACES );
for( i = 0; papszTokens != NULL && papszTokens[i] != NULL; ++i )
{
if(!osKey.empty())
osKey += '_';
osKey += papszTokens[i];
}
CSLDestroy( papszTokens );
hAttrID = H5Aopen_name( hH5ObjID, pszAttrName );
hAttrTypeID = H5Aget_type( hAttrID );
hAttrNativeType = H5Tget_native_type( hAttrTypeID, H5T_DIR_DEFAULT );
hAttrSpace = H5Aget_space( hAttrID );
nAttrDims = H5Sget_simple_extent_dims( hAttrSpace, nSize, NULL );
nAttrElmts = 1;
for( i=0; i < nAttrDims; i++ ) {
nAttrElmts *= (int) nSize[i];
}
if( H5Tget_class( hAttrNativeType ) == H5T_STRING )
{
if ( H5Tis_variable_str(hAttrNativeType) )
{
char** papszStrings;
papszStrings = (char**) CPLMalloc( nAttrElmts * sizeof(char*) );
// Read the values
H5Aread( hAttrID, hAttrNativeType, papszStrings );
// Concatenate all values as one string (separated by a space)
CPLString osVal = papszStrings[0];
for( i=1; i < nAttrElmts; i++ ) {
osVal += " ";
osVal += papszStrings[i];
}
szValue = (char*) CPLMalloc(osVal.length() + 1);
strcpy( szValue, osVal.c_str() );
H5Dvlen_reclaim( hAttrNativeType, hAttrSpace, H5P_DEFAULT,
papszStrings );
CPLFree( papszStrings );
}
else
{
nAttrSize = H5Aget_storage_size( hAttrID );
szValue = (char*) CPLMalloc((size_t) (nAttrSize+1));
H5Aread( hAttrID, hAttrNativeType, szValue );
szValue[nAttrSize] = '\0';
}
}
else {
if( nAttrElmts > 0 ) {
buf = (void *) CPLMalloc( nAttrElmts*
H5Tget_size( hAttrNativeType ));
szData = (char*) CPLMalloc( 8192 );
szValue = (char*) CPLMalloc( MAX_METADATA_LEN );
//.........这里部分代码省略.........
示例12: if
OGRGmtLayer::OGRGmtLayer( const char * pszFilename, int bUpdateIn ) :
poSRS(NULL),
poFeatureDefn(NULL),
iNextFID(0),
bUpdate(CPL_TO_BOOL(bUpdateIn)),
// Assume header complete in readonly mode.
bHeaderComplete(CPL_TO_BOOL(!bUpdate)),
bRegionComplete(false),
nRegionOffset(0),
papszKeyedValues(NULL),
bValidFile(FALSE)
{
/* -------------------------------------------------------------------- */
/* Open file. */
/* -------------------------------------------------------------------- */
if( bUpdate )
fp = VSIFOpenL( pszFilename, "r+" );
else
fp = VSIFOpenL( pszFilename, "r" );
if( fp == NULL )
return;
/* -------------------------------------------------------------------- */
/* Read the header. */
/* -------------------------------------------------------------------- */
CPLString osFieldNames;
CPLString osFieldTypes;
CPLString osGeometryType;
CPLString osRegion;
CPLString osWKT;
CPLString osProj4;
CPLString osEPSG;
vsi_l_offset nStartOfLine = VSIFTellL(fp);
while( ReadLine() && osLine[0] == '#' )
{
if( strstr( osLine, "FEATURE_DATA" ) )
{
bHeaderComplete = TRUE;
ReadLine();
break;
}
if( STARTS_WITH_CI(osLine, "# REGION_STUB ") )
nRegionOffset = nStartOfLine;
for( int iKey = 0;
papszKeyedValues != NULL && papszKeyedValues[iKey] != NULL;
iKey++ )
{
if( papszKeyedValues[iKey][0] == 'N' )
osFieldNames = papszKeyedValues[iKey] + 1;
if( papszKeyedValues[iKey][0] == 'T' )
osFieldTypes = papszKeyedValues[iKey] + 1;
if( papszKeyedValues[iKey][0] == 'G' )
osGeometryType = papszKeyedValues[iKey] + 1;
if( papszKeyedValues[iKey][0] == 'R' )
osRegion = papszKeyedValues[iKey] + 1;
if( papszKeyedValues[iKey][0] == 'J' )
{
CPLString osArg = papszKeyedValues[iKey] + 2;
if( osArg[0] == '"' && osArg[osArg.length()-1] == '"' )
{
osArg = osArg.substr(1,osArg.length()-2);
char *pszArg = CPLUnescapeString(osArg, NULL,
CPLES_BackslashQuotable);
osArg = pszArg;
CPLFree( pszArg );
}
if( papszKeyedValues[iKey][1] == 'e' )
osEPSG = osArg;
if( papszKeyedValues[iKey][1] == 'p' )
osProj4 = osArg;
if( papszKeyedValues[iKey][1] == 'w' )
osWKT = osArg;
}
}
nStartOfLine = VSIFTellL(fp);
}
/* -------------------------------------------------------------------- */
/* Handle coordinate system. */
/* -------------------------------------------------------------------- */
if( osWKT.length() )
{
char *pszWKT = (char *) osWKT.c_str();
poSRS = new OGRSpatialReference();
if( poSRS->importFromWkt(&pszWKT) != OGRERR_NONE )
{
delete poSRS;
poSRS = NULL;
}
}
else if( osEPSG.length() )
{
//.........这里部分代码省略.........