[gdal-dev] writing a datasate into another one
mohamed hedi lassoued
med.hedi.lassoued at gmail.com
Wed Aug 12 01:53:51 EDT 2009
hello,
Im new with GDAL and i want add a gdal module to my application.this one
should translate a file from a format to another like gdal_translat .
So i should read the sourcefile making it into a dataset.my problem is that
in the copy() methode i should copy a data set to the copy one and chage
many options like projection.
i paste my module here and i wish that you can help me to copy the data set
to the new one. i saw the tutorial and i dont see copy methode and if i
should use band of dataset to copy a band to another one.
Code:
/*****************************************************************************
* ogr2gui is an application used to convert and manipulate geospatial
* data. It is based on the "OGR Simple Feature Library" from the
* "Geospatial Data Abstraction Library" <http://gdal.org>.
*
* Copyright (c) 2009 Inventis <mailto:developpement at inventis.ca>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*****************************************************************************/
/*!
* \file Cvt.cpp
* \brief Cvt
* \author Mohamed Hedi Lassoued [ Inventis ]
* \version 0.5
* \date 13/01/09
*/
#include "../inc/Cvt.h"
#include "gdal_priv.h"
#include "cpl_string.h"
Cvt::Cvt( void )
{
GDALAllRegister() ;
}
Cvt::~Cvt( void )
{
}
bool Cvt::OpenDataset( const char * pszSrcFilename, const char *
pszDstFilename )
{
//Open the source file
poSrcDS = (GDALDataset *) GDALOpen( pszSrcFilename, GA_ReadOnly );
if( poSrcDS != NULL )
{
//succès d'ouverture du Dataset
}
else
{
error = "unable to open Dataset";
return false;
}
//Open the target file
poDstDS = (GDALDataset *) GDALOpen( pszDstFilename, GA_Update );
if( poDstDS != NULL )
{
//succès d'ouverture du Dataset
}
else
{
error = "unable to open Dataset";
return false;
}
}
int Cvt::VerfCreat();
{
const char *pszFormat = "GTiff"; // target Format
char **papszMetadata;
poDstDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
if( poDstDriver == NULL )
// exit( 1 );
return 0;
// Vérification de possibilité d'utilisation CREAT ou CREATCOPY
papszMetadata = poDstDriver->GetMetadata();
if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATE, FALSE ) )
{
printf( "Driver %s supports Create() method.\n", pszFormat );
return 1;
}
if( CSLFetchBoolean( papszMetadata, GDAL_DCAP_CREATECOPY, FALSE ) )
{
printf( "Driver %s supports CreateCopy() method.\n", pszFormat );
return 2;
}
}
// creat of dataset copy with the new Format
//need to complet the if .... creat directly ....
bool Cvt::ConvertDataset();
{
if ( VerfCreat()==2 ) // using CreateCopy
{
poDstDS = poDstDriver->CreateCopy( pszDstFilename, poSrcDS, FALSE,
NULL, NULL, NULL );
}
else if ( VerfCreat()==1 ) // using Creat
{
poDstDS = poDstDriver->Create( pszDstFilename,
poSrcDS->GetRasterXSize(), poSrcDS->GetRasterYSize(),
poSrcDS->GetRasterCount(), GDT_Byte,
papszOptions );
//Modification that we can do for the poDstDS (add a
geotransfor, UTM, SetWellKnownGeogCS....
poDstDS->SetGeoTransform( adfGeoTransform );
oSRS.SetUTM( 11, TRUE );
oSRS.SetWellKnownGeogCS( "NAD27" );
oSRS.exportToWkt( &pszSRS_WKT );
poDstDS->SetProjection( pszSRS_WKT );
CPLFree( pszSRS_WKT );
for( int i = 1; i<=poDstDS->GetRasterCount() ; i++ )
{
poBand = poSrcDS->GetRasterBand(i);
//il faut ecrire dans le poDstDS le poband lu, nrmalement
il y a un setRasterBand
GByte
abyRaster[poSrcDS->GetRasterXSize()*poSrcDS->GetRasterYSize()];
poBand->RasterIO( GF_Read, 0, 0,
poSrcDS->GetRasterXSize(), poSrcDS->GetRasterYSize(),
abyRaster, 512, 512, GDT_Byte, 0, 0 );
poDstDS = poDriver->Create( pszDstFilename, 512, 512, 1, GDT_Byte,
papszOptions );
}
}
/* Once we're done, close properly the dataset */
if( poDstDS != NULL )
GDALClose( (GDALDatasetH) poDstDS );
GDALClose( (GDALDatasetH) poSrcDS );
thx all
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/gdal-dev/attachments/20090812/39839bf1/attachment.html
More information about the gdal-dev
mailing list