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

📄 dteddataset.cpp

📁 把dem文件转换为dted格式文件的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * $Id: dteddataset.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  DTED Translator * Purpose:  GDALDataset driver for DTED translator. * Author:   Frank Warmerdam, warmerdam@pobox.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. ****************************************************************************/#include "dted_api.h"#include "gdal_pam.h"CPL_CVSID("$Id: dteddataset.cpp 10646 2007-01-18 02:38:10Z warmerdam $");CPL_C_STARTvoid    GDALRegister_DTED(void);CPL_C_END/************************************************************************//* ==================================================================== *//*                              DTEDDataset                             *//* ==================================================================== *//************************************************************************/class DTEDRasterBand;class DTEDDataset : public GDALPamDataset{    friend class DTEDRasterBand;    DTEDInfo    *psDTED;  public:    virtual     ~DTEDDataset();        virtual const char *GetProjectionRef(void);    virtual CPLErr GetGeoTransform( double * );        static GDALDataset *Open( GDALOpenInfo * );};/************************************************************************//* ==================================================================== *//*                            DTEDRasterBand                             *//* ==================================================================== *//************************************************************************/class DTEDRasterBand : public GDALPamRasterBand{    friend class DTEDDataset;    int 	bNoDataSet;    double	dfNoDataValue;  public:                DTEDRasterBand( DTEDDataset *, int );        virtual CPLErr IReadBlock( int, int, void * );    virtual double  GetNoDataValue( int *pbSuccess = NULL );    virtual const char* GetUnitType() { return "m"; }};/************************************************************************//*                           DTEDRasterBand()                            *//************************************************************************/DTEDRasterBand::DTEDRasterBand( DTEDDataset *poDS, int nBand ){    this->poDS = poDS;    this->nBand = nBand;        eDataType = GDT_Int16;    bNoDataSet = TRUE;    dfNoDataValue = (double) DTED_NODATA_VALUE;    nBlockXSize = 1;    nBlockYSize = poDS->GetRasterYSize();;}/************************************************************************//*                             IReadBlock()                             *//************************************************************************/CPLErr DTEDRasterBand::IReadBlock( int nBlockXOff, int nBlockYOff,                                  void * pImage ){    DTEDDataset *poDTED_DS = (DTEDDataset *) poDS;    int         nYSize = poDTED_DS->psDTED->nYSize;    GInt16      *panData;    (void) nBlockXOff;    CPLAssert( nBlockYOff == 0 );/* -------------------------------------------------------------------- *//*      Read the data.                                                  *//* -------------------------------------------------------------------- */    panData = (GInt16 *) pImage;    if( !DTEDReadProfile( poDTED_DS->psDTED, nBlockXOff, panData ) )        return CE_Failure;/* -------------------------------------------------------------------- *//*      Flip line to orient it top to bottom instead of bottom to       *//*      top.                                                            *//* -------------------------------------------------------------------- */    for( int i = nYSize/2; i >= 0; i-- )    {        GInt16  nTemp;        nTemp = panData[i];        panData[i] = panData[nYSize - i - 1];        panData[nYSize - i - 1] = nTemp;    }    return CE_None;}/************************************************************************//*                           GetNoDataValue()                           *//************************************************************************/double DTEDRasterBand::GetNoDataValue( int * pbSuccess ){    if( pbSuccess )        *pbSuccess = bNoDataSet;    return dfNoDataValue;}/************************************************************************//*                            ~DTEDDataset()                            *//************************************************************************/DTEDDataset::~DTEDDataset(){    FlushCache();    if( psDTED != NULL )        DTEDClose( psDTED );}/************************************************************************//*                                Open()                                *//************************************************************************/GDALDataset *DTEDDataset::Open( GDALOpenInfo * poOpenInfo ){    int         i;    DTEDInfo    *psDTED;/* -------------------------------------------------------------------- *//*      Try opening the dataset.                                        *//* -------------------------------------------------------------------- */    psDTED = DTEDOpen( poOpenInfo->pszFilename, "rb", TRUE );        if( psDTED == NULL )        return( NULL );/* -------------------------------------------------------------------- *//*      Create a corresponding GDALDataset.                             *//* -------------------------------------------------------------------- */    DTEDDataset         *poDS;    poDS = new DTEDDataset();    poDS->psDTED = psDTED;    /* -------------------------------------------------------------------- *//*      Capture some information from the file that is of interest.     *//* -------------------------------------------------------------------- */    poDS->nRasterXSize = psDTED->nXSize;    poDS->nRasterYSize = psDTED->nYSize;    /* -------------------------------------------------------------------- *//*      Create band information objects.                                *//* -------------------------------------------------------------------- */    poDS->nBands = 1;;    for( i = 0; i < poDS->nBands; i++ )        poDS->SetBand( i+1, new DTEDRasterBand( poDS, i+1 ) );/* -------------------------------------------------------------------- *//*      Collect any metadata available.                                 *//* -------------------------------------------------------------------- */    char *pszValue;    pszValue = DTEDGetMetadata( psDTED, DTEDMD_VERTACCURACY_UHL );    poDS->SetMetadataItem( "DTED_VerticalAccuracy_UHL", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_VERTACCURACY_ACC );    poDS->SetMetadataItem( "DTED_VerticalAccuracy_ACC", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_SECURITYCODE_UHL );    poDS->SetMetadataItem( "DTED_SecurityCode_UHL", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_SECURITYCODE_DSI );    poDS->SetMetadataItem( "DTED_SecurityCode_DSI", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_UNIQUEREF_UHL );    poDS->SetMetadataItem( "DTED_UniqueRef_UHL", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_UNIQUEREF_DSI );    poDS->SetMetadataItem( "DTED_UniqueRef_DSI", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_DATA_EDITION );    poDS->SetMetadataItem( "DTED_DataEdition", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_MATCHMERGE_VERSION );    poDS->SetMetadataItem( "DTED_MatchMergeVersion", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_MAINT_DATE );    poDS->SetMetadataItem( "DTED_MaintenanceDate", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_MATCHMERGE_DATE );    poDS->SetMetadataItem( "DTED_MatchMergeDate", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_MAINT_DESCRIPTION );    poDS->SetMetadataItem( "DTED_MaintenanceDescription", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_PRODUCER );    poDS->SetMetadataItem( "DTED_Producer", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_VERTDATUM );    poDS->SetMetadataItem( "DTED_VerticalDatum", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_DIGITIZING_SYS );    poDS->SetMetadataItem( "DTED_DigitizingSystem", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_COMPILATION_DATE );    poDS->SetMetadataItem( "DTED_CompilationDate", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_HORIZACCURACY );    poDS->SetMetadataItem( "DTED_HorizontalAccuracy", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_REL_HORIZACCURACY );    poDS->SetMetadataItem( "DTED_RelHorizontalAccuracy", pszValue );    CPLFree( pszValue );    pszValue = DTEDGetMetadata( psDTED, DTEDMD_REL_VERTACCURACY );    poDS->SetMetadataItem( "DTED_RelVerticalAccuracy", pszValue );    CPLFree( pszValue );        poDS->SetMetadataItem( GDALMD_AREA_OR_POINT, GDALMD_AOP_POINT );

⌨️ 快捷键说明

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