Skip to content
Snippets Groups Projects
Commit c4488bf8 authored by Arnaud Jaen's avatar Arnaud Jaen
Browse files

Add Field to features using the new field wrappers in StreamingVectorizedSegmentation

parent eefacb8e
Branches
Tags
No related merge requests found
......@@ -94,11 +94,6 @@ FusionOGRTileFilter<TInputImage>
inputLayer.ogr().StartTransaction();
for(unsigned int y=1; y<=nbRowStream; y++)
{
std::cout<< " column tile number : " << x*y <<std::endl;
/*std::cout<< " column tile number : " << x*y <<std::endl;
itk::TimeProbe chrono;
chrono.Start(); */
//First we get all the feature that intersect the streaming line of the Upper/left stream
std::vector<FeatureStruct> upperStreamFeatureList;
upperStreamFeatureList.clear();
......@@ -135,12 +130,10 @@ FusionOGRTileFilter<TInputImage>
OGRLayerType::const_iterator featIt = inputLayer.begin();
for(;featIt!=inputLayer.end(); ++featIt)
{
std::cout<< " before structure " <<std::endl;
FeatureStruct s(inputLayer.GetLayerDefn());
s.feat = *featIt;
s.fusioned = false;
upperStreamFeatureList.push_back(s);
std::cout<< " after structure " <<std::endl;
}
//Do the same thing for the lower/right stream
......@@ -171,7 +164,7 @@ FusionOGRTileFilter<TInputImage>
inputLayer.SetSpatialFilterRect(ulCorner[0],lrCorner[1],lrCorner[0],ulCorner[1]);
for(featIt = inputLayer.begin();featIt!=inputLayer.end(); std::advance(featIt, 1))
for(featIt = inputLayer.begin();featIt!=inputLayer.end(); ++featIt)
{
FeatureStruct s(inputLayer.GetLayerDefn());
s.feat = *featIt;
......@@ -189,10 +182,8 @@ FusionOGRTileFilter<TInputImage>
{
FeatureStruct upper = upperStreamFeatureList[u];
FeatureStruct lower = lowerStreamFeatureList[l];
std::cout<< " before Intersects ? " <<std::endl;
if (ogr::Intersects(*upper.feat.GetGeometry(), *lower.feat.GetGeometry()))
{
std::cout<< " before intersection " <<std::endl;
ogr::UniqueGeometryPtr intersection = ogr::Intersection(*upper.feat.GetGeometry(),*lower.feat.GetGeometry());
if (intersection)
{
......@@ -233,37 +224,25 @@ FusionOGRTileFilter<TInputImage>
std::sort(fusionList.begin(),fusionList.end(),SortFeature);
for(unsigned int i=0; i<fusionListSize; i++)
{
std::cout<< " before feature struct 1 " <<std::endl;
FeatureStruct upper = upperStreamFeatureList.at(fusionList.at(i).indStream1);
std::cout<< " before feature struct 2 " <<std::endl;
FeatureStruct lower = lowerStreamFeatureList.at(fusionList.at(i).indStream2);
if( !upper.fusioned && !lower.fusioned )
{
std::cout<< " before fusion " <<std::endl;
upperStreamFeatureList[fusionList[i].indStream1].fusioned = true;
lowerStreamFeatureList[fusionList[i].indStream2].fusioned = true;
ogr::UniqueGeometryPtr fusionPolygon = ogr::Union(*upper.feat.GetGeometry(),*lower.feat.GetGeometry());
std::cout<< " after fusion " <<std::endl;
OGRFeatureType fusionFeature(inputLayer.GetLayerDefn());
fusionFeature.SetGeometry( fusionPolygon.get() );
std::cout<< " after Set geometry " <<std::endl;
//fusionFeature.SetField(0,upper.feat->GetFieldAsInteger(0));
ogr::Field field = upper.feat[0];
fusionFeature[0].SetValue(field.GetValue<int>());
inputLayer.CreateFeature(fusionFeature);
std::cout<< " after Create feature " <<std::endl;
inputLayer.DeleteFeature(lower.feat.GetFID());
std::cout<< " after Delete Feature " <<std::endl;
inputLayer.DeleteFeature(upper.feat.GetFID());
std::cout<< " after Delete Feature 2 " <<std::endl;
}
}
/*chrono.Stop();
std::cout<< "Column fusion tile took " << chrono.GetTotal() << " sec"<<std::endl; */
} //end for x
inputLayer.ogr().CommitTransaction();
std::cout<< " after CommitTransaction " <<std::endl;
} //end for y
inputLayer.ogr().CommitTransaction();
......
......@@ -179,7 +179,7 @@ LabelImageToOGRDataSourceFilter<TInputImage>
OGRLayerType outputLayer = ogrDS->CreateLayer("layer",NULL,wkbPolygon,NULL);
OGRFieldDefn field(m_FieldName.c_str(),OFTInteger);
outputLayer.CreateField(&field, true);
outputLayer.CreateField(field, true);
//Call GDALPolygonize()
char ** options;
......
......@@ -24,6 +24,7 @@
#include "otbPersistentImageToOGRDataFilter.h"
#include "itkTimeProbe.h"
#include <boost/foreach.hpp>
#include <stdio.h>
namespace otb
{
......@@ -113,12 +114,20 @@ PersistentImageToOGRDataFilter<TImage>
char * opt = "SPATIALITE=YES";
options = CSLAddString(options, opt );
m_DataSource = ogrDriver->CreateDataSource(this->m_FileName.c_str(), &options[0]); */
ogrDS->CreateLayer(m_LayerName, oSRS ,m_GeometryType, NULL);
OGRFieldDefn field(m_FieldName.c_str(),OFTInteger);
ogrDS->GetLayer(m_LayerName).CreateField(&field, true);
//Handle the case of shapefile ....
if (ogrDS->GetLayersCount() == 1)
{
ogrDS->GetLayer(0).CreateField(field, true);
}
else
{
ogrDS->GetLayer(m_LayerName).CreateField(field, true);
}
//CSLDestroy( options );
}
......@@ -134,7 +143,9 @@ PersistentImageToOGRDataFilter<TImage>
OGRLayerType srcLayer = currentTileVD->GetLayerChecked(0);
OGRDataSourcePointerType ogrDS = this->GetOGRDataSource();
OGRLayerType dstLayer = ogrDS->GetLayer(m_LayerName);
OGRLayerType dstLayer = ogrDS->GetLayersCount() == 1
? ogrDS->GetLayer(0)
: ogrDS->GetLayer(m_LayerName);
//Copy features in the output layer
itk::TimeProbe chrono;
......@@ -142,7 +153,7 @@ PersistentImageToOGRDataFilter<TImage>
dstLayer.ogr().StartTransaction();
OGRLayerType::const_iterator featIt = srcLayer.begin();
for(;featIt!=srcLayer.end(); std::advance(featIt, 1))
for(;featIt!=srcLayer.end(); ++featIt)
{
OGRFeatureType dstFeature(dstLayer.GetLayerDefn());
dstFeature.SetFrom( *featIt, TRUE );
......
......@@ -108,68 +108,37 @@ PersistentStreamingLabelImageToOGRDataFilter<TImageType, TSegmentationFilter>
//Relabeling
//itk::TimeProbe chrono3;
//chrono3.Start();
itk::TimeProbe chrono3;
chrono3.Start();
OGRDataSourcePointerType tmpDS = const_cast<OGRDataSourceType *>(labelImageToOGRDataFilter->GetOutput());
/*OGRLayerType tmpLayer = tmpDS->GetLayer(0);
OGRLayerType tmpLayer = tmpDS->GetLayer(0);
unsigned int ind = 0;
std::map<int,int> relabelMap;
typename OGRLayerType::const_iterator featIt = tmpLayer.begin();
for(;featIt!=tmpLayer.end(); std::advance(featIt, 1))
for(;featIt!=tmpLayer.end(); ++featIt)
{
int fieldValue = (*featIt)[0].GetValue<int>();
ogr::Field field = (*featIt)[0];
int fieldValue = field.GetValue<int>();
if (relabelMap.find(fieldValue) == relabelMap.end())
{
relabelMap[fieldValue] = static_cast<int>(ind);
ind = ind + 1;
}
}
for(featIt = tmpLayer.begin();featIt!=tmpLayer.end(); std::advance(featIt, 1))
for(featIt = tmpLayer.begin();featIt!=tmpLayer.end(); ++featIt)
{
int fieldValue = (*featIt)[0].GetValue<int>();
ogr::Field field = (*featIt)[0];
int fieldValue = field.GetValue<int>();
int newFieldValue = relabelMap[fieldValue] + m_TileMaxLabel;
//*featIt.SetField(0,newFieldValue);
*featIt.UnsetField(0);
*featIt.SetField(this->GetFieldName().c_str(),newFieldValue);
field.Unset();
field.SetValue(newFieldValue);
//Need to rewrite the feature otherwise changes are not considered.
tmpLayer.SetFeature(*featIt);
}
m_TileMaxLabel = m_TileMaxLabel + relabelMap.size();
chrono3.Stop();
std::cout<< "relabel took " << chrono3.GetTotal() << " sec"<<std::endl;*/
/*while (i<nbFeatures)
{
poFeature = poLayer->GetNextFeature();
int fieldValue = poFeature->GetFieldAsInteger(0);
if (relabelMap.find(fieldValue) == relabelMap.end())
{
relabelMap[fieldValue] = static_cast<int>(ind);
ind = ind + 1;
}
OGRFeature::DestroyFeature( poFeature );
i++;
}
i = 0;
poLayer->ResetReading();
while (i<nbFeatures)
{
poFeature = poLayer->GetNextFeature();
int fieldValue = poFeature->GetFieldAsInteger(0);
int newFieldValue = relabelMap[fieldValue] + m_TileMaxLabel;
poFeature->SetField(0,newFieldValue);
poFeature->UnsetField(0);
poFeature->SetField(this->GetFieldName().c_str(),newFieldValue);
//Need to rewrite the feature otherwise changes are not considered.
poLayer->SetFeature(poFeature);
OGRFeature::DestroyFeature( poFeature );
i++;
}
m_TileMaxLabel = m_TileMaxLabel + relabelMap.size();
chrono3.Stop();
std::cout<< "relabel took " << chrono3.GetTotal() << " sec"<<std::endl;*/
std::cout<< "relabel took " << chrono3.GetTotal() << " sec"<<std::endl;
return tmpDS;
}
......
......@@ -251,7 +251,7 @@ ADD_TEST(obTvStreamingVectorizedSegmentationOGR ${OBIA_TESTS1}
#${TEMP}/obTvStreamingVectorizedSegmentationOutput.sqlite
otbStreamingVectorizedSegmentationOGR
${INPUTDATA}/QB_Toulouse_Ortho_PAN.tif
${TEMP}/obTvStreamingVectorizedSegmentationOGR.sqlite
${TEMP}/obTvStreamingVectorizedSegmentationOGR.shp
NewLayer
100
5
......@@ -261,9 +261,9 @@ ADD_TEST(obTvStreamingVectorizedSegmentationOGR ${OBIA_TESTS1}
# ------- otb::FusionOGRTileFilter -------------
ADD_TEST(obTuFusionOGRTileFilter ${OBIA_TESTS1}
--compare-ogr ${EPSILON_8}
${BASELINE_FILES}/obTvFusionOGRTile.sqlite
${TEMP}/obTvFusionOGRTile.sqlite
# --compare-ogr ${EPSILON_8}
# ${BASELINE_FILES}/obTvFusionOGRTile.sqlite
# ${TEMP}/obTvFusionOGRTile.sqlite
otbFusionOGRTileFilter
${INPUTDATA}/QB_Toulouse_Ortho_PAN.tif
${INPUTDATA}/QB_Toulouse_Ortho_withTiles.sqlite
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment