Fix handling unexpected errors.

This commit is contained in:
Patrick Niklaus 2016-01-14 18:27:36 +01:00
parent f1140ec903
commit 88e6558da3

View File

@ -164,28 +164,9 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
route_parameters.uturns, raw_route); route_parameters.uturns, raw_route);
} }
bool no_route = INVALID_EDGE_WEIGHT == raw_route.shortest_path_length;
std::unique_ptr<BaseDescriptor<DataFacadeT>> descriptor;
switch (descriptor_table.get_id(route_parameters.output_format))
{
case 1:
descriptor = osrm::make_unique<GPXDescriptor<DataFacadeT>>(facade);
break;
// case 2:
// descriptor = osrm::make_unique<GEOJSONDescriptor<DataFacadeT>>();
// break;
default:
descriptor = osrm::make_unique<JSONDescriptor<DataFacadeT>>(facade);
break;
}
descriptor->SetConfig(route_parameters);
descriptor->Run(raw_route, json_result);
// we can only know this after the fact, different SCC ids still // we can only know this after the fact, different SCC ids still
// allow for connection in one direction. // allow for connection in one direction.
if (no_route) if (raw_route.shortest_path_length == INVALID_EDGE_WEIGHT)
{ {
auto first_component_id = snapped_phantoms.front().component.id; auto first_component_id = snapped_phantoms.front().component.id;
auto not_in_same_component = auto not_in_same_component =
@ -194,14 +175,36 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
{ {
return node.component.id != first_component_id; return node.component.id != first_component_id;
}); });
if (not_in_same_component) if (not_in_same_component)
{ {
json_result.values["status_message"] = "Impossible route between points"; json_result.values["status_message"] = "Impossible route between points";
return Status::EmptyResult; return Status::EmptyResult;
} }
else
{
json_result.values["status_message"] = "No route found between points";
return Status::Error;
}
} }
else else
{ {
std::unique_ptr<BaseDescriptor<DataFacadeT>> descriptor;
switch (descriptor_table.get_id(route_parameters.output_format))
{
case 1:
descriptor = osrm::make_unique<GPXDescriptor<DataFacadeT>>(facade);
break;
// case 2:
// descriptor = osrm::make_unique<GEOJSONDescriptor<DataFacadeT>>();
// break;
default:
descriptor = osrm::make_unique<JSONDescriptor<DataFacadeT>>(facade);
break;
}
descriptor->SetConfig(route_parameters);
descriptor->Run(raw_route, json_result);
json_result.values["status_message"] = "Found route between points"; json_result.values["status_message"] = "Found route between points";
} }