@@ -689,45 +689,40 @@ def create_lane_links_from_ids(road1, road2, road1_lane_ids, road2_lane_ids):
689689 if (0 in road1_lane_ids ) or (0 in road2_lane_ids ):
690690 raise ValueError ("The center lane (ID 0) should not be linked." )
691691
692- if road1 .road_type == - 1 and road2 .road_type == - 1 :
693- first_linktype , _ , first_connecting_lanesec = _get_related_lanesection (
694- road1 , road2
695- )
696- second_linktype , _ , second_connecting_lanesec = _get_related_lanesection (
697- road2 , road1
698- )
699-
700- # The road links need to be reciprocal for the lane linking to succeed
701- if first_linktype == None or second_linktype == None :
702- raise ValueError (
703- "Unable to create lane links for road with ID "
704- + str (road1 .id )
705- + " and road with ID "
706- + str (road2 .id )
707- + " due to non reciprocal road successor/predecessor links."
708- )
709-
710- for i in range (len (road1_lane_ids )):
711- if road1_lane_ids [i ] > 0 :
712- road1 .lanes .lanesections [first_connecting_lanesec ].leftlanes [
713- road1_lane_ids [i ] - 1
714- ].add_link (first_linktype , road2_lane_ids [i ])
715- else :
716- road1 .lanes .lanesections [first_connecting_lanesec ].rightlanes [
717- abs (road1_lane_ids [i ]) - 1
718- ].add_link (first_linktype , road2_lane_ids [i ])
719- if road2_lane_ids [i ] > 0 :
720- road2 .lanes .lanesections [second_connecting_lanesec ].leftlanes [
721- road2_lane_ids [i ] - 1
722- ].add_link (second_linktype , road1_lane_ids [i ])
723- else :
724- road2 .lanes .lanesections [second_connecting_lanesec ].rightlanes [
725- abs (road2_lane_ids [i ]) - 1
726- ].add_link (second_linktype , road1_lane_ids [i ])
727- else :
728- raise NotImplementedError (
729- "This API currently does not support linking with junction connecting roads."
730- )
692+ first_linktype , _ , first_connecting_lanesec = _get_related_lanesection (
693+ road1 , road2
694+ )
695+ second_linktype , _ , second_connecting_lanesec = _get_related_lanesection (
696+ road2 , road1
697+ )
698+
699+ # The road links need to be reciprocal for the lane linking to succeed
700+ if first_linktype == None or second_linktype == None :
701+ raise ValueError (
702+ "Unable to create lane links for road with ID "
703+ + str (road1 .id )
704+ + " and road with ID "
705+ + str (road2 .id )
706+ + " due to non reciprocal road successor/predecessor links."
707+ )
708+
709+ for i in range (len (road1_lane_ids )):
710+ if road1_lane_ids [i ] > 0 :
711+ road1 .lanes .lanesections [first_connecting_lanesec ].leftlanes [
712+ road1_lane_ids [i ] - 1
713+ ].add_link (first_linktype , road2_lane_ids [i ])
714+ else :
715+ road1 .lanes .lanesections [first_connecting_lanesec ].rightlanes [
716+ abs (road1_lane_ids [i ]) - 1
717+ ].add_link (first_linktype , road2_lane_ids [i ])
718+ if road2_lane_ids [i ] > 0 :
719+ road2 .lanes .lanesections [second_connecting_lanesec ].leftlanes [
720+ road2_lane_ids [i ] - 1
721+ ].add_link (second_linktype , road1_lane_ids [i ])
722+ else :
723+ road2 .lanes .lanesections [second_connecting_lanesec ].rightlanes [
724+ abs (road2_lane_ids [i ]) - 1
725+ ].add_link (second_linktype , road1_lane_ids [i ])
731726
732727
733728def create_lane_links (road1 , road2 ):
@@ -914,16 +909,20 @@ def _get_related_lanesection(road, connected_road):
914909 # treat connecting road in junction differently
915910 if connected_road .predecessor .element_id == road .id :
916911 if connected_road .predecessor .contact_point == ContactPoint .start :
912+ linktype = "predecessor"
917913 road_lanesection_id = 0
918914 sign = - 1
919915 else :
916+ linktype = "successor"
920917 road_lanesection_id = - 1
921918 sign = 1
922919 elif connected_road .successor .element_id == road .id :
923920 if connected_road .successor .contact_point == ContactPoint .start :
921+ linktype = "predecessor"
924922 road_lanesection_id = 0
925923 sign = 1
926924 else :
925+ linktype = "successor"
927926 road_lanesection_id = - 1
928927 sign = - 1
929928
0 commit comments