/******************************************************************************
* $Id: ogrinfo.cs 35222 2016-08-28 06:06:11Z goatbar $
*
* Name: ogrinfo.cs
* Project: GDAL CSharp Interface
* Purpose: A sample app to dump information from a spatial data source.
* Author: Tamas Szekeres, szekerest@gmail.com
*
******************************************************************************
* Copyright (c) 2007, Tamas Szekeres
*
* 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.
*****************************************************************************/
using System;
using OSGeo.OGR;
using OSGeo.OSR;
/**
*
Title: GDAL C# ogrinfo example.
* Description: A sample app to dump information from a spatial data source.
* @author Tamas Szekeres (szekerest@gmail.com)
* @version 1.0
*/
///
/// A C# based sample to dump information from a data source.
///
class OGRInfo {
public static void usage()
{
Console.WriteLine("usage: ogrinfo {data source name}");
System.Environment.Exit(-1);
}
public static void Main(string[] args) {
if (args.Length != 1) usage();
// Using early initialization of System.Console
Console.WriteLine("");
/* -------------------------------------------------------------------- */
/* Register format(s). */
/* -------------------------------------------------------------------- */
Ogr.RegisterAll();
/* -------------------------------------------------------------------- */
/* Open data source. */
/* -------------------------------------------------------------------- */
DataSource ds = Ogr.Open( args[0], 0 );
if (ds == null) {
Console.WriteLine("Can't open " + args[0]);
System.Environment.Exit(-1);
}
/* -------------------------------------------------------------------- */
/* Get driver */
/* -------------------------------------------------------------------- */
Driver drv = ds.GetDriver();
if (drv == null)
{
Console.WriteLine("Can't get driver.");
System.Environment.Exit(-1);
}
// TODO: drv.name is still unsafe with lazy initialization (Bug 1339)
Console.WriteLine("Using driver " + drv.name);
/* -------------------------------------------------------------------- */
/* Iterating through the layers */
/* -------------------------------------------------------------------- */
for( int iLayer = 0; iLayer < ds.GetLayerCount(); iLayer++ )
{
Layer layer = ds.GetLayerByIndex(iLayer);
if( layer == null )
{
Console.WriteLine( "FAILURE: Couldn't fetch advertised layer " + iLayer );
System.Environment.Exit(-1);
}
ReportLayer(layer);
}
}
public static void ReportLayer(Layer layer)
{
FeatureDefn def = layer.GetLayerDefn();
Console.WriteLine( "Layer name: " + def.GetName() );
Console.WriteLine( "Feature Count: " + layer.GetFeatureCount(1) );
Envelope ext = new Envelope();
layer.GetExtent(ext, 1);
Console.WriteLine( "Extent: " + ext.MinX + "," + ext.MaxX + "," +
ext.MinY + "," + ext.MaxY);
/* -------------------------------------------------------------------- */
/* Reading the spatial reference */
/* -------------------------------------------------------------------- */
OSGeo.OSR.SpatialReference sr = layer.GetSpatialRef();
string srs_wkt;
if ( sr != null )
{
sr.ExportToPrettyWkt( out srs_wkt, 1 );
}
else
srs_wkt = "(unknown)";
Console.WriteLine( "Layer SRS WKT: " + srs_wkt );
/* -------------------------------------------------------------------- */
/* Reading the fields */
/* -------------------------------------------------------------------- */
Console.WriteLine("Field definition:");
for( int iAttr = 0; iAttr < def.GetFieldCount(); iAttr++ )
{
FieldDefn fdef = def.GetFieldDefn( iAttr );
Console.WriteLine( fdef.GetNameRef() + ": " +
fdef.GetFieldTypeName( fdef.GetFieldType() ) + " (" +
fdef.GetWidth() + "." +
fdef.GetPrecision() + ")");
}
/* -------------------------------------------------------------------- */
/* Reading the shapes */
/* -------------------------------------------------------------------- */
Console.WriteLine( "" );
Feature feat;
while( (feat = layer.GetNextFeature()) != null )
{
ReportFeature(feat, def);
feat.Dispose();
}
}
public static void ReportFeature(Feature feat, FeatureDefn def)
{
Console.WriteLine( "Feature(" + def.GetName() + "): " + feat.GetFID() );
for( int iField = 0; iField < feat.GetFieldCount(); iField++ )
{
FieldDefn fdef = def.GetFieldDefn( iField );
Console.Write( fdef.GetNameRef() + " (" +
fdef.GetFieldTypeName(fdef.GetFieldType()) + ") = ");
if( feat.IsFieldSet( iField ) )
{
if (fdef.GetFieldType() == FieldType.OFTStringList)
{
string[] sList = feat.GetFieldAsStringList(iField);
foreach (string s in sList)
{
Console.Write("\"" + s + "\" ");
}
Console.WriteLine();
}
else if (fdef.GetFieldType() == FieldType.OFTIntegerList)
{
int count;
int[] iList = feat.GetFieldAsIntegerList(iField, out count);
for (int i = 0; i < count; i++)
{
Console.Write(iList[i] + " ");
}
Console.WriteLine();
}
else if (fdef.GetFieldType() == FieldType.OFTRealList)
{
int count;
double[] iList = feat.GetFieldAsDoubleList(iField, out count);
for (int i = 0; i < count; i++)
{
Console.Write(iList[i].ToString() + " ");
}
Console.WriteLine();
}
else
Console.WriteLine(feat.GetFieldAsString(iField));
}
else
Console.WriteLine( "(null)" );
}
if( feat.GetStyleString() != null )
Console.WriteLine( " Style = " + feat.GetStyleString() );
Geometry geom = feat.GetGeometryRef();
if( geom != null )
{
Console.WriteLine( " " + geom.GetGeometryName() +
"(" + geom.GetGeometryType() + ")" );
Geometry sub_geom;
for (int i = 0; i < geom.GetGeometryCount(); i++)
{
sub_geom = geom.GetGeometryRef(i);
if ( sub_geom != null )
{
Console.WriteLine( " subgeom" + i + ": " + sub_geom.GetGeometryName() +
"(" + sub_geom.GetGeometryType() + ")" );
}
}
Envelope env = new Envelope();
geom.GetEnvelope(env);
Console.WriteLine(" ENVELOPE: " + env.MinX + "," + env.MaxX + "," +
env.MinY + "," + env.MaxY);
string geom_wkt;
geom.ExportToWkt(out geom_wkt);
Console.WriteLine(" " + geom_wkt);
}
Console.WriteLine( "" );
}
}