From d636bf4c0bfb573e6b30bb0c5b64a34fc3b1c42d Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Wed, 2 Mar 2016 21:13:20 +0300 Subject: [PATCH] Setters to create new feature. --- indexer/editable_map_object.cpp | 36 ++++++++++++++++++++++++++++++++- indexer/editable_map_object.hpp | 2 ++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index 8379dfc72d..51323430e8 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -8,6 +8,7 @@ namespace osm { bool EditableMapObject::IsNameEditable() const { return m_editableProperties.m_name; } bool EditableMapObject::IsAddressEditable() const { return m_editableProperties.m_address; } + vector EditableMapObject::GetEditableProperties() const { return MetadataToProps(m_editableProperties.m_metadata); @@ -19,6 +20,7 @@ vector const & EditableMapObject::GetEditableFields() } StringUtf8Multilang const & EditableMapObject::GetName() const { return m_name; } + vector EditableMapObject::GetLocalizedNames() const { vector result; @@ -33,6 +35,7 @@ vector EditableMapObject::GetLocalizedNames() const vector const & EditableMapObject::GetNearbyStreets() const { return m_nearbyStreets; } string const & EditableMapObject::GetHouseNumber() const { return m_houseNumber; } + string EditableMapObject::GetPostcode() const { return m_metadata.Get(feature::Metadata::FMD_POSTCODE); @@ -49,6 +52,7 @@ void EditableMapObject::SetEditableProperties(osm::EditableProperties const & pr } void EditableMapObject::SetName(StringUtf8Multilang const & name) { m_name = name; } + void EditableMapObject::SetName(string const & name, int8_t langCode) { if (!name.empty()) @@ -56,12 +60,40 @@ void EditableMapObject::SetName(string const & name, int8_t langCode) } void EditableMapObject::SetMercator(m2::PointD const & center) { m_mercator = center; } + +void EditableMapObject::SetType(uint32_t featureType) +{ + if (m_types.GetGeoType() == feature::EGeomType::GEOM_UNDEFINED) + { + // Support only point type for newly created features. + m_types = feature::TypesHolder(feature::EGeomType::GEOM_POINT); + m_types.Assign(featureType); + } + else + { + // Correctly replace "main" type in cases when feature holds more types. + ASSERT(!m_types.Empty(), ()); + feature::TypesHolder copy = m_types; + // TODO(mgsergio): Replace by correct sorting from editor's config. + copy.SortBySpec(); + m_types.Remove(*copy.begin()); + m_types.operator ()(featureType); + } +} + +void EditableMapObject::SetID(FeatureID const & fid) { m_featureID = fid; } void EditableMapObject::SetStreet(string const & street) { m_street = street; } + void EditableMapObject::SetNearbyStreets(vector const & streets) { m_nearbyStreets = streets; } -void EditableMapObject::SetHouseNumber(string const & houseNumber) { m_houseNumber = houseNumber; } +void EditableMapObject::SetHouseNumber(string const & houseNumber) +{ + // TODO(AlexZ): Check house number for validity with feature::IsHouseNumber ? + // TODO(AlexZ): Store edited house number as house name if feature::IsHouseNumber() returned false. + m_houseNumber = houseNumber; +} void EditableMapObject::SetPostcode(string const & postcode) { m_metadata.Set(feature::Metadata::FMD_POSTCODE, postcode); @@ -108,6 +140,7 @@ void EditableMapObject::SetOperator(string const & op) void EditableMapObject::SetElevation(double ele) { + // TODO: Reuse existing validadors in generator (osm2meta). constexpr double kMaxElevationOnTheEarthInMeters = 10000; constexpr double kMinElevationOnTheEarthInMeters = -15000; if (ele < kMaxElevationOnTheEarthInMeters && ele > kMinElevationOnTheEarthInMeters) @@ -132,6 +165,7 @@ void EditableMapObject::SetBuildingLevels(string const & buildingLevels) } string const & EditableMapObject::GetStreet() const { return m_street; } + void EditableMapObject::SetCuisines(vector const & cuisine) { m_metadata.Set(feature::Metadata::FMD_CUISINE, strings::JoinStrings(cuisine, ';')); diff --git a/indexer/editable_map_object.hpp b/indexer/editable_map_object.hpp index b6970367ba..5805555dcf 100644 --- a/indexer/editable_map_object.hpp +++ b/indexer/editable_map_object.hpp @@ -57,6 +57,8 @@ public: void SetName(StringUtf8Multilang const & name); void SetName(string const & name, int8_t langCode = StringUtf8Multilang::kDefaultCode); void SetMercator(m2::PointD const & center); + void SetType(uint32_t featureType); + void SetID(FeatureID const & fid); // void SetTypes(feature::TypesHolder const & types); void SetStreet(string const & street); void SetNearbyStreets(vector const & streets);