Save node ids in LegGeometry and inject them into the map matching response
This commit is contained in:
parent
cb1db646f2
commit
584d0d2b03
@ -317,11 +317,25 @@ class RouteAPI : public BaseAPI
|
||||
if (requested_annotations & RouteParameters::AnnotationsType::Nodes)
|
||||
{
|
||||
util::json::Array nodes;
|
||||
util::json::Array nodes_info;
|
||||
|
||||
nodes.values.reserve(leg_geometry.osm_node_ids.size());
|
||||
nodes_info.values.reserve(leg_geometry.osm_node_ids.size());
|
||||
|
||||
for(uint64_t i=0; i<leg_geometry.node_locations.size(); i++) {
|
||||
util::json::Object node_info;
|
||||
node_info.values["latitude"] = static_cast<std::double_t >(leg_geometry.node_locations[i].lat.__value)/1000000.0;
|
||||
node_info.values["longitude"] = static_cast<std::double_t >(leg_geometry.node_locations[i].lon.__value)/1000000.0;
|
||||
node_info.values["id"] = static_cast<std::uint64_t>(leg_geometry.osm_node_ids[i]);
|
||||
nodes_info.values.push_back(node_info);
|
||||
}
|
||||
|
||||
for (const auto node_id : leg_geometry.osm_node_ids)
|
||||
{
|
||||
nodes.values.push_back(static_cast<std::uint64_t>(node_id));
|
||||
}
|
||||
|
||||
annotation.values["nodes_info"] = std::move(nodes_info);
|
||||
annotation.values["nodes"] = std::move(nodes);
|
||||
}
|
||||
// Add any supporting metadata, if needed
|
||||
|
||||
@ -57,8 +57,12 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
|
||||
const auto source_geometry_id = facade.GetGeometryIndex(source_node_id).id;
|
||||
const auto source_geometry = facade.GetUncompressedForwardGeometry(source_geometry_id);
|
||||
|
||||
const auto source_geometery_node_id = source_geometry(source_segment_start_coordinate);
|
||||
Coordinate nodeCoordinate = facade.GetCoordinateOfNode(source_geometery_node_id);
|
||||
geometry.node_locations.push_back(nodeCoordinate);
|
||||
|
||||
geometry.osm_node_ids.push_back(
|
||||
facade.GetOSMNodeIDOfNode(source_geometry(source_segment_start_coordinate)));
|
||||
facade.GetOSMNodeIDOfNode(source_geometery_node_id));
|
||||
|
||||
auto cumulative_distance = 0.;
|
||||
auto current_distance = 0.;
|
||||
@ -81,6 +85,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
|
||||
prev_coordinate = coordinate;
|
||||
|
||||
const auto osm_node_id = facade.GetOSMNodeIDOfNode(path_point.turn_via_node);
|
||||
Coordinate nodeLocation = facade.GetCoordinateOfNode(path_point.turn_via_node);
|
||||
|
||||
if (osm_node_id != geometry.osm_node_ids.back() ||
|
||||
path_point.turn_instruction.type != osrm::guidance::TurnType::NoTurn)
|
||||
@ -99,6 +104,7 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
|
||||
facade.GetWeightMultiplier(),
|
||||
path_point.datasource_id});
|
||||
geometry.locations.push_back(std::move(coordinate));
|
||||
geometry.node_locations.push_back(nodeLocation);
|
||||
geometry.osm_node_ids.push_back(osm_node_id);
|
||||
}
|
||||
}
|
||||
@ -158,12 +164,17 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade,
|
||||
const auto target_segment_end_coordinate =
|
||||
target_node.fwd_segment_position + (reversed_target ? 0 : 1);
|
||||
const auto target_geometry = facade.GetUncompressedForwardGeometry(target_geometry_id);
|
||||
|
||||
const auto target_geometry_itr = target_geometry(target_segment_end_coordinate);
|
||||
Coordinate nodeLocation = facade.GetCoordinateOfNode(target_geometry_itr);
|
||||
geometry.node_locations.push_back(nodeLocation);
|
||||
geometry.osm_node_ids.push_back(
|
||||
facade.GetOSMNodeIDOfNode(target_geometry(target_segment_end_coordinate)));
|
||||
facade.GetOSMNodeIDOfNode(target_geometry_itr));
|
||||
|
||||
BOOST_ASSERT(geometry.segment_distances.size() == geometry.segment_offsets.size() - 1);
|
||||
BOOST_ASSERT(geometry.locations.size() > geometry.segment_distances.size());
|
||||
BOOST_ASSERT(geometry.annotations.size() == geometry.locations.size() - 1);
|
||||
BOOST_ASSERT(geometry.node_locations.size() == geometry.osm_node_ids.size());
|
||||
|
||||
return geometry;
|
||||
}
|
||||
|
||||
@ -25,6 +25,8 @@ namespace guidance
|
||||
// offsets 0 2 n-1 n
|
||||
struct LegGeometry
|
||||
{
|
||||
std::vector<util::Coordinate> node_locations;
|
||||
|
||||
std::vector<util::Coordinate> locations;
|
||||
// segment_offset[i] .. segment_offset[i+1] (inclusive)
|
||||
// contains the geometry of segment i
|
||||
|
||||
Loading…
Reference in New Issue
Block a user