def METHOD_NAME(self, path_payload: PathPayload) -> List[PathRange]:
    """
    Intersect a given path to the projected path and return a list of PathRange
    """
    METHOD_NAME = []
    range_begin = None
    path_offset = 0
    next_path_offset = 0
    dir_track_ranges = self._path_to_tracks(path_payload)
    for index, dir_track_range in enumerate(dir_track_ranges):
        track_id = dir_track_range.track
        a_begin = dir_track_range.begin
        a_end = dir_track_range.end
        a_length = abs(a_begin - a_end)
        path_offset = next_path_offset
        next_path_offset += a_length
        # Check if there is no intersections
        if track_id not in self.tracks:
            assert range_begin is None
            continue
        b_begin = min(self.tracks[track_id][0], self.tracks[track_id][1])
        b_end = max(self.tracks[track_id][0], self.tracks[track_id][1])
        if min(a_begin, a_end) >= b_end or max(a_begin, a_end) <= b_begin:
            assert range_begin is None
            continue
        # New intersection, creation of the begin location
        if range_begin is None:
            range_begin = PathLocation(track_id, a_begin, path_offset)
            if a_begin < b_begin:
                range_begin.offset = b_begin
                range_begin.path_offset += b_begin - a_begin
            elif a_begin > b_end:
                range_begin.offset = b_end
                range_begin.path_offset += a_begin - b_end
        # Check end of intersection, if so we add it to the list
        if index + 1 >= len(dir_track_ranges) or dir_track_ranges[index + 1].track not in self.tracks:
            range_end = PathLocation(track_id, a_end, next_path_offset)
            if a_end < b_begin:
                range_end.offset = b_begin
                range_end.path_offset -= b_begin - a_end
            elif a_end > b_end:
                range_end.offset = b_end
                range_end.path_offset -= a_end - b_end
            METHOD_NAME.append(PathRange(range_begin, range_end))
            range_begin = None
    return METHOD_NAME