Skip to content
Snippets Groups Projects
Commit 353bc42b authored by Thomas Feuvrier's avatar Thomas Feuvrier
Browse files

Suppression filtre DEMReaderFilter !!

parent dbd34ea4
No related branches found
No related tags found
No related merge requests found
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __otbDEMReaderFilter_h
#define __otbDEMReaderFilter_h
#include "itkIndent.h"
#include "itkImageSource.h"
#include "otbImage.h"
#include <iostream>
#include <stdio.h>
#include "elevation/ossimElevManager.h"
#include "base/ossimFilename.h"
#include "itkImageRegionIteratorWithIndex.h"
#include "itkIndent.h"
namespace otb
{
/** \class DEMReaderFilter
*
* \brief Class for Reading a DEM data
*
* This class is based on ossimElevManager. It takes in input the UL and LR geographic coordinates and the spacing.
* Handle DTED and SRTM formats.
* \ingroup Images
*
*/
template <class TDEMImage>
class ITK_EXPORT DEMReaderFilter:
public itk::ImageSource<Image<typename TDEMImage::PixelType,2, 0> >
{
public :
/** Standard class typedefs. */
typedef itk::Indent Indent;
typedef TDEMImage DEMImageType;
typedef typename DEMImageType::Pointer DEMImagePointerType;
typedef typename DEMImageType::PixelType PixelType;
typedef DEMReaderFilter Self;
typedef itk::ImageSource<Image<typename DEMImageType::PixelType,2, 0> > Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef Image<PixelType,2> OutputImageType;
typedef typename Superclass::Pointer OutputImagePointer;
typedef typename OutputImageType::SpacingType SpacingType;
typedef typename OutputImageType::SizeType SizeType;
typedef typename OutputImageType::PointType PointType;
typedef typename OutputImageType::IndexType IndexType;
typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
typedef itk::ImageRegionIteratorWithIndex< Image<PixelType,2, 0> > ImageIteratorType;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(DEMReader,ImageSource);
/** Set the spacing. */
itkSetMacro(Spacing,SpacingType);
itkGetConstReferenceMacro(Spacing,SpacingType);
/** Set the Upper Left coordinates. */
itkSetMacro(Ul,PointType);
itkGetConstReferenceMacro(Ul,PointType);
/** Set the Lower Right coordinates. */
itkSetMacro(Lr,PointType);
itkGetConstReferenceMacro(Lr,PointType);
/** Set the spacing. */
void SetSpacing(const double* spacing);
/** Try to open the DEM directory. */
bool OpenDEMDirectory(char* &DEMDirectory);
/** Compute the height above MSL(Mean Sea Level) of the point. */
virtual double GetHeightAboveMSL(const PointType& worldPoint);
protected:
DEMReaderFilter();
~DEMReaderFilter();
void PrintSelf(std::ostream& os, Indent indent) const;
void GenerateData();
virtual void GenerateOutputInformation();
ossimElevManager* m_ElevManager;
//DEMImagePointerType m_DEMImage;
SpacingType m_Spacing;
PointType m_Ul;
PointType m_Lr;
};
} // namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbDEMReaderFilter.txx"
#endif
#endif
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __otbDEMReaderFilter_txx
#define __otbDEMReaderFilter_txx
#include "otbDEMReaderFilter.h"
#include "otbMacro.h"
namespace otb
{
template<class TDEMImage>
DEMReaderFilter<TDEMImage>
::DEMReaderFilter()
{
m_ElevManager=ossimElevManager::instance();
//m_DEMImage = DEMImageType::New();
m_Spacing[0]=0;
m_Spacing[1]=0;
m_Ul[0]=0;
m_Ul[1]=0;
m_Lr[0]=0;
m_Lr[1]=0;
}
template<class TDEMImage>
DEMReaderFilter<TDEMImage>
::~DEMReaderFilter()
{
delete m_ElevManager;
}
///Methode pour specifier un dossier contenant des DEM
template<class TDEMImage>
bool
DEMReaderFilter<TDEMImage>::
OpenDEMDirectory(char* &DEMDirectory)
{
ossimFilename ossimDEMDir;
ossimDEMDir=ossimFilename(DEMDirectory);
bool result= false;
if (m_ElevManager->openDirectory(ossimDEMDir))
{
result= true;
}
return result;
}
///Methode pour calculer l'altitude d'un point geographique
template<class TDEMImage>
double
DEMReaderFilter<TDEMImage>::
GetHeightAboveMSL(const PointType& worldPoint)
{
float height;
ossimGpt ossimWorldPoint;
ossimWorldPoint.lat=worldPoint[0];
ossimWorldPoint.lon=worldPoint[1];
height=m_ElevManager->getHeightAboveMSL(ossimWorldPoint);
return height;
}
///Methode SetSpacing
template<class TDEMImage>
void DEMReaderFilter<TDEMImage>
::SetSpacing( const double* spacing)
{
SpacingType s(spacing);
this->SetSpacing(s);
}
///Methode GenerateOutputInformation
template <class TDEMImage>
void DEMReaderFilter<TDEMImage>
::GenerateOutputInformation()
{
DEMImageType *output;
IndexType start;
start[0]=0;
start[1]=0;
PointType origin;
origin[0]=m_Ul[0]; //latitude de l'origine.
origin[1]=m_Ul[1]; //longitude de l'origine.
output = this->GetOutput(0);
// Calcul de la taille de l'image:
SizeType size;
size[0]=int (abs(((m_Lr[0]-m_Ul[0])/m_Spacing[0]))+1.5);
size[1]=int (abs(((m_Lr[1]-m_Ul[1])/m_Spacing[1]))+1.5);
// On specifie les parametres de la region
OutputImageRegionType largestPossibleRegion;
largestPossibleRegion.SetSize( size );
largestPossibleRegion.SetIndex( start );
output->SetLargestPossibleRegion( largestPossibleRegion );
output->SetSpacing(m_Spacing);
output->SetOrigin(m_Ul);
}
///Methode GenerateData
template <class TDEMImage>
void
DEMReaderFilter<TDEMImage>
::GenerateData()
{
DEMImagePointerType m_DEMImage = this->GetOutput();
// allocate the output buffer
m_DEMImage->SetBufferedRegion( m_DEMImage->GetRequestedRegion() );
m_DEMImage->Allocate();
// Create an iterator that will walk the output region
ImageIteratorType outIt = ImageIteratorType(m_DEMImage,m_DEMImage->GetRequestedRegion());
// Walk the output image, evaluating the height at each pixel
IndexType currentindex;
PointType phyPoint;
double height;
for (outIt.GoToBegin(); !outIt.IsAtEnd(); ++outIt)
{
currentindex=outIt.GetIndex();
m_DEMImage->TransformIndexToPhysicalPoint(currentindex, phyPoint);
ossimGpt ossimWorldPoint;
ossimWorldPoint.lat=phyPoint[0];
ossimWorldPoint.lon=phyPoint[1];
height=m_ElevManager->getHeightAboveMSL(ossimWorldPoint); //Calcul de l'altitude
otbMsgDebugMacro(<<" HeightAboveMSL: "<<height);
if (height>-static_cast<double>(32768)) //On teste si les fichiers MNT recouvre la zone g�ographique demand�e (-32768 = theNullHeightValue)
{
m_DEMImage->SetPixel(currentindex, static_cast<PixelType>(height) );
} //On remplit l'image
else
{
m_DEMImage->SetPixel(currentindex, static_cast<PixelType>(0) );
}
}
}
template <class TDEMImage>
void
DEMReaderFilter<TDEMImage>
::PrintSelf(std::ostream& os, Indent indent) const
{
Superclass::PrintSelf(os,indent);
os << indent << "Spacing:"<< m_Spacing[0] << ","<< m_Spacing[1] << std::endl;
os << indent << "Lr:"<< m_Lr[0] << ","<< m_Lr[1] << std::endl;
os << indent << "Ul:"<< m_Ul[0] << ","<< m_Ul[1] << std::endl;
}
} // namespace otb
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment