⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tigerinfo.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
字号:
/****************************************************************************** * $Id: tigerinfo.cpp,v 1.5 2003/01/11 15:29:55 warmerda Exp $ * * Project:  OpenGIS Simple Features Reference Implementation * Purpose:  Simple client for viewing OGR driver data. * 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: tigerinfo.cpp,v $ * Revision 1.5  2003/01/11 15:29:55  warmerda * expanded tabs * * Revision 1.4  2002/12/26 00:20:19  mbp * re-organized code to hold TIGER-version details in TigerRecordInfo structs; * first round implementation of TIGER_2002 support * * Revision 1.3  2001/07/18 04:55:16  warmerda * added CPL_CSVID * * Revision 1.2  2001/01/19 21:15:20  warmerda * expanded tabs * * Revision 1.1  1999/11/04 21:13:50  warmerda * New * * Revision 1.4  1999/09/29 16:36:41  warmerda * added srs reporting * * Revision 1.3  1999/09/22 13:31:48  warmerda * added sdts * * Revision 1.2  1999/09/13 14:34:20  warmerda * added feature reporting * * Revision 1.1  1999/09/09 20:40:19  warmerda * New * */#include "ogrsf_frmts.h"#include "cpl_conv.h"#include "cpl_string.h"#include "ogr_tiger.h"CPL_CVSID("$Id: tigerinfo.cpp,v 1.5 2003/01/11 15:29:55 warmerda Exp $");int     bReadOnly = FALSE;int     bVerbose = TRUE;static void Usage();static void ReportOnLayer( OGRLayer * );/************************************************************************//*                                main()                                *//************************************************************************/int main( int nArgc, char ** papszArgv ){    const char  *pszDataSource = NULL;    char        **papszLayers = NULL;    /* -------------------------------------------------------------------- *//*      Register format(s).                                             *//* -------------------------------------------------------------------- */    RegisterOGRTiger();/* -------------------------------------------------------------------- *//*      Processing command line arguments.                              *//* -------------------------------------------------------------------- */    for( int iArg = 1; iArg < nArgc; iArg++ )    {        if( EQUAL(papszArgv[iArg],"-ro") )            bReadOnly = TRUE;        else if( EQUAL(papszArgv[iArg],"-q") )            bVerbose = FALSE;        else if( papszArgv[iArg][0] == '-' )        {            Usage();        }        else if( pszDataSource == NULL )            pszDataSource = papszArgv[iArg];        else            papszLayers = CSLAddString( papszLayers, papszArgv[iArg] );    }    if( pszDataSource == NULL )        Usage();/* -------------------------------------------------------------------- *//*      Open data source.                                               *//* -------------------------------------------------------------------- */    OGRDataSource       *poDS;    OGRSFDriver         *poDriver;    poDS = OGRSFDriverRegistrar::Open( pszDataSource, !bReadOnly, &poDriver );    if( poDS == NULL && !bReadOnly )    {        poDS = OGRSFDriverRegistrar::Open( pszDataSource, FALSE, &poDriver );        if( poDS != NULL && bVerbose )        {            printf( "Had to open data source read-only.\n" );            bReadOnly = TRUE;        }    }/* -------------------------------------------------------------------- *//*      Report failure                                                  *//* -------------------------------------------------------------------- */    if( poDS == NULL )    {        OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();                printf( "FAILURE:\n"                "Unable to open datasource `%s' with the following drivers.\n",                pszDataSource );        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )        {            printf( "  -> %s\n", poR->GetDriver(iDriver)->GetName() );        }        exit( 1 );    }/* -------------------------------------------------------------------- *//*      Some information messages.                                      *//* -------------------------------------------------------------------- */    if( bVerbose )    {        printf( "INFO: Open of `%s'\n"                "using driver `%s' successful.\n",                pszDataSource, poDriver->GetName() );        printf("Tiger Version: %s\n",                TigerVersionString(((OGRTigerDataSource*)poDS)->GetVersion()));    }    if( bVerbose && !EQUAL(pszDataSource,poDS->GetName()) )    {        printf( "INFO: Internal data source name `%s'\n"                "      different from user name `%s'.\n",                poDS->GetName(), pszDataSource );    }/* -------------------------------------------------------------------- *//*      Process each data source layer.                                 *//* -------------------------------------------------------------------- */    for( int iLayer = 0; iLayer < poDS->GetLayerCount(); iLayer++ )    {        OGRLayer        *poLayer = poDS->GetLayer(iLayer);        if( poLayer == NULL )        {            printf( "FAILURE: Couldn't fetch advertised layer %d!\n",                    iLayer );            exit( 1 );        }        if( CSLCount(papszLayers) == 0 )        {            printf( "%d: %s\n",                    iLayer+1,                    poLayer->GetLayerDefn()->GetName() );        }        else if( CSLFindString( papszLayers,                                poLayer->GetLayerDefn()->GetName() ) != -1 )        {            ReportOnLayer( poLayer );        }    }/* -------------------------------------------------------------------- *//*      Close down.                                                     *//* -------------------------------------------------------------------- */    delete poDS;#ifdef DBMALLOC    malloc_dump(1);#endif        return 0;}/************************************************************************//*                               Usage()                                *//************************************************************************/static void Usage(){    printf( "Usage: ogrinfo [-ro] [-q] datasource_name [layer [layer ...]]\n");    exit( 1 );}/************************************************************************//*                           ReportOnLayer()                            *//************************************************************************/static void ReportOnLayer( OGRLayer * poLayer ){    OGRFeatureDefn      *poDefn = poLayer->GetLayerDefn();    printf( "\n" );        printf( "Layer name: %s\n", poDefn->GetName() );    printf( "Feature Count: %d\n", poLayer->GetFeatureCount() );    if( bVerbose )    {        char    *pszWKT;                if( poLayer->GetSpatialRef() == NULL )            pszWKT = CPLStrdup( "(NULL)" );        else            poLayer->GetSpatialRef()->exportToWkt( &pszWKT );        printf( "Layer SRS WKT: %s\n", pszWKT );        CPLFree( pszWKT );    }        for( int iAttr = 0; iAttr < poDefn->GetFieldCount(); iAttr++ )    {        OGRFieldDefn    *poField = poDefn->GetFieldDefn( iAttr );        printf( "%s: %s (%d.%d)\n",                poField->GetNameRef(),                poField->GetFieldTypeName( poField->GetType() ),                poField->GetWidth(),                poField->GetPrecision() );    }/* -------------------------------------------------------------------- *//*      Read, and dump features.                                        *//* -------------------------------------------------------------------- */    OGRFeature  *poFeature;    while( (poFeature = poLayer->GetNextFeature()) != NULL )    {        poFeature->DumpReadable( stdout );        delete poFeature;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -