207 {
208 if (!ShowRequestInfo(request, graph_.get())) {
209 SetErrorCode(ErrorCode::ROUTING_ERROR_REQUEST,
210 "Error encountered when reading request point!",
211 response->mutable_status());
212 return false;
213 }
214
216 SetErrorCode(ErrorCode::ROUTING_ERROR_NOT_READY, "Navigator is not ready!",
217 response->mutable_status());
218 return false;
219 }
220 std::vector<const TopoNode*> way_nodes;
221 std::vector<double> way_s;
222 if (!Init(request, graph_.get(), &way_nodes, &way_s)) {
223 SetErrorCode(ErrorCode::ROUTING_ERROR_NOT_READY,
224 "Failed to initialize navigator!", response->mutable_status());
225 return false;
226 }
227
228 std::vector<NodeWithRange> result_nodes;
229 if (!SearchRouteByStrategy(graph_.get(), way_nodes, way_s, &result_nodes)) {
230 SetErrorCode(ErrorCode::ROUTING_ERROR_RESPONSE,
231 "Failed to find route with request!",
232 response->mutable_status());
233 return false;
234 }
235 if (result_nodes.empty()) {
236 SetErrorCode(ErrorCode::ROUTING_ERROR_RESPONSE, "Failed to result nodes!",
237 response->mutable_status());
238 return false;
239 }
240 result_nodes.front().SetStartS(request.waypoint().begin()->s());
241 result_nodes.back().SetEndS(request.waypoint().rbegin()->s());
242
243 if (!result_generator_->GeneratePassageRegion(
244 graph_->MapVersion(), request, result_nodes, topo_range_manager_,
245 response)) {
246 SetErrorCode(ErrorCode::ROUTING_ERROR_RESPONSE,
247 "Failed to generate passage regions based on result lanes",
248 response->mutable_status());
249 return false;
250 }
251 SetErrorCode(ErrorCode::OK, "Success!", response->mutable_status());
252
253 PrintDebugData(result_nodes);
254 return true;
255}