Support British spelling of manoeuvre to comply with OSM standards.
This commit is contained in:
parent
c7daa521ad
commit
36840ef66f
@ -28,6 +28,8 @@ Feature: Maneuver tag support
|
|||||||
| maneuver | hij | i | cde | turn | sharp_left |
|
| maneuver | hij | i | cde | turn | sharp_left |
|
||||||
| maneuver | abc | c | cde | turn | slight_left |
|
| maneuver | abc | c | cde | turn | slight_left |
|
||||||
| maneuver | cde | c | cgi | turn | straight |
|
| maneuver | cde | c | cgi | turn | straight |
|
||||||
|
| maneuver | cde | c | cgi | turn | straight |
|
||||||
|
| manoeuvre | cde | c | abc | fork | right |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
@ -36,7 +38,7 @@ Feature: Maneuver tag support
|
|||||||
| b,g | A Street,C Street,C Street | depart,turn sharp right,arrive |
|
| b,g | A Street,C Street,C Street | depart,turn sharp right,arrive |
|
||||||
# Testing re-awakening suppressed turns
|
# Testing re-awakening suppressed turns
|
||||||
| a,e | A Street,B Street,B Street | depart,turn slight left,arrive |
|
| a,e | A Street,B Street,B Street | depart,turn slight left,arrive |
|
||||||
| e,i | B Street,C Street,C Street | depart,turn straight,arrive |
|
| e,a | B Street,A Street,A Street | depart,fork right,arrive |
|
||||||
|
|
||||||
Scenario: single via-way
|
Scenario: single via-way
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@ -11,7 +11,8 @@
|
|||||||
#include <boost/regex.hpp>
|
#include <boost/regex.hpp>
|
||||||
|
|
||||||
#include <osmium/osm.hpp>
|
#include <osmium/osm.hpp>
|
||||||
#include <osmium/tags/regex_filter.hpp>
|
#include <osmium/tags/filter.hpp>
|
||||||
|
#include <osmium/tags/taglist.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@ -31,16 +32,16 @@ ManeuverOverrideRelationParser::ManeuverOverrideRelationParser() {}
|
|||||||
boost::optional<InputManeuverOverride>
|
boost::optional<InputManeuverOverride>
|
||||||
ManeuverOverrideRelationParser::TryParse(const osmium::Relation &relation) const
|
ManeuverOverrideRelationParser::TryParse(const osmium::Relation &relation) const
|
||||||
{
|
{
|
||||||
osmium::tags::KeyFilter filter(false);
|
|
||||||
filter.add(true, "maneuver");
|
// Support both American and British spellings of maneuver/manoeuvre
|
||||||
|
osmium::tags::KeyValueFilter filter{false};
|
||||||
|
filter.add(true, "type", "maneuver");
|
||||||
|
filter.add(true, "type", "manoeuvre");
|
||||||
|
|
||||||
const osmium::TagList &tag_list = relation.tags();
|
const osmium::TagList &tag_list = relation.tags();
|
||||||
|
|
||||||
osmium::tags::KeyFilter::iterator fi_begin(filter, tag_list.begin(), tag_list.end());
|
if (osmium::tags::match_none_of(tag_list, filter))
|
||||||
osmium::tags::KeyFilter::iterator fi_end(filter, tag_list.end(), tag_list.end());
|
|
||||||
|
|
||||||
// if it's not a maneuver, continue;
|
// if it's not a maneuver, continue;
|
||||||
if (std::distance(fi_begin, fi_end) == 0)
|
|
||||||
{
|
{
|
||||||
return boost::none;
|
return boost::none;
|
||||||
}
|
}
|
||||||
@ -49,7 +50,16 @@ ManeuverOverrideRelationParser::TryParse(const osmium::Relation &relation) const
|
|||||||
// we can trim away the vector after parsing
|
// we can trim away the vector after parsing
|
||||||
InputManeuverOverride maneuver_override;
|
InputManeuverOverride maneuver_override;
|
||||||
|
|
||||||
maneuver_override.maneuver = relation.tags().get_value_by_key("maneuver", "");
|
// Handle both spellings
|
||||||
|
if (relation.tags().has_key("maneuver"))
|
||||||
|
{
|
||||||
|
maneuver_override.maneuver = relation.tags().get_value_by_key("maneuver", "");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maneuver_override.maneuver = relation.tags().get_value_by_key("manoeuvre", "");
|
||||||
|
}
|
||||||
|
|
||||||
maneuver_override.direction = relation.tags().get_value_by_key("direction", "");
|
maneuver_override.direction = relation.tags().get_value_by_key("direction", "");
|
||||||
|
|
||||||
bool valid_relation = true;
|
bool valid_relation = true;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user