Review fixes

This commit is contained in:
Denis Koronchik 2017-09-08 14:51:10 +03:00 committed by Michael Krasnyk
parent 84cb7865ab
commit ff3b398e23
3 changed files with 33 additions and 6 deletions

View File

@ -14,6 +14,7 @@
- New property for profile table: `excludable` that can be used to configure which classes are excludable at query time. - New property for profile table: `excludable` that can be used to configure which classes are excludable at query time.
- New optional property for profile table: `classes` that allows you to specify which classes you expect to be used. - New optional property for profile table: `classes` that allows you to specify which classes you expect to be used.
We recommend this for better error messages around classes, otherwise the possible class names are infered automatically. We recommend this for better error messages around classes, otherwise the possible class names are infered automatically.
- New function to support relations: `process_relation`. Read more in profiles documentation.
- Traffic: - Traffic:
- If traffic data files contain an empty 4th column, they will update edge durations but not modify the edge weight. This is useful for - If traffic data files contain an empty 4th column, they will update edge durations but not modify the edge weight. This is useful for
updating ETAs returned, without changing route selection (for example, in a distance-based profile with traffic data loaded). updating ETAs returned, without changing route selection (for example, in a distance-based profile with traffic data loaded).

View File

@ -11,9 +11,17 @@ namespace util
class OsmIDTyped class OsmIDTyped
{ {
public: public:
enum class Type : uint8_t
{
Unknown = 0,
Node,
Way,
Relation
};
using HashType = std::uint64_t; using HashType = std::uint64_t;
OsmIDTyped(std::uint64_t id_, std::uint8_t type_) : id(id_), type(type_) OsmIDTyped(std::uint64_t id_, Type type_) : id(id_), type(type_)
{ {
// check if type value not above type size bound // check if type value not above type size bound
BOOST_ASSERT(id_ < (std::uint64_t(1) << 56)); BOOST_ASSERT(id_ < (std::uint64_t(1) << 56));
@ -25,11 +33,11 @@ class OsmIDTyped
inline HashType Hash() const { return (std::uint64_t(id) | std::uint64_t(type) << 56); } inline HashType Hash() const { return (std::uint64_t(id) | std::uint64_t(type) << 56); }
std::uint64_t GetID() const { return id; } std::uint64_t GetID() const { return id; }
std::uint8_t GetType() const { return type; } Type GetType() const { return type; }
private: private:
std::uint64_t id : 56; std::uint64_t id : 56;
std::uint8_t type; Type type;
}; };
} // namespace util } // namespace util

View File

@ -353,7 +353,25 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
osmium::item_type GetItemType() const { return item_type; } osmium::item_type GetItemType() const { return item_type; }
osmium::object_id_type GetId() const { return id; } osmium::object_id_type GetId() const { return id; }
util::OsmIDTyped ref() const { return util::OsmIDTyped(id, std::uint8_t(item_type)); } util::OsmIDTyped ref() const
{
switch (item_type)
{
case osmium::item_type::node:
return util::OsmIDTyped(id, util::OsmIDTyped::Type::Node);
case osmium::item_type::way:
return util::OsmIDTyped(id, util::OsmIDTyped::Type::Way);
case osmium::item_type::relation:
return util::OsmIDTyped(id, util::OsmIDTyped::Type::Relation);
default:
break;
}
return util::OsmIDTyped(id, util::OsmIDTyped::Type::Unknown);
}
std::string role; std::string role;
osmium::item_type item_type; osmium::item_type item_type;
@ -804,7 +822,7 @@ void Sol2ScriptingEnvironment::ProcessElements(
local_context.properties.call_tagless_node_function)) local_context.properties.call_tagless_node_function))
{ {
const osmium::Node &node = static_cast<const osmium::Node &>(*entity); const osmium::Node &node = static_cast<const osmium::Node &>(*entity);
const util::OsmIDTyped id(node.id(), std::uint8_t(node.type())); const util::OsmIDTyped id(node.id(), util::OsmIDTyped::Type::Node);
local_context.ProcessNode(node, result_node, relations.Get(id)); local_context.ProcessNode(node, result_node, relations.Get(id));
} }
resulting_nodes.push_back(std::pair<const osmium::Node &, ExtractionNode>( resulting_nodes.push_back(std::pair<const osmium::Node &, ExtractionNode>(
@ -815,7 +833,7 @@ void Sol2ScriptingEnvironment::ProcessElements(
if (local_context.has_way_function) if (local_context.has_way_function)
{ {
const osmium::Way &way = static_cast<const osmium::Way &>(*entity); const osmium::Way &way = static_cast<const osmium::Way &>(*entity);
const util::OsmIDTyped id(way.id(), std::uint8_t(way.type())); const util::OsmIDTyped id(way.id(), util::OsmIDTyped::Type::Way);
local_context.ProcessWay(way, result_way, relations.Get(id)); local_context.ProcessWay(way, result_way, relations.Get(id));
} }
resulting_ways.push_back(std::pair<const osmium::Way &, ExtractionWay>( resulting_ways.push_back(std::pair<const osmium::Way &, ExtractionWay>(