[search] [assessment-tool] Stopped filling unknown positions in samples with zeros.

This commit is contained in:
Maxim Pimenov 2019-03-21 00:17:12 +03:00 committed by Tatiana Yan
parent 463856b89f
commit 19c778bc37
11 changed files with 64 additions and 48 deletions

View file

@ -120,7 +120,7 @@ void MainModel::OnSampleSelected(int index)
auto & context = m_contexts[index];
auto const & sample = context.m_sample;
m_view->ShowSample(index, sample, sample.m_posAvailable, sample.m_pos, context.HasChanges());
m_view->ShowSample(index, sample, sample.m_pos, context.HasChanges());
ResetSearch();
auto const timestamp = m_queryTimestamp;
@ -218,8 +218,8 @@ void MainModel::OnShowPositionClicked()
auto const & context = m_contexts[m_selectedSample];
vector<m2::PointD> points;
if (context.m_sample.m_posAvailable)
points.push_back(context.m_sample.m_pos);
if (context.m_sample.m_pos)
points.push_back(*context.m_sample.m_pos);
size_t resultsAdded = 0;
for (auto const & result : context.m_foundResults)

View file

@ -99,14 +99,14 @@ void MainView::OnSearchCompleted()
m_sampleView->OnSearchCompleted();
}
void MainView::ShowSample(size_t sampleIndex, search::Sample const & sample, bool positionAvailable,
m2::PointD const & position, bool hasEdits)
void MainView::ShowSample(size_t sampleIndex, search::Sample const & sample,
boost::optional<m2::PointD> const & position, bool hasEdits)
{
m_sampleLocale = sample.m_locale;
MoveViewportToRect(sample.m_viewport);
m_sampleView->SetContents(sample, positionAvailable, position);
m_sampleView->SetContents(sample, position);
m_sampleView->show();
OnResultChanged(sampleIndex, ResultType::Found, Edits::Update::MakeAll());

View file

@ -32,8 +32,8 @@ public:
void SetSamples(ContextList::SamplesSlice const & samples) override;
void OnSearchStarted() override;
void OnSearchCompleted() override;
void ShowSample(size_t sampleIndex, search::Sample const & sample, bool positionAvailable,
m2::PointD const & position, bool hasEdits) override;
void ShowSample(size_t sampleIndex, search::Sample const & sample,
boost::optional<m2::PointD> const & position, bool hasEdits) override;
void AddFoundResults(search::Results::ConstIter begin, search::Results::ConstIter end) override;
void ShowNonFoundResults(std::vector<search::Sample::Result> const & results,

View file

@ -167,8 +167,8 @@ SampleView::SampleView(QWidget * parent, Framework & framework)
Clear();
}
void SampleView::SetContents(search::Sample const & sample, bool positionAvailable,
m2::PointD const & position)
void SampleView::SetContents(search::Sample const & sample,
boost::optional<m2::PointD> const & position)
{
if (!sample.m_query.empty())
{
@ -189,9 +189,9 @@ void SampleView::SetContents(search::Sample const & sample, bool positionAvailab
m_relatedQueriesBox->show();
ClearAllResults();
m_positionAvailable = positionAvailable;
if (m_positionAvailable)
ShowUserPosition(position);
m_position = position;
if (m_position)
ShowUserPosition(*m_position);
else
HideUserPosition();
}
@ -209,7 +209,7 @@ void SampleView::OnSearchCompleted()
{
m_spinner->Hide();
auto const resultsAvailable = m_foundResults->HasResultsWithPoints();
if (m_positionAvailable)
if (m_position)
{
if (resultsAvailable)
m_showPosition->setText(tr("Show position and top results"));
@ -319,7 +319,7 @@ void SampleView::Clear()
ClearAllResults();
HideUserPosition();
m_positionAvailable = false;
m_position = boost::none;
OnSearchCompleted();
}

View file

@ -6,6 +6,8 @@
#include "geometry/point2d.hpp"
#include <boost/optional.hpp>
#include <QtCore/QMargins>
#include <QtWidgets/QWidget>
@ -25,8 +27,7 @@ public:
SampleView(QWidget * parent, Framework & framework);
void SetContents(search::Sample const & sample, bool positionAvailable,
m2::PointD const & position);
void SetContents(search::Sample const & sample, boost::optional<m2::PointD> const & position);
void OnSearchStarted();
void OnSearchCompleted();
@ -89,5 +90,5 @@ private:
QMargins m_rightAreaMargins;
QMargins m_defaultMargins;
bool m_positionAvailable = false;
boost::optional<m2::PointD> m_position;
};

View file

@ -12,6 +12,8 @@
#include <string>
#include <vector>
#include <boost/optional.hpp>
class Edits;
class Model;
@ -31,8 +33,8 @@ public:
virtual void SetSamples(ContextList::SamplesSlice const & samples) = 0;
virtual void OnSearchStarted() = 0;
virtual void OnSearchCompleted() = 0;
virtual void ShowSample(size_t index, search::Sample const & sample, bool positionAvailable,
m2::PointD const & position, bool hasEdits) = 0;
virtual void ShowSample(size_t index, search::Sample const & sample,
boost::optional<m2::PointD> const & position, bool hasEdits) = 0;
virtual void AddFoundResults(search::Results::ConstIter begin,
search::Results::ConstIter end) = 0;

View file

@ -6,6 +6,7 @@
#include "std/target_os.hpp"
#include <memory>
#include <utility>
#include <sys/resource.h>
@ -112,14 +113,18 @@ void FromJSONObject(json_t * root, string const & field, PointD & point)
FromJSONObject(root, field.c_str(), point);
}
bool FromJSONObjectOptional(json_t * root, char const * field, PointD & point)
void FromJSONObjectOptional(json_t * root, char const * field, boost::optional<PointD> & point)
{
json_t * p = base::GetJSONOptionalField(root, field);
if (!p || base::JSONIsNull(p))
return false;
{
point = boost::none;
return;
}
ParsePoint(p, point);
return true;
PointD parsed;
ParsePoint(p, parsed);
point = move(parsed);
}
void ToJSONObject(json_t & root, char const * field, PointD const & point)
@ -130,13 +135,26 @@ void ToJSONObject(json_t & root, char const * field, PointD const & point)
json_object_set_new(&root, field, json.release());
}
bool FromJSONObjectOptional(json_t * root, string const & field, PointD & point)
void FromJSONObjectOptional(json_t * root, string const & field, boost::optional<PointD> & point)
{
return FromJSONObjectOptional(root, field.c_str(), point);
FromJSONObjectOptional(root, field.c_str(), point);
}
void ToJSONObject(json_t & root, string const & field, PointD const & point)
{
ToJSONObject(root, field.c_str(), point);
}
void ToJSONObject(json_t & root, char const * field, boost::optional<PointD> const & point)
{
if (point)
ToJSONObject(root, field, *point);
else
ToJSONObject(root, field, base::NewJSONNull());
}
void ToJSONObject(json_t & root, std::string const & field, boost::optional<PointD> const & point)
{
ToJSONObject(root, field.c_str(), point);
}
} // namespace m2

View file

@ -5,6 +5,8 @@
#include <cstdint>
#include <string>
#include <boost/optional.hpp>
#include "3party/jansson/myjansson.hpp"
namespace search
@ -25,10 +27,13 @@ void FromJSONObject(json_t * root, std::string const & field, RectD & rect);
void ToJSONObject(json_t & root, std::string const & field, RectD const & rect);
void FromJSONObject(json_t * root, char const * field, PointD & point);
bool FromJSONObjectOptional(json_t * root, char const * field, PointD & point);
void FromJSONObjectOptional(json_t * root, char const * field, boost::optional<PointD> & point);
void FromJSONObject(json_t * root, std::string const & field, PointD & point);
bool FromJSONObjectOptional(json_t * root, std::string const & field, PointD & point);
void FromJSONObjectOptional(json_t * root, std::string const & field,
boost::optional<PointD> & point);
void ToJSONObject(json_t & root, char const * field, PointD const & point);
void ToJSONObject(json_t & root, std::string const & field, PointD const & point);
void ToJSONObject(json_t & root, char const * field, boost::optional<PointD> const & point);
void ToJSONObject(json_t & root, std::string const & field, boost::optional<PointD> const & point);
} // namespace m2

View file

@ -11,7 +11,6 @@
#include "base/string_utils.hpp"
#include <algorithm>
#include <ios>
#include <memory>
#include <sstream>
@ -118,8 +117,6 @@ bool Sample::operator<(Sample const & rhs) const
return m_locale < rhs.m_locale;
if (m_pos != rhs.m_pos)
return m_pos < rhs.m_pos;
if (m_posAvailable != rhs.m_posAvailable)
return m_posAvailable < rhs.m_posAvailable;
if (m_viewport != rhs.m_viewport)
return LessRect(m_viewport, rhs.m_viewport);
if (!Equal(m_results, rhs.m_results))
@ -167,9 +164,7 @@ void Sample::DeserializeFromJSONImpl(json_t * root)
{
FromJSONObject(root, "query", m_query);
FromJSONObject(root, "locale", m_locale);
m_posAvailable = FromJSONObjectOptional(root, "position", m_pos);
FromJSONObjectOptional(root, "position", m_pos);
FromJSONObject(root, "viewport", m_viewport);
FromJSONObjectOptional(root, "results", m_results);
FromJSONObjectOptional(root, "related_queries", m_relatedQueries);
@ -191,9 +186,7 @@ void Sample::FillSearchParams(search::SearchParams & params) const
params.m_inputLocale = m_locale;
params.m_viewport = m_viewport;
params.m_mode = Mode::Everywhere;
if (m_posAvailable)
params.m_position = m_pos;
params.m_position = m_pos.value_or(m2::PointD());
params.m_needAddress = true;
params.m_suggestsEnabled = false;
params.m_needHighlighting = false;
@ -293,8 +286,7 @@ string DebugPrint(Sample const & s)
oss << "[";
oss << "query: " << DebugPrint(s.m_query) << ", ";
oss << "locale: " << s.m_locale << ", ";
oss << "pos: " << DebugPrint(s.m_pos) << ", ";
oss << "posAvailable: " << boolalpha << s.m_posAvailable << ", ";
oss << "pos: " << (s.m_pos ? DebugPrint(*s.m_pos) : "null") << ", ";
oss << "viewport: " << DebugPrint(s.m_viewport) << ", ";
oss << "results: [";
for (size_t i = 0; i < s.m_results.size(); ++i)

View file

@ -10,6 +10,8 @@
#include <string>
#include <vector>
#include <boost/optional.hpp>
class FeatureType;
namespace search
@ -58,8 +60,7 @@ struct Sample
strings::UniString m_query;
std::string m_locale;
m2::PointD m_pos = m2::PointD(0, 0);
bool m_posAvailable = false;
boost::optional<m2::PointD> m_pos;
m2::RectD m_viewport = m2::RectD(0, 0, 0, 0);
std::vector<Result> m_results;
std::vector<strings::UniString> m_relatedQueries;

View file

@ -29,8 +29,7 @@ void SampleTest::Init()
{
m_cuba.m_query = strings::MakeUniString("cuba");
m_cuba.m_locale = "en";
m_cuba.m_pos = {37.618706, 99.53730574302003};
m_cuba.m_posAvailable = true;
m_cuba.m_pos = m2::PointD{37.618706, 99.53730574302003};
m_cuba.m_viewport = {37.1336, 67.1349, 38.0314, 67.7348};
search::Sample::Result cubaRes;
cubaRes.m_name = strings::MakeUniString("Cuba");
@ -44,8 +43,7 @@ void SampleTest::Init()
m_riga.m_query = strings::MakeUniString("riga");
m_riga.m_locale = "en";
m_riga.m_pos = {37.65376, 98.51110651930014};
m_riga.m_posAvailable = true;
m_riga.m_pos = m2::PointD{37.65376, 98.51110651930014};
m_riga.m_viewport = {37.5064, 67.0476, 37.7799, 67.304};
search::Sample::Result rigaRes;
rigaRes.m_name = strings::MakeUniString("Rīga");
@ -57,8 +55,7 @@ void SampleTest::Init()
m_tula.m_query = strings::MakeUniString("tula");
m_tula.m_locale = "en";
m_tula.m_pos = {0.0, 0.0};
m_tula.m_posAvailable = false;
m_tula.m_pos = boost::none;
m_tula.m_viewport = {37.5064, 67.0476, 37.7799, 67.304};
}
} // namespace
@ -165,7 +162,7 @@ UNIT_CLASS_TEST(SampleTest, Arrays)
UNIT_CLASS_TEST(SampleTest, SerDes)
{
vector<Sample> expected = {m_cuba, m_riga};
vector<Sample> expected = {m_cuba, m_riga, m_tula};
std::string lines;
Sample::SerializeToJSONLines(expected, lines);