diff --git a/Code/OBIA/otbFusionOGRTileFilter.h b/Code/OBIA/otbFusionOGRTileFilter.h index ed18d633a0abc0d455117d76a1e93fb91d55317c..aa6676c62498dde56aafc5eb794642e91abcb6d2 100644 --- a/Code/OBIA/otbFusionOGRTileFilter.h +++ b/Code/OBIA/otbFusionOGRTileFilter.h @@ -20,9 +20,9 @@ #include "otbOGRDataSourceWrapper.h" -#if(GDAL_VERSION_NUM < 1800) -#error FusionOGRTileFilter requires GDAL version >= 1.8.0 -#endif +//#if(GDAL_VERSION_NUM < 1800) +//#error FusionOGRTileFilter requires GDAL version >= 1.8.0 +//#endif #include "itkProcessObject.h" @@ -121,7 +121,13 @@ protected: } SortFeature; void ProcessStreamingLine(bool line); - + /** get length in case of OGRGeometryCollection. + * This function recodes the get_lenght method available since gdal 1.8.0 + * in the case of OGRGeometryCollection. The aim is allow to access polygon stiching + * functionalities with gdal 1.6. + */ + double GetLengthOGRGeometryCollection(OGRGeometryCollection * intersection); + private: FusionOGRTileFilter(const Self &); //purposely not implemented void operator =(const Self&); //purposely not implemented diff --git a/Code/OBIA/otbFusionOGRTileFilter.txx b/Code/OBIA/otbFusionOGRTileFilter.txx index 4d33c185f8c6ddf60349d31db689b18542bd3cff..27cdf154541d7884bc81a03d0aad8ba5ed5f28d3 100644 --- a/Code/OBIA/otbFusionOGRTileFilter.txx +++ b/Code/OBIA/otbFusionOGRTileFilter.txx @@ -73,7 +73,30 @@ FusionOGRTileFilter<TInputImage> return static_cast<OGRDataSourceType *> (this->itk::ProcessObject::GetInput(1)); } - +template<class TInputImage> +double +FusionOGRTileFilter<TInputImage> +::GetLengthOGRGeometryCollection( OGRGeometryCollection * intersection ) +{ + double dfLength = 0.0; + for( int iGeom = 0; iGeom < intersection->getNumGeometries(); iGeom++ ) + { + OGRGeometry* geom = intersection->getGeometryRef(iGeom); + switch( wkbFlatten(geom->getGeometryType()) ) + { + case wkbLinearRing: + case wkbLineString: + dfLength += ((OGRCurve *) geom)->get_Length(); + break; + case wkbGeometryCollection: + dfLength += GetLengthOGRGeometryCollection(dynamic_cast<OGRGeometryCollection *> (geom)); + break; + default: + break; + } + } + return dfLength; +} template<class TInputImage> void FusionOGRTileFilter<TInputImage> @@ -210,8 +233,13 @@ FusionOGRTileFilter<TInputImage> } else if (intersection->getGeometryType() == wkbMultiLineString) { - fusion.overlap = dynamic_cast<OGRMultiLineString *>(intersection.get())->get_Length(); - } + #if(GDAL_VERSION_NUM < 1800) + fusion.overlap = GetLengthOGRGeometryCollection(dynamic_cast<OGRGeometryCollection *> (intersection.get())); + #else + fusion.overlap = dynamic_cast<OGRMultiLineString *>(intersection.get())->get_Length(); + #endif + } + long upperFID = upper.feat.GetFID(); long lowerFID = lower.feat.GetFID(); diff --git a/Testing/Code/OBIA/CMakeLists.txt b/Testing/Code/OBIA/CMakeLists.txt index 9a2492c9ac79c2651e1ca3e2c92e3dd1c032c57d..1706d330cb922ea48810d174ba8dd1d5155d6dc3 100644 --- a/Testing/Code/OBIA/CMakeLists.txt +++ b/Testing/Code/OBIA/CMakeLists.txt @@ -270,7 +270,7 @@ ADD_TEST(obTvStreamingVectorizedSegmentationOGR ${OBIA_TESTS1} ) -IF(${GDAL_NUM_VERSION} VERSION_GREATER "10800") +#IF(${GDAL_NUM_VERSION} VERSION_GREATER "10800") # ------- otb::FusionOGRTileFilter ------------- ADD_TEST(obTuFusionOGRTileFilter ${OBIA_TESTS1} # --compare-ogr ${EPSILON_8} @@ -283,7 +283,7 @@ ADD_TEST(obTuFusionOGRTileFilter ${OBIA_TESTS1} layer 112 ) -ENDIF(${GDAL_NUM_VERSION} VERSION_GREATER "10800") +#ENDIF(${GDAL_NUM_VERSION} VERSION_GREATER "10800") # OBIATests2 (need PQXX) IF(OTB_USE_PQXX) @@ -353,9 +353,9 @@ otbStreamingVectorizedSegmentationOGR.cxx otbFusionOGRTileFilter.cxx ) -IF(${GDAL_NUM_VERSION} VERSION_LESS "10800") -LIST(REMOVE_ITEM BasicOBIA_SRCS1 otbFusionOGRTileFilter.cxx) -ENDIF(${GDAL_NUM_VERSION} VERSION_LESS "10800") +#IF(${GDAL_NUM_VERSION} VERSION_LESS "10800") +#LIST(REMOVE_ITEM BasicOBIA_SRCS1 otbFusionOGRTileFilter.cxx) +#ENDIF(${GDAL_NUM_VERSION} VERSION_LESS "10800") IF(OTB_USE_PQXX) diff --git a/Testing/Code/OBIA/otbOBIATests1.cxx b/Testing/Code/OBIA/otbOBIATests1.cxx index d3884c23c5e2cd830591cad1272495711c50d87c..f8a2a3c60c6218f94b8644087750685b86d9358a 100644 --- a/Testing/Code/OBIA/otbOBIATests1.cxx +++ b/Testing/Code/OBIA/otbOBIATests1.cxx @@ -68,7 +68,7 @@ REGISTER_TEST(otbLabelImageToOGRDataSourceFilterNew); REGISTER_TEST(otbLabelImageToOGRDataSourceFilter); REGISTER_TEST(otbStreamingVectorizedSegmentationOGRNew); REGISTER_TEST(otbStreamingVectorizedSegmentationOGR); -#if GDAL_VERSION_NUM >= 1800 +//#if GDAL_VERSION_NUM >= 1800 REGISTER_TEST(otbFusionOGRTileFilter); -#endif +//#endif }