本文整理汇总了C++中CPLMalloc函数的典型用法代码示例。如果您正苦于以下问题:C++ CPLMalloc函数的具体用法?C++ CPLMalloc怎么用?C++ CPLMalloc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CPLMalloc函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CPLAssert
int OGRPGeoDataSource::Open( const char * pszNewName, int bUpdate,
CPL_UNUSED int bTestOpen )
{
CPLAssert( nLayers == 0 );
/* -------------------------------------------------------------------- */
/* If this is the name of an MDB file, then construct the */
/* appropriate connection string. Otherwise clip of PGEO: to */
/* get the DSN. */
/* */
/* -------------------------------------------------------------------- */
char *pszDSN;
const char* pszOptionName = "";
const char* pszDSNStringTemplate = NULL;
if( STARTS_WITH_CI(pszNewName, "PGEO:") )
pszDSN = CPLStrdup( pszNewName + 5 );
else
{
pszOptionName = "PGEO_DRIVER_TEMPLATE";
pszDSNStringTemplate = CPLGetConfigOption( pszOptionName, NULL );
if( pszDSNStringTemplate == NULL )
{
pszDSNStringTemplate = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=%s";
}
if (!CheckDSNStringTemplate(pszDSNStringTemplate))
{
CPLError( CE_Failure, CPLE_AppDefined,
"Illegal value for PGEO_DRIVER_TEMPLATE option");
return FALSE;
}
pszDSN = (char *) CPLMalloc(strlen(pszNewName)+strlen(pszDSNStringTemplate)+100);
/* coverity[tainted_string] */
snprintf( pszDSN,
strlen(pszNewName)+strlen(pszDSNStringTemplate)+100,
pszDSNStringTemplate, pszNewName );
}
/* -------------------------------------------------------------------- */
/* Initialize based on the DSN. */
/* -------------------------------------------------------------------- */
CPLDebug( "PGeo", "EstablishSession(%s)", pszDSN );
if( !oSession.EstablishSession( pszDSN, NULL, NULL ) )
{
int bError = TRUE;
if( !STARTS_WITH_CI(pszNewName, "PGEO:") )
{
// Trying with another template (#5594)
pszDSNStringTemplate = "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s";
CPLFree( pszDSN );
pszDSN = (char *) CPLMalloc(strlen(pszNewName)+strlen(pszDSNStringTemplate)+100);
snprintf( pszDSN,
strlen(pszNewName)+strlen(pszDSNStringTemplate)+100,
pszDSNStringTemplate, pszNewName );
CPLDebug( "PGeo", "EstablishSession(%s)", pszDSN );
if( oSession.EstablishSession( pszDSN, NULL, NULL ) )
{
bError = FALSE;
}
}
if( bError )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to initialize ODBC connection to DSN for %s,\n"
"%s", pszDSN, oSession.GetLastError() );
CPLFree( pszDSN );
return FALSE;
}
}
CPLFree( pszDSN );
pszName = CPLStrdup( pszNewName );
bDSUpdate = bUpdate;
/* -------------------------------------------------------------------- */
/* Collect list of tables and their supporting info from */
/* GDB_GeomColumns. */
/* -------------------------------------------------------------------- */
std::vector<char **> apapszGeomColumns;
CPLODBCStatement oStmt( &oSession );
oStmt.Append( "SELECT TableName, FieldName, ShapeType, ExtentLeft, ExtentRight, ExtentBottom, ExtentTop, SRID, HasZ FROM GDB_GeomColumns" );
if( !oStmt.ExecuteSQL() )
{
CPLDebug( "PGEO",
"SELECT on GDB_GeomColumns fails, perhaps not a personal geodatabase?\n%s",
oSession.GetLastError() );
return FALSE;
}
while( oStmt.Fetch() )
{
int i, iNew = static_cast<int>(apapszGeomColumns.size());
char **papszRecord = NULL;
for( i = 0; i < 9; i++ )
papszRecord = CSLAddString( papszRecord,
oStmt.GetColData(i) );
//.........这里部分代码省略.........
示例2: CPLError
bool LevellerDataset::load_from_file(VSILFILE* file, const char* pszFilename)
{
// get hf dimensions
if(!this->get(nRasterXSize, file, "hf_w"))
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Cannot determine heightfield width." );
return false;
}
if(!this->get(nRasterYSize, file, "hf_b"))
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Cannot determine heightfield breadth." );
return false;
}
if(nRasterXSize < 2 || nRasterYSize < 2)
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Heightfield raster dimensions too small." );
return false;
}
// Record start of pixel data
size_t datalen;
if(!this->locate_data(m_nDataOffset, datalen, file, "hf_data"))
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Cannot locate elevation data." );
return false;
}
// Sanity check: do we have enough pixels?
if(datalen != nRasterXSize * nRasterYSize * sizeof(float))
{
CPLError( CE_Failure, CPLE_OpenFailed,
"File does not have enough data." );
return false;
}
// Defaults for raster coordsys.
m_adfTransform[0] = 0.0;
m_adfTransform[1] = 1.0;
m_adfTransform[2] = 0.0;
m_adfTransform[3] = 0.0;
m_adfTransform[4] = 0.0;
m_adfTransform[5] = 1.0;
m_dElevScale = 1.0;
m_dElevBase = 0.0;
strcpy(m_szElevUnits, "");
if(m_version == 7)
{
// Read coordsys info.
int csclass = LEV_COORDSYS_RASTER;
(void)this->get(csclass, file, "csclass");
if(csclass != LEV_COORDSYS_RASTER)
{
// Get projection details and units.
CPLAssert(m_pszProjection == NULL);
if(csclass == LEV_COORDSYS_LOCAL)
{
UNITLABEL unitcode;
//char szLocalUnits[8];
int unitcode_int;
if(!this->get(unitcode_int, file, "coordsys_units"))
unitcode_int = UNITLABEL_M;
unitcode = (UNITLABEL) unitcode_int;
if(!this->make_local_coordsys("Leveller", unitcode))
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Cannot define local coordinate system." );
return false;
}
}
else if(csclass == LEV_COORDSYS_GEO)
{
char szWKT[1024];
if(!this->get(szWKT, 1023, file, "coordsys_wkt"))
return 0;
m_pszProjection = (char*)CPLMalloc(strlen(szWKT) + 1);
strcpy(m_pszProjection, szWKT);
}
else
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Unknown coordinate system type in %s.",
pszFilename );
return false;
}
// Get ground extents.
//.........这里部分代码省略.........
示例3: CPLStrdup
int OGRS57DataSource::Open( const char * pszFilename )
{
int iModule;
pszName = CPLStrdup( pszFilename );
/* -------------------------------------------------------------------- */
/* Setup reader options. */
/* -------------------------------------------------------------------- */
char **papszReaderOptions = NULL;
S57Reader *poModule = new S57Reader( pszFilename );
if( GetOption(S57O_LNAM_REFS) == NULL )
papszReaderOptions = CSLSetNameValue(papszReaderOptions,
S57O_LNAM_REFS, "ON" );
else
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_LNAM_REFS,
GetOption(S57O_LNAM_REFS));
if( GetOption(S57O_UPDATES) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_UPDATES,
GetOption(S57O_UPDATES));
if( GetOption(S57O_SPLIT_MULTIPOINT) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_SPLIT_MULTIPOINT,
GetOption(S57O_SPLIT_MULTIPOINT) );
if( GetOption(S57O_ADD_SOUNDG_DEPTH) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_ADD_SOUNDG_DEPTH,
GetOption(S57O_ADD_SOUNDG_DEPTH));
if( GetOption(S57O_PRESERVE_EMPTY_NUMBERS) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_PRESERVE_EMPTY_NUMBERS,
GetOption(S57O_PRESERVE_EMPTY_NUMBERS) );
if( GetOption(S57O_RETURN_PRIMITIVES) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_RETURN_PRIMITIVES,
GetOption(S57O_RETURN_PRIMITIVES) );
if( GetOption(S57O_RETURN_LINKAGES) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_RETURN_LINKAGES,
GetOption(S57O_RETURN_LINKAGES) );
if( GetOption(S57O_RETURN_DSID) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_RETURN_DSID,
GetOption(S57O_RETURN_DSID) );
if( GetOption(S57O_RECODE_BY_DSSI) != NULL )
papszReaderOptions =
CSLSetNameValue( papszReaderOptions, S57O_RECODE_BY_DSSI,
GetOption(S57O_RECODE_BY_DSSI) );
int bRet = poModule->SetOptions( papszReaderOptions );
CSLDestroy( papszReaderOptions );
if( !bRet )
{
delete poModule;
return FALSE;
}
/* -------------------------------------------------------------------- */
/* Try opening. */
/* */
/* Eventually this should check for catalogs, and if found */
/* instantiate a whole series of modules. */
/* -------------------------------------------------------------------- */
if( !poModule->Open( TRUE ) )
{
delete poModule;
return FALSE;
}
int bSuccess = TRUE;
nModules = 1;
papoModules = (S57Reader **) CPLMalloc(sizeof(void*));
papoModules[0] = poModule;
/* -------------------------------------------------------------------- */
/* Add the header layers if they are called for. */
/* -------------------------------------------------------------------- */
if( GetOption( S57O_RETURN_DSID ) == NULL
|| CSLTestBoolean(GetOption( S57O_RETURN_DSID )) )
{
OGRFeatureDefn *poDefn = S57GenerateDSIDFeatureDefn();
AddLayer( new OGRS57Layer( this, poDefn ) );
}
/* -------------------------------------------------------------------- */
//.........这里部分代码省略.........
示例4: CPLError
int SDTSTransfer::Open( const char * pszFilename )
{
/* -------------------------------------------------------------------- */
/* Open the catalog. */
/* -------------------------------------------------------------------- */
if( !oCATD.Read( pszFilename ) )
return FALSE;
/* -------------------------------------------------------------------- */
/* Read the IREF file. */
/* -------------------------------------------------------------------- */
if( oCATD.GetModuleFilePath( "IREF" ) == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Can't find IREF module in transfer `%s'.\n",
pszFilename );
return FALSE;
}
if( !oIREF.Read( oCATD.GetModuleFilePath( "IREF" ) ) )
return FALSE;
/* -------------------------------------------------------------------- */
/* Read the XREF file. */
/* -------------------------------------------------------------------- */
if( oCATD.GetModuleFilePath( "XREF" ) == NULL )
{
CPLError( CE_Warning, CPLE_AppDefined,
"Can't find XREF module in transfer `%s'.\n",
pszFilename );
}
else if( !oXREF.Read( oCATD.GetModuleFilePath( "XREF" ) ) )
{
CPLError( CE_Warning, CPLE_AppDefined,
"Can't read XREF module, even though found in transfer `%s'.\n",
pszFilename );
}
/* -------------------------------------------------------------------- */
/* Build an index of layer types we recognise and care about. */
/* -------------------------------------------------------------------- */
int iCATDLayer;
panLayerCATDEntry = (int *) CPLMalloc(sizeof(int) * oCATD.GetEntryCount());
for( iCATDLayer = 0; iCATDLayer < oCATD.GetEntryCount(); iCATDLayer++ )
{
switch( oCATD.GetEntryType(iCATDLayer) )
{
case SLTPoint:
case SLTLine:
case SLTAttr:
case SLTPoly:
case SLTRaster:
panLayerCATDEntry[nLayers++] = iCATDLayer;
break;
default:
/* ignore */
break;
}
}
/* -------------------------------------------------------------------- */
/* Initialized the related indexed readers list. */
/* -------------------------------------------------------------------- */
papoLayerReader = (SDTSIndexedReader **)
CPLCalloc(sizeof(SDTSIndexedReader*),oCATD.GetEntryCount());
return TRUE;
}
示例5: CPLError
GDALDataset *SGIDataset::Create( const char * pszFilename,
int nXSize,
int nYSize,
int nBands,
GDALDataType eType,
CPL_UNUSED char **papszOptions )
{
if( eType != GDT_Byte )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Attempt to create SGI dataset with an illegal\n"
"data type (%s), only Byte supported by the format.\n",
GDALGetDataTypeName(eType) );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Open the file for output. */
/* -------------------------------------------------------------------- */
VSILFILE *fp = VSIFOpenL( pszFilename, "w" );
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"Failed to create file '%s': %s",
pszFilename, VSIStrerror( errno ) );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Prepare and write 512 byte header. */
/* -------------------------------------------------------------------- */
GByte abyHeader[512];
memset( abyHeader, 0, 512 );
abyHeader[0] = 1;
abyHeader[1] = 218;
abyHeader[2] = 1; // RLE
abyHeader[3] = 1; // 8bit
GInt16 nShortValue;
if( nBands == 1 )
nShortValue = CPL_MSBWORD16(2);
else
nShortValue = CPL_MSBWORD16(3);
memcpy( abyHeader + 4, &nShortValue, 2 );
nShortValue = CPL_MSBWORD16(nXSize);
memcpy( abyHeader + 6, &nShortValue, 2 );
nShortValue = CPL_MSBWORD16(nYSize);
memcpy( abyHeader + 8, &nShortValue, 2 );
nShortValue = CPL_MSBWORD16(nBands);
memcpy( abyHeader + 10, &nShortValue, 2 );
GInt32 nIntValue = CPL_MSBWORD32(0);
memcpy( abyHeader + 12, &nIntValue, 4 );
GUInt32 nUIntValue = CPL_MSBWORD32(255);
memcpy( abyHeader + 16, &nUIntValue, 4 );
VSIFWriteL( abyHeader, 1, 512, fp );
/* -------------------------------------------------------------------- */
/* Create our RLE compressed zero-ed dummy line. */
/* -------------------------------------------------------------------- */
GByte *pabyRLELine = reinterpret_cast<GByte *>(
CPLMalloc( ( nXSize / 127 ) * 2 + 4 ) );
int nPixelsRemaining = nXSize;
GInt32 nRLEBytes = 0;
while( nPixelsRemaining > 0 )
{
pabyRLELine[nRLEBytes] = static_cast<GByte>(
std::min( 127, nPixelsRemaining ) );
pabyRLELine[nRLEBytes+1] = 0;
nPixelsRemaining -= pabyRLELine[nRLEBytes];
nRLEBytes += 2;
}
/* -------------------------------------------------------------------- */
/* Prepare and write RLE offset/size tables with everything */
/* zeroed indicating dummy lines. */
/* -------------------------------------------------------------------- */
const int nTableLen = nYSize * nBands;
GInt32 nDummyRLEOffset = 512 + 4 * nTableLen * 2;
CPL_MSBPTR32( &nRLEBytes );
CPL_MSBPTR32( &nDummyRLEOffset );
for( int i = 0; i < nTableLen; i++ )
VSIFWriteL( &nDummyRLEOffset, 1, 4, fp );
for( int i = 0; i < nTableLen; i++ )
VSIFWriteL( &nRLEBytes, 1, 4, fp );
/* -------------------------------------------------------------------- */
//.........这里部分代码省略.........
示例6: CPLError
//.........这里部分代码省略.........
"The corner coordinates of the source are not properly "
"aligned on plain latitude/longitude boundaries.");
}
/* -------------------------------------------------------------------- */
/* Check image dimensions. */
/* -------------------------------------------------------------------- */
if (!((nXSize == 1201 && nYSize == 1201) || (nXSize == 3601 && nYSize == 3601)))
{
CPLError( CE_Failure, CPLE_AppDefined,
"Image dimensions should be 1201x1201 or 3601x3601.");
return NULL;
}
/* -------------------------------------------------------------------- */
/* Check filename. */
/* -------------------------------------------------------------------- */
char expectedFileName[12];
snprintf(expectedFileName, sizeof(expectedFileName), "%c%02d%c%03d.HGT",
(nLLOriginLat >= 0) ? 'N' : 'S',
(nLLOriginLat >= 0) ? nLLOriginLat : -nLLOriginLat,
(nLLOriginLong >= 0) ? 'E' : 'W',
(nLLOriginLong >= 0) ? nLLOriginLong : -nLLOriginLong);
if (!EQUAL(expectedFileName, CPLGetFilename(pszFilename)))
{
CPLError( CE_Warning, CPLE_AppDefined,
"Expected output filename is %s.", expectedFileName);
}
/* -------------------------------------------------------------------- */
/* Write output file. */
/* -------------------------------------------------------------------- */
VSILFILE* fp = VSIFOpenL(pszFilename, "wb");
if (fp == NULL)
{
CPLError( CE_Failure, CPLE_FileIO,
"Cannot create file %s", pszFilename );
return NULL;
}
GInt16* panData = (GInt16*) CPLMalloc(sizeof(GInt16) * nXSize);
GDALRasterBand* poSrcBand = poSrcDS->GetRasterBand(1);
int bSrcBandHasNoData;
double srcBandNoData = poSrcBand->GetNoDataValue(&bSrcBandHasNoData);
for( int iY = 0; iY < nYSize; iY++ )
{
poSrcBand->RasterIO( GF_Read, 0, iY, nXSize, 1,
(void *) panData, nXSize, 1,
GDT_Int16, 0, 0 );
/* Translate nodata values */
if (bSrcBandHasNoData && srcBandNoData != SRTMHG_NODATA_VALUE)
{
for( int iX = 0; iX < nXSize; iX++ )
{
if (panData[iX] == srcBandNoData)
panData[iX] = SRTMHG_NODATA_VALUE;
}
}
#ifdef CPL_LSB
GDALSwapWords(panData, 2, nXSize, 2);
#endif
if( VSIFWriteL( panData,sizeof(GInt16) * nXSize,1,fp ) != 1)
{
CPLError( CE_Failure, CPLE_FileIO,
"Failed to write line %d in SRTMHGT dataset.\n",
iY );
VSIFCloseL(fp);
CPLFree( panData );
return NULL;
}
if( pfnProgress && !pfnProgress((iY+1) / (double) nYSize, NULL, pProgressData ) )
{
CPLError( CE_Failure, CPLE_UserInterrupt,
"User terminated CreateCopy()" );
VSIFCloseL(fp);
CPLFree( panData );
return NULL;
}
}
CPLFree( panData );
VSIFCloseL(fp);
/* -------------------------------------------------------------------- */
/* Reopen and copy missing information into a PAM file. */
/* -------------------------------------------------------------------- */
GDALPamDataset *poDS = (GDALPamDataset *)
GDALOpen( pszFilename, GA_ReadOnly );
if( poDS )
poDS->CloneInfo( poSrcDS, GCIF_PAM_DEFAULT);
return poDS;
}
示例7: CPLError
//.........这里部分代码省略.........
int nDecimalCount = 7;
int bHasNoDataValue = FALSE;
double dfNoDataValue =
poSrcDS->GetRasterBand(1)->GetNoDataValue(&bHasNoDataValue);
if (!bHasNoDataValue)
dfNoDataValue = 1.e30;
VSIFPrintfL(fp, "!\n");
VSIFPrintfL(fp, "! Created by GDAL.\n");
VSIFPrintfL(fp, "!\n");
VSIFPrintfL(fp, "@GRID FILE, GRID, %d\n", nValuesPerLine);
WriteRightJustified(fp, nFieldSize, 10);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, dfNoDataValue, 10);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, "", 10);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, nDecimalCount, 10);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, 1, 10);
VSIFPrintfL(fp, "\n");
WriteRightJustified(fp, nYSize, 10);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, nXSize, 10);
VSIFPrintfL(fp, ",");
if (CSLTestBoolean(CPLGetConfigOption("ZMAP_PIXEL_IS_POINT", "FALSE")))
{
WriteRightJustified(fp, adfGeoTransform[0] + adfGeoTransform[1] / 2, 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[0] + adfGeoTransform[1] * nXSize -
adfGeoTransform[1] / 2, 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[3] + adfGeoTransform[5] * nYSize -
adfGeoTransform[5] / 2, 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[3] + adfGeoTransform[5] / 2, 14, 7);
}
else
{
WriteRightJustified(fp, adfGeoTransform[0], 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[0] + adfGeoTransform[1] * nXSize, 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[3] + adfGeoTransform[5] * nYSize, 14, 7);
VSIFPrintfL(fp, ",");
WriteRightJustified(fp, adfGeoTransform[3], 14, 7);
}
VSIFPrintfL(fp, "\n");
VSIFPrintfL(fp, "0.0, 0.0, 0.0\n");
VSIFPrintfL(fp, "@\n");
/* -------------------------------------------------------------------- */
/* Copy imagery */
/* -------------------------------------------------------------------- */
double* padfLineBuffer = (double*) CPLMalloc(nYSize * sizeof(double));
int i, j;
CPLErr eErr = CE_None;
for(i=0;i<nXSize && eErr == CE_None;i++)
{
eErr = poSrcDS->GetRasterBand(1)->RasterIO(
GF_Read, i, 0, 1, nYSize,
padfLineBuffer, 1, nYSize,
GDT_Float64, 0, 0);
if (eErr != CE_None)
break;
int bEOLPrinted = FALSE;
for(j=0;j<nYSize;j++)
{
WriteRightJustified(fp, padfLineBuffer[j], nFieldSize, nDecimalCount);
if (((j + 1) % nValuesPerLine) == 0)
{
bEOLPrinted = TRUE;
VSIFPrintfL(fp, "\n");
}
else
bEOLPrinted = FALSE;
}
if (!bEOLPrinted)
VSIFPrintfL(fp, "\n");
if (!pfnProgress( (j+1) * 1.0 / nYSize, NULL, pProgressData))
{
eErr = CE_Failure;
break;
}
}
CPLFree(padfLineBuffer);
VSIFCloseL(fp);
if (eErr != CE_None)
return NULL;
return (GDALDataset*) GDALOpen(pszFilename, GA_ReadOnly);
}
示例8: CorrectURLs
static void CorrectURLs( CPLXMLNode * psRoot, const char *pszURL )
{
if( psRoot == NULL || pszURL == NULL )
return;
if( pszURL[0] == '\0' )
return;
CPLXMLNode *psChild = psRoot->psChild;
// check for xlink:href attribute
while( psChild != NULL && !( ( psChild->eType == CXT_Attribute ) &&
( EQUAL(psChild->pszValue, "xlink:href") )) )
psChild = psChild->psNext;
if( psChild != NULL &&
!( strstr( psChild->psChild->pszValue, pszURL ) == psChild->psChild->pszValue
&& psChild->psChild->pszValue[strlen(pszURL)] == '#' ) )
{
// href has a different url.
if( psChild->psChild->pszValue[0] == '#' )
{
//empty URL: prepend the given URL
const size_t nLen =
CPLStrnlen( pszURL, 1024 ) +
CPLStrnlen( psChild->psChild->pszValue, 1024 ) + 1;
char *pszNew = (char *)CPLMalloc( nLen * sizeof(char));
CPLStrlcpy( pszNew, pszURL, nLen );
CPLStrlcat( pszNew, psChild->psChild->pszValue, nLen );
CPLSetXMLValue( psRoot, "#xlink:href", pszNew );
CPLFree( pszNew );
}
else
{
size_t nPathLen = strlen(pszURL); // Used after for.
for( ;
nPathLen > 0 &&
pszURL[nPathLen - 1] != '/' &&
pszURL[nPathLen - 1] != '\\';
nPathLen-- );
const char* pszDash = strchr( psChild->psChild->pszValue, '#' );
if( pszDash != NULL &&
strncmp( pszURL, psChild->psChild->pszValue, nPathLen ) != 0 )
{
//different path
int nURLLen = static_cast<int>(pszDash - psChild->psChild->pszValue);
char *pszURLWithoutID = (char *)CPLMalloc( (nURLLen+1) * sizeof(char));
strncpy( pszURLWithoutID, psChild->psChild->pszValue, nURLLen );
pszURLWithoutID[nURLLen] = '\0';
if( CPLIsFilenameRelative( pszURLWithoutID ) &&
strstr( pszURLWithoutID, ":" ) == NULL )
{
//relative URL: prepend the path of pszURL
const size_t nLen =
nPathLen +
CPLStrnlen( psChild->psChild->pszValue, 1024 ) + 1;
char *pszNew = (char *)CPLMalloc( nLen * sizeof(char));
for( size_t i = 0; i < nPathLen; i++ )
pszNew[i] = pszURL[i];
pszNew[nPathLen] = '\0';
CPLStrlcat( pszNew, psChild->psChild->pszValue, nLen );
CPLSetXMLValue( psRoot, "#xlink:href", pszNew );
CPLFree( pszNew );
}
CPLFree( pszURLWithoutID );
}
}
}
// search the child elements of psRoot
for( psChild = psRoot->psChild; psChild != NULL; psChild = psChild->psNext)
if( psChild->eType == CXT_Element )
CorrectURLs( psChild, pszURL );
}
示例9: switch
//.........这里部分代码省略.........
nBands * GDALGetDataTypeSizeBytes(eWrkDT) *
nBlockXSize * nBlockYSize );
}
int nBlockOffsetPixels = nBlockXSize * nBlockYSize;
const int nBandOffsetByte =
GDALGetDataTypeSizeBytes(eWrkDT) * nBlockXSize * nBlockYSize;
for(iBand=0;iBand<nBands;iBand++)
{
eErr = poDS->GetRasterBand(iBand + 1)->RasterIO(
GF_Read,
nXBlockOff * nBlockXSize,
nYBlockOff * nBlockYSize,
nXSizeRequest,
nYSizeRequest,
pabySrc + iBand * nBandOffsetByte,
nXSizeRequest,
nYSizeRequest,
eWrkDT, 0,
nBlockXSize * GDALGetDataTypeSizeBytes(eWrkDT),
NULL );
if( eErr != CE_None )
return eErr;
}
/* -------------------------------------------------------------------- */
/* Process different cases. */
/* -------------------------------------------------------------------- */
int i;
switch( eWrkDT )
{
case GDT_Byte:
{
GByte* pabyNoData = (GByte*) CPLMalloc(nBands * sizeof(GByte));
for(iBand=0;iBand<nBands;iBand++)
{
pabyNoData[iBand] = (GByte)padfNodataValues[iBand];
}
for( i = nBlockXSize * nBlockYSize - 1; i >= 0; i-- )
{
int nCountNoData = 0;
for(iBand=0;iBand<nBands;iBand++)
{
if( pabySrc[i + iBand * nBlockOffsetPixels] == pabyNoData[iBand] )
nCountNoData ++;
}
if (nCountNoData == nBands)
((GByte *) pImage)[i] = 0;
else
((GByte *) pImage)[i] = 255;
}
CPLFree(pabyNoData);
}
break;
case GDT_UInt32:
{
GUInt32* panNoData = (GUInt32*) CPLMalloc(nBands * sizeof(GUInt32));
for(iBand=0;iBand<nBands;iBand++)
{
panNoData[iBand] = (GUInt32)padfNodataValues[iBand];
}
for( i = nBlockXSize * nBlockYSize - 1; i >= 0; i-- )
示例10: CPLGetConfigOption
int OGRODBCDataSource::OpenMDB( const char * pszNewName, int bUpdate )
{
const char* pszOptionName = "";
pszOptionName = "PGEO_DRIVER_TEMPLATE";
const char* pszDSNStringTemplate = CPLGetConfigOption( pszOptionName, NULL );
if( pszDSNStringTemplate == NULL )
{
pszOptionName = "MDB_DRIVER_TEMPLATE";
pszDSNStringTemplate = CPLGetConfigOption( pszOptionName, NULL );
if( pszDSNStringTemplate == NULL )
{
pszOptionName = "";
pszDSNStringTemplate = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=%s";
}
}
if (!CheckDSNStringTemplate(pszDSNStringTemplate))
{
CPLError( CE_Failure, CPLE_AppDefined,
"Illegal value for %s option", pszOptionName );
return FALSE;
}
char* pszDSN = (char *) CPLMalloc(strlen(pszNewName)+strlen(pszDSNStringTemplate)+100);
sprintf( pszDSN, pszDSNStringTemplate, pszNewName );
/* -------------------------------------------------------------------- */
/* Initialize based on the DSN. */
/* -------------------------------------------------------------------- */
CPLDebug( "ODBC", "EstablishSession(%s)", pszDSN );
if( !oSession.EstablishSession( pszDSN, NULL, NULL ) )
{
int bError = TRUE;
if( EQUAL(pszDSN, "") )
{
// Trying with another template (#5594)
pszDSNStringTemplate = "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s";
CPLFree( pszDSN );
pszDSN = (char *) CPLMalloc(strlen(pszNewName)+strlen(pszDSNStringTemplate)+100);
sprintf( pszDSN, pszDSNStringTemplate, pszNewName );
CPLDebug( "ODBC", "EstablishSession(%s)", pszDSN );
if( oSession.EstablishSession( pszDSN, NULL, NULL ) )
{
bError = FALSE;
}
}
if( bError )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to initialize ODBC connection to DSN for %s,\n"
"%s", pszDSN, oSession.GetLastError() );
CPLFree( pszDSN );
return FALSE;
}
}
CPLFree( pszDSN );
pszName = CPLStrdup( pszNewName );
bDSUpdate = bUpdate;
/* -------------------------------------------------------------------- */
/* Check if it is a PGeo MDB. */
/* -------------------------------------------------------------------- */
{
CPLODBCStatement oStmt( &oSession );
oStmt.Append( "SELECT TableName, FieldName, ShapeType, ExtentLeft, ExtentRight, ExtentBottom, ExtentTop, SRID, HasZ FROM GDB_GeomColumns" );
if( oStmt.ExecuteSQL() )
{
return FALSE;
}
}
/* -------------------------------------------------------------------- */
/* Check if it is a Geomedia MDB. */
/* -------------------------------------------------------------------- */
{
CPLODBCStatement oStmt( &oSession );
oStmt.Append( "SELECT TableName FROM GAliasTable WHERE TableType = 'INGRFeatures'" );
if( oStmt.ExecuteSQL() )
{
return FALSE;
}
}
/* -------------------------------------------------------------------- */
/* Check if it is a Walk MDB. */
/* -------------------------------------------------------------------- */
{
CPLODBCStatement oStmt( &oSession );
oStmt.Append( "SELECT LayerID, LayerName, minE, maxE, minN, maxN, Memo FROM WalkLayers" );
if( oStmt.ExecuteSQL() )
{
return FALSE;
//.........这里部分代码省略.........
示例11: CPLAssert
//.........这里部分代码省略.........
osLayerName += ".";
}
osLayerName += oTableList.GetColData(2);
papszTables = CSLAddString( papszTables, osLayerName );
papszGeomCol = CSLAddString(papszGeomCol,"");
}
}
}
/* -------------------------------------------------------------------- */
/* If we have an explicit list of requested tables, use them */
/* (non-spatial). */
/* -------------------------------------------------------------------- */
for( int iTable = 0;
papszTables != NULL && papszTables[iTable] != NULL;
iTable++ )
{
if( strlen(papszGeomCol[iTable]) > 0 )
OpenTable( papszTables[iTable], papszGeomCol[iTable], bUpdate );
else
OpenTable( papszTables[iTable], NULL, bUpdate );
}
CSLDestroy( papszTables );
CSLDestroy( papszGeomCol );
/* -------------------------------------------------------------------- */
/* If no explicit list of tables was given, check for a list in */
/* a geometry_columns table. */
/* -------------------------------------------------------------------- */
if ( pszSRSTableName )
{
CPLODBCStatement oSRSList( &oSession );
if ( !pszSRTextCol )
pszSRTextCol = CPLStrdup( "srtext" );
if ( !pszSRIDCol )
pszSRIDCol = CPLStrdup( "srid" );
oSRSList.Append( "SELECT " );
oSRSList.Append( pszSRIDCol );
oSRSList.Append( "," );
oSRSList.Append( pszSRTextCol );
oSRSList.Append( " FROM " );
oSRSList.Append( pszSRSTableName );
CPLDebug( "OGR_ODBC", "ExecuteSQL(%s) to read SRS table",
oSRSList.GetCommand() );
if ( oSRSList.ExecuteSQL() )
{
int nRows = 256; // A reasonable number of SRIDs to start from
panSRID = (int *)CPLMalloc( nRows * sizeof(int) );
papoSRS = (OGRSpatialReference **)
CPLMalloc( nRows * sizeof(OGRSpatialReference*) );
while ( oSRSList.Fetch() )
{
char *pszSRID = (char *) oSRSList.GetColData( pszSRIDCol );
if ( !pszSRID )
continue;
char *pszSRText = (char *) oSRSList.GetColData( pszSRTextCol );
if ( pszSRText )
{
if ( nKnownSRID > nRows )
{
nRows *= 2;
panSRID = (int *)CPLRealloc( panSRID,
nRows * sizeof(int) );
papoSRS = (OGRSpatialReference **)
CPLRealloc( papoSRS,
nRows * sizeof(OGRSpatialReference*) );
}
panSRID[nKnownSRID] = atoi( pszSRID );
papoSRS[nKnownSRID] = new OGRSpatialReference();
if ( papoSRS[nKnownSRID]->importFromWkt( &pszSRText )
!= OGRERR_NONE )
{
delete papoSRS[nKnownSRID];
continue;
}
nKnownSRID++;
}
}
}
}
if ( pszSRIDCol )
CPLFree( pszSRIDCol );
if ( pszSRTextCol )
CPLFree( pszSRTextCol );
if ( pszSRSTableName )
CPLFree( pszSRSTableName );
return TRUE;
}
示例12: CSVIngest
static void CSVIngest( const char *pszFilename )
{
CSVTable *psTable = CSVAccess( pszFilename );
int nFileLen, i, nMaxLineCount, iLine = 0;
char *pszThisLine;
if( psTable->pszRawData != NULL )
return;
/* -------------------------------------------------------------------- */
/* Ingest whole file. */
/* -------------------------------------------------------------------- */
VSIFSeek( psTable->fp, 0, SEEK_END );
nFileLen = VSIFTell( psTable->fp );
VSIRewind( psTable->fp );
psTable->pszRawData = (char *) CPLMalloc(nFileLen+1);
if( (int) VSIFRead( psTable->pszRawData, 1, nFileLen, psTable->fp )
!= nFileLen )
{
CPLFree( psTable->pszRawData );
psTable->pszRawData = NULL;
CPLError( CE_Failure, CPLE_FileIO, "Read of file %s failed.",
psTable->pszFilename );
return;
}
psTable->pszRawData[nFileLen] = '\0';
/* -------------------------------------------------------------------- */
/* Get count of newlines so we can allocate line array. */
/* -------------------------------------------------------------------- */
nMaxLineCount = 0;
for( i = 0; i < nFileLen; i++ )
{
if( psTable->pszRawData[i] == 10 )
nMaxLineCount++;
}
psTable->papszLines = (char **) CPLCalloc(sizeof(char*),nMaxLineCount);
/* -------------------------------------------------------------------- */
/* Build a list of record pointers into the raw data buffer */
/* based on line terminators. Zero terminate the line */
/* strings. */
/* -------------------------------------------------------------------- */
/* skip header line */
pszThisLine = CSVFindNextLine( psTable->pszRawData );
while( pszThisLine != NULL && iLine < nMaxLineCount )
{
psTable->papszLines[iLine++] = pszThisLine;
pszThisLine = CSVFindNextLine( pszThisLine );
}
psTable->nLineCount = iLine;
/* -------------------------------------------------------------------- */
/* Allocate and populate index array. Ensure they are in */
/* ascending order so that binary searches can be done on the */
/* array. */
/* -------------------------------------------------------------------- */
psTable->panLineIndex = (int *) CPLMalloc(sizeof(int)*psTable->nLineCount);
for( i = 0; i < psTable->nLineCount; i++ )
{
psTable->panLineIndex[i] = atoi(psTable->papszLines[i]);
if( i > 0 && psTable->panLineIndex[i] < psTable->panLineIndex[i-1] )
{
CPLFree( psTable->panLineIndex );
psTable->panLineIndex = NULL;
break;
}
}
psTable->iLastLine = -1;
/* -------------------------------------------------------------------- */
/* We should never need the file handle against, so close it. */
/* -------------------------------------------------------------------- */
VSIFClose( psTable->fp );
psTable->fp = NULL;
}
示例13: VALUES
//.........这里部分代码省略.........
/* Copy in the attribute values. */
/* -------------------------------------------------------------------- */
for( i = 0; i < poFeatureDefn->GetFieldCount(); i++ )
{
if( !poFeature->IsFieldSetAndNotNull( i ) )
continue;
if( bNeedComma )
osCommand += ", ";
else
bNeedComma = TRUE;
const char *pszStrValue = poFeature->GetFieldAsString(i);
if( poFeatureDefn->GetFieldDefn(i)->GetType() != OFTInteger
&& poFeatureDefn->GetFieldDefn(i)->GetType() != OFTReal
&& poFeatureDefn->GetFieldDefn(i)->GetType() != OFTBinary )
{
int iChar;
//We need to quote and escape string fields.
osCommand += "'";
for( iChar = 0; pszStrValue[iChar] != '\0'; iChar++ )
{
if( poFeatureDefn->GetFieldDefn(i)->GetType() != OFTIntegerList
&& poFeatureDefn->GetFieldDefn(i)->GetType() != OFTRealList
&& poFeatureDefn->GetFieldDefn(i)->GetWidth() > 0
&& iChar == poFeatureDefn->GetFieldDefn(i)->GetWidth() )
{
CPLDebug( "INGRES",
"Truncated %s field value, it was too long.",
poFeatureDefn->GetFieldDefn(i)->GetNameRef() );
break;
}
if( pszStrValue[iChar] == '\'' )
{
osCommand += '\'';
osCommand += pszStrValue[iChar];
}
else
osCommand += pszStrValue[iChar];
}
osCommand += "'";
}
else if( poFeatureDefn->GetFieldDefn(i)->GetType() == OFTBinary )
{
int binaryCount = 0;
GByte* binaryData = poFeature->GetFieldAsBinary(i, &binaryCount);
char* pszHexValue = CPLBinaryToHex( binaryCount, binaryData );
osCommand += "x'";
osCommand += pszHexValue;
osCommand += "'";
CPLFree( pszHexValue );
}
else
{
osCommand += pszStrValue;
}
}
osCommand += ")";
/* -------------------------------------------------------------------- */
/* Execute it. */
/* -------------------------------------------------------------------- */
poDS->EstablishActiveLayer( NULL );
OGRIngresStatement oStmt( poDS->GetConn() );
oStmt.bDebug = FALSE;
if( !osGeomText.empty() && poDS->IsNewIngres() == FALSE )
oStmt.addInputParameter( IIAPI_LVCH_TYPE, osGeomText.size(),
(GByte *) osGeomText.c_str() );
if( !osGeomText.empty() && poDS->IsNewIngres() == TRUE )
{
GByte * pabyWKB;
int nSize = poFeature->GetGeometryRef()->WkbSize();
pabyWKB = (GByte *) CPLMalloc(nSize);
poFeature->GetGeometryRef()->exportToWkb(wkbNDR, pabyWKB);
oStmt.addInputParameter( IIAPI_LBYTE_TYPE, nSize, pabyWKB );
CPLFree(pabyWKB);
/*
* Test code
char * pszWKT;
poFeature->GetGeometryRef()->exportToWkt(&pszWKT);
oStmt.addInputParameter(IIAPI_LVCH_TYPE, strlen(pszWKT), (GByte *) pszWKT);*/
}
if( !oStmt.ExecuteSQL( osCommand ) )
return OGRERR_FAILURE;
return OGRERR_NONE;
}
示例14: ResetReading
OGRFeature *OGRIngresTableLayer::GetFeature( GIntBig nFeatureId )
{
if( pszFIDColumn == NULL )
return OGRIngresLayer::GetFeature( nFeatureId );
/* -------------------------------------------------------------------- */
/* Discard any existing resultset. */
/* -------------------------------------------------------------------- */
ResetReading();
/* -------------------------------------------------------------------- */
/* Prepare query command that will just fetch the one record of */
/* interest. */
/* -------------------------------------------------------------------- */
char *pszFieldList = BuildFields();
char *pszCommand = (char *) CPLMalloc(strlen(pszFieldList)+2000);
sprintf( pszCommand,
"SELECT %s FROM %s WHERE %s = %ld",
pszFieldList, poFeatureDefn->GetName(), pszFIDColumn,
nFeatureId );
CPLFree( pszFieldList );
/* -------------------------------------------------------------------- */
/* Issue the command. */
/* -------------------------------------------------------------------- */
if( ingres_query( poDS->GetConn(), pszCommand ) )
{
poDS->ReportError( pszCommand );
return NULL;
}
CPLFree( pszCommand );
hResultSet = ingres_store_result( poDS->GetConn() );
if( hResultSet == NULL )
{
poDS->ReportError( "ingres_store_result() failed on query." );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Fetch the result record. */
/* -------------------------------------------------------------------- */
char **papszRow = ingres_fetch_row( hResultSet );
if( papszRow == NULL )
return NULL;
unsigned long *panLengths = ingres_fetch_lengths( hResultSet );
/* -------------------------------------------------------------------- */
/* Transform into a feature. */
/* -------------------------------------------------------------------- */
iNextShapeId = nFeatureId;
OGRFeature *poFeature = RecordToFeature( papszRow, panLengths );
iNextShapeId = 0;
/* -------------------------------------------------------------------- */
/* Cleanup */
/* -------------------------------------------------------------------- */
if( hResultSet != NULL )
ingres_free_result( hResultSet );
hResultSet = NULL;
return poFeature;
}
示例15: OGRSQLiteExecuteSQL
OGRLayer * OGRSQLiteExecuteSQL( GDALDataset* poDS,
const char *pszStatement,
OGRGeometry *poSpatialFilter,
CPL_UNUSED const char *pszDialect )
{
char* pszTmpDBName = (char*) CPLMalloc(256);
sprintf(pszTmpDBName, "/vsimem/ogr2sqlite/temp_%p.db", pszTmpDBName);
OGRSQLiteDataSource* poSQLiteDS = NULL;
int nRet;
int bSpatialiteDB = FALSE;
CPLString osOldVal;
const char* pszOldVal = CPLGetConfigOption("OGR_SQLITE_STATIC_VIRTUAL_OGR", NULL);
if( pszOldVal != NULL )
{
osOldVal = pszOldVal;
pszOldVal = osOldVal.c_str();
}
/* -------------------------------------------------------------------- */
/* Create in-memory sqlite/spatialite DB */
/* -------------------------------------------------------------------- */
#ifdef HAVE_SPATIALITE
/* -------------------------------------------------------------------- */
/* Creating an empty spatialite DB (with spatial_ref_sys populated */
/* has a non-neglectable cost. So at the first attempt, let's make */
/* one and cache it for later use. */
/* -------------------------------------------------------------------- */
#if 1
static vsi_l_offset nEmptyDBSize = 0;
static GByte* pabyEmptyDB = NULL;
{
static CPLMutex* hMutex = NULL;
CPLMutexHolder oMutexHolder(&hMutex);
static int bTried = FALSE;
if( !bTried &&
CSLTestBoolean(CPLGetConfigOption("OGR_SQLITE_DIALECT_USE_SPATIALITE", "YES")) )
{
bTried = TRUE;
char* pszCachedFilename = (char*) CPLMalloc(256);
sprintf(pszCachedFilename, "/vsimem/ogr2sqlite/reference_%p.db",pszCachedFilename);
char** papszOptions = CSLAddString(NULL, "SPATIALITE=YES");
OGRSQLiteDataSource* poCachedDS = new OGRSQLiteDataSource();
nRet = poCachedDS->Create( pszCachedFilename, papszOptions );
CSLDestroy(papszOptions);
papszOptions = NULL;
delete poCachedDS;
if( nRet )
/* Note: the reference file keeps the ownership of the data, so that */
/* it gets released with VSICleanupFileManager() */
pabyEmptyDB = VSIGetMemFileBuffer( pszCachedFilename, &nEmptyDBSize, FALSE );
CPLFree( pszCachedFilename );
}
}
/* The following configuration option is useful mostly for debugging/testing */
if( pabyEmptyDB != NULL && CSLTestBoolean(CPLGetConfigOption("OGR_SQLITE_DIALECT_USE_SPATIALITE", "YES")) )
{
GByte* pabyEmptyDBClone = (GByte*)VSIMalloc(nEmptyDBSize);
if( pabyEmptyDBClone == NULL )
{
CPLFree(pszTmpDBName);
return NULL;
}
memcpy(pabyEmptyDBClone, pabyEmptyDB, nEmptyDBSize);
VSIFCloseL(VSIFileFromMemBuffer( pszTmpDBName, pabyEmptyDBClone, nEmptyDBSize, TRUE ));
poSQLiteDS = new OGRSQLiteDataSource();
CPLSetThreadLocalConfigOption("OGR_SQLITE_STATIC_VIRTUAL_OGR", "NO");
nRet = poSQLiteDS->Open( pszTmpDBName, TRUE, NULL );
CPLSetThreadLocalConfigOption("OGR_SQLITE_STATIC_VIRTUAL_OGR", pszOldVal);
if( !nRet )
{
/* should not happen really ! */
delete poSQLiteDS;
VSIUnlink(pszTmpDBName);
CPLFree(pszTmpDBName);
return NULL;
}
bSpatialiteDB = TRUE;
}
#else
/* No caching version */
poSQLiteDS = new OGRSQLiteDataSource();
char** papszOptions = CSLAddString(NULL, "SPATIALITE=YES");
CPLSetThreadLocalConfigOption("OGR_SQLITE_STATIC_VIRTUAL_OGR", "NO");
nRet = poSQLiteDS->Create( pszTmpDBName, papszOptions );
CPLSetThreadLocalConfigOption("OGR_SQLITE_STATIC_VIRTUAL_OGR", pszOldVal);
CSLDestroy(papszOptions);
papszOptions = NULL;
if( nRet )
{
bSpatialiteDB = TRUE;
}
#endif
else
//.........这里部分代码省略.........