?? ogr2ogr.cpp
字號:
/******************************************************************************
* $Id: ogr2ogr.cpp,v 1.4 2007/03/22 19:48:35 dmorissette Exp $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: Simple client for translating between formats.
* Author: Frank Warmerdam, warmerda@home.com
*
******************************************************************************
* Copyright (c) 1999, Frank Warmerdam
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
******************************************************************************
*
* $Log: ogr2ogr.cpp,v $
* Revision 1.4 2007/03/22 19:48:35 dmorissette
* Set default output format to "MapInfo File" for this local copy
*
* Revision 1.3 2007/03/22 19:19:51 dmorissette
* Update MITAB copy to a more recent version of ogr2ogr.cpp
*
* Revision 1.28 2005/04/14 14:20:24 fwarmerdam
* More stuff to avoid feature leaks.
*
* Revision 1.27 2005/04/14 14:16:37 fwarmerdam
* Fix from Julien for destroying features in error case.
*
* Revision 1.26 2005/03/15 21:18:47 fwarmerdam
* Added -sql to usage message.
*
* Revision 1.25 2004/10/30 15:50:41 fwarmerdam
* added -skipfailures doc
*
* Revision 1.24 2004/06/02 18:06:15 warmerda
* Fix failure logic when output layer not found.
*
* Revision 1.23 2003/05/12 18:08:33 warmerda
* added 25D settings for -nlt.
*
* Revision 1.22 2003/01/22 18:13:35 warmerda
* use indirect (in DLL) feature creation and destruction
*
* Revision 1.21 2003/01/17 20:42:48 warmerda
* added -preserve_fid and -fid commandline options
*
* Revision 1.20 2003/01/08 22:03:17 warmerda
* Added code to force geometries to polygon or multipolygo if -nlt used
*
* Revision 1.19 2002/10/24 02:22:56 warmerda
* added the -nlt flag
*
* Revision 1.18 2002/10/18 14:32:02 warmerda
* Added -s_srs to usage option list.
*
* Revision 1.17 2002/10/03 13:20:31 warmerda
* improve docs for -append and -update in ogr2ogr
*
* Revision 1.16 2002/05/09 16:32:29 warmerda
* added -sql, -update and -append options
*
* Revision 1.15 2002/03/05 14:25:14 warmerda
* expand tabs
*
* Revision 1.14 2002/01/18 04:46:38 warmerda
* added -s_srs support
*
* Revision 1.13 2001/11/15 21:18:59 warmerda
* added transaction grouping on the write side
*
* Revision 1.12 2001/10/25 22:33:16 danmo
* Added support for -select option
*
* Revision 1.11 2001/09/27 14:50:10 warmerda
* added untested -spat and -where support
*
* Revision 1.10 2001/09/21 16:19:50 warmerda
* added support for -a_srs and -t_srs options
*
* Revision 1.9 2001/07/18 05:03:05 warmerda
* added CPL_CVSID
*
* Revision 1.8 2001/06/26 20:58:20 warmerda
* added -nln switch
*
* Revision 1.7 2000/12/05 23:09:05 warmerda
* improved error testing, added lots of CPLResetError calls
*
* Revision 1.6 2000/10/17 02:23:33 warmerda
* improve error reporting
*
* Revision 1.5 2000/06/19 18:46:59 warmerda
* added -skipfailures
*
* Revision 1.4 2000/06/09 21:15:19 warmerda
* made CreateField and SetFrom forgiving
*
* Revision 1.3 2000/03/14 21:37:35 warmerda
* added support for passing options to create methods
*
* Revision 1.2 1999/11/18 19:02:19 warmerda
* expanded tabs
*
* Revision 1.1 1999/11/04 21:07:53 warmerda
* New
*
*/
#include "ogrsf_frmts.h"
#include "cpl_conv.h"
#include "cpl_string.h"
CPL_CVSID("$Id: ogr2ogr.cpp,v 1.4 2007/03/22 19:48:35 dmorissette Exp $");
static void Usage();
static int TranslateLayer( OGRDataSource *poSrcDS,
OGRLayer * poSrcLayer,
OGRDataSource *poDstDS,
char ** papszLSCO,
const char *pszNewLayerName,
int bTransform,
OGRSpatialReference *poOutputSRS,
OGRSpatialReference *poSourceSRS,
char **papszSelFields,
int bAppend, int eGType );
static int bSkipFailures = FALSE;
static int nGroupTransactions = 200;
static int bPreserveFID = FALSE;
static int nFIDToFetch = OGRNullFID;
/************************************************************************/
/* main() */
/************************************************************************/
int main( int nArgc, char ** papszArgv )
{
const char *pszFormat = "MapInfo File";
const char *pszDataSource = NULL;
const char *pszDestDataSource = NULL;
char **papszLayers = NULL;
char **papszDSCO = NULL, **papszLCO = NULL;
int bTransform = FALSE;
int bAppend = FALSE, bUpdate = FALSE;
const char *pszOutputSRSDef = NULL;
const char *pszSourceSRSDef = NULL;
OGRSpatialReference *poOutputSRS = NULL;
OGRSpatialReference *poSourceSRS = NULL;
const char *pszNewLayerName = NULL;
const char *pszWHERE = NULL;
OGRGeometry *poSpatialFilter = NULL;
const char *pszSelect;
char **papszSelFields = NULL;
const char *pszSQLStatement = NULL;
int eGType = -2;
/* -------------------------------------------------------------------- */
/* Register format(s). */
/* -------------------------------------------------------------------- */
// OGRRegisterAll();
RegisterOGRTAB();
/* -------------------------------------------------------------------- */
/* Processing command line arguments. */
/* -------------------------------------------------------------------- */
for( int iArg = 1; iArg < nArgc; iArg++ )
{
if( EQUAL(papszArgv[iArg],"-f") && iArg < nArgc-1 )
{
pszFormat = papszArgv[++iArg];
}
else if( EQUAL(papszArgv[iArg],"-dsco") && iArg < nArgc-1 )
{
papszDSCO = CSLAddString(papszDSCO, papszArgv[++iArg] );
}
else if( EQUAL(papszArgv[iArg],"-lco") && iArg < nArgc-1 )
{
papszLCO = CSLAddString(papszLCO, papszArgv[++iArg] );
}
else if( EQUAL(papszArgv[iArg],"-preserve_fid") )
{
bPreserveFID = TRUE;
}
else if( EQUALN(papszArgv[iArg],"-skip",5) )
{
bSkipFailures = TRUE;
}
else if( EQUAL(papszArgv[iArg],"-append") )
{
bAppend = TRUE;
}
else if( EQUAL(papszArgv[iArg],"-update") )
{
bUpdate = TRUE;
}
else if( EQUAL(papszArgv[iArg],"-fid") && papszArgv[iArg+1] != NULL )
{
nFIDToFetch = atoi(papszArgv[++iArg]);
}
else if( EQUAL(papszArgv[iArg],"-sql") && papszArgv[iArg+1] != NULL )
{
pszSQLStatement = papszArgv[++iArg];
}
else if( EQUAL(papszArgv[iArg],"-nln") && iArg < nArgc-1 )
{
pszNewLayerName = papszArgv[++iArg];
}
else if( EQUAL(papszArgv[iArg],"-nlt") && iArg < nArgc-1 )
{
if( EQUAL(papszArgv[iArg+1],"NONE") )
eGType = wkbNone;
else if( EQUAL(papszArgv[iArg+1],"GEOMETRY") )
eGType = wkbUnknown;
else if( EQUAL(papszArgv[iArg+1],"POINT") )
eGType = wkbPoint;
else if( EQUAL(papszArgv[iArg+1],"LINESTRING") )
eGType = wkbLineString;
else if( EQUAL(papszArgv[iArg+1],"POLYGON") )
eGType = wkbPolygon;
else if( EQUAL(papszArgv[iArg+1],"GEOMETRYCOLLECTION") )
eGType = wkbGeometryCollection;
else if( EQUAL(papszArgv[iArg+1],"MULTIPOINT") )
eGType = wkbMultiPoint;
else if( EQUAL(papszArgv[iArg+1],"MULTILINESTRING") )
eGType = wkbMultiLineString;
else if( EQUAL(papszArgv[iArg+1],"MULTIPOLYGON") )
eGType = wkbMultiPolygon;
else if( EQUAL(papszArgv[iArg+1],"GEOMETRY25D") )
eGType = wkbUnknown | wkb25DBit;
else if( EQUAL(papszArgv[iArg+1],"POINT25D") )
eGType = wkbPoint25D;
else if( EQUAL(papszArgv[iArg+1],"LINESTRING25D") )
eGType = wkbLineString25D;
else if( EQUAL(papszArgv[iArg+1],"POLYGON25D") )
eGType = wkbPolygon25D;
else if( EQUAL(papszArgv[iArg+1],"GEOMETRYCOLLECTION25D") )
eGType = wkbGeometryCollection25D;
else if( EQUAL(papszArgv[iArg+1],"MULTIPOINT25D") )
eGType = wkbMultiPoint25D;
else if( EQUAL(papszArgv[iArg+1],"MULTILINESTRING25D") )
eGType = wkbMultiLineString25D;
else if( EQUAL(papszArgv[iArg+1],"MULTIPOLYGON25D") )
eGType = wkbMultiPolygon25D;
else
{
fprintf( stderr, "-nlt %s: type not recognised.\n",
papszArgv[iArg+1] );
exit( 1 );
}
iArg++;
}
else if( EQUAL(papszArgv[iArg],"-tg") && iArg < nArgc-1 )
{
nGroupTransactions = atoi(papszArgv[++iArg]);
}
else if( EQUAL(papszArgv[iArg],"-s_srs") && iArg < nArgc-1 )
{
pszSourceSRSDef = papszArgv[++iArg];
}
else if( EQUAL(papszArgv[iArg],"-a_srs") && iArg < nArgc-1 )
{
pszOutputSRSDef = papszArgv[++iArg];
}
else if( EQUAL(papszArgv[iArg],"-t_srs") && iArg < nArgc-1 )
{
pszOutputSRSDef = papszArgv[++iArg];
bTransform = TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -