Commit 483160a2 authored by Emmanuel Christophe's avatar Emmanuel Christophe

ENH: add VectorDataProjectionFilter example

parent 9e07f661
......@@ -55,6 +55,9 @@ namespace otb
*
* \ingroup VectorDataFilter
* \ingroup Projection
*
* \example Projections/VectorDataProjectionExample.cxx
*
*/
template <class TInputVectorData, class TOutputVectorData>
......
......@@ -23,6 +23,9 @@ ADD_EXECUTABLE(PlaceNameToLonLat PlaceNameToLonLat.cxx )
TARGET_LINK_LIBRARIES(PlaceNameToLonLat OTBProjections OTBCommon OTBIO ITKCommon ITKIO ${CURL_LIBRARY} tinyXML)
ENDIF( OTB_USE_CURL )
ADD_EXECUTABLE(VectorDataProjectionExample VectorDataProjectionExample.cxx )
TARGET_LINK_LIBRARIES(VectorDataProjectionExample OTBProjections OTBCommon OTBIO)
IF( NOT OTB_DISABLE_CXX_TESTING AND BUILD_TESTING )
SET(BASELINE ${OTB_DATA_ROOT}/Baseline/Examples/Projections)
......@@ -44,36 +47,36 @@ ADD_TEST(OrthoRectificationExampleTest ${EXE_TESTS}
--compare-image ${TOL}
${BASELINE}/panOrthoToul.tif
${TEMP}/panOrthoToul.tif
OrthoRectificationExampleTest
${INPUTLARGEDATA}/TOULOUSE/QuickBird/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF
${TEMP}/panOrthoToul.tif
OrthoRectificationExampleTest
${INPUTLARGEDATA}/TOULOUSE/QuickBird/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF
${TEMP}/panOrthoToul.tif
31
N
375000
4828100
500
500
0.6
375000
4828100
500
500
0.6
-0.6
)
ADD_TEST(OrthoRectificationExampleXSTest ${EXE_TESTS}
--compare-image ${TOL}
${BASELINE}/xsOrthoToul.tif
${TEMP}/xsOrthoToul.tif
OrthoRectificationExampleTest
OrthoRectificationExampleTest
${INPUTLARGEDATA}/TOULOUSE/QuickBird/000000128955_01_P001_MUL/02APR01105228-M1BS-000000128955_01_P001.TIF
${TEMP}/xsOrthoToul.tif
${TEMP}/xsOrthoToul.tif
31
N
375000
4828100
500
500
0.6
375000
4828100
500
500
0.6
-0.6
)
ENDIF(OTB_DATA_USE_LARGEINPUT)
......
/*=========================================================================
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.
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
// Software Guide : BeginLatex
//
// Let's assume that you have a KML file (hence in geographical coordinate)
// that you would like to superpose to some image with a specific map projection.
// Of course, you could use the handy ogr2ogr tool to do that, but it won't
// integrate so seamlessly into your OTB application.
//
// You can also supposed that the image on which you want to superpose the data
// is not in a specific map projection but a raw image from a specific sensor.
// Thanks to OTB, the same code below will be able to do the appropriate
// conversion.
//
// This example demonstrates the use of the
// \doxygen{otb}{VectorDataProjectionFilter}.
//
// Software Guide : EndLatex
#include "otbVectorDataProjectionFilter.h"
#include "otbVectorData.h"
#include "otbVectorDataFileReader.h"
#include "otbVectorDataFileWriter.h"
#include "otbImage.h"
#include "otbImageFileReader.h"
int main( int argc, char* argv[] )
{
if(argc < 3 )
{
std::cout << argv[0] <<" <input vector filename> <input image name> <output vector filename> " << std::endl;
return EXIT_FAILURE;
}
// Software Guide : BeginLatex
//
// Declare the vector data type that you would like to use in your application
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef otb::VectorData<double > InputVectorDataType;
typedef otb::VectorData<double > OutputVectorDataType;
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Declare and instanciate the vector data reader:
// \doxygen{otb}{VectorDataFileReader}. The call to the
// \code{UpdateOutputInformation()} method fill up the header information.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef otb::VectorDataFileReader<InputVectorDataType> VectorDataFileReaderType;
VectorDataFileReaderType::Pointer reader = VectorDataFileReaderType::New();
reader->SetFileName(argv[1]);
reader->UpdateOutputInformation();
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// We need the image only to retrieve its projection information, i.e. map projection
// or sensor model parameters. Hence, the image pixels won't be read, only the header
// information using the \code{UpdateOutputInformation()} method.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef otb::Image<unsigned short int, 2> ImageType;
typedef otb::ImageFileReader<ImageType> ImageReaderType;
ImageReaderType::Pointer imageReader = ImageReaderType::New();
imageReader->SetFileName(argv[2]);
imageReader->UpdateOutputInformation();
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// The \doxygen{otb}{VectorDataProjectionFilter} will do the work of converting the vector
// data coordinates. It is usually a good idea to use it when you design applications
// reading or saving vector data.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef otb::VectorDataProjectionFilter<InputVectorDataType,OutputVectorDataType> VectorDataFilterType;
VectorDataFilterType::Pointer vectorDataProjection = VectorDataFilterType::New();
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Information concerning the original projection of the vector data will be automatically
// retrieved from the metadata. Nothing else is needed from you:
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
vectorDataProjection->SetInput(reader->GetOutput());
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Information concerning the target projection are retrieved directly from
// the image:
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
vectorDataProjection->SetOutputKeywordList(imageReader->GetOutput()->GetImageKeywordlist());
vectorDataProjection->SetOutputOrigin(imageReader->GetOutput()->GetOrigin());
vectorDataProjection->SetOutputSpacing(imageReader->GetOutput()->GetSpacing());
vectorDataProjection->SetOutputProjectionRef(imageReader->GetOutput()->GetProjectionRef());
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// Finally, the result is saved into a new vector file
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
typedef otb::VectorDataFileWriter<OutputVectorDataType> VectorDataFileWriterType;
VectorDataFileWriterType::Pointer writer = VectorDataFileWriterType::New();
writer->SetFileName(argv[3]);
writer->SetInput(vectorDataProjection->GetOutput());
writer->Update();
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
//
// It is worth noting that none of this code is specific to the vector data format. Whether
// you pass a shapefile, or a KML file, the correct driver will be automatically instanciated.
//
// Software Guide : EndLatex
return EXIT_SUCCESS;
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment