gdal/apps/gdaltindex_bin.cpp

86 lines
2.7 KiB
C++

/******************************************************************************
*
* Project: MapServer
* Purpose: Commandline App to build tile index for raster files.
* Author: Frank Warmerdam, warmerdam@pobox.com
*
******************************************************************************
* Copyright (c) 2001, Frank Warmerdam, DM Solutions Group Inc
* Copyright (c) 2007-2013, Even Rouault <even dot rouault at spatialys.com>
*
* SPDX-License-Identifier: MIT
****************************************************************************/
#include "cpl_string.h"
#include "cpl_error.h"
#include "commonutils.h"
#include "gdal_version.h"
#include "gdal_utils_priv.h"
#include "gdal_priv.h"
/************************************************************************/
/* Usage() */
/************************************************************************/
static void Usage()
{
fprintf(stderr, "%s\n", GDALTileIndexAppGetParserUsage().c_str());
exit(1);
}
/************************************************************************/
/* main() */
/************************************************************************/
MAIN_START(argc, argv)
{
EarlySetConfigOptions(argc, argv);
/* -------------------------------------------------------------------- */
/* Register standard GDAL drivers, and process generic GDAL */
/* command options. */
/* -------------------------------------------------------------------- */
GDALAllRegister();
argc = GDALGeneralCmdLineProcessor(argc, &argv, 0);
if (argc < 1)
exit(-argc);
GDALTileIndexOptionsForBinary sOptionsForBinary;
std::unique_ptr<GDALTileIndexOptions, decltype(&GDALTileIndexOptionsFree)>
psOptions{GDALTileIndexOptionsNew(argv + 1, &sOptionsForBinary),
GDALTileIndexOptionsFree};
CSLDestroy(argv);
if (!psOptions)
{
Usage();
}
int bUsageError = FALSE;
GDALDatasetH hOutDS = GDALTileIndex(
sOptionsForBinary.osDest.c_str(), sOptionsForBinary.aosSrcFiles.size(),
sOptionsForBinary.aosSrcFiles.List(), psOptions.get(), &bUsageError);
int nRetCode = (hOutDS) ? 0 : 1;
CPLErrorReset();
// The flush to disk is only done at that stage, so check if any error has
// happened
if (GDALClose(hOutDS) != CE_None)
nRetCode = 1;
if (CPLGetLastErrorType() != CE_None)
nRetCode = 1;
GDALDumpOpenDatasets(stderr);
GDALDestroyDriverManager();
OGRCleanupAll();
return nRetCode;
}
MAIN_END