23#include "modules/common_msgs/map_msgs/map_area.pb.h"
24#include "modules/common_msgs/map_msgs/map_barrier_gate.pb.h"
25#include "modules/common_msgs/map_msgs/map_clear_area.pb.h"
26#include "modules/common_msgs/map_msgs/map_crosswalk.pb.h"
27#include "modules/common_msgs/map_msgs/map_id.pb.h"
28#include "modules/common_msgs/map_msgs/map_junction.pb.h"
29#include "modules/common_msgs/map_msgs/map_lane.pb.h"
30#include "modules/common_msgs/map_msgs/map_overlap.pb.h"
31#include "modules/common_msgs/map_msgs/map_parking_space.pb.h"
32#include "modules/common_msgs/map_msgs/map_pnc_junction.pb.h"
33#include "modules/common_msgs/map_msgs/map_road.pb.h"
34#include "modules/common_msgs/map_msgs/map_rsu.pb.h"
35#include "modules/common_msgs/map_msgs/map_signal.pb.h"
36#include "modules/common_msgs/map_msgs/map_speed_bump.pb.h"
37#include "modules/common_msgs/map_msgs/map_stop_sign.pb.h"
38#include "modules/common_msgs/map_msgs/map_yield_sign.pb.h"
53template <
class Object,
class GeoObject>
57 const Object *
object,
const GeoObject *
geo_object,
63 return geo_object_->DistanceTo(point);
66 return geo_object_->DistanceSquareTo(point);
68 const Object *
object()
const {
return object_; }
69 const GeoObject *
geo_object()
const {
return geo_object_; }
70 int id()
const {
return id_; }
74 const Object *object_;
75 const GeoObject *geo_object_;
89class ParkingSpaceInfo;
152 const Id &
id()
const {
return lane_.
id(); }
156 const std::vector<apollo::common::math::Vec2d> &
points()
const {
160 return unit_directions_;
162 double Heading(
const double s)
const;
164 const std::vector<double> &
headings()
const {
return headings_; }
165 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
168 const std::vector<double> &
accumulate_s()
const {
return accumulated_s_; }
169 const std::vector<OverlapInfoConstPtr> &
overlaps()
const {
return overlaps_; }
173 const std::vector<OverlapInfoConstPtr> &
signals()
const {
return signals_; }
175 return barrier_gates_;
186 const std::vector<OverlapInfoConstPtr> &
junctions()
const {
196 return parking_spaces_;
199 return pnc_junctions_;
201 const std::vector<OverlapInfoConstPtr> &
areas()
const {
return areas_; }
205 return sampled_left_width_;
208 return sampled_right_width_;
210 void GetWidth(
const double s,
double *left_width,
double *right_width)
const;
211 double GetWidth(
const double s)
const;
215 return sampled_left_road_width_;
218 return sampled_right_road_width_;
221 double *right_width)
const;
231 int *s_offset_index)
const;
238 double *lateral)
const;
244 void PostProcess(
const HDMapImpl &map_instance);
245 void UpdateOverlaps(
const HDMapImpl &map_instance);
246 double GetWidthFromSample(
const std::vector<LaneInfo::SampledWidth> &samples,
247 const double s)
const;
254 std::vector<apollo::common::math::Vec2d> points_;
255 std::vector<apollo::common::math::Vec2d> unit_directions_;
256 std::vector<double> headings_;
257 std::vector<apollo::common::math::LineSegment2d> segments_;
258 std::vector<double> accumulated_s_;
259 std::vector<std::string> overlap_ids_;
260 std::vector<OverlapInfoConstPtr> overlaps_;
261 std::vector<OverlapInfoConstPtr> cross_lanes_;
262 std::vector<OverlapInfoConstPtr> signals_;
263 std::vector<OverlapInfoConstPtr> barrier_gates_;
264 std::vector<OverlapInfoConstPtr> yield_signs_;
265 std::vector<OverlapInfoConstPtr> stop_signs_;
266 std::vector<OverlapInfoConstPtr> crosswalks_;
267 std::vector<OverlapInfoConstPtr> junctions_;
268 std::vector<OverlapInfoConstPtr> clear_areas_;
269 std::vector<OverlapInfoConstPtr> speed_bumps_;
270 std::vector<OverlapInfoConstPtr> parking_spaces_;
271 std::vector<OverlapInfoConstPtr> pnc_junctions_;
272 std::vector<OverlapInfoConstPtr> areas_;
273 double total_length_ = 0.0;
274 std::vector<SampledWidth> sampled_left_width_;
275 std::vector<SampledWidth> sampled_right_width_;
277 std::vector<SampledWidth> sampled_left_road_width_;
278 std::vector<SampledWidth> sampled_right_road_width_;
280 std::vector<LaneSegmentBox> segment_box_list_;
281 std::unique_ptr<LaneSegmentKDTree> lane_segment_kdtree_;
291 const Id &
id()
const {
return junction_.
id(); }
296 return overlap_stop_sign_ids_;
302 void PostProcess(
const HDMapImpl &map_instance);
303 void UpdateOverlaps(
const HDMapImpl &map_instance);
309 std::vector<Id> overlap_stop_sign_ids_;
310 std::vector<Id> overlap_ids_;
321 const Id &
id()
const {
return ad_area_.
id(); }
323 const apollo::hdmap::Area_Type
type()
const {
return ad_area_.
type(); }
328 return overlap_undriveable_areas_;
334 void PostProcess(
const HDMapImpl &map_instance);
335 void UpdateOverlaps(
const HDMapImpl &map_instance);
338 const Area &ad_area_;
341 std::vector<std::shared_ptr<const AreaInfo>> overlap_undriveable_areas_;
343 std::vector<Id> overlap_ids_;
353 const Id &
id()
const {
return signal_.
id(); }
355 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
364 std::vector<apollo::common::math::LineSegment2d> segments_;
375 const Id &
id()
const {
return barrier_gate_.
id(); }
377 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
386 std::vector<apollo::common::math::LineSegment2d> segments_;
397 const Id &
id()
const {
return crosswalk_.
id(); }
417 const Id &
id()
const {
return stop_sign_.
id(); }
419 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
424 return overlap_junction_ids_;
430 void PostProcess(
const HDMapImpl &map_instance);
431 void UpdateOverlaps(
const HDMapImpl &map_instance);
435 std::vector<apollo::common::math::LineSegment2d> segments_;
437 std::vector<Id> overlap_lane_ids_;
438 std::vector<Id> overlap_junction_ids_;
439 std::vector<Id> overlap_ids_;
450 const Id &
id()
const {
return yield_sign_.
id(); }
452 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
461 std::vector<apollo::common::math::LineSegment2d> segments_;
472 const Id &
id()
const {
return clear_area_.
id(); }
492 const Id &
id()
const {
return speed_bump_.
id(); }
494 const std::vector<apollo::common::math::LineSegment2d> &
segments()
const {
503 std::vector<apollo::common::math::LineSegment2d> segments_;
514 const Id &
id()
const {
return overlap_.id(); }
515 const Overlap &
overlap()
const {
return overlap_; }
519 const Overlap &overlap_;
525 const Id &
id()
const {
return road_.
id(); }
527 const std::vector<RoadSection> &
sections()
const {
return sections_; }
534 apollo::hdmap::Road_Type
type()
const {
return road_.
type(); }
538 std::vector<RoadSection> sections_;
539 std::vector<RoadBoundary> road_boundaries_;
545 const Id &
id()
const {
return parking_space_.
id(); }
565 const Id &
id()
const {
return junction_.
id(); }
576 std::vector<Id> overlap_ids_;
593 const Id &
id()
const {
return _rsu.
id(); }
Defines the AABox2d class.
Defines the templated AABoxKDTree2dNode class.
Implements a class of (undirected) axes-aligned bounding boxes in 2-D.
The class of KD-tree of Aligned Axis Bounding Box(AABox).
Rectangular (undirected) bounding box in 2-D.
The class of polygon in 2-D.
Implements a class of 2-dimensional vectors.
const apollo::common::math::Polygon2d & polygon() const
const std::string & get_name() const
const Area & area() const
const apollo::hdmap::Area_Type type() const
const std::vector< std::shared_ptr< const AreaInfo > > & OverlapUnDriveableAreas() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const BarrierGate & barrier_gate() const
const ClearArea & clear_area() const
const apollo::common::math::Polygon2d & polygon() const
const Crosswalk & crosswalk() const
const apollo::common::math::Polygon2d & polygon() const
High-precision map loader implement.
const std::vector< Id > & OverlapStopSignIds() const
const apollo::common::math::Polygon2d & polygon() const
const Junction & junction() const
const std::vector< OverlapInfoConstPtr > & junctions() const
std::pair< double, double > SampledWidth
const std::vector< OverlapInfoConstPtr > & speed_bumps() const
double Heading(const double s) const
const std::vector< SampledWidth > & sampled_left_width() const
const std::vector< OverlapInfoConstPtr > & stop_signs() const
void GetRoadWidth(const double s, double *left_width, double *right_width) const
const std::vector< OverlapInfoConstPtr > & barrier_gates() const
apollo::common::PointENU GetSmoothPoint(double s) const
void GetWidth(const double s, double *left_width, double *right_width) const
const std::vector< OverlapInfoConstPtr > & clear_areas() const
double GetEffectiveWidth(const double s) const
const std::vector< OverlapInfoConstPtr > & signals() const
const std::vector< OverlapInfoConstPtr > & parking_spaces() const
const std::vector< SampledWidth > & sampled_right_width() const
const std::vector< apollo::common::math::Vec2d > & points() const
const Id & section_id() const
const std::vector< OverlapInfoConstPtr > & crosswalks() const
const std::vector< OverlapInfoConstPtr > & pnc_junctions() const
apollo::common::PointENU GetNearestPoint(const apollo::common::math::Vec2d &point, double *distance) const
const std::vector< apollo::common::math::Vec2d > & unit_directions() const
double Curvature(const double s) const
const std::vector< double > & headings() const
const Id & road_id() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const std::vector< OverlapInfoConstPtr > & yield_signs() const
const std::vector< SampledWidth > & sampled_right_road_width() const
bool GetProjection(const apollo::common::math::Vec2d &point, double *accumulate_s, double *lateral) const
const Lane & lane() const
double total_length() const
const std::vector< OverlapInfoConstPtr > & overlaps() const
bool IsOnLane(const apollo::common::math::Vec2d &point) const
const std::vector< OverlapInfoConstPtr > & areas() const
double DistanceTo(const apollo::common::math::Vec2d &point) const
const std::vector< double > & accumulate_s() const
const std::vector< SampledWidth > & sampled_left_road_width() const
const std::vector< OverlapInfoConstPtr > & cross_lanes() const
const apollo::common::math::AABox2d & aabox() const
const Object * object() const
double DistanceSquareTo(const apollo::common::math::Vec2d &point) const
ObjectWithAABox(const apollo::common::math::AABox2d &aabox, const Object *object, const GeoObject *geo_object, const int id)
double DistanceTo(const apollo::common::math::Vec2d &point) const
const GeoObject * geo_object() const
const Overlap & overlap() const
const ObjectOverlapInfo * GetObjectOverlapInfo(const Id &id) const
const PNCJunction & pnc_junction() const
const apollo::common::math::Polygon2d & polygon() const
const apollo::common::math::Polygon2d & polygon() const
const ParkingSpace & parking_space() const
const Road & road() const
const std::vector< RoadSection > & sections() const
bool has_junction_id() const
const Id & junction_id() const
const std::vector< RoadBoundary > & GetBoundaries() const
apollo::hdmap::Road_Type type() const
const Signal & signal() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const SpeedBump & speed_bump() const
const std::vector< Id > & OverlapJunctionIds() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const StopSign & stop_sign() const
const std::vector< Id > & OverlapLaneIds() const
const std::vector< apollo::common::math::LineSegment2d > & segments() const
const YieldSign & yield_sign() const
Math-related util functions.
ObjectWithAABox< StopSignInfo, apollo::common::math::LineSegment2d > StopSignSegmentBox
ObjectWithAABox< ClearAreaInfo, apollo::common::math::Polygon2d > ClearAreaPolygonBox
std::shared_ptr< const PNCJunctionInfo > PNCJunctionInfoConstPtr
std::shared_ptr< const JunctionInfo > JunctionInfoConstPtr
std::shared_ptr< RoadROIBoundary > RoadROIBoundaryPtr
ObjectWithAABox< SpeedBumpInfo, apollo::common::math::LineSegment2d > SpeedBumpSegmentBox
ObjectWithAABox< LaneInfo, apollo::common::math::LineSegment2d > LaneSegmentBox
ObjectWithAABox< SignalInfo, apollo::common::math::LineSegment2d > SignalSegmentBox
ObjectWithAABox< YieldSignInfo, apollo::common::math::LineSegment2d > YieldSignSegmentBox
std::shared_ptr< const StopSignInfo > StopSignInfoConstPtr
std::shared_ptr< const AreaInfo > AreaInfoConstPtr
std::shared_ptr< const LaneInfo > LaneInfoConstPtr
std::shared_ptr< const ClearAreaInfo > ClearAreaInfoConstPtr
std::shared_ptr< const BarrierGateInfo > BarrierGateInfoConstPtr
std::shared_ptr< const SignalInfo > SignalInfoConstPtr
ObjectWithAABox< BarrierGateInfo, apollo::common::math::LineSegment2d > BarrierGateSegmentBox
std::shared_ptr< const SpeedBumpInfo > SpeedBumpInfoConstPtr
ObjectWithAABox< JunctionInfo, apollo::common::math::Polygon2d > JunctionPolygonBox
ObjectWithAABox< PNCJunctionInfo, apollo::common::math::Polygon2d > PNCJunctionPolygonBox
std::shared_ptr< const RoadInfo > RoadInfoConstPtr
ObjectWithAABox< ParkingSpaceInfo, apollo::common::math::Polygon2d > ParkingSpacePolygonBox
ObjectWithAABox< AreaInfo, apollo::common::math::Polygon2d > AreaPolygonBox
std::shared_ptr< const CrosswalkInfo > CrosswalkInfoConstPtr
std::shared_ptr< const RSUInfo > RSUInfoConstPtr
std::shared_ptr< JunctionBoundary > JunctionBoundaryPtr
std::shared_ptr< const YieldSignInfo > YieldSignInfoConstPtr
std::shared_ptr< const ParkingSpaceInfo > ParkingSpaceInfoConstPtr
std::shared_ptr< PolygonRoi > PolygonRoiPtr
std::shared_ptr< RoadRoi > RoadRoiPtr
ObjectWithAABox< CrosswalkInfo, apollo::common::math::Polygon2d > CrosswalkPolygonBox
std::shared_ptr< const OverlapInfo > OverlapInfoConstPtr
Define the Polygon2d class.
JunctionInfoConstPtr junction_info
std::vector< apollo::common::PointENU > line_points
std::vector< apollo::common::PointENU > polygon_points
apollo::common::math::Polygon2d polygon
LineBoundary left_boundary
LineBoundary right_boundary
std::vector< PolygonBoundary > holes_boundary