mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-24 06:53:46 +00:00
[editor] Mark businesse as disused/vacant
Signed-off-by: map-per <map-per@gmx.de>
This commit is contained in:
@@ -87,6 +87,29 @@ vector<MapObject::MetadataID> EditableMapObject::GetEditableProperties() const
|
||||
return props;
|
||||
}
|
||||
|
||||
bool EditableMapObject::CanMarkPlaceAsDisused() const
|
||||
{
|
||||
auto types = GetTypes();
|
||||
types.SortBySpec();
|
||||
uint32_t mainType = *types.begin();
|
||||
std::string mainTypeStr = classif().GetReadableObjectName(mainType);
|
||||
|
||||
std::vector<string_view> typePrefixes = {
|
||||
"shop",
|
||||
"amenity-restaurant",
|
||||
"amenity-fast_food",
|
||||
"amenity-cafe",
|
||||
"amenity-pub",
|
||||
"amenity-bar",
|
||||
};
|
||||
|
||||
for (auto const & typePrefix : typePrefixes)
|
||||
if (mainTypeStr.starts_with(typePrefix))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
NamesDataSource EditableMapObject::GetNamesDataSource()
|
||||
{
|
||||
auto const mwmInfo = GetID().m_mwmId.GetInfo();
|
||||
@@ -656,6 +679,16 @@ void EditableMapObject::MarkAsCreated(uint32_t type, feature::GeomType geomType,
|
||||
m_journal.MarkAsCreated(type, geomType, std::move(mercator));
|
||||
}
|
||||
|
||||
void EditableMapObject::MarkAsDisused()
|
||||
{
|
||||
auto types = GetTypes();
|
||||
types.SortBySpec();
|
||||
uint32_t old_type = *types.begin();
|
||||
uint32_t new_type = classif().GetTypeByReadableObjectName("disusedbusiness");
|
||||
ApplyBusinessReplacement(new_type);
|
||||
m_journal.AddBusinessReplacement(old_type, new_type);
|
||||
}
|
||||
|
||||
void EditableMapObject::ClearJournal()
|
||||
{
|
||||
m_journal.Clear();
|
||||
@@ -673,7 +706,7 @@ void EditableMapObject::ApplyEditsFromJournal(EditJournal const & editJournal)
|
||||
void EditableMapObject::ApplyJournalEntry(JournalEntry const & entry)
|
||||
{
|
||||
LOG(LDEBUG, ("Applying Journal Entry: ", osm::EditJournal::ToString(entry)));
|
||||
// Todo
|
||||
|
||||
switch (entry.journalEntryType)
|
||||
{
|
||||
case JournalEntryType::TagModification:
|
||||
@@ -760,6 +793,12 @@ void EditableMapObject::ApplyJournalEntry(JournalEntry const & entry)
|
||||
ASSERT_FAIL(("Legacy Objects can not be loaded from Journal"));
|
||||
break;
|
||||
}
|
||||
case JournalEntryType::BusinessReplacement:
|
||||
{
|
||||
BusinessReplacementData const & businessReplacementData = std::get<BusinessReplacementData>(entry.data);
|
||||
ApplyBusinessReplacement(businessReplacementData.new_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -859,6 +898,47 @@ void EditableMapObject::LogDiffInJournal(EditableMapObject const & unedited_emo)
|
||||
}
|
||||
}
|
||||
|
||||
void EditableMapObject::ApplyBusinessReplacement(uint32_t new_type)
|
||||
{
|
||||
// Types
|
||||
feature::TypesHolder new_feature_types;
|
||||
|
||||
new_feature_types.Add(new_type); // Update feature type
|
||||
|
||||
std::string wheelchairType = feature::GetReadableWheelchairType(m_types);
|
||||
if (!wheelchairType.empty())
|
||||
new_feature_types.SafeAdd(classif().GetTypeByReadableObjectName(wheelchairType));
|
||||
|
||||
std::vector<uint32_t> const buildingTypes = ftypes::IsBuildingChecker::Instance().GetTypes();
|
||||
for(uint32_t const & type : buildingTypes)
|
||||
if (m_types.Has(type))
|
||||
new_feature_types.SafeAdd(type);
|
||||
|
||||
m_types = new_feature_types;
|
||||
|
||||
// Names
|
||||
m_name.Clear();
|
||||
|
||||
// Metadata
|
||||
feature::Metadata new_metadata;
|
||||
|
||||
constexpr MetadataID metadataToKeep[] = {
|
||||
MetadataID::FMD_WHEELCHAIR,
|
||||
MetadataID::FMD_POSTCODE,
|
||||
MetadataID::FMD_LEVEL,
|
||||
MetadataID::FMD_ELE,
|
||||
MetadataID::FMD_HEIGHT,
|
||||
MetadataID::FMD_MIN_HEIGHT,
|
||||
MetadataID::FMD_BUILDING_LEVELS,
|
||||
MetadataID::FMD_BUILDING_MIN_LEVEL
|
||||
};
|
||||
|
||||
for(MetadataID const & metadataID : metadataToKeep)
|
||||
new_metadata.Set(metadataID, std::string(m_metadata.Get(metadataID)));
|
||||
|
||||
m_metadata = new_metadata;
|
||||
}
|
||||
|
||||
bool AreObjectsEqualIgnoringStreet(EditableMapObject const & lhs, EditableMapObject const & rhs)
|
||||
{
|
||||
feature::TypesHolder const & lhsTypes = lhs.GetTypes();
|
||||
|
||||
Reference in New Issue
Block a user