Forked from Cresson Remi / SimpleExtractionTools
Source project has a limited visibility.
otbVectorDataToLabelImageCustomFilter.h 5.94 KiB
/*=========================================================================
  Copyright (c) Remi Cresson (IRSTEA). All rights reserved.
     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 __gtbVectorDataToLabelImageCustomFilter_h
#define __gtbVectorDataToLabelImageCustomFilter_h
#include "itkImageToImageFilter.h"
#include "itkImageSource.h"
#include "otbMacro.h"
#include "otbImageMetadataInterfaceFactory.h"
#include "otbVectorData.h"
#include "gdal.h"
#include "ogr_api.h"
#include <ogrsf_frmts.h>
namespace otb {
/** \class VectorDataToLabelImageCustomFilter
 *  \brief Burn geometries from the specified VectorData into raster
 *  This class handles burning several input VectorDatas into the
 *  output raster.  The burn values are extracted from a field set by
 *  the user.If no burning field is set, the "FID" is used by default.
 *  A "Burn max value" mode overrides this and makes only the max value
 *  burnt whenever the burning field.
 *  Setting the output raster informations can be done in two ways by:
 *    - Setting the Origin/Size/Spacing of the output image
 *    - Using an existing image as support via SetOutputParametersFromImage(ImageBase)
 *  OGRRegisterAll() method must have been called before applying filter.
 * \ingroup SimpleExtractionTools
template <class TVectorData, class TOutputImage  >
class  ITK_EXPORT VectorDataToLabelImageCustomFilter :
    public itk::ImageSource<TOutputImage>
public:
  /** Standard class typedefs */
  typedef VectorDataToLabelImageCustomFilter                           Self;
  typedef itk::ImageSource<TOutputImage>     Superclass;
  typedef itk::SmartPointer< Self >                           Pointer;
  typedef itk::SmartPointer<const Self>                       ConstPointer;
  /** Run-time type information (and related methods). */
  itkTypeMacro(VectorDataToLabelImageCustomFilter, itk::ImageSource);
  /** Method for creation through the object factory. */
  itkNewMacro(Self);
  typedef TOutputImage                                OutputImageType;
  typedef typename OutputImageType::Pointer           OutputImagePointer;
  typedef typename OutputImageType::SizeType          OutputSizeType;
  typedef typename OutputImageType::IndexType         OutputIndexType;
  typedef typename OutputImageType::SpacingType       OutputSpacingType;
  typedef typename OutputImageType::PointType         OutputOriginType;
  typedef typename OutputImageType::RegionType        OutputImageRegionType;
  typedef typename OutputImageType::PixelType         OutputImagePixelType;
  typedef typename OutputImageType::InternalPixelType OutputImageInternalPixelType;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
/** VectorData typedefs*/ typedef TVectorData VectorDataType; typedef typename VectorDataType::DataTreeType DataTreeType; typedef typename DataTreeType::TreeNodeType InternalTreeNodeType; typedef typename DataTreeType::Pointer DataTreePointerType; typedef typename DataTreeType::ConstPointer DataTreeConstPointerType; typedef itk::ImageBase<OutputImageType::ImageDimension> ImageBaseType; /** Get Nth input VectorData */ const VectorDataType* GetInput(unsigned int idx); /** Method for adding VectorData to rasterize */ virtual void AddVectorData(const VectorDataType* vd); /** Set the size of the output image. */ itkSetMacro(OutputSize, OutputSizeType); /** Get the size of the output image. */ itkGetConstReferenceMacro(OutputSize, OutputSizeType); /** Burn mode */ itkSetMacro(BurnMaxValueMode, bool); itkGetMacro(BurnMaxValueMode, bool); /** Set the origin of the output image. * \sa GetOrigin() */ itkSetMacro(OutputOrigin, OutputOriginType); virtual void SetOutputOrigin(const double origin[2]); virtual void SetOutputOrigin(const float origin[2]); itkGetConstReferenceMacro(OutputOrigin, OutputOriginType); /** Set the spacing (size of a pixel) of the output image. * \sa GetSpacing() */ virtual void SetOutputSpacing(const OutputSpacingType& spacing); virtual void SetOutputSpacing(const double spacing[2]); virtual void SetOutputSpacing(const float spacing[2]); /** Set/Get Output Projection Ref */ itkSetStringMacro(OutputProjectionRef); itkGetStringMacro(OutputProjectionRef); itkSetStringMacro(BurnAttribute); itkGetStringMacro(BurnAttribute); /** Useful to set the output parameters from an existing image*/ void SetOutputParametersFromImage(const ImageBaseType * image); protected: virtual void GenerateData(); VectorDataToLabelImageCustomFilter(); virtual ~VectorDataToLabelImageCustomFilter() override {} virtual void GenerateOutputInformation(); void PrintSelf(std::ostream& os, itk::Indent indent) const; private: VectorDataToLabelImageCustomFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented OGRDataSource* m_OGRDataSourcePointer; // Vector Of OGRGeometyH std::vector< OGRGeometryH > m_SrcDataSetGeometries;