OTB  9.0.0
Orfeo Toolbox
otbMapFileProductWriter.hxx
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2022 Centre National d'Etudes Spatiales (CNES)
3  *
4  * This file is part of Orfeo Toolbox
5  *
6  * https://www.orfeo-toolbox.org/
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 #ifndef otbMapFileProductWriter_hxx
22 #define otbMapFileProductWriter_hxx
23 
25 #include "itksys/SystemTools.hxx"
26 #include "otbSpatialReference.h"
27 
28 namespace otb
29 {
30 
34 template <class TInputImage>
36 {
37  m_GenericRSResampler = GenericRSResamplerType::New();
38  m_TileSize = 256;
39  m_CurrentDepth = 0;
40  m_SRID = 26918;
42 
43  // Modify superclass default values, can be overridden by subclasses
44  this->SetNumberOfRequiredInputs(1);
45 }
46 
47 
51 template <class TInputImage>
53 {
54 }
55 
59 template <class TInputImage>
61 {
62  // Process object is not const-correct so the const_cast is required here
63  this->ProcessObject::SetNthInput(0, const_cast<InputImageType*>(input));
64 }
65 
66 
67 template <class TInputImage>
68 void MapFileProductWriter<TInputImage>::SetInput(unsigned int index, const TInputImage* image)
69 {
70  // Process object is not const-correct so the const_cast is required here
71  this->ProcessObject::SetNthInput(index, const_cast<TInputImage*>(image));
72 }
73 
77 template <class TInputImage>
79 {
80  if (this->GetNumberOfInputs() < 1)
81  {
82  return nullptr;
83  }
84 
85  return static_cast<const TInputImage*>(this->ProcessObject::GetInput(0));
86 }
87 
91 template <class TInputImage>
93 {
94  return static_cast<const TInputImage*>(this->ProcessObject::GetInput(idx));
95 }
96 
97 
102 template <class TInputImage>
104 {
105  // Get the input Image
106  m_VectorImage = const_cast<TInputImage*>(this->GetInput());
107  m_VectorImage->UpdateOutputInformation();
109 
110  if (!m_VectorImage->GetImageMetadata().HasSensorGeometry()
111  && m_VectorImage->GetImageMetadata().HasSensorGeometry())
112  {
113  otbMsgDevMacro("Sensor Model detected : Reprojecting in the target SRID");
114  m_GenericRSResampler->SetInput(this->GetInput());
115  m_GenericRSResampler->SetOutputParametersFromMap(otb::SpatialReference::FromEPSG(m_SRID).ToWkt());
116  m_VectorImage = m_GenericRSResampler->GetOutput();
117  m_VectorImage->UpdateOutputInformation();
118  }
119 
120  // Initialize the filename, the vectordatas
121  this->Initialize();
122 
123  // Generate the mapFile
124  this->GenerateMapFile();
125 
126  // Do the tiling
127  this->Tiling();
128 }
129 
134 template <class TInputImage>
136 {
137  // check that the right extension is given : expected .map
138  if (itksys::SystemTools::GetFilenameLastExtension(m_FileName) != ".map")
139  {
140  itkExceptionMacro(<< itksys::SystemTools::GetFilenameLastExtension(m_FileName) << " is a wrong Extension FileName : Expected .map");
141  }
142 
143  // Initialize the index vectordata
144  this->InitializeVectorData();
145 }
146 
151 template <class TInputImage>
153 {
154  // Initialize the vectordata to build the indexTile
155  m_VectorDataIndexTile = VectorDataType::New();
156  m_VectorDataIndexTile->SetProjectionRef(otb::SpatialReference::FromEPSG(m_SRID).ToWkt());
157  DataNodeType::Pointer root = m_VectorDataIndexTile->GetDataTree()->GetRoot()->Get();
158  DataNodeType::Pointer document = DataNodeType::New();
159  m_Folder = DataNodeType::New();
161 
162  document->SetNodeType(otb::DOCUMENT);
163  m_Folder->SetNodeType(otb::FOLDER);
164 
165  document->SetNodeId("DOCUMENT");
166  m_Folder->SetNodeId("FOLDER");
167 
168  m_VectorDataIndexTile->GetDataTree()->Add(document, root);
169  m_VectorDataIndexTile->GetDataTree()->Add(m_Folder, document);
170 }
171 
175 template <class TInputImage>
177 {
178  unsigned int numberOfChannel = m_VectorImage->GetNumberOfComponentsPerPixel();
179 
181  typename InputImageType::PixelType inMin(numberOfChannel), inMax(numberOfChannel), outMin(numberOfChannel), outMax(numberOfChannel);
182  outMin.Fill(0);
183  outMax.Fill(255);
185 
186  // Update image base information
187  m_VectorImage->UpdateOutputInformation();
188 
189  // Get the image size
190  SizeType size;
191  size = m_VectorImage->GetLargestPossibleRegion().GetSize();
192 
193  unsigned int sizeX = size[0];
194  unsigned int sizeY = size[1];
195 
196  // Compute max depth
197  unsigned int maxDepth = static_cast<unsigned int>(std::max(std::ceil(std::log(static_cast<float>(sizeX) / static_cast<float>(m_TileSize)) / std::log(2.0)),
198  std::ceil(std::log(static_cast<float>(sizeY) / static_cast<float>(m_TileSize)) / std::log(2.0))));
199 
200  // Extract size & index
201  SizeType extractSize;
202  IndexType extractIndex;
203 
204  for (unsigned int depth = 0; depth <= maxDepth; depth++)
205  {
206  // update the attribute value Current Depth
207  m_CurrentDepth = depth;
208 
209  // Compose the name of the vectordata
210  // the index shapefile filename
211  std::ostringstream tempIndexShapeName;
212  tempIndexShapeName << m_ShapeIndexPath << "/";
213  tempIndexShapeName << itksys::SystemTools::GetFilenameWithoutExtension(m_FileName) << "_" << m_CurrentDepth;
214  tempIndexShapeName << "_index.shp";
215  m_IndexShapeFileName = tempIndexShapeName.str();
216 
217  // Resample image to the max Depth
218  int sampleRatioValue = 1 << (maxDepth - depth); // 2^(maxDepth - depth)
219 
220  if (sampleRatioValue > 1)
221  {
222  m_StreamingShrinkImageFilter = StreamingShrinkImageFilterType::New();
223 
224  m_StreamingShrinkImageFilter->SetShrinkFactor(sampleRatioValue);
225  m_StreamingShrinkImageFilter->SetInput(m_VectorImage);
226  m_StreamingShrinkImageFilter->GetStreamer()->SetAutomaticStrippedStreaming(0);
227  m_StreamingShrinkImageFilter->Update();
228 
229  m_VectorRescaleIntensityImageFilter = VectorRescaleIntensityImageFilterType::New();
230  m_VectorRescaleIntensityImageFilter->SetInput(m_StreamingShrinkImageFilter->GetOutput());
231  m_VectorRescaleIntensityImageFilter->SetOutputMinimum(outMin);
232  m_VectorRescaleIntensityImageFilter->SetOutputMaximum(outMax);
233 
234  if (depth == 0)
235  {
236  m_VectorRescaleIntensityImageFilter->Update();
237  inMin = m_VectorRescaleIntensityImageFilter->GetInputMinimum();
238  inMax = m_VectorRescaleIntensityImageFilter->GetInputMaximum();
239  }
240  else
241  {
242  m_VectorRescaleIntensityImageFilter->SetInputMinimum(inMin);
243  m_VectorRescaleIntensityImageFilter->SetInputMaximum(inMax);
244  m_VectorRescaleIntensityImageFilter->SetAutomaticInputMinMaxComputation(false);
245  }
246 
247  // New resample vector image
248  m_ResampleVectorImage = m_VectorRescaleIntensityImageFilter->GetOutput();
249  }
250  else
251  {
252  m_VectorRescaleIntensityImageFilter = VectorRescaleIntensityImageFilterType::New();
253  m_VectorRescaleIntensityImageFilter->SetInput(m_VectorImage);
254  m_VectorRescaleIntensityImageFilter->SetOutputMinimum(outMin);
255  m_VectorRescaleIntensityImageFilter->SetOutputMaximum(outMax);
256 
257  m_VectorRescaleIntensityImageFilter->SetInputMinimum(inMin);
258  m_VectorRescaleIntensityImageFilter->SetInputMaximum(inMax);
259  m_VectorRescaleIntensityImageFilter->SetAutomaticInputMinMaxComputation(false);
260 
261  m_ResampleVectorImage = m_VectorRescaleIntensityImageFilter->GetOutput();
262  }
263 
264  m_ResampleVectorImage->UpdateOutputInformation();
265 
266  // Get the image size
267  size = m_ResampleVectorImage->GetLargestPossibleRegion().GetSize();
268 
269  sizeX = size[0];
270  sizeY = size[1];
271 
272  unsigned int x = 0;
273  unsigned int y = 0;
274 
275  // Create directory where to store generated tiles
276  // Do it once here outside of the loop
277  std::ostringstream path;
278  path << m_ShapeIndexPath << "/tiles";
279 
280  if (!itksys::SystemTools::MakeDirectory(path.str()))
281  {
282  itkExceptionMacro(<< "Error while creating cache directory" << path.str());
283  }
284 
285  // Tiling resample image
286  for (unsigned int tx = 0; tx < sizeX; tx += m_TileSize)
287  {
288  for (unsigned int ty = 0; ty < sizeY; ty += m_TileSize)
289  {
290  if ((tx + m_TileSize) >= sizeX)
291  {
292  extractIndex[0] = tx;
293  extractSize[0] = sizeX - tx;
294  }
295  else
296  {
297  extractIndex[0] = tx;
298  extractSize[0] = m_TileSize;
299  }
300 
301  if ((ty + m_TileSize) >= sizeY)
302  {
303  extractIndex[1] = ty;
304  extractSize[1] = sizeY - ty;
305  }
306  else
307  {
308  extractIndex[1] = ty;
309  extractSize[1] = m_TileSize;
310  }
311 
312  // Generate Tile filename
313  std::ostringstream ossFileName;
314  ossFileName << path.str() << "/";
315  ossFileName << "tile_" << m_CurrentDepth << "_";
316  ossFileName << x << "_" << y << ".tif";
317 
318  // Extract ROI
319  m_VectorImageExtractROIFilter = VectorImageExtractROIFilterType::New();
320 
321  // Set extract roi parameters
322  m_VectorImageExtractROIFilter->SetStartX(extractIndex[0]);
323  m_VectorImageExtractROIFilter->SetStartY(extractIndex[1]);
324  m_VectorImageExtractROIFilter->SetSizeX(extractSize[0]);
325  m_VectorImageExtractROIFilter->SetSizeY(extractSize[1]);
326 
327  // Set Channel to extract
328  m_VectorImageExtractROIFilter->SetChannel(1);
329  m_VectorImageExtractROIFilter->SetChannel(2);
330  m_VectorImageExtractROIFilter->SetChannel(3);
331 
332  // Set extract roi input
333  m_VectorImageExtractROIFilter->SetInput(m_ResampleVectorImage);
334 
335  // Configure writer
336  m_VectorWriter = VectorWriterType::New();
337  m_VectorWriter->SetFileName(ossFileName.str());
338  m_VectorWriter->SetInput(m_VectorImageExtractROIFilter->GetOutput());
339  m_VectorWriter->Update();
340 
342  // Search Lat/Lon box
343 
344  // Initialize the transform to be used
345  // typename TransformType::Pointer transform =
346  // TransformType::New();
347 
348  m_Transform = TransformType::New();
349  m_Transform->SetInputProjectionRef(m_GenericRSResampler->GetOutputProjectionRef());
350  m_Transform->SetOutputProjectionRef(otb::SpatialReference::FromEPSG(m_SRID).ToWkt());
351  m_Transform->InstantiateTransform();
352 
353  InputPointType inputPoint;
354  SizeType sizeTile;
355  sizeTile = extractSize;
356 
358  // Compute upper left corner
359  itk::ContinuousIndex<double, 2> indexTile(extractIndex);
360  indexTile[0] += -0.5;
361  indexTile[1] += -0.5;
362  m_ResampleVectorImage->TransformContinuousIndexToPhysicalPoint(indexTile, inputPoint);
363  OutputPointType upperLeftCorner = m_Transform->TransformPoint(inputPoint);
364  // std::cout <<"indexTile "<< indexTile <<" --> input Point "<< inputPoint << " upperLeftCorner "<< upperLeftCorner << std::endl;
366 
367  // Compute lower left corner
368  indexTile[1] += static_cast<double>(sizeTile[1]);
369  m_ResampleVectorImage->TransformContinuousIndexToPhysicalPoint(indexTile, inputPoint);
370  OutputPointType lowerLeftCorner = m_Transform->TransformPoint(inputPoint);
371  // std::cout <<"indexTile "<< indexTile <<" --> input Point "<< inputPoint << " lowerLeftCorner "<< lowerLeftCorner << std::endl;
372 
373  // Compute lower right corner
374  indexTile[0] += static_cast<double>(sizeTile[0]);
375  m_ResampleVectorImage->TransformContinuousIndexToPhysicalPoint(indexTile, inputPoint);
376  OutputPointType lowerRightCorner = m_Transform->TransformPoint(inputPoint);
377  // std::cout <<"indexTile "<< indexTile <<" --> input Point "<< inputPoint << " lowerRightCorner "<< lowerRightCorner << std::endl;
378 
379  // Compute upper right corner
380  indexTile[1] -= static_cast<double>(sizeTile[1]);
381  m_ResampleVectorImage->TransformContinuousIndexToPhysicalPoint(indexTile, inputPoint);
382  OutputPointType upperRightCorner = m_Transform->TransformPoint(inputPoint);
383  // std::cout <<"indexTile "<< indexTile <<" --> input Point "<< inputPoint << " upperRightCorner "<< upperRightCorner << std::endl;
384 
385  // Build The indexTile
386  this->AddBBoxToIndexTile(lowerLeftCorner, lowerRightCorner, upperRightCorner, upperLeftCorner, x, y);
387 
389  y++;
390  }
391  x++;
392  y = 0;
393  }
394 
395  // Add the layer in the mapfile
396  this->AddLayer();
397 
398  // Write the IndexTile
399  typename VectorDataFileWriterType::Pointer writer = VectorDataFileWriterType::New();
400  writer->SetFileName(m_IndexShapeFileName);
401  writer->SetInput(m_VectorDataIndexTile);
402  writer->Update();
403 
404  this->InitializeVectorData();
405  }
406 
407  // Close the file
408  m_File << "END" << std::endl;
409  m_File.close();
410 }
411 
416 template <class TInputImage>
418  OutputPointType upperLeftCorner, unsigned int x, unsigned int y)
419 {
420  // From PointType to VertexType
421  VertexType pLL, pLR, pUR, pUL;
422 
423  pLL[0] = lowerLeftCorner[0];
424  pLL[1] = lowerLeftCorner[1];
425 
426  pLR[0] = lowerRightCorner[0];
427  pLR[1] = lowerRightCorner[1];
428 
429  pUR[0] = upperRightCorner[0];
430  pUR[1] = upperRightCorner[1];
431 
432  pUL[0] = upperLeftCorner[0];
433  pUL[1] = upperLeftCorner[1];
434 
435  // Form a polygon with the vertices
436  PolygonType::Pointer poly = PolygonType::New();
437  poly->AddVertex(pLL);
438  poly->AddVertex(pLR);
439  poly->AddVertex(pUR);
440  poly->AddVertex(pUL);
441 
442  // Add the polygon to the datanode
443  m_Polygon = DataNodeType::New();
444  m_Polygon->SetNodeId("FEATURE_POLYGON");
445  m_Polygon->SetNodeType(otb::FEATURE_POLYGON);
446  m_Polygon->SetPolygonExteriorRing(poly);
447 
448  std::ostringstream oss;
449  oss << "tiles/tile_";
450  oss << m_CurrentDepth << "_" << x << "_" << y << ".tif";
451 
452  // Add the field "LOCATION" used in mapserver clients
453  // to get the path to tiles
454  m_Polygon->SetFieldAsString("LOCATION", oss.str());
455 
456  // Add the to vectordata
457  m_VectorDataIndexTile->GetDataTree()->Add(m_Polygon, m_Folder);
458 }
459 
463 template <class TInputImage>
465 {
466  // create the directory where to store the filemap
467  // if it does not exists
468  std::ostringstream path;
469  path << itksys::SystemTools::GetFilenamePath(m_FileName);
471 
472  if (!itksys::SystemTools::MakeDirectory(path.str()))
473  {
474  itkExceptionMacro(<< "Error while creating cache directory" << path.str());
475  }
476 
477  // Create a mapfile
478  m_File.open(m_FileName);
479  m_File << std::fixed << std::setprecision(6);
480 
481  // Get the name of the layer
482  std::ostringstream tempIndexShapeName;
483  tempIndexShapeName << itksys::SystemTools::GetFilenameWithoutExtension(m_FileName);
484 
485  m_File << "MAP" << std::endl;
486  m_File << "\tNAME " << tempIndexShapeName.str() << std::endl;
487  m_File << "\t# Map image size" << std::endl;
488  m_File << "\tSIZE " << m_TileSize << " " << m_TileSize << std::endl;
489  m_File << "\tUNITS dd" << std::endl;
490  m_File << "\tSHAPEPATH '" << m_ShapeIndexPath << "'" << std::endl;
491  m_File << "\tEXTENT -180 -90 180 90" << std::endl; // TODO : get the
492  // extent from the
493  // vector data
494  m_File << "\tPROJECTION" << std::endl;
495  m_File << "\t \"init=epsg:" << m_SRID << "\"" << std::endl;
496  m_File << "\tEND" << std::endl;
497 
498  m_File << "\t# Background color for the map canvas -- change as desired" << std::endl;
499  m_File << "\tIMAGECOLOR 192 192 192" << std::endl;
500  m_File << "\tIMAGEQUALITY 95" << std::endl;
501  m_File << "\tIMAGETYPE PNG" << std::endl;
502  m_File << "\tOUTPUTFORMAT" << std::endl;
503  m_File << "\t\tNAME PNG" << std::endl;
504  m_File << "\t\tDRIVER 'GD/PNG'" << std::endl;
505  m_File << "\t\tMIMETYPE 'image/png'" << std::endl;
506  m_File << "\t\tIMAGEMODE RGB" << std::endl;
507  m_File << "\t\tFORMATOPTION INTERLACE=OFF" << std::endl;
508  m_File << "\t\tEXTENSION 'png'" << std::endl;
509  m_File << "\tEND" << std::endl;
510 
511 
512  m_File << "\t# Web interface definition. Only the template parameter" << std::endl;
513  m_File << "\t# is required to display a map. See MapServer documentation" << std::endl;
514  m_File << "\tWEB" << std::endl;
515  m_File << "\t\t# Set IMAGEPATH to the path where MapServer should" << std::endl;
516  m_File << "\t\t# write its output." << std::endl;
517  // m_File <<"#IMAGEPATH \'D:\OSGeo4W_bis2/tmp/ms_tmp/\'" << std::endl;
518 
519  m_File << "\t\t# Set IMAGEURL to the url that points to IMAGEPATH" << std::endl;
520  m_File << "\t\t# as defined in your web server configuration" << std::endl;
521  m_File << "\t\t#IMAGEURL '/ms_tmp/'" << std::endl;
522 
523  m_File << "\t\t# WMS server settings" << std::endl;
524  m_File << "\t\t# NOTE : the user must change the path to the mapserver executable in the " << std::endl;
525  m_File << "\t\t# wms_onlineresource field" << std::endl;
526  m_File << "\t\tMETADATA" << std::endl;
527  m_File << "\t\t 'wms_title' 'Level0'" << std::endl;
528  m_File << "\t\t \'wms_onlineresource\' \'" << m_CGIPath << "?map=" << m_FileName << "&\'" << std::endl;
529  m_File << "\t\t \'wms_srs\' \'EPSG:" << m_SRID << " EPSG:900913\'" << std::endl;
530  m_File << "\t\tEND" << std::endl;
531  m_File << "\tEND" << std::endl;
532 }
533 
534 
535 template <class TInputImage>
537 {
538  m_File << "\tLAYER" << std::endl;
539  m_File << "\t\tNAME '" << itksys::SystemTools::GetFilenameWithoutExtension(m_IndexShapeFileName) /*tempIndexShapeName.str()*/ << "'" << std::endl;
540  m_File << "\t\t\tOFFSITE 0 0 0" << std::endl;
541  m_File << "\t\t\tTYPE RASTER" << std::endl;
542  m_File << "\t\t\tTILEITEM 'LOCATION'" << std::endl;
543  m_File << "\t\t\tTILEINDEX \'" << itksys::SystemTools::GetFilenameName(m_IndexShapeFileName) << "\'" << std::endl;
544  // file <<"\t\t\tMETADATA" << std::endl;
545  // file <<"\t\t\t 'wms_title' 'earthsat'" << std::endl;
546  // file <<"\t\t\t 'wms_name' 'earthsat'" << std::endl;
547  // file <<"\t\t\tEND" << std::endl;
548  m_File << "\t\t\tPROCESSING \"RESAMPLE=AVERAGE\"" << std::endl;
549  m_File << "\t\t\tSTATUS ON" << std::endl;
550  m_File << "\t\t\tTRANSPARENCY 100" << std::endl;
551  m_File << "\t\t\tPROJECTION" << std::endl;
552  m_File << "\t\t\t \"init=epsg:" << m_SRID << "\"" << std::endl;
553  m_File << "\t\t\tEND" << std::endl;
554  m_File << "\t\t#MINSCALE 250000" << std::endl; // TODO : problem with
555  // the MINSCALE AND
556  // MAXSCALE ..
557  m_File << "\tEND" << std::endl;
558 }
559 
560 template <class TInputImage>
561 void MapFileProductWriter<TInputImage>::PrintSelf(std::ostream& os, itk::Indent indent) const
562 {
563  // Call the superclass implementation
564  Superclass::PrintSelf(os, indent);
565 }
566 }
567 #endif
otb::MapFileProductWriter::~MapFileProductWriter
~MapFileProductWriter() override
Definition: otbMapFileProductWriter.hxx:52
otb::DataNode::Pointer
itk::SmartPointer< Self > Pointer
Definition: otbDataNode.h:79
otb::MapFileProductWriter::PrintSelf
void PrintSelf(std::ostream &os, itk::Indent indent) const override
Definition: otbMapFileProductWriter.hxx:561
otb::VectorDataFileWriter::Pointer
itk::SmartPointer< Self > Pointer
Definition: otbVectorDataFileWriter.h:72
otb::DOCUMENT
@ DOCUMENT
Definition: otbDataNode.h:41
otb::MapFileProductWriter::Initialize
virtual void Initialize()
Definition: otbMapFileProductWriter.hxx:135
otb::SpatialReference::FromEPSG
static SpatialReference FromEPSG(unsigned int epsg)
otb::MapFileProductWriter::SizeType
InputImageType::SizeType SizeType
Definition: otbMapFileProductWriter.h:88
otb::MapFileProductWriter::VertexType
PolygonType::VertexType VertexType
Definition: otbMapFileProductWriter.h:100
otb
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.
Definition: otbJoinContainer.h:32
otb::MapFileProductWriter::Tiling
virtual void Tiling()
Definition: otbMapFileProductWriter.hxx:176
otb::MapFileProductWriter::Write
virtual void Write()
Definition: otbMapFileProductWriter.hxx:103
otb::MapFileProductWriter::MapFileProductWriter
MapFileProductWriter()
Definition: otbMapFileProductWriter.hxx:35
otbSpatialReference.h
otb::MapFileProductWriter::GenerateMapFile
virtual void GenerateMapFile()
Definition: otbMapFileProductWriter.hxx:464
otb::FOLDER
@ FOLDER
Definition: otbDataNode.h:42
otb::MapFileProductWriter::AddLayer
void AddLayer()
Definition: otbMapFileProductWriter.hxx:536
otb::MapFileProductWriter::AddBBoxToIndexTile
virtual void AddBBoxToIndexTile(OutputPointType lowerLeftCorner, OutputPointType lowerRightCorner, OutputPointType upperRightCorner, OutputPointType upperLeftCorner, unsigned int x, unsigned int y)
Definition: otbMapFileProductWriter.hxx:417
otb::MapFileProductWriter::InitializeVectorData
void InitializeVectorData()
Definition: otbMapFileProductWriter.hxx:152
otb::MapFileProductWriter::SetInput
virtual void SetInput(const InputImageType *image)
Definition: otbMapFileProductWriter.hxx:60
otb::MapFileProductWriter::GetInput
const InputImageType * GetInput(void)
Definition: otbMapFileProductWriter.hxx:78
otb::MapFileProductWriter::InputPointType
TransformType::InputPointType InputPointType
Definition: otbMapFileProductWriter.h:123
otb::Polygon::Pointer
itk::SmartPointer< Self > Pointer
Definition: otbPolygon.h:50
otb::FEATURE_POLYGON
@ FEATURE_POLYGON
Definition: otbDataNode.h:45
otbMapFileProductWriter.h
otbMsgDevMacro
#define otbMsgDevMacro(x)
Definition: otbMacro.h:64
otb::MapFileProductWriter::OutputPointType
TransformType::OutputPointType OutputPointType
Definition: otbMapFileProductWriter.h:124
otb::MapFileProductWriter::InputImageType
TInputImage InputImageType
Definition: otbMapFileProductWriter.h:83
otb::MapFileProductWriter::IndexType
InputImageType::IndexType IndexType
Definition: otbMapFileProductWriter.h:89