📄 ogrutils.cpp
字号:
if( *ppadfZ != NULL )
{
*ppadfZ = (double *)
CPLRealloc(*ppadfZ, sizeof(double) * *pnMaxPoints);
}
}
/* -------------------------------------------------------------------- */
/* Add point to list. */
/* -------------------------------------------------------------------- */
(*ppaoPoints)[*pnPointsRead].x = atof(szTokenX);
(*ppaoPoints)[*pnPointsRead].y = atof(szTokenY);
/* -------------------------------------------------------------------- */
/* Do we have a Z coordinate? */
/* -------------------------------------------------------------------- */
pszInput = OGRWktReadToken( pszInput, szDelim );
if( isdigit(szDelim[0]) || szDelim[0] == '-' || szDelim[0] == '.' )
{
if( *ppadfZ == NULL )
{
*ppadfZ = (double *) CPLCalloc(sizeof(double),*pnMaxPoints);
}
(*ppadfZ)[*pnPointsRead] = atof(szDelim);
pszInput = OGRWktReadToken( pszInput, szDelim );
}
(*pnPointsRead)++;
/* -------------------------------------------------------------------- */
/* Do we have a M coordinate? */
/* If we do, just skip it. */
/* -------------------------------------------------------------------- */
if( isdigit(szDelim[0]) || szDelim[0] == '-' || szDelim[0] == '.' )
{
pszInput = OGRWktReadToken( pszInput, szDelim );
}
/* -------------------------------------------------------------------- */
/* Read next delimeter ... it should be a comma if there are */
/* more points. */
/* -------------------------------------------------------------------- */
if( szDelim[0] != ')' && szDelim[0] != ',' )
{
CPLDebug( "OGR",
"Corrupt input in OGRWktReadPoints()\n"
"Got `%s' when expecting `,' or `)', near `%s' in %s.\n",
szDelim, pszInput, pszOrigInput );
return NULL;
}
} while( szDelim[0] == ',' );
return pszInput;
}
/************************************************************************/
/* OGRMalloc() */
/* */
/* Cover for CPLMalloc() */
/************************************************************************/
void *OGRMalloc( size_t size )
{
return CPLMalloc( size );
}
/************************************************************************/
/* OGRCalloc() */
/* */
/* Cover for CPLCalloc() */
/************************************************************************/
void * OGRCalloc( size_t count, size_t size )
{
return CPLCalloc( count, size );
}
/************************************************************************/
/* OGRRealloc() */
/* */
/* Cover for CPLRealloc() */
/************************************************************************/
void *OGRRealloc( void * pOld, size_t size )
{
return CPLRealloc( pOld, size );
}
/************************************************************************/
/* OGRFree() */
/* */
/* Cover for CPLFree(). */
/************************************************************************/
void OGRFree( void * pMemory )
{
CPLFree( pMemory );
}
/**
* General utility option processing.
*
* This function is intended to provide a variety of generic commandline
* options for all OGR commandline utilities. It takes care of the following
* commandline options:
*
* --formats: report all format drivers configured.
* --format [format]: report details of one format driver.
* --optfile filename: expand an option file into the argument list.
* --config key value: set system configuration option.
* --debug [on/off/value]: set debug level.
* --help-general: report detailed help on general options.
*
* The argument array is replaced "in place" and should be freed with
* CSLDestroy() when no longer needed. The typical usage looks something
* like the following. Note that the formats should be registered so that
* the --formats and --format options will work properly.
*
* int main( int argc, char ** argv )
* {
* OGRAllRegister();
*
* argc = OGRGeneralCmdLineProcessor( argc, &argv, 0 );
* if( argc < 1 )
* exit( -argc );
*
* @param nArgc number of values in the argument list.
* @param Pointer to the argument list array (will be updated in place).
*
* @return updated nArgc argument count. Return of 0 requests terminate
* without error, return of -1 requests exit with error code.
*/
int OGRGeneralCmdLineProcessor( int nArgc, char ***ppapszArgv, int nOptions )
{
char **papszReturn = NULL;
int iArg;
char **papszArgv = *ppapszArgv;
(void) nOptions;
/* -------------------------------------------------------------------- */
/* Preserve the program name. */
/* -------------------------------------------------------------------- */
papszReturn = CSLAddString( papszReturn, papszArgv[0] );
/* ==================================================================== */
/* Loop over all arguments. */
/* ==================================================================== */
for( iArg = 1; iArg < nArgc; iArg++ )
{
/* -------------------------------------------------------------------- */
/* --config */
/* -------------------------------------------------------------------- */
if( EQUAL(papszArgv[iArg],"--config") )
{
if( iArg + 2 >= nArgc )
{
CPLError( CE_Failure, CPLE_AppDefined,
"--config option given without a key and value argument." );
CSLDestroy( papszReturn );
return -1;
}
CPLSetConfigOption( papszArgv[iArg+1], papszArgv[iArg+2] );
iArg += 2;
}
/* -------------------------------------------------------------------- */
/* --mempreload */
/* -------------------------------------------------------------------- */
else if( EQUAL(papszArgv[iArg],"--mempreload") )
{
int i;
if( iArg + 1 >= nArgc )
{
CPLError( CE_Failure, CPLE_AppDefined,
"--mempreload option given without directory path.");
CSLDestroy( papszReturn );
return -1;
}
char **papszFiles = CPLReadDir( papszArgv[iArg+1] );
if( CSLCount(papszFiles) == 0 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"--mempreload given invalid or empty directory.");
CSLDestroy( papszReturn );
return -1;
}
for( i = 0; papszFiles[i] != NULL; i++ )
{
CPLString osOldPath, osNewPath;
if( EQUAL(papszFiles[i],".") || EQUAL(papszFiles[i],"..") )
continue;
osOldPath = CPLFormFilename( papszArgv[iArg+1],
papszFiles[i], NULL );
osNewPath.Printf( "/vsimem/%s", papszFiles[i] );
CPLDebug( "VSI", "Preloading %s to %s.",
osOldPath.c_str(), osNewPath.c_str() );
if( CPLCopyFile( osNewPath, osOldPath ) != 0 )
return -1;
}
CSLDestroy( papszFiles );
iArg += 1;
}
/* -------------------------------------------------------------------- */
/* --debug */
/* -------------------------------------------------------------------- */
else if( EQUAL(papszArgv[iArg],"--debug") )
{
if( iArg + 1 >= nArgc )
{
CPLError( CE_Failure, CPLE_AppDefined,
"--debug option given without debug level." );
CSLDestroy( papszReturn );
return -1;
}
CPLSetConfigOption( "CPL_DEBUG", papszArgv[iArg+1] );
iArg += 1;
}
/* -------------------------------------------------------------------- */
/* --optfile */
/* */
/* Annoyingly the options inserted by --optfile will *not* be */
/* processed properly if they are general options. */
/* -------------------------------------------------------------------- */
else if( EQUAL(papszArgv[iArg],"--optfile") )
{
const char *pszLine;
FILE *fpOptFile;
if( iArg + 1 >= nArgc )
{
CPLError( CE_Failure, CPLE_AppDefined,
"--optfile option given without filename." );
CSLDestroy( papszReturn );
return -1;
}
fpOptFile = VSIFOpen( papszArgv[iArg+1], "rb" );
if( fpOptFile == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Unable to open optfile '%s'.\n%s",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -