1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
/*=========================================================================
Program: ORFEO Toolbox
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
See OTBCopyright.txt for details.
Some parts of this code are derived from ITK. See ITKCopyright.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 otbPersistentImageToOGRLayerFilter_h
#define otbPersistentImageToOGRLayerFilter_h
#include "otbPersistentImageFilter.h"
#include "otbLabelImageToOGRDataSourceFilter.h"
#include "otbOGRLayerWrapper.h"
#include "itkMacro.h"
#include <string>
namespace otb
{
/** \class PersistentImageToOGRLayerFilter
* \brief Perform vectorization in a persistent way.
*
* This filter is a generic filter. It is the base class of the Large scale segmentation framework.
* The \c ProcessTile() method is pure virtual and is implemented in sub class
* (@see \c PersistentStreamingLabelImageToOGRDataFilter). It returns a "memory" DataSource.
* This filter only copy each feature of the layer in the "memory" DataSource into the
* input \c OGRLayer set by \c SetOGRLayer() method.
*
* \sa PersistentImageFilter
*
*
* \ingroup OTBConversion
*/
template<class TImage>
class ITK_EXPORT PersistentImageToOGRLayerFilter :
public PersistentImageFilter<TImage, TImage>
{
public:
/** Standard Self typedef */
typedef PersistentImageToOGRLayerFilter Self;
typedef PersistentImageFilter<TImage, TImage> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Runtime information support. */
itkTypeMacro(PersistentImageToOGRLayerFilter, PersistentImageFilter);
typedef TImage InputImageType;
typedef typename InputImageType::Pointer InputImagePointer;
typedef typename InputImageType::RegionType RegionType;
typedef typename InputImageType::SizeType SizeType;
typedef typename InputImageType::IndexType IndexType;
typedef typename InputImageType::PixelType PixelType;
typedef typename InputImageType::InternalPixelType InternalPixelType;
typedef ogr::DataSource OGRDataSourceType;
typedef typename OGRDataSourceType::Pointer OGRDataSourcePointerType;
typedef ogr::Layer OGRLayerType;
typedef ogr::Feature OGRFeatureType;
void AllocateOutputs() ITK_OVERRIDE;
void Reset(void) ITK_OVERRIDE;
void Synthetize(void) ITK_OVERRIDE;
/** This method creates the output layer in the OGRLayer set by the user.
* \note This methode must be called before the call of Update .
*/
virtual void Initialize(void);
/** Get the size of the tile used for streaming.
* This is useful if you use for example the \c OGRFusionTileFilter
* for fusioning streaming tiles.
*/
itkGetMacro(StreamSize, SizeType);
/** Set the \c ogr::Layer in which the geometries will be dumped */
void SetOGRLayer( const OGRLayerType & ogrLayer );
/** Get the \c ogr::Layer output. */
const OGRLayerType & GetOGRLayer( void ) const;
protected:
PersistentImageToOGRLayerFilter();
~PersistentImageToOGRLayerFilter() ITK_OVERRIDE;
void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
void GenerateData() ITK_OVERRIDE;
private:
PersistentImageToOGRLayerFilter(const Self &); //purposely not implemented
void operator =(const Self&); //purposely not implemented
virtual OGRDataSourcePointerType ProcessTile() = 0;
// The layer where to dump geometries
OGRLayerType m_OGRLayer;
SizeType m_StreamSize;
}; // end of class
} // end namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbPersistentImageToOGRLayerFilter.txx"
#endif
#endif
|