code: def GetPointWithDistanceTraveled(self, shape_dist_traveled):
      
      if not self.distance:
        return None
      if shape_dist_traveled <= self.distance[0]:
        return self.points[0]
      if shape_dist_traveled >= self.distance[-1]:
        return self.points[-1]
  
      index = bisect.bisect(self.distance, shape_dist_traveled)
      (lat0, lng0, dist0) = self.points[index - 1]
      (lat1, lng1, dist1) = self.points[index]
  
      # Interpolate if shape_dist_traveled does not equal to any of the point
      # in shape segment.
      # (lat0, lng0)          (lat, lng)           (lat1, lng1)
      # -----|--------------------|---------------------|------
      #    dist0          shape_dist_traveled         dist1
      #      \------- ca --------/ \-------- bc -------/
      #       \----------------- ba ------------------/
      ca = shape_dist_traveled - dist0
      bc = dist1 - shape_dist_traveled
      ba = bc + ca
      if ba == 0:
        # This only happens when there's data error in shapes and should have been
        # catched before. Check to avoid crash.
        return None
      # This won't work crossing longitude 180 and is only an approximation which
      # works well for short distance.
      lat = (lat1 * ca + lat0 * bc) / ba
      lng = (lng1 * ca + lng0 * bc) / ba
      return (lat, lng, shape_dist_traveled)
docs: Returns a point on the shape polyline with the input shape_dist_traveled.
  
      Args:
        shape_dist_traveled: The input shape_dist_traveled.
  
      Returns:
        The shape point as a tuple (lat, lng, shape_dist_traveled), where lat and
        lng is the location of the shape point, and shape_dist_traveled is an
        increasing metric representing the distance traveled along the shape.
        Returns None if there is data error in shape.