MCPcopy Create free account
hub / github.com/Project-OSRM/osrm-backend / MakeRoute

Method MakeRoute

include/engine/api/route_api.hpp:340–460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

338 }
339
340 flatbuffers::Offset<fbresult::RouteObject>
341 MakeRoute(flatbuffers::FlatBufferBuilder &fb_result,
342 const std::vector<PhantomEndpoints> &leg_endpoints,
343 const std::vector<std::vector<PathData>> &unpacked_path_segments,
344 const std::vector<bool> &source_traversed_in_reverse,
345 const std::vector<bool> &target_traversed_in_reverse) const
346 {
347 auto legs_info = MakeLegs(leg_endpoints,
348 unpacked_path_segments,
349 source_traversed_in_reverse,
350 target_traversed_in_reverse);
351 std::vector<guidance::RouteLeg> &legs = legs_info.first;
352 std::vector<guidance::LegGeometry> &leg_geometries = legs_info.second;
353 auto route = guidance::assembleRoute(legs);
354
355 // Fill legs
356 std::vector<flatbuffers::Offset<fbresult::Leg>> routeLegs;
357 routeLegs.reserve(legs.size());
358 for (const auto idx : util::irange<std::size_t>(0UL, legs.size()))
359 {
360 auto leg = legs[idx];
361 auto &leg_geometry = leg_geometries[idx];
362
363 // Fill steps
364 std::vector<flatbuffers::Offset<fbresult::Step>> legSteps;
365 if (!leg.steps.empty())
366 {
367 legSteps.resize(leg.steps.size());
368 std::transform(leg.steps.begin(),
369 leg.steps.end(),
370 legSteps.begin(),
371 [this, &fb_result, &leg_geometry](auto &step)
372 { return this->MakeFBStep(fb_result, leg_geometry, step); });
373 }
374 auto steps_vector = fb_result.CreateVector(legSteps);
375
376 // Fill annotations
377 // To maintain support for uses of the old default constructors, we check
378 // if annotations property was set manually after default construction
379 auto requested_annotations = parameters.annotations_type;
380 if (parameters.annotations &&
381 (parameters.annotations_type == RouteParameters::AnnotationsType::None))
382 {
383 requested_annotations = RouteParameters::AnnotationsType::All;
384 }
385
386 flatbuffers::Offset<fbresult::Annotation> annotation_buffer;
387 if (requested_annotations != RouteParameters::AnnotationsType::None)
388 {
389 annotation_buffer =
390 MakeFBAnnotations(fb_result, leg_geometry, requested_annotations);
391 }
392
393 flatbuffers::Offset<flatbuffers::String> summary_string;
394 if (!leg.summary.empty())
395 {
396 summary_string = fb_result.CreateString(leg.summary);
397 }

Callers

nothing calls this directly

Calls 15

MakeFBStepMethod · 0.95
assembleRouteFunction · 0.85
makeGeoJSONGeometryFunction · 0.85
clamp_floatFunction · 0.85
makeRouteFunction · 0.85
makeRouteLegsFunction · 0.85
reserveMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
resizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected