import type { GeometryCollection, LineString, Point, Position } from "geojson";
import type { WellFeature, WellFeatureCollection } from "../types";
export declare function getWellboreGeometry(feature: WellFeature): LineString;
export declare function getWellHeadGeometry(feature: WellFeature): Point;
/**
 * Returns the final (last) coordinate of the first LineString with at least one coordinate
 * found inside the supplied GeometryCollection.
 *
 * @param feature Geometry collection feature containing well geometries (Points / LineStrings).
 * @returns The last coordinate (xyz) of the first qualifying LineString, or null if none exist.
 */
export declare const getEndPoint: (feature: {
    geometry: GeometryCollection;
}) => Position | null;
/**
 * Returns the starting (first) coordinate of the first LineString with at least one coordinate
 * found inside the supplied GeometryCollection.
 *
 * @param feature Geometry collection feature containing well geometries (Points / LineStrings).
 * @returns The first coordinate (xyz) of the first qualifying LineString, or null if none exist.
 */
export declare const getStartPoint: (feature: {
    geometry: GeometryCollection;
}) => Position | null;
/**
 * Computes the lateral (XY plane) Euclidean distance between the end of the first available
 * trajectory (LineString) in the first feature and the start of the first available trajectory
 * in the second feature. Z values are ignored in the distance calculation.
 *
 * @param feature1 Feature containing a GeometryCollection (source / previous well trajectory).
 * @param feature2 Feature containing a GeometryCollection (target / next well trajectory).
 * @returns Lateral distance in the same units as the input coordinates, or 0 if either trajectory endpoint is missing.
 */
export declare function calculateTrajectoryGap(feature1: WellFeature, feature2: WellFeature): number;
/**
 * Omni directional version of calculateTrajectoryGap.
 * @param feature1 The first wellbore feature
 * @param feature2 The second wellbore feature
 * @param reverse Whether to consider the first wellbore as reversed
 * @returns The lateral gap and whether reversing the second wellbore gives the shortest
 * gap.
 */
export declare function calculateTrajectoryOmniGap(feature1: WellFeature, feature2: WellFeature, reverse?: boolean): {
    gap: number;
    reverse: boolean;
};
/**
 * Projects well trajectories unfolded onto an abscissa, z plane with lateral separation.
 * The distance between trajectories is equal to the lateral component of the euclidean
 * distance between the end of the previous trajectory and the start of the next one.
 */
export declare function abscissaTransform(featureCollection: WellFeatureCollection): WellFeatureCollection;
/**
 * Projects well trajectories onto an abscissa, z plane using a nearest neighbor approach.
 * @param wellCollection The well collection to project
 * @returns The projected well collection and the path used for the section projected upon
 */
export declare function nearestNeighborAbscissaTransform(wellCollection: WellFeatureCollection): {
    features: WellFeatureCollection;
    path: Position[];
};
