import Extent from "@arcgis/core/geometry/Extent";
import Polygon from "@arcgis/core/geometry/Polygon";
import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
import type GeographicTransformation from "@arcgis/core/geometry/operators/support/GeographicTransformation";
import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
import type { GeoJSON, GeoJSONPoint, GeoJSONMultiPoint, GeoJSONLineString, GeoJSONMultiLineString, GeoJSONPolygon, GeoJSONMultiPolygon } from "./_geoJson.js";
import type { GmlOptions } from "./_gml.js";
import { isExtent, isGeometry, isMesh, isMultipoint, isPoint, isPolygon, isPolyline } from "./esri.js";
export type { Transformation } from "./transformation.js";
export type { GmlOptions };
export type { GeoJSON, GeoJSONPoint, GeoJSONMultiPoint, GeoJSONLineString, GeoJSONMultiLineString, GeoJSONPolygon, GeoJSONMultiPolygon, };
export { isGeometry, isPoint, isMultipoint, isPolyline, isPolygon, isExtent, isMesh };
/**
 * A convenience class for working with global coordinate systems. The
 * coordinate system is assumed here to have an origin at zero and extend for an
 * equal distance from each side of the origin before it wraps around.
 */
export declare class CoordinateSystemBounds {
    readonly limit: number;
    get min(): number;
    get max(): number;
    get range(): number;
    constructor(limit: number);
}
/**
 * Defines the typical bounds of the Web Mercator coordinate system.
 */
export declare const WEB_MERCATOR_BOUNDS: CoordinateSystemBounds;
/**
 * Defines the typical bounds of a geographic coordinate system (+/- 180
 * degrees).
 */
export declare const GEOGRAPHIC_BOUNDS: CoordinateSystemBounds;
/**
 * Given a coordinate system, return the CoordinateSystemBounds object, if one
 * is defined.
 *
 * @param spatialReference The spatial reference to get the bounds of.
 */
export declare function getBounds(spatialReference: SpatialReference): CoordinateSystemBounds | undefined;
/**
 * Given a collection of geometries, return the minimum bounding box when
 * translated to screen space. This is not the same as the extent, as it may
 * contain coordinates outside of the range of the underlying coordinate system
 * in order to maintain a minimum screen extent. The geometries may be of mixed
 * types but must all be of the same spatial reference.
 *
 * @param geometries The geometries to get the screen extent from.
 */
export declare function getScreenExtent(geometries: GeometryUnion[]): Extent | undefined;
/**
 * Denormalizes an extent so that coordinates increase continuously from xmin to
 * xmax. This may result in some vertices of the extent having values outside of
 * the normal coordinate system bounds.
 *
 * @param extent The Extent to denormalize.
 * @param bounds The bounds of the coordinate system.
 */
export declare function denormalizeExtent(extent: Extent, bounds: CoordinateSystemBounds): Extent;
/**
 * The steps in transforming spatial references. See
 * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-geometry-support-GeographicTransformation.html}.
 */
export interface GeographicTransformationJson {
    /**
     * The steps in the process of transforming coordinates from one geographic
     * coordinate system to another.
     */
    steps: GeographicTransformationStepJson[];
}
/**
 * Represents a step in the process of transforming coordinates from one
 * geographic coordinate system to another.
 */
export interface GeographicTransformationStepJson {
    /**
     * Indicates if the geographic transformation is inverted. AN inverted
     * transformation would be transforming from the out SR to the in SR.
     */
    isInverse?: boolean;
    /**
     * The well-known id (wkid) that represents a known geographic
     * transformation.
     */
    wkid: number;
    /**
     * The well-known text (wkt) that represents a known geographic
     * transformation.
     */
    wkt: string;
}
/**
 * Converts an esri geometry to a WKT geometry.
 *
 * @param geometry Geometry to convert.
 */
export declare function esriToWKT(geometry: GeometryUnion): Promise<string>;
/**
 * Converts a WKT geometry to an esri geometry.
 *
 * @param geometry Geometry to convert.
 * @param outSpatialReference The spatial reference to assign to the geometries.
 *   If not specified, WGS84 will be applied.
 */
export declare function wktToEsri(geometry: string, outSpatialReference?: SpatialReference): Promise<GeometryUnion>;
/**
 * Converts an esri geometry to a GeoJSON geometry.
 *
 * @param geometry Geometry to convert.
 */
export declare function esriToGeoJSON(geometry: GeometryUnion): Promise<GeoJSON>;
/**
 * Converts a GeoJSON geometry to an esri geometry. Assigns a spatial reference
 * of WGS84.
 *
 * @param geometry Geometry to convert.
 */
export declare function geoJSONToEsri(geometry: GeoJSON): Promise<GeometryUnion>;
/**
 * Converts a GML markup geometry to an Esri geometry.
 *
 * @param geometry The geometry to be converted.
 */
export declare function gmlToEsri(geometry: Element): Promise<GeometryUnion>;
/**
 * Converts an Esri geometry to a GML markup representation.
 *
 * @param geometry The geometry to be converted.
 * @param options Options to be used during the conversion.
 */
export declare function esriToGml(geometry: GeometryUnion, options: GmlOptions): Promise<Element>;
/**
 * Attempts to convert a WKID to a WKT spatial reference.
 *
 * @param wkid The WKID to convert.
 */
export declare function esriWkidToWkt(wkid: number | string): Promise<string>;
/**
 * Attempts to convert a WKT to WKID spatial reference.
 *
 * @param wkt The WKT to convert.
 */
export declare function esriWktToWkid(wkt: string): Promise<number>;
/**
 * Takes a list of geometries, unions them by geometry type, and returns the
 * union of the unions that's broken up by geometry type.
 *
 * @param geometries A list of geometries.
 */
export declare function createCrossTypeUnion(geometries: GeometryUnion[]): Promise<GeometryUnion[]>;
/**
 * Projects a set of geometries to a new spatial reference.
 *
 * @param geometries The geometries to project.
 * @param outSpatialReference The target spatial reference.
 * @param geographicTransformation The optional transformation.
 */
export declare function project(geometries: Iterable<GeometryUnion>, outSpatialReference: SpatialReference, geographicTransformation?: GeographicTransformation): Promise<GeometryUnion[]>;
/**
 * Creates buffer polygons at a specified distances around the given geometries.
 * The original geometry will not be modified.
 *
 * @param geometries The geometry to buffer.
 * @param distances The distances between the buffer polygons and the
 *   geometries.
 * @param unit The unit of the distance, see {@link support/esri!DistanceUnit}.
 * @param unionResults If true, the returned buffers will be combined into a
 *   single polygon. Defaults to false.
 */
export declare function buffer(geometries: GeometryUnion, distances: number, unit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards", unionResults?: boolean): Promise<Polygon | Polygon[]>;
export declare function buffer(geometries: GeometryUnion[], distances: number[], unit: "feet" | "kilometers" | "meters" | "miles" | "nautical-miles" | "yards", unionResults?: boolean): Promise<Polygon | Polygon[]>;
/**
 * Removes Z values from a geometry. Mesh geometry is returned unaffected.
 *
 * @param geometry The geometry from which to remove z values.
 */
export declare function removeZValues(geometry: GeometryUnion): GeometryUnion;
