diff options
author | Alex Zolotarev <alex@maps.me> | 2016-03-02 21:13:20 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:50:53 +0300 |
commit | d636bf4c0bfb573e6b30bb0c5b64a34fc3b1c42d (patch) | |
tree | 4feafa881f338cbba2ff6e5be3360c5ce493377a /indexer/editable_map_object.cpp | |
parent | 165af3aa5c2339622a01e04ea726e9181474fb52 (diff) |
Setters to create new feature.
Diffstat (limited to 'indexer/editable_map_object.cpp')
-rw-r--r-- | indexer/editable_map_object.cpp | 36 |
1 files changed, 35 insertions, 1 deletions
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<Props> EditableMapObject::GetEditableProperties() const { return MetadataToProps(m_editableProperties.m_metadata); @@ -19,6 +20,7 @@ vector<feature::Metadata::EType> const & EditableMapObject::GetEditableFields() } StringUtf8Multilang const & EditableMapObject::GetName() const { return m_name; } + vector<LocalizedName> EditableMapObject::GetLocalizedNames() const { vector<LocalizedName> result; @@ -33,6 +35,7 @@ vector<LocalizedName> EditableMapObject::GetLocalizedNames() const vector<string> 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<string> 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<string> const & cuisine) { m_metadata.Set(feature::Metadata::FMD_CUISINE, strings::JoinStrings(cuisine, ';')); |