reformat Descriptors/JSONDescriptor.h

This commit is contained in:
Dennis Luxen 2014-06-18 10:15:38 +02:00
parent 922a4331db
commit bbc0ba147a

View File

@ -69,11 +69,13 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
ExtractRouteNames<DataFacadeT, Segment> GenerateRouteNames; ExtractRouteNames<DataFacadeT, Segment> GenerateRouteNames;
public: public:
JSONDescriptor(DataFacadeT *facade) : facade(facade), entered_restricted_area_count(0) { } JSONDescriptor(DataFacadeT *facade) : facade(facade), entered_restricted_area_count(0) {}
void SetConfig(const DescriptorConfig &c) { config = c; } void SetConfig(const DescriptorConfig &c) { config = c; }
unsigned DescribeLeg(const std::vector<PathData> route_leg, const PhantomNodes &leg_phantoms, const bool target_traversed_in_reverse) unsigned DescribeLeg(const std::vector<PathData> route_leg,
const PhantomNodes &leg_phantoms,
const bool target_traversed_in_reverse)
{ {
unsigned added_element_count = 0; unsigned added_element_count = 0;
// Get all the coordinates for the computed route // Get all the coordinates for the computed route
@ -103,14 +105,15 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
} }
// check if first segment is non-zero // check if first segment is non-zero
std::string road_name = std::string road_name = facade->GetEscapedNameForNameID(
facade->GetEscapedNameForNameID(raw_route.segment_end_coordinates.front().source_phantom.name_id); raw_route.segment_end_coordinates.front().source_phantom.name_id);
BOOST_ASSERT(raw_route.unpacked_path_segments.size() == BOOST_ASSERT(raw_route.unpacked_path_segments.size() ==
raw_route.segment_end_coordinates.size()); raw_route.segment_end_coordinates.size());
description_factory.SetStartSegment(raw_route.segment_end_coordinates.front().source_phantom, description_factory.SetStartSegment(
raw_route.source_traversed_in_reverse.front()); raw_route.segment_end_coordinates.front().source_phantom,
raw_route.source_traversed_in_reverse.front());
json_result.values["status"] = 0; json_result.values["status"] = 0;
json_result.values["status_message"] = "Found route between points"; json_result.values["status_message"] = "Found route between points";
@ -120,16 +123,17 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
#ifndef NDEBUG #ifndef NDEBUG
const int added_segments = const int added_segments =
#endif #endif
DescribeLeg(raw_route.unpacked_path_segments[i], DescribeLeg(raw_route.unpacked_path_segments[i],
raw_route.segment_end_coordinates[i], raw_route.segment_end_coordinates[i],
raw_route.target_traversed_in_reverse[i]); raw_route.target_traversed_in_reverse[i]);
BOOST_ASSERT(0 < added_segments); BOOST_ASSERT(0 < added_segments);
} }
description_factory.Run(facade, config.zoom_level); description_factory.Run(facade, config.zoom_level);
if (config.geometry) if (config.geometry)
{ {
JSON::Value route_geometry = description_factory.AppendEncodedPolylineString(config.encode_geometry); JSON::Value route_geometry =
description_factory.AppendEncodedPolylineString(config.encode_geometry);
json_result.values["route_geometry"] = route_geometry; json_result.values["route_geometry"] = route_geometry;
} }
if (config.instructions) if (config.instructions)
@ -146,31 +150,41 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
JSON::Object json_route_summary; JSON::Object json_route_summary;
json_route_summary.values["total_distance"] = description_factory.summary.distance; json_route_summary.values["total_distance"] = description_factory.summary.distance;
json_route_summary.values["total_time"] = description_factory.summary.duration; json_route_summary.values["total_time"] = description_factory.summary.duration;
json_route_summary.values["start_point"] = facade->GetEscapedNameForNameID(description_factory.summary.source_name_id); json_route_summary.values["start_point"] =
json_route_summary.values["end_point"] = facade->GetEscapedNameForNameID(description_factory.summary.target_name_id); facade->GetEscapedNameForNameID(description_factory.summary.source_name_id);
json_route_summary.values["end_point"] =
facade->GetEscapedNameForNameID(description_factory.summary.target_name_id);
json_result.values["route_summary"] = json_route_summary; json_result.values["route_summary"] = json_route_summary;
BOOST_ASSERT(!raw_route.segment_end_coordinates.empty()); BOOST_ASSERT(!raw_route.segment_end_coordinates.empty());
JSON::Array json_via_points_array; JSON::Array json_via_points_array;
JSON::Array json_first_coordinate; JSON::Array json_first_coordinate;
json_first_coordinate.values.push_back(raw_route.segment_end_coordinates.front().source_phantom.location.lat/COORDINATE_PRECISION); json_first_coordinate.values.push_back(
json_first_coordinate.values.push_back(raw_route.segment_end_coordinates.front().source_phantom.location.lon/COORDINATE_PRECISION); raw_route.segment_end_coordinates.front().source_phantom.location.lat /
COORDINATE_PRECISION);
json_first_coordinate.values.push_back(
raw_route.segment_end_coordinates.front().source_phantom.location.lon /
COORDINATE_PRECISION);
json_via_points_array.values.push_back(json_first_coordinate); json_via_points_array.values.push_back(json_first_coordinate);
for (const PhantomNodes &nodes : raw_route.segment_end_coordinates) for (const PhantomNodes &nodes : raw_route.segment_end_coordinates)
{ {
std::string tmp; std::string tmp;
JSON::Array json_coordinate; JSON::Array json_coordinate;
json_coordinate.values.push_back(nodes.target_phantom.location.lat/COORDINATE_PRECISION); json_coordinate.values.push_back(nodes.target_phantom.location.lat /
json_coordinate.values.push_back(nodes.target_phantom.location.lon/COORDINATE_PRECISION); COORDINATE_PRECISION);
json_coordinate.values.push_back(nodes.target_phantom.location.lon /
COORDINATE_PRECISION);
json_via_points_array.values.push_back(json_coordinate); json_via_points_array.values.push_back(json_coordinate);
} }
json_result.values["via_points"] = json_via_points_array; json_result.values["via_points"] = json_via_points_array;
JSON::Array json_via_indices_array; JSON::Array json_via_indices_array;
std::vector<unsigned> const & shortest_leg_end_indices = description_factory.GetViaIndices(); std::vector<unsigned> const &shortest_leg_end_indices = description_factory.GetViaIndices();
json_via_indices_array.values.insert(json_via_indices_array.values.end(), shortest_leg_end_indices.begin(), shortest_leg_end_indices.end()); json_via_indices_array.values.insert(json_via_indices_array.values.end(),
shortest_leg_end_indices.begin(),
shortest_leg_end_indices.end());
json_result.values["via_indices"] = json_via_indices_array; json_result.values["via_indices"] = json_via_indices_array;
// only one alternative route is computed at this time, so this is hardcoded // only one alternative route is computed at this time, so this is hardcoded
@ -178,8 +192,9 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
{ {
json_result.values["found_alternative"] = JSON::True(); json_result.values["found_alternative"] = JSON::True();
BOOST_ASSERT(!raw_route.alt_source_traversed_in_reverse.empty()); BOOST_ASSERT(!raw_route.alt_source_traversed_in_reverse.empty());
alternate_description_factory.SetStartSegment(raw_route.segment_end_coordinates.front().source_phantom, alternate_description_factory.SetStartSegment(
raw_route.alt_source_traversed_in_reverse.front()); raw_route.segment_end_coordinates.front().source_phantom,
raw_route.alt_source_traversed_in_reverse.front());
// Get all the coordinates for the computed route // Get all the coordinates for the computed route
for (const PathData &path_data : raw_route.unpacked_alternative) for (const PathData &path_data : raw_route.unpacked_alternative)
{ {
@ -190,7 +205,9 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
if (config.geometry) if (config.geometry)
{ {
JSON::Value alternate_geometry_string = alternate_description_factory.AppendEncodedPolylineString(config.encode_geometry); JSON::Value alternate_geometry_string =
alternate_description_factory.AppendEncodedPolylineString(
config.encode_geometry);
JSON::Array json_alternate_geometries_array; JSON::Array json_alternate_geometries_array;
json_alternate_geometries_array.values.push_back(alternate_geometry_string); json_alternate_geometries_array.values.push_back(alternate_geometry_string);
json_result.values["alternative_geometries"] = json_alternate_geometries_array; json_result.values["alternative_geometries"] = json_alternate_geometries_array;
@ -212,23 +229,33 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
JSON::Object json_alternate_route_summary; JSON::Object json_alternate_route_summary;
JSON::Array json_alternate_route_summary_array; JSON::Array json_alternate_route_summary_array;
json_alternate_route_summary.values["total_distance"] = alternate_description_factory.summary.distance; json_alternate_route_summary.values["total_distance"] =
json_alternate_route_summary.values["total_time"] = alternate_description_factory.summary.duration; alternate_description_factory.summary.distance;
json_alternate_route_summary.values["start_point"] = facade->GetEscapedNameForNameID(alternate_description_factory.summary.source_name_id); json_alternate_route_summary.values["total_time"] =
json_alternate_route_summary.values["end_point"] = facade->GetEscapedNameForNameID(alternate_description_factory.summary.target_name_id); alternate_description_factory.summary.duration;
json_alternate_route_summary.values["start_point"] = facade->GetEscapedNameForNameID(
alternate_description_factory.summary.source_name_id);
json_alternate_route_summary.values["end_point"] = facade->GetEscapedNameForNameID(
alternate_description_factory.summary.target_name_id);
json_alternate_route_summary_array.values.push_back(json_alternate_route_summary); json_alternate_route_summary_array.values.push_back(json_alternate_route_summary);
json_result.values["alternative_summaries"] = json_alternate_route_summary_array; json_result.values["alternative_summaries"] = json_alternate_route_summary_array;
std::vector<unsigned> const & alternate_leg_end_indices = alternate_description_factory.GetViaIndices(); std::vector<unsigned> const &alternate_leg_end_indices =
alternate_description_factory.GetViaIndices();
JSON::Array json_altenative_indices_array; JSON::Array json_altenative_indices_array;
json_altenative_indices_array.values.insert(json_altenative_indices_array.values.end(), alternate_leg_end_indices.begin(), alternate_leg_end_indices.end()); json_altenative_indices_array.values.insert(json_altenative_indices_array.values.end(),
alternate_leg_end_indices.begin(),
alternate_leg_end_indices.end());
json_result.values["alternative_indices"] = json_altenative_indices_array; json_result.values["alternative_indices"] = json_altenative_indices_array;
} else { }
else
{
json_result.values["found_alternative"] = JSON::False(); json_result.values["found_alternative"] = JSON::False();
} }
// Get Names for both routes // Get Names for both routes
RouteNames route_names = GenerateRouteNames(shortest_path_segments, alternative_path_segments, facade); RouteNames route_names =
GenerateRouteNames(shortest_path_segments, alternative_path_segments, facade);
JSON::Array json_route_names; JSON::Array json_route_names;
json_route_names.values.push_back(route_names.shortest_path_name_1); json_route_names.values.push_back(route_names.shortest_path_name_1);
json_route_names.values.push_back(route_names.shortest_path_name_2); json_route_names.values.push_back(route_names.shortest_path_name_2);
@ -267,7 +294,7 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
// TODO: reorder parameters // TODO: reorder parameters
inline void BuildTextualDescription(DescriptionFactory &description_factory, inline void BuildTextualDescription(DescriptionFactory &description_factory,
JSON::Array & json_instruction_array, JSON::Array &json_instruction_array,
const int route_length, const int route_length,
std::vector<Segment> &route_segments_list) std::vector<Segment> &route_segments_list)
{ {
@ -296,7 +323,8 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
std::string current_turn_instruction; std::string current_turn_instruction;
if (TurnInstruction::LeaveRoundAbout == current_instruction) if (TurnInstruction::LeaveRoundAbout == current_instruction)
{ {
temp_instruction = IntToString(as_integer(TurnInstruction::EnterRoundAbout)); temp_instruction =
IntToString(as_integer(TurnInstruction::EnterRoundAbout));
current_turn_instruction += temp_instruction; current_turn_instruction += temp_instruction;
current_turn_instruction += "-"; current_turn_instruction += "-";
temp_instruction = IntToString(round_about.leave_at_exit + 1); temp_instruction = IntToString(round_about.leave_at_exit + 1);
@ -310,11 +338,13 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
} }
json_instruction_row.values.push_back(current_turn_instruction); json_instruction_row.values.push_back(current_turn_instruction);
json_instruction_row.values.push_back(facade->GetEscapedNameForNameID(segment.name_id)); json_instruction_row.values.push_back(
facade->GetEscapedNameForNameID(segment.name_id));
json_instruction_row.values.push_back(std::round(segment.length)); json_instruction_row.values.push_back(std::round(segment.length));
json_instruction_row.values.push_back(necessary_segments_running_index); json_instruction_row.values.push_back(necessary_segments_running_index);
json_instruction_row.values.push_back(round(segment.duration / 10)); json_instruction_row.values.push_back(round(segment.duration / 10));
json_instruction_row.values.push_back(IntToString(segment.length)+"m"); json_instruction_row.values.push_back(
UintToString(static_cast<unsigned>(segment.length)) + "m");
int bearing_value = round(segment.bearing / 10.); int bearing_value = round(segment.bearing / 10.);
json_instruction_row.values.push_back(Azimuth::Get(bearing_value)); json_instruction_row.values.push_back(Azimuth::Get(bearing_value));
json_instruction_row.values.push_back(bearing_value); json_instruction_row.values.push_back(bearing_value);
@ -334,7 +364,7 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
} }
} }
//TODO: check if this in an invariant // TODO: check if this in an invariant
if (INVALID_EDGE_WEIGHT != route_length) if (INVALID_EDGE_WEIGHT != route_length)
{ {
JSON::Array json_last_instruction_row; JSON::Array json_last_instruction_row;