forked from organicmaps/organicmaps
[search] [assessment-tool] Stopped filling unknown positions in samples with zeros.
This commit is contained in:
parent
463856b89f
commit
19c778bc37
11 changed files with 64 additions and 48 deletions
|
@ -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)
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue