diff --git a/Code/Common/otbVectorDataExtractROI.txx b/Code/Common/otbVectorDataExtractROI.txx index 70e0895e04a2cb02bd7610683e87b048f1d7404a..783a6589bbe2d1099b6da98cb09bb37fd6e79232 100644 --- a/Code/Common/otbVectorDataExtractROI.txx +++ b/Code/Common/otbVectorDataExtractROI.txx @@ -64,7 +64,10 @@ VectorDataExtractROI<TVectorData> typename VectorDataType::Pointer output = this->GetOutput(); /** put this here*/ - output->SetProjectionRef(input->GetProjectionRef()); + if(!input->GetProjectionRef().empty()) + output->SetProjectionRef(input->GetProjectionRef()); + else + if(!input) return; @@ -93,7 +96,9 @@ VectorDataExtractROI<TVectorData> DataNodePointerType newDataNodeFolder = DataNodeType::New(); DataNodePointerType newDataNodeMultiPolygon = DataNodeType::New(); DataNodePointerType newDataNodeMultiLine = DataNodeType::New(); + DataNodePointerType newDataNodeMultiFeature = DataNodeType::New(); + /** Walking trough the input vector data */ typedef itk::PreOrderTreeIterator<DataTreeType> TreeIteratorType; TreeIteratorType it(input->GetDataTree()); @@ -144,6 +149,12 @@ VectorDataExtractROI<TVectorData> currentContainer = newDataNodeFolder; newFolder = false; } + if(newMultiFeature) + { + tree->Add(newDataNodeMultiFeature,currentContainer); + currentContainer = newDataNodeMultiFeature; + newMultiFeature = false; + } newDataNode->SetNodeType(dataNode->GetNodeType()); newDataNode->SetNodeId(dataNode->GetNodeId()); newDataNode->SetPoint(dataNode->GetPoint()); @@ -164,8 +175,8 @@ VectorDataExtractROI<TVectorData> } if(newMultiFeature) { - tree->Add(newDataNodeMultiLine,currentContainer); - currentContainer = newDataNodeMultiLine; + tree->Add(newDataNodeMultiFeature ,currentContainer); + currentContainer = newDataNodeMultiFeature ; newMultiFeature = false; } newDataNode->SetNodeType(dataNode->GetNodeType()); @@ -185,10 +196,11 @@ VectorDataExtractROI<TVectorData> currentContainer = newDataNodeFolder; newFolder = false; } + if(newMultiFeature) { - tree->Add(newDataNodeMultiPolygon,currentContainer); - currentContainer = newDataNodeMultiPolygon; + tree->Add(newDataNodeMultiFeature,currentContainer); + currentContainer = newDataNodeMultiFeature ; newMultiFeature = false; } @@ -202,23 +214,24 @@ VectorDataExtractROI<TVectorData> } case FEATURE_MULTIPOINT: { - newDataNode->SetNodeType(dataNode->GetNodeType()); - newDataNode->SetNodeId(dataNode->GetNodeId()); - tree->Add(newDataNode,currentContainer); - currentContainer = newDataNode; + newDataNodeMultiFeature->SetNodeType(dataNode->GetNodeType()); + newDataNodeMultiFeature ->SetNodeId(dataNode->GetNodeId()); + newMultiFeature = true; + + break; } case FEATURE_MULTILINE: { - newDataNodeMultiLine->SetNodeType(dataNode->GetNodeType()); - newDataNodeMultiLine->SetNodeId(dataNode->GetNodeId()); + newDataNodeMultiFeature ->SetNodeType(dataNode->GetNodeType()); + newDataNodeMultiFeature ->SetNodeId(dataNode->GetNodeId()); newMultiFeature = true; break; } case FEATURE_MULTIPOLYGON: { - newDataNodeMultiPolygon->SetNodeType(dataNode->GetNodeType()); - newDataNodeMultiPolygon->SetNodeId(dataNode->GetNodeId()); + newDataNodeMultiFeature ->SetNodeType(dataNode->GetNodeType()); + newDataNodeMultiFeature->SetNodeId(dataNode->GetNodeId()); newMultiFeature = true; break; } @@ -316,6 +329,7 @@ VectorDataExtractROI<TVectorData> /** INVERSE : From long/lat to InputVectorData projection*/ typedef otb::GenericMapProjection<otb::FORWARD> InverseMapProjectionType; InverseMapProjectionType::Pointer mapInverseTransform = InverseMapProjectionType::New(); + if(this->GetInput()->GetProjectionRef().empty()) { std::string inputProjectionRef = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]"; diff --git a/Testing/Code/Common/CMakeLists.txt b/Testing/Code/Common/CMakeLists.txt index 0cf97e9d779632035cd39f50e7cf81e2d4202c87..7170f7c439d2956f659d76a4d5828355f0292537 100644 --- a/Testing/Code/Common/CMakeLists.txt +++ b/Testing/Code/Common/CMakeLists.txt @@ -138,7 +138,8 @@ ADD_TEST(coTvVectorDataExtractROI ${COMMON_TESTS2} otbVectorDataExtractROI ${INPUTDATA}/ToulousePoints-examples.shp #${LARGEDATA}/TOULOUSE/QuickBird/GIS_FILES/000000128955_01_ORDER_SHAPE.shp ${TEMP}/coVectorDataExtractROIOutput.shp - 1.588 48.2544 1.2222 1.33001 + 374369.48850211215904 4828951.58612491376698 # Origin of the CartoRegion + 1000.25 25000.2 # Size of the Cartoregion ) # ------- otb::MultiChannelExtractROI ------------------------------