mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 04:53:36 +00:00
[generator] Ignore edited status for nearby places during map generation
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
committed by
Yannik Bloscheck
parent
5c2e0b5b43
commit
2ae482de76
@@ -495,7 +495,7 @@ void BuildAddressTable(FilesContainerR & container, std::string const & addressD
|
|||||||
|
|
||||||
if (!street.empty())
|
if (!street.empty())
|
||||||
{
|
{
|
||||||
auto const streets = search::ReverseGeocoder::GetNearbyStreets(*contexts[threadIdx], center, kStreetRadiusM);
|
auto const streets = search::ReverseGeocoder::GetNearbyStreets(*contexts[threadIdx], center, kStreetRadiusM, true);
|
||||||
streetId = MatchObjectByName(street, streets, [](std::string_view name)
|
streetId = MatchObjectByName(street, streets, [](std::string_view name)
|
||||||
{ return search::GetStreetNameAsKey(name, false /* ignoreStreetSynonyms */); });
|
{ return search::GetStreetNameAsKey(name, false /* ignoreStreetSynonyms */); });
|
||||||
|
|
||||||
@@ -508,7 +508,7 @@ void BuildAddressTable(FilesContainerR & container, std::string const & addressD
|
|||||||
|
|
||||||
if (!place.empty())
|
if (!place.empty())
|
||||||
{
|
{
|
||||||
auto const places = search::ReverseGeocoder::GetNearbyPlaces(*contexts[threadIdx], center, kPlaceRadiusM);
|
auto const places = search::ReverseGeocoder::GetNearbyPlaces(*contexts[threadIdx], center, kPlaceRadiusM, true);
|
||||||
placeId = MatchObjectByName(place, places, [](std::string_view name) { return strings::MakeUniString(name); });
|
placeId = MatchObjectByName(place, places, [](std::string_view name) { return strings::MakeUniString(name); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,15 @@ MwmContext::MwmContext(MwmSet::MwmHandle handle, MwmType type) : MwmContext(std:
|
|||||||
m_type = type;
|
m_type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<FeatureType> MwmContext::GetFeature(uint32_t index) const
|
std::unique_ptr<FeatureType> MwmContext::GetFeature(uint32_t index, bool ignoredEditedStatus) const
|
||||||
{
|
{
|
||||||
|
if (ignoredEditedStatus) {
|
||||||
|
auto ft = m_vector.GetByIndex(index);
|
||||||
|
CHECK(ft, ());
|
||||||
|
ft->SetID(FeatureID(GetId(), index));
|
||||||
|
return ft;
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<FeatureType> ft;
|
std::unique_ptr<FeatureType> ft;
|
||||||
switch (GetEditedStatus(index))
|
switch (GetEditedStatus(index))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fn>
|
template <typename Fn>
|
||||||
void ForEachFeature(m2::RectD const & rect, Fn && fn) const
|
void ForEachFeature(m2::RectD const & rect, Fn && fn, bool ignoredEditedStatus = false) const
|
||||||
{
|
{
|
||||||
uint32_t const scale = m_value.GetHeader().GetLastScale();
|
uint32_t const scale = m_value.GetHeader().GetLastScale();
|
||||||
covering::Intervals intervals;
|
covering::Intervals intervals;
|
||||||
@@ -93,14 +93,14 @@ public:
|
|||||||
|
|
||||||
ForEachIndexImpl(intervals, scale, [&](uint32_t index)
|
ForEachIndexImpl(intervals, scale, [&](uint32_t index)
|
||||||
{
|
{
|
||||||
auto ft = GetFeature(index);
|
auto ft = GetFeature(index, ignoredEditedStatus);
|
||||||
if (ft)
|
if (ft)
|
||||||
fn(*ft);
|
fn(*ft);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns false if feature was deleted by user.
|
// Returns false if feature was deleted by user.
|
||||||
std::unique_ptr<FeatureType> GetFeature(uint32_t index) const;
|
std::unique_ptr<FeatureType> GetFeature(uint32_t index, bool ignoredEditedStatus = false) const;
|
||||||
|
|
||||||
[[nodiscard]] inline bool GetCenter(uint32_t index, m2::PointD & center) { return m_centers.Get(index, center); }
|
[[nodiscard]] inline bool GetCenter(uint32_t index, m2::PointD & center) { return m_centers.Get(index, center); }
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ ReverseGeocoder::ReverseGeocoder(DataSource const & dataSource) : m_dataSource(d
|
|||||||
|
|
||||||
template <class ObjT, class FilterT>
|
template <class ObjT, class FilterT>
|
||||||
vector<ObjT> GetNearbyObjects(search::MwmContext & context, m2::PointD const & center, double radiusM,
|
vector<ObjT> GetNearbyObjects(search::MwmContext & context, m2::PointD const & center, double radiusM,
|
||||||
FilterT && filter)
|
FilterT && filter, bool ignoredEditedStatus = false)
|
||||||
{
|
{
|
||||||
vector<ObjT> objs;
|
vector<ObjT> objs;
|
||||||
|
|
||||||
@@ -90,17 +90,17 @@ vector<ObjT> GetNearbyObjects(search::MwmContext & context, m2::PointD const & c
|
|||||||
if (!name.empty())
|
if (!name.empty())
|
||||||
objs.emplace_back(ft.GetID(), feature::GetMinDistanceMeters(ft, center), name, ft.GetNames());
|
objs.emplace_back(ft.GetID(), feature::GetMinDistanceMeters(ft, center), name, ft.GetNames());
|
||||||
}
|
}
|
||||||
});
|
}, ignoredEditedStatus);
|
||||||
|
|
||||||
sort(objs.begin(), objs.end(), base::LessBy(&ObjT::m_distanceMeters));
|
sort(objs.begin(), objs.end(), base::LessBy(&ObjT::m_distanceMeters));
|
||||||
return objs;
|
return objs;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<ReverseGeocoder::Street> ReverseGeocoder::GetNearbyStreets(search::MwmContext & context,
|
vector<ReverseGeocoder::Street> ReverseGeocoder::GetNearbyStreets(search::MwmContext & context,
|
||||||
m2::PointD const & center, double radiusM)
|
m2::PointD const & center, double radiusM, bool ignoredEditedStatus)
|
||||||
{
|
{
|
||||||
return GetNearbyObjects<Street>(context, center, radiusM,
|
return GetNearbyObjects<Street>(context, center, radiusM,
|
||||||
[](FeatureType & ft) { return StreetVicinityLoader::IsStreet(ft); });
|
[](FeatureType & ft) { return StreetVicinityLoader::IsStreet(ft); }, ignoredEditedStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<ReverseGeocoder::Street> ReverseGeocoder::GetNearbyStreets(MwmSet::MwmId const & id,
|
vector<ReverseGeocoder::Street> ReverseGeocoder::GetNearbyStreets(MwmSet::MwmId const & id,
|
||||||
@@ -122,13 +122,13 @@ vector<ReverseGeocoder::Street> ReverseGeocoder::GetNearbyStreets(FeatureType &
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ReverseGeocoder::Place> ReverseGeocoder::GetNearbyPlaces(search::MwmContext & context,
|
std::vector<ReverseGeocoder::Place> ReverseGeocoder::GetNearbyPlaces(search::MwmContext & context,
|
||||||
m2::PointD const & center, double radiusM)
|
m2::PointD const & center, double radiusM, bool ignoredEditedStatus)
|
||||||
{
|
{
|
||||||
return GetNearbyObjects<Place>(context, center, radiusM, [](FeatureType & ft)
|
return GetNearbyObjects<Place>(context, center, radiusM, [](FeatureType & ft)
|
||||||
{
|
{
|
||||||
return (ftypes::IsLocalityChecker::Instance().GetType(ft) >= ftypes::LocalityType::City ||
|
return (ftypes::IsLocalityChecker::Instance().GetType(ft) >= ftypes::LocalityType::City ||
|
||||||
ftypes::IsSuburbChecker::Instance()(ft));
|
ftypes::IsSuburbChecker::Instance()(ft));
|
||||||
});
|
}, ignoredEditedStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
string ReverseGeocoder::GetFeatureStreetName(FeatureType & ft) const
|
string ReverseGeocoder::GetFeatureStreetName(FeatureType & ft) const
|
||||||
|
|||||||
@@ -114,11 +114,11 @@ public:
|
|||||||
/// Parameter |includeSquaresAndSuburbs| needed for backward compatibility:
|
/// Parameter |includeSquaresAndSuburbs| needed for backward compatibility:
|
||||||
/// existing mwms operate on streets without squares and suburbs.
|
/// existing mwms operate on streets without squares and suburbs.
|
||||||
static std::vector<Street> GetNearbyStreets(search::MwmContext & context, m2::PointD const & center,
|
static std::vector<Street> GetNearbyStreets(search::MwmContext & context, m2::PointD const & center,
|
||||||
double radiusM = kLookupRadiusM);
|
double radiusM = kLookupRadiusM, bool ignoredEditedStatus = false);
|
||||||
std::vector<Street> GetNearbyStreets(MwmSet::MwmId const & id, m2::PointD const & center) const;
|
std::vector<Street> GetNearbyStreets(MwmSet::MwmId const & id, m2::PointD const & center) const;
|
||||||
std::vector<Street> GetNearbyStreets(FeatureType & ft) const;
|
std::vector<Street> GetNearbyStreets(FeatureType & ft) const;
|
||||||
|
|
||||||
static std::vector<Place> GetNearbyPlaces(search::MwmContext & context, m2::PointD const & center, double radiusM);
|
static std::vector<Place> GetNearbyPlaces(search::MwmContext & context, m2::PointD const & center, double radiusM, bool ignoredEditedStatus = false);
|
||||||
|
|
||||||
/// @return feature street name.
|
/// @return feature street name.
|
||||||
/// Returns empty string when there is no street the feature belongs to.
|
/// Returns empty string when there is no street the feature belongs to.
|
||||||
|
|||||||
@@ -35,13 +35,13 @@ void StreetVicinityLoader::OnQueryFinished()
|
|||||||
m_cache.ClearIfNeeded();
|
m_cache.ClearIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
StreetVicinityLoader::Street const & StreetVicinityLoader::GetStreet(uint32_t featureId)
|
StreetVicinityLoader::Street const & StreetVicinityLoader::GetStreet(uint32_t featureId, bool ignoredEditedStatus)
|
||||||
{
|
{
|
||||||
auto r = m_cache.Get(featureId);
|
auto r = m_cache.Get(featureId);
|
||||||
if (!r.second)
|
if (!r.second)
|
||||||
return r.first;
|
return r.first;
|
||||||
|
|
||||||
LoadStreet(featureId, r.first);
|
LoadStreet(featureId, r.first, ignoredEditedStatus);
|
||||||
return r.first;
|
return r.first;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,9 +54,9 @@ bool StreetVicinityLoader::IsStreet(FeatureType & ft)
|
|||||||
return ((isLineOrArea && ftypes::IsWayChecker::Instance()(ft)) || ftypes::IsSquareChecker::Instance()(ft));
|
return ((isLineOrArea && ftypes::IsWayChecker::Instance()(ft)) || ftypes::IsSquareChecker::Instance()(ft));
|
||||||
}
|
}
|
||||||
|
|
||||||
void StreetVicinityLoader::LoadStreet(uint32_t featureId, Street & street)
|
void StreetVicinityLoader::LoadStreet(uint32_t featureId, Street & street, bool ignoredEditedStatus)
|
||||||
{
|
{
|
||||||
auto feature = m_context->GetFeature(featureId);
|
auto feature = m_context->GetFeature(featureId, ignoredEditedStatus);
|
||||||
if (!feature || !IsStreet(*feature))
|
if (!feature || !IsStreet(*feature))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@@ -73,10 +73,10 @@ public:
|
|||||||
|
|
||||||
void OnQueryFinished();
|
void OnQueryFinished();
|
||||||
|
|
||||||
Street const & GetStreet(uint32_t featureId);
|
Street const & GetStreet(uint32_t featureId, bool ignoredEditedStatus = false);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void LoadStreet(uint32_t featureId, Street & street);
|
void LoadStreet(uint32_t featureId, Street & street, bool ignoredEditedStatus = false);
|
||||||
|
|
||||||
MwmContext * m_context;
|
MwmContext * m_context;
|
||||||
int m_scale;
|
int m_scale;
|
||||||
|
|||||||
Reference in New Issue
Block a user