docs: def _get_cartesian_edge_set(self):
          """
          For the GC2 calculations a set of cartesian representations of the
          fault edges are needed. In this present case we use a common cartesian
          framework for all edges, as opposed to defining a separate orthographic
          projection per edge
          """
          # Get projection space for cartesian projection
          edge_sets = numpy.vstack(self.edge_set)
          west, east, north, south = utils.get_spherical_bounding_box(
              edge_sets[:, 0],
              edge_sets[:, 1])
          self.proj = utils.OrthographicProjection(west, east, north, south)
  
          for edges in self.edge_set:
              # Project edges into cartesian space
              px, py = self.proj(edges[:, 0], edges[:, 1])
              # Store the two end-points of the trace
              self.cartesian_endpoints.append(
                  numpy.array([[px[0], py[0], edges[0, 2]],
                               [px[-1], py[-1], edges[-1, 2]]]))
              self.cartesian_edges.append(numpy.column_stack([px, py,
                                                              edges[:, 2]]))
              # Get surface length vector for the trace - easier in cartesian
              lengths = numpy.sqrt((px[:-1] - px[1:]) ** 2. +
                                   (py[:-1] - py[1:]) ** 2.)
              self.length_set.append(lengths)
              # Get cumulative surface length vector
              self.cum_length_set.append(
                  numpy.hstack([0., numpy.cumsum(lengths)]))
          return edge_sets