Skip to content
Snippets Groups Projects
Commit 79433374 authored by Arthur Vincent's avatar Arthur Vincent Committed by Guillaume Pasero
Browse files

REFAC : ReadInputListSample refactoring. precompute field's index

parent 85a944e0
No related branches found
No related tags found
No related merge requests found
......@@ -99,7 +99,7 @@ private:
bool shouldComputeConfidenceMap() const;
/** Method returning the input list sample from the input layer */
typename ListSampleType::Pointer ReadInputListSample(otb::ogr::Layer const& layer);
typename ListSampleType::Pointer ReadInputListSample(ogr::DataSource::Pointer source);
/** Normalize a list sample using the statistic file given */
typename ListSampleType::Pointer NormalizeListSample(ListSampleType::Pointer input);
......
......@@ -73,23 +73,29 @@ void VectorPrediction<RegressionMode>::DoUpdateParameters()
}
template <bool RegressionMode>
typename VectorPrediction<RegressionMode>::ListSampleType::Pointer VectorPrediction<RegressionMode>::ReadInputListSample(otb::ogr::Layer const& layer)
typename VectorPrediction<RegressionMode>::ListSampleType::Pointer VectorPrediction<RegressionMode>::ReadInputListSample(ogr::DataSource::Pointer source)
{
auto layer = source->GetLayer(0);
typename ListSampleType::Pointer input = ListSampleType::New();
const int nbFeatures = GetSelectedItems("feat").size();
const unsigned int nbFeatures = GetSelectedItems("feat").size();
input->SetMeasurementVectorSize(nbFeatures);
ogr::Feature feature = layer.ogr().GetNextFeature();
std::vector<int> featureFieldIndex(nbFeatures, -1);
for (unsigned int i = 0; i < nbFeatures; i++)
{
featureFieldIndex[i] = feature.ogr().GetFieldIndex(GetChoiceNames("feat")[GetSelectedItems("feat")[i]].c_str());
if (featureFieldIndex[i] < 0)
otbAppLogFATAL("The field name for feature " << GetChoiceNames("feat")[GetSelectedItems("feat")[i]].c_str() << " has not been found" << std::endl);
}
layer.ogr().ResetReading();
for (auto const& feature : layer)
{
MeasurementType mv(nbFeatures);
for (int idx = 0; idx < nbFeatures; ++idx)
for (unsigned int idx = 0; idx < nbFeatures; ++idx)
{
// Beware that itemIndex differs from ogr layer field index
unsigned int itemIndex = GetSelectedItems("feat")[idx];
std::string fieldName = GetChoiceNames("feat")[itemIndex];
auto field = feature[fieldName];
auto field = feature[featureFieldIndex[idx]];
switch (field.GetType())
{
case OFTInteger:
......@@ -108,6 +114,7 @@ typename VectorPrediction<RegressionMode>::ListSampleType::Pointer VectorPredict
return input;
}
template <bool RegressionMode>
typename VectorPrediction<RegressionMode>::ListSampleType::Pointer VectorPrediction<RegressionMode>::NormalizeListSample(ListSampleType::Pointer input)
{
......@@ -280,13 +287,11 @@ void VectorPrediction<RegressionMode>::DoExecute()
auto shapefileName = GetParameterString("in");
auto source = otb::ogr::DataSource::New(shapefileName, otb::ogr::DataSource::Modes::Read);
ogr::DataSource::Pointer source = ogr::DataSource::New(shapefileName, ogr::DataSource::Modes::Read);
auto layer = source->GetLayer(0);
auto input = ReadInputListSample(layer);
auto input = ReadInputListSample(source);
ListSampleType::Pointer listSample = NormalizeListSample(input);
typename LabelListSampleType::Pointer target;
// The quality listSample containing confidence values is defined here, but is only used when
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment