docs: static double computeSignedArea(List<IGeoPoint> path, double radius) {
          int size = path.size();
          if (size < 3) { return 0; }
          double total = 0;
          IGeoPoint prev = path.get(size - 1);
          double prevTanLat = tan((PI / 2 - toRadians(prev.getLatitude())) / 2);
          double prevLng = toRadians(prev.getLongitude());
          // For each edge, accumulate the signed area of the triangle formed by the North Pole
          // and that edge ("polar triangle").
          for (IGeoPoint point : path) {
              double tanLat = tan((PI / 2 - toRadians(point.getLatitude())) / 2);
              double lng = toRadians(point.getLongitude());
              total += polarTriangleArea(tanLat, lng, prevTanLat, prevLng);
              prevTanLat = tanLat;
              prevLng = lng;
          }
          return total * (radius * radius);
      }