| 2870 | } |
| 2871 | |
| 2872 | void SetStreet(search::ReverseGeocoder const & coder, DataSource const & dataSource, FeatureType & ft, |
| 2873 | osm::EditableMapObject & emo) |
| 2874 | { |
| 2875 | // Get exact feature's street address (if any) from mwm, |
| 2876 | // together with all nearby streets. |
| 2877 | auto const streets = coder.GetNearbyStreets(ft); |
| 2878 | |
| 2879 | string street = coder.GetFeatureStreetName(ft); |
| 2880 | |
| 2881 | auto localizedStreets = TakeSomeStreetsAndLocalize(streets, dataSource); |
| 2882 | |
| 2883 | if (!street.empty()) |
| 2884 | { |
| 2885 | auto it = find_if(begin(streets), end(streets), |
| 2886 | [&street](search::ReverseGeocoder::Street const & s) { return s.m_name == street; }); |
| 2887 | |
| 2888 | if (it != end(streets)) |
| 2889 | { |
| 2890 | osm::LocalizedStreet ls; |
| 2891 | if (!LocalizeStreet(dataSource, it->m_id, ls)) |
| 2892 | ls.m_defaultName = street; |
| 2893 | |
| 2894 | emo.SetStreet(ls); |
| 2895 | |
| 2896 | // A street that a feature belongs to should always be in the first place in the list. |
| 2897 | auto it = find_if(begin(localizedStreets), end(localizedStreets), |
| 2898 | [&ls](osm::LocalizedStreet const & rs) { return ls.m_defaultName == rs.m_defaultName; }); |
| 2899 | if (it != end(localizedStreets)) |
| 2900 | iter_swap(it, begin(localizedStreets)); |
| 2901 | else |
| 2902 | localizedStreets.insert(begin(localizedStreets), ls); |
| 2903 | } |
| 2904 | else |
| 2905 | { |
| 2906 | emo.SetStreet({street, ""}); |
| 2907 | } |
| 2908 | } |
| 2909 | else |
| 2910 | { |
| 2911 | emo.SetStreet({}); |
| 2912 | } |
| 2913 | |
| 2914 | emo.SetNearbyStreets(std::move(localizedStreets)); |
| 2915 | } |
| 2916 | |
| 2917 | void SetHostingBuildingAddress(FeatureID const & hostingBuildingFid, DataSource const & dataSource, |
| 2918 | search::ReverseGeocoder const & coder, osm::EditableMapObject & emo) |
no test coverage detected