From ffd4f86234d928328327a0915c894e2a38f9549a Mon Sep 17 00:00:00 2001
From: Luc Hermitte <luc.hermitte@c-s.fr>
Date: Thu, 21 Jun 2012 19:13:00 +0200
Subject: [PATCH] TEST: OTB-151/GeometriesProjectionFilter -- tests for point,
 lines and polygons

---
 Examples/Projections/GeometriesProjection.cxx |  2 -
 Testing/Code/Projections/CMakeLists.txt       | 32 ++++++++
 .../otbGeometriesProjectionFilter.cxx         | 74 +++++++++++++++++++
 .../Code/Projections/otbProjectionsTests3.cxx |  1 +
 4 files changed, 107 insertions(+), 2 deletions(-)
 create mode 100644 Testing/Code/Projections/otbGeometriesProjectionFilter.cxx

diff --git a/Examples/Projections/GeometriesProjection.cxx b/Examples/Projections/GeometriesProjection.cxx
index 3cd709dc3e..f46a84afb0 100644
--- a/Examples/Projections/GeometriesProjection.cxx
+++ b/Examples/Projections/GeometriesProjection.cxx
@@ -35,8 +35,6 @@
 
 #include "otbGeometriesProjectionFilter.h"
 #include "otbGeometriesSet.h"
-// #include "otbGeometriesFileReader.h"
-// #include "otbGeometriesFileWriter.h"
 
 #include "otbImage.h"
 #include "otbImageFileReader.h"
diff --git a/Testing/Code/Projections/CMakeLists.txt b/Testing/Code/Projections/CMakeLists.txt
index c3710c42f7..6849156851 100644
--- a/Testing/Code/Projections/CMakeLists.txt
+++ b/Testing/Code/Projections/CMakeLists.txt
@@ -1136,6 +1136,37 @@ ADD_TEST(prTvVectorDataProjectionFilterPolygons ${PROJECTIONS_TESTS3}
 )
 
 
+#test points
+ADD_TEST(prTvGeometriesProjectionFilterPoints ${PROJECTIONS_TESTS3}
+        --compare-ogr ${NOTOL}
+            ${BASELINE_FILES}/prTvVectorDataProjectionFilterPoints.shp
+            ${TEMP}/prTvGeometriesProjectionFilterPoints.shp
+        otbGeometriesProjectionFilter
+        ${INPUTDATA}/ToulousePoints-examples.shp
+        ${TEMP}/prTvGeometriesProjectionFilterPoints.shp
+)
+
+#test lines
+ADD_TEST(prTvGeometriesProjectionFilterLines ${PROJECTIONS_TESTS3}
+        --compare-ogr ${NOTOL}
+            ${BASELINE_FILES}/prTvVectorDataProjectionFilterLines.shp
+            ${TEMP}/prTvGeometriesProjectionFilterLines.shp
+        otbGeometriesProjectionFilter
+        ${INPUTDATA}/ToulouseRoad-examples.shp
+        ${TEMP}/prTvGeometriesProjectionFilterLines.shp
+)
+
+# test polygons
+ADD_TEST(prTvGeometriesProjectionFilterPolygons ${PROJECTIONS_TESTS3}
+        --compare-ogr  ${NOTOL}
+            ${BASELINE_FILES}/prTvVectorDataProjectionFilterPolygons.shp
+            ${TEMP}/prTvGeometriesProjectionFilterPolygons.shp
+        otbGeometriesProjectionFilter
+        ${INPUTDATA}/Capitole-Shadows.shp
+        ${TEMP}/prTvGeometriesProjectionFilterPolygons.shp
+)
+
+
 # test to sensor
 # NB: no prj file here as it is in sensor geometry
 IF(OTB_DATA_USE_LARGEINPUT)
@@ -1645,6 +1676,7 @@ otbVectorDataProjectionFilterFromMapToGeo.cxx
 otbVectorDataProjectionFilterFromMapToImage.cxx
 otbVectorDataProjectionFilterFromGeoToMap.cxx
 otbVectorDataIntoImageProjectionFilterTest.cxx
+otbGeometriesProjectionFilter.cxx
 otbGeocentricTransformNew.cxx
 otbGeocentricTransform.cxx
 otbTileMapTransform.cxx
diff --git a/Testing/Code/Projections/otbGeometriesProjectionFilter.cxx b/Testing/Code/Projections/otbGeometriesProjectionFilter.cxx
new file mode 100644
index 0000000000..0041185ff6
--- /dev/null
+++ b/Testing/Code/Projections/otbGeometriesProjectionFilter.cxx
@@ -0,0 +1,74 @@
+/*=========================================================================
+
+  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.
+
+=========================================================================*/
+
+/*===========================================================================*/
+/*===============================[ Includes ]================================*/
+/*===========================================================================*/
+#include "otbGeometriesProjectionFilter.h"
+#include <fstream>
+#include "otbGeometriesSet.h"
+#include "otbStandardFilterWatcher.h"
+
+/*===========================================================================*/
+/*==============================[ other stuff ]==============================*/
+/*===========================================================================*/
+int otbGeometriesProjectionFilter(int argc, char * argv[])
+{
+  if (argc < 3)
+    {
+    std::cout << argv[0] << " <input filename> <output filename> [<output text>]\n";
+    return EXIT_FAILURE;
+    }
+
+  typedef otb::GeometriesSet InputGeometriesType;
+  typedef otb::GeometriesSet OutputGeometriesType;
+  otb::ogr::DataSource::Pointer input = otb::ogr::DataSource::New(
+    argv[1], otb::ogr::DataSource::Modes::read);
+  InputGeometriesType::Pointer in_set = InputGeometriesType::New(input);
+
+  typedef otb::GeometriesProjectionFilter GeometriesFilterType;
+  GeometriesFilterType::Pointer filter = GeometriesFilterType::New();
+
+  filter->SetInput(in_set);
+
+  const std::string projectionRefWkt =
+    "PROJCS[\"UTM Zone 31, Northern Hemisphere\", GEOGCS[\"WGS 84\", DATUM[\"WGS_1984\", SPHEROID[\"WGS 84\", 6378137, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]], TOWGS84[0, 0, 0, 0, 0, 0, 0], AUTHORITY[\"EPSG\",\"6326\"]], PRIMEM[\"Greenwich\", 0, AUTHORITY[\"EPSG\",\"8901\"]], UNIT[\"degree\", 0.0174532925199433, AUTHORITY[\"EPSG\",\"9108\"]], AXIS[\"Lat\", NORTH], AXIS[\"Long\", EAST], AUTHORITY[\"EPSG\",\"4326\"]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"latitude_of_origin\", 0], PARAMETER[\"central_meridian\", 3], PARAMETER[\"scale_factor\", 0.9996], PARAMETER[\"false_easting\", 500000], PARAMETER[\"false_northing\", 0], UNIT[\"Meter\", 1]]";
+
+  filter->SetOutputProjectionRef(projectionRefWkt);
+
+  otb::StandardFilterWatcher watcher(filter, "GeometriesProjection");
+
+  otb::ogr::DataSource::Pointer output = otb::ogr::DataSource::New(
+    argv[2], otb::ogr::DataSource::Modes::write);
+  OutputGeometriesType::Pointer out_set = OutputGeometriesType::New(output);
+
+  filter->SetOutput(out_set);
+  filter->Update();
+
+  //Output the tree in a text file
+  if (argc >= 4)
+    {
+    std::ofstream file(argv[3]);
+
+    file << "Original data\n" << in_set << "\n\n";
+
+    file << "Reprojected data\n" << out_set << "\n\n";
+    }
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Projections/otbProjectionsTests3.cxx b/Testing/Code/Projections/otbProjectionsTests3.cxx
index 8c7d99bf93..36d87277b3 100644
--- a/Testing/Code/Projections/otbProjectionsTests3.cxx
+++ b/Testing/Code/Projections/otbProjectionsTests3.cxx
@@ -39,6 +39,7 @@ void RegisterTests()
   REGISTER_TEST(otbVectorDataProjectionFilterFromMapToGeo);
   REGISTER_TEST(otbVectorDataProjectionFilterFromMapToImage);
   REGISTER_TEST(otbVectorDataProjectionFilterFromGeoToMap);
+  REGISTER_TEST(otbGeometriesProjectionFilter);
   REGISTER_TEST(otbGeocentricTransformNew);
   REGISTER_TEST(otbGeocentricTransform);
   REGISTER_TEST(otbTileMapTransform);
-- 
GitLab