class_docstr: Define an ellipsoid on which to solve geodesic problems.
docstr: Solve the direct geodesic problem where the length of the geodesic is
  specified in terms of distance.
  
  Can accept and broadcast length 1 arguments. For example, given a
  single start point and distance, an array of different azimuths can be
  supplied to locate multiple endpoints.
  
  Parameters
  ----------
  points: array_like, shape=(n *or* 1, 2)
      The starting longitude-latitude point(s) from which to travel.
  
  azimuths: float or array_like with shape=(n, )
      List of azimuth values (degrees).
  
  distances : float or array_like with shape(n, )
      List of distances values (metres).
  
  Returns
  -------
  `numpy.ndarray`, shape=(n, 3)
      The longitudes, latitudes, and forward azimuths of the located
      endpoint(s).
code: def direct(self, points, azimuths, distances):
      """
      Solve the direct geodesic problem where the length of the geodesic is
      specified in terms of distance.
  
      Can accept and broadcast length 1 arguments. For example, given a
      single start point and distance, an array of different azimuths can be
      supplied to locate multiple endpoints.
  
      Parameters
      ----------
      points: array_like, shape=(n *or* 1, 2)
          The starting longitude-latitude point(s) from which to travel.
  
      azimuths: float or array_like with shape=(n, )
          List of azimuth values (degrees).
  
      distances : float or array_like with shape(n, )
          List of distances values (metres).
  
      Returns
      -------
      `numpy.ndarray`, shape=(n, 3)
          The longitudes, latitudes, and forward azimuths of the located
          endpoint(s).
  
      """
  
      # Create numpy arrays from inputs, and ensure correct shape. Note:
      # reshape(-1) returns a 1D array from a 0 dimensional array as required
      # for broadcasting.
      pts = np.array(points, dtype=np.float64).reshape((-1, 2))
      azims = np.array(azimuths, dtype=np.float64).reshape(-1)
      dists = np.array(distances, dtype=np.float64).reshape(-1)
  
      sizes = [pts.shape[0], azims.size, dists.size]
      n_points = max(sizes)
      if not all(size in [1, n_points] for size in sizes):
          raise ValueError(
              "Inputs must have common length n or length one."
          )
  
      # Broadcast any length 1 arrays to the correct size.
      if pts.shape[0] == 1:
          orig_pts = pts
          pts = np.empty([n_points, 2], dtype=np.float64)
          pts[:, :] = orig_pts
  
      if azims.size == 1:
          azims = np.repeat(azims, n_points)
  
      if dists.size == 1:
          dists = np.repeat(dists, n_points)
  
      lons, lats, azims = self.geod.fwd(
          pts[:, 0], pts[:, 1], azims, dists
      )
      # Convert back azimuth to forward azimuth.
      azims += np.where(azims > 0, -180, 180)
      return np.column_stack([lons, lats, azims])
  
file_path: cartopy/lib/cartopy/geodesic.py
imports: import numpy
  import pyproj
  import shapely.geometry
label_desc: Use image node_id 3 for calling the Geodesic obj's underlying member method code with example usage: obj.direct(points, azimuths, distances) and returns: np