/*! \page ogr_utilities OGR Utility Programs

The following utilities are distributed as part of the OGR Simple Features
toolkit:

<ul>
<li> \ref ogrinfo - Lists information about an OGR supported data source
<li> \ref ogr2ogr - Converts simple features data between file formats
<li> \ref ogrtindex - Creates a tileindex
</ul>

*/

/*! \page ogrinfo ogrinfo

lists information about an OGR supported data source

\section ogrinfo_synopsis SYNOPSIS

\htmlonly
Usage:
\endhtmlonly

\verbatim
ogrinfo [--help-general] [-ro] [-q] [-where restricted_where]
        [-spat xmin ymin xmax ymax] [-fid fid]
        [-sql statement] [-dialect dialect] [-al] [-so] [-fields={YES/NO}]
        [-geom={YES/NO/SUMMARY}][--formats]
        datasource_name [layer [layer ...]]

\endverbatim

\section ogrinfo_description DESCRIPTION

The ogrinfo program lists various information about an OGR supported data
source to stdout (the terminal). 

<dl>
<dt> <b>-ro</b>:</dt><dd> Open the data source in read-only mode.  </dd>
<dt> <b>-al</b>:</dt><dd> List all features of all layers (used instead of having to
give layer names as arguments).</dd>
<dt> <b>-so</b>:</dt><dd> Summary Only: supress listing of features, show only the 
summary information like projection, schema, feature count and
extents.</dd>
<dt> <b>-q</b>:</dt><dd> Quiet verbose reporting of various information, including
coordinate system, layer schema, extents, and feature count. </dd>
<dt> <b>-where</b> <i>restricted_where</i>:</dt><dd> An attribute query in a restricted
form of the queries used in the SQL WHERE statement.   Only features matching
the attribute query will be reported.</dd>
<dt> <b>-sql</b> <i>statement</i>:</dt><dd> Execute the indicated SQL statement
and return the result.</dd>
<dt> <b>-dialect</b> <em>dialect</em>:</dt><dd> SQL dialect.  In some cases can be used to use (unoptimized) OGR SQL instead of the native SQL of an RDBMS by passing OGRSQL.
Starting with GDAL 1.10, the "SQLITE" dialect can also be used with any datasource.</dd>
<dt> <b>-spat</b> <i>xmin ymin xmax ymax</i>:</dt><dd> The area of interest.  Only
features within the rectangle will be reported.</dd>
<dt> <b>-fid</b> <i>fid</i>:</dt><dd> If provided, only the feature with this feature
id will be reported.  Operates exclusive of the spatial or attribute 
queries. Note: if you want to select several features based on their feature id, you can
also use the fact the 'fid' is a special field recognized by OGR SQL. So, '-where "fid in (1,3,5)"'
would select features 1, 3 and 5.</dd>
<dt> <b>-fields</b>={YES/NO}:</dt><dd> (starting with GDAL 1.6.0) If set to NO,
the feature dump will not display field values. Default value is YES.</dd>
<dt> <b>-geom</b>={YES/NO/SUMMARY}:</dt><dd> (starting with GDAL 1.6.0) If set to NO,
the feature dump will not display the geometry. If set to SUMMARY, only a
summary of the geometry will be displayed. If set to YES, the geometry will be reported in full OGC WKT format.
Default value is YES.</dd>
<dt> <b>--formats</b>:</dt><dd> List the format drivers that are
enabled.</dd>
<dt> <i>datasource_name</i>:</dt><dd> The data source to open.  May be a filename, 
directory or other virtual name.  See the <a href="ogr/ogr_formats.html">OGR Vector
Formats</a> list for supported datasources.</dd>
<dt> <i>layer</i>:</dt><dd> One or more layer names may be reported.</dd>
</dl>

If no layer names are passed then ogrinfo will report a list of available
layers (and their layerwide geometry type).  If layer name(s) are given then
their extents, coordinate system, feature count, geometry type, schema and
all features matching query parameters will be reported to the terminal. 
If no query parameters are provided, all features are reported.  

Geometries are reported in OGC WKT format.

\section ogrinfo_example EXAMPLE

Example reporting all layers in an NTF file:
\verbatim
% ogrinfo wrk/SHETLAND_ISLANDS.NTF
INFO: Open of `wrk/SHETLAND_ISLANDS.NTF'
using driver `UK .NTF' successful.
1: BL2000_LINK (Line String)
2: BL2000_POLY (None)
3: BL2000_COLLECTIONS (None)
4: FEATURE_CLASSES (None)
\endverbatim

Example using an attribute query is used to restrict the output of the 
features in a layer:
\verbatim
% ogrinfo -ro -where 'GLOBAL_LINK_ID=185878' wrk/SHETLAND_ISLANDS.NTF BL2000_LINK
INFO: Open of `wrk/SHETLAND_ISLANDS.NTF'
using driver `UK .NTF' successful.

Layer name: BL2000_LINK
Geometry: Line String
Feature Count: 1
Extent: (419794.100000, 1069031.000000) - (419927.900000, 1069153.500000)
Layer SRS WKT:
PROJCS["OSGB 1936 / British National Grid",
    GEOGCS["OSGB 1936",
        DATUM["OSGB_1936",
            SPHEROID["Airy 1830",6377563.396,299.3249646]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",49],
    PARAMETER["central_meridian",-2],
    PARAMETER["scale_factor",0.999601272],
    PARAMETER["false_easting",400000],
    PARAMETER["false_northing",-100000],
    UNIT["metre",1]]
LINE_ID: Integer (6.0)
GEOM_ID: Integer (6.0)
FEAT_CODE: String (4.0)
GLOBAL_LINK_ID: Integer (10.0)
TILE_REF: String (10.0)
OGRFeature(BL2000_LINK):2
  LINE_ID (Integer) = 2
  GEOM_ID (Integer) = 2
  FEAT_CODE (String) = (null)
  GLOBAL_LINK_ID (Integer) = 185878
  TILE_REF (String) = SHETLAND I
  LINESTRING (419832.100 1069046.300,419820.100 1069043.800,419808.300
  1069048.800,419805.100 1069046.000,419805.000 1069040.600,419809.400
  1069037.400,419827.400 1069035.600,419842 1069031,419859.000
  1069032.800,419879.500 1069049.500,419886.700 1069061.400,419890.100
  1069070.500,419890.900 1069081.800,419896.500 1069086.800,419898.400
  1069092.900,419896.700 1069094.800,419892.500 1069094.300,419878.100
  1069085.600,419875.400 1069087.300,419875.100 1069091.100,419872.200
  1069094.600,419890.400 1069106.400,419907.600 1069112.800,419924.600
  1069133.800,419927.900 1069146.300,419927.600 1069152.400,419922.600
  1069153.500,419917.100 1069153.500,419911.500 1069153.000,419908.700
  1069152.500,419903.400 1069150.800,419898.800 1069149.400,419894.800
  1069149.300,419890.700 1069149.400,419890.600 1069149.400,419880.800
  1069149.800,419876.900 1069148.900,419873.100 1069147.500,419870.200
  1069146.400,419862.100 1069143.000,419860 1069142,419854.900
  1069138.600,419850 1069135,419848.800 1069134.100,419843
  1069130,419836.200 1069127.600,419824.600 1069123.800,419820.200
  1069126.900,419815.500 1069126.900,419808.200 1069116.500,419798.700
  1069117.600,419794.100 1069115.100,419796.300 1069109.100,419801.800
  1069106.800,419805.000  1069107.300)
\endverbatim

\if man
\section ogrinfo_author AUTHORS
Frank Warmerdam <warmerdam@pobox.com>, Silke Reimer <silke@intevation.de>
\endif
*/

/*! \page ogr2ogr ogr2ogr

converts simple features data between file formats

\section ogr2ogr_synopsis SYNOPSIS

\htmlonly
Usage:
\endhtmlonly

\verbatim
Usage: ogr2ogr [--help-general] [-skipfailures] [-append] [-update]
               [-select field_list] [-where restricted_where] 
               [-progress] [-sql <sql statement>] [-dialect dialect]
               [-preserve_fid] [-fid FID]
               [-spat xmin ymin xmax ymax]
               [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def]
               [-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...]
               dst_datasource_name src_datasource_name
               [-lco NAME=VALUE] [-nln name] [-nlt type] [-dim 2|3] [layer [layer ...]]

Advanced options :
               [-gt n]
               [-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent]
               [-clipsrcsql sql_statement] [-clipsrclayer layer]
               [-clipsrcwhere expression]
               [-clipdst [xmin ymin xmax ymax]|WKT|datasource]
               [-clipdstsql sql_statement] [-clipdstlayer layer]
               [-clipdstwhere expression]
               [-wrapdateline] [-datelineoffset val]
               [[-simplify tolerance] | [-segmentize max_dist]]
               [-fieldTypeToString All|(type1[,type2]*)]
               [-fieldmap identity | index1[,index2]*]
               [-splitlistfields] [-maxsubfields val]
               [-explodecollections] [-zfield field_name]
               [-gcp pixel line easting northing [elevation]]* [-order n | -tps]

\endverbatim

\section ogr2ogr_description DESCRIPTION

This program can be used to convert simple features data between file formats
performing various operations during the process such as spatial or attribute
selections, reducing the set of attributes, setting the output coordinate 
system or even reprojecting the features during translation.

<dl>
<dt><b> -f</b><em> format_name</em>:</dt><dd> output file format name (default is ESRI Shapefile), some possible values are:
	 \verbatim
     -f "ESRI Shapefile"
     -f "TIGER"
     -f "MapInfo File"
     -f "GML"
     -f "PostgreSQL"
	 \endverbatim
	 </dd>
<dt><b>-append</b>:</dt><dd> Append to existing layer instead of creating
new</dd>
<dt><b>-overwrite</b>:</dt><dd> Delete the output layer and recreate it empty</dd>
<dt>  <b>-update</b>:</dt><dd> Open existing output datasource in update mode rather than trying to create a new one</dd>
<dt> <b>-select</b><em> field_list</em>:</dt><dd> Comma-delimited list of
fields from input layer to copy to the new layer. A field is skipped if
mentioned previously in the list even if the input layer has duplicate field
names.  (Defaults to all; any field is skipped if a subsequent field with
same name is found.)</dd>
<dt> <b>-progress</b>:</dt><dd> (starting with GDAL 1.7.0) Display progress on terminal. Only works if input layers have the "fast feature count" capability.</dd>
<dt> <b>-sql</b> <em>sql_statement</em>:</dt><dd> SQL statement to execute.
The resulting table/layer will be saved to the output.</dd>
<dt> <b>-dialect</b> <em>dialect</em>:</dt><dd> SQL dialect.  In some cases can be used to use (unoptimized) OGR SQL instead of the native SQL of an RDBMS by passing OGRSQL.
Starting with GDAL 1.10, the "SQLITE" dialect can also be used with any datasource.</dd>
<dt> <b>-where</b><em> restricted_where</em>:</dt><dd> Attribute query (like SQL WHERE)</dd>
<dt> <b>-skipfailures</b>:</dt><dd>Continue after a failure, skipping the failed feature.</dd>
<dt> <b>-spat</b><em> xmin ymin xmax ymax</em>:</dt><dd> spatial query extents. Only features
whose geometry intersects the extents will be selected. The geometries will not be clipped unless -clipsrc is specified</dd>
<dt> <b>-dsco</b> <em>NAME=VALUE</em>:</dt><dd> Dataset creation option (format specific)</dd>
<dt> <b>-lco</b><em>  NAME=VALUE</em>:</dt><dd> Layer creation option (format specific)</dd>
<dt> <b>-nln</b><em> name</em>:</dt><dd> Assign an alternate name to the new layer</dd>
<dt> <b>-nlt</b><em> type</em>:</dt><dd> Define the geometry type for the 
created layer.  One of NONE, GEOMETRY, POINT, LINESTRING, POLYGON, 
GEOMETRYCOLLECTION, MULTIPOINT, MULTIPOLYGON or MULTILINESTRING. 
Add "25D" to the name to get 2.5D versions.
Starting with GDAL 1.10, PROMOTE_TO_MULTI can be used to automatically promote layers
that mix polygon or multipolygons to multipolygons, and layers that mix linestrings or
multilinestrings to multilinestrings. Can be usefull when converting shapefiles to PostGIS
(and other target drivers) that implements strict checks for geometry type.</dd>
<dt> <b>-dim</b><em> val</em>:</dt><dd>(starting with GDAL 1.10) Force the coordinate dimension to val (valid values are 2 or 3).
This affects both the layer geometry type, and feature geometries.</dd>
<dt> <b>-a_srs</b><em> srs_def</em>:</dt><dd> Assign an output SRS</dd>
<dt> <b>-t_srs</b><em> srs_def</em>:</dt><dd> Reproject/transform to this SRS on output</dd>
<dt> <b>-s_srs</b><em> srs_def</em>:</dt><dd> Override source SRS</dd>
<dt> <b>-preserve_fid</b>:</dt><dd>Use the FID of the source features instead of letting the output driver to automatically assign a new one.</dd>
<dt> <b>-fid</b> <i>fid</i>:</dt><dd> If provided, only the feature with this feature
id will be reported.  Operates exclusive of the spatial or attribute 
queries.  Note: if you want to select several features based on their feature id, you can
also use the fact the 'fid' is a special field recognized by OGR SQL. So, '-where "fid in (1,3,5)"'
would select features 1, 3 and 5.</dd>
</dl>

Srs_def can be a full WKT definition (hard to escape properly), or a well
known definition (ie. EPSG:4326) or a file with a WKT definition.

Advanced options :

<dl>
<dt> <b>-gt</b> <em>n</em>:</dt><dd> group <em>n</em> features per transaction (default 200). Increase the value
for better performance when writing into DBMS drivers that have transaction support.</dd>
<dt> <b>-clipsrc</b><em> [xmin ymin xmax ymax]|WKT|datasource|spat_extent</em>:
</dt><dd> (starting with GDAL 1.7.0) clip geometries to the specified bounding
box (expressed in source SRS), WKT geometry (POLYGON or MULTIPOLYGON), from a
datasource or to the spatial extent of the <b>-spat</b> option if you use the
<em>spat_extent</em> keyword. When specifying a datasource, you will generally
want to use it in combination of the <b>-clipsrclayer</b>,
<b>-clipsrcwhere</b> or <b>-clipsrcsql</b> options</dd>
<dt> <b>-clipsrcsql</b> <em>sql_statement</em>:</dt><dd>Select desired geometries using an SQL query instead.</dd>
<dt> <b>-clipsrclayer</b> <em>layername</em>:</dt><dd>Select the named layer from the source clip datasource.</dd>
<dt> <b>-clipsrcwhere</b> <em>expression</em>:</dt><dd>Restrict desired geometries based on attribute query.</dd>
<dt> <b>-clipdst</b><em> xmin ymin xmax ymax</em>:</dt><dd> (starting with GDAL 1.7.0) clip geometries after reprojection to the specified bounding box
(expressed in dest SRS), WKT geometry (POLYGON or MULTIPOLYGON) or from a datasource. When specifying a datasource,
you will generally want to use it in combination of the -clipdstlayer, -clipdstwhere or -clipdstsql options</dd>
<dt> <b>-clipdstsql</b> <em>sql_statement</em>:</dt><dd>Select desired geometries using an SQL query instead.</dd>
<dt> <b>-clipdstlayer</b> <em>layername</em>:</dt><dd>Select the named layer from the destination clip datasource.</dd>
<dt> <b>-clipdstwhere</b> <em>expression</em>:</dt><dd>Restrict desired geometries based on attribute query.</dd>
<dt> <b>-wrapdateline</b>:</dt><dd> (starting with GDAL 1.7.0) split geometries crossing the dateline meridian (long. = +/- 180deg)</dd>
<dt> <b>-datelineoffset</b>:</dt><dd> (starting with GDAL 1.10) offset from dateline in degrees (default long. = +/- 10deg, geometries within 170deg to -170deg will be splited)</dd>
<dt> <b>-simplify</b><em> tolerance</em>:</dt><dd> (starting with GDAL 1.9.0) distance tolerance for simplification.
Note: the algorithm used preserves topology per feature, in particular for polygon geometries, but not for a whole layer.</dd>
<dt> <b>-segmentize</b><em> max_dist</em>:</dt><dd> (starting with GDAL 1.6.0) maximum distance between 2 nodes.
Used to create intermediate points</dd>
<dt> <b>-fieldTypeToString</b><em> type1, ...</em>:</dt><dd> (starting with GDAL 1.7.0) converts any field of the
specified type to a field of type string in the destination layer. Valid types are : Integer, Real, String, Date, Time,
DateTime, Binary, IntegerList, RealList, StringList. Special value <b>All</b> can be used to convert all fields to strings.
This is an alternate way to using the CAST operator of OGR SQL, that may avoid typing a long SQL query.</dd>
<dt> <b>-splitlistfields</b>:</dt><dd>(starting with GDAL 1.8.0) split fields of type StringList, RealList or IntegerList into as many fields of type String, Real or Integer as necessary.</dd>
<dt> <b>-maxsubfields</b> <em>val</em>:</dt><dd>To be combined with -splitlistfields to limit the number of subfields created for each split field.</dd>
<dt> <b>-explodecollections</b>:</dt><dd>(starting with GDAL 1.8.0) produce one feature for each geometry in any kind of geometry collection in the source file</dd>
<dt> <b>-zfield</b> <em>field_name</em>:</dt><dd>(starting with GDAL 1.8.0) Uses the specified field to fill the Z coordinate of geometries</dd>
<dt> <b>-gcp</b> <i>ungeoref_x ungeoref_y georef_x georef_y elevation</i>:</dt><dd>(starting with GDAL 1.10.0) 
Add the indicated ground control point.  This option may be provided multiple times to provide a set of GCPs. 
</dd>
<dt> <b>-order</b> <em>n</em>:</dt><dd>(starting with GDAL 1.10.0) order of polynomial used for warping
(1 to 3). The default is to select a polynomial order based on the number of
GCPs.</dd>
<dt> <b>-tps</b>:</dt><dd>(starting with GDAL 1.10.0) Force use of thin plate spline transformer based on
available GCPs.</dd>
<dt> <b>-fieldmap</b>:</dt><dd>(starting with GDAL 1.10.0) Specifies the list of field indexes to be copied 
from the source to the destination. The (n)th value specified in the list is the index of the field in the 
target layer definition in which the n(th) field of the source layer must be copied. Index count starts at 
zero. There must be exactly as many values in the list as the count of the fields in the source layer. 
We can use the 'identity' setting to specify that the fields should be transferred by using the same order. 
This setting should be used along with the -append setting.</dd>
</dl>

\section ogr2ogr_performance PERFORMANCE HINTS

When writing into transactional DBMS (SQLite/PostgreSQL,MySQL, etc...),
it might be beneficial to increase the number
of INSERT statements executed between BEGIN TRANSACTION and COMMIT TRANSACTION statements.
This number is specified with the -gt option. For example, for SQLite, explicitly defining
<b>-gt 1024</b> usually ensures a noticeable performance boost;
defining an even bigger <b>-gt 65536</b> ensures optimal performance while
populating some table containing many hundredth thousand or million rows. However, note that
if there are failed insertions, the scope of -skipfailures is a whole transaction.

For PostgreSQL, the PG_USE_COPY config option can be set to YES for significantly insertion
performance boot. See the PG driver documentation page.

More generally, consult the documentation page of the input and output drivers for performance hints.

\section ogr2ogr_example EXAMPLE

Example appending to an existing layer (both flags need to be used):

\verbatim
% ogr2ogr -update -append -f PostgreSQL PG:dbname=warmerda abc.tab
\endverbatim

Example reprojecting from ETRS_1989_LAEA_52N_10E to EPSG:4326 and clipping to a bounding box

\verbatim
% ogr2ogr -wrapdateline -t_srs EPSG:4326 -clipdst -5 40 15 55 france_4326.shp europe_laea.shp
\endverbatim

Example for using the -fieldmap setting. The first field of the source layer is used to 
fill the third field (index 2 = third field) of the target layer, the second field of the 
source layer is ignored, the third field of the source layer used to fill the fifth field 
of the target layer.

\verbatim
% ogr2ogr -append -fieldmap 2,-1,4 dst.shp src.shp
\endverbatim

More examples are given in the individual format pages.

\if man
\section ogr2ogr_author AUTHOR
Frank Warmerdam <warmerdam@pobox.com>, Silke Reimer <silke@intevation.de>
\endif
*/

/*! \page ogrtindex ogrtindex

creates a tileindex

\section ogrtindex_synopsis SYNOPSIS

\htmlonly
Usage:
\endhtmlonly

\verbatim
ogrtindex [-lnum n]... [-lname name]... [-f output_format]
          [-write_absolute_path] [-skip_different_projection]
                 output_dataset src_dataset...
\endverbatim

\section ogrtindex_description DESCRIPTION

The ogrtindex program can be used to create a tileindex - a file containing
a list of the identities of a bunch of other files along with there spatial
extents.  This is primarily intended to be used with  
<a href="http://mapserver.org/">MapServer</a> for tiled access
to layers using the OGR connection type. 

<dl>
<dt><b>-lnum</b> <em>n</em>:</dt><dd> Add layer number 'n' from each source
		file in the tile index.</dd>
<dt><b>-lname</b> <em>name</em>:</dt><dd> Add the layer named 'name' from each source file
        in the tile index.</dd>
<dt><b>-f</b> <em>output_format</em>:</dt><dd> Select an output format name.  The default
        is to create a shapefile.</dd>
<dt><b>-tileindex</b> <em>field_name</em>:</dt><dd> The name to use for the dataset name.
        Defaults to LOCATION.</dd>
<dt><b>-write_absolute_path</b>:</dt><dd> Filenames are written with absolute paths</dd>
<dt><b>-skip_different_projection</b>:</dt><dd> Only layers with same projection ref
        as layers already inserted in the tileindex will be inserted.</dd>
</dl>

If no -lnum or -lname arguments are given it is assumed that
all layers in source datasets should be added to the tile index
as independent records.

If the tile index already exists it will be appended to, otherwise it will
be created.  

It is a flaw of the current ogrtindex program that no attempt is made to
copy the coordinate system definition from the source datasets to the tile
index (as is expected by MapServer when PROJECTION AUTO is in use).   

\section ogrtindex_example EXAMPLE

This example would create a shapefile (tindex.shp) containing a tile index
of the BL2000_LINK layers in all the NTF files in the wrk directory:
\verbatim
% ogrtindex tindex.shp wrk/*.NTF
\endverbatim

\if man
\section ogrtindex_author AUTHORS
Frank Warmerdam <warmerdam@pobox.com>, Silke Reimer <silke@intevation.de>

\endif

*/
