import type { AccessorContext, Color } from "@deck.gl/core";
import type { LineString, Position } from "geojson";
import type { Point2D, Point3D } from "../../../utils";
import type { ColorAccessor, WellFeature } from "../types";
/**
 * Finds the nested geometry object that describes a well's trajectory
 * @param well_object A GeoJSON Well Feature
 * @returns A "LineString" object that describes the well's path
 */
export declare function getLineStringGeometry(well_object: WellFeature): LineString | undefined;
export declare function getColor(accessor: ColorAccessor): Color | ((object: WellFeature, objectInfo?: AccessorContext<WellFeature>) => Color | undefined);
/**
 * Get trajectory data from LineString Geometry if it's visible (checking
 * trajectory visibility based on line color)
 */
export declare function getTrajectory(well_object: WellFeature, color_accessor: ColorAccessor): Position[] | undefined;
export declare function getMdsInRange(mdArray: number[], mdStart: number, mdEnd: number): number[];
export declare function interpolateDataOnTrajectory(coord: Position, data: number[], trajectory: Position[]): number | null;
export declare function getMd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
export declare function getTvd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
export declare function getSegmentIndex(coord: Position, path: Position[]): number;
/**
 * Gets the lower and upper path-indices for the path-segment that contains a specific fractional point along the path. fraction-positions that are very close to either end (by 0.001 units) will be rounded of.
 * @param fractionPosition A fractional position along the track (0-1);
 * @param trajectory A list of positions that describes the trajectory
 * @param cumulativeTrajectoryDistance A list of pre-computed distance measurements for each trajectory point (i.e. a wells measured depth array). The measurements must cumulative values.
 * @returns a tuple containing the lower and upper segment indices, as well as the fractional position along the segment (0-1, with 0 being the beginning of the segment)
 */
export declare function getFractionPositionSegmentIndices(fractionPosition: number, trajectory: unknown[], cumulativeTrajectoryDistance: number[]): [lowerIndex: number, upperIndex: number, segmentFraction: number];
/**
 * Get position and angle (in radians) along a trajectory path
 * @param positionAlongPath 0-1 fraction along trajectory
 * @param trajectory Trajectory as a list of positions
 * @param projectionFunc Callback function to project 3D coordinates over to 2D
 * @param is3d Whether to use compute with (and return) 2-dimensional positions
 * @returns A tuple containing an angle and a interpolated point on the trajectory
 */
export declare function getPositionAndAngleOnTrajectoryPath(positionAlongPath: number, trajectory: Position[], cumulativeTrajectoryDistance: number[], projectionFunc?: (xyz: number[]) => number[], is3d?: boolean): [angle: number, position: Point2D | Point3D];
/**
 * Computes an array of cumulative distances for a well's trajectory path.
 *
 * **Note:** This is usually equivalent to the MD-array, so you probably don't need this.
 * @param well_xyz A list of positions that describe the wells trajectory
 * @returns a list of cumulative distances
 */
export declare function getCumulativeDistance(well_xyz: Position[]): number[];
/**
 * Adds interpolated entries to trajectory data (MD and position) at a given MD. If an MD value is close (0.001 units) the point will *not* be added.
 * @param well A well feature to add entries to
 * @param mdValuesToInject one or more MD values to inject
 * @returns A copy of the well object with the new MD values injected
 */
export declare function injectMdPoints(well: WellFeature, ...mdValuesToInject: number[]): WellFeature;
