import Point from "ol/geom/Point";
import LineString from "ol/geom/LineString";
import Circle from "ol/geom/Circle";
import Polygon from "ol/geom/Polygon";
import LinearRing from "ol/geom/LinearRing";
import MultiLineString from "ol/geom/MultiLineString";
import MultiPoint from "ol/geom/MultiPoint";
import MultiPolygon from "ol/geom/MultiPolygon";
import Geometry from "ol/geom/Geometry";
import GeometryCollection from "ol/geom/GeometryCollection";
import Overlay, { Options as OverlayOptions } from "ol/Overlay";
import Projection, { Options as ProjectionOptions } from "ol/proj/Projection";
import VectorSource, { Options as VectorOptions } from "ol/source/Vector";
import Collection from "ol/Collection";
import Feature from "ol/Feature";
import ExtentInteraction, { Options as ExtentOptions } from "ol/interaction/Extent";
import SnapInteraction, { Options as SnapOptions } from "ol/interaction/Snap";
import DrawInteraction, { Options as DrawOptions } from "ol/interaction/Draw";
import TranslateInteraction, { Options as TranslateOptions } from "ol/interaction/Translate";
import ModifyInteraction, { Options as ModifyOptions } from "ol/interaction/Modify";
import SelectInteraction, { Options as SelectOptions } from "ol/interaction/Select";
import GeoJSONFormat, { Options as GeoJSONOptions } from "ol/format/GeoJSON";
import WKTFormat, { Options as WKTOptions } from "ol/format/WKT";
import Style, { Options as StyleOptions } from "ol/style/Style";
import IconStyle, { Options as IconOptions } from "ol/style/Icon";
import RegularShapeStyle, { Options as RegularShapeOptions } from "ol/style/RegularShape";
import TextStyle, { Options as TextOptions } from "ol/style/Text";
import FillStyle, { Options as FillOptions } from "ol/style/Fill";
import StrokeStyle, { Options as StrokeOptions } from "ol/style/Stroke";
import CircleStyle, { Options as CircleOptions } from "ol/style/Circle";
import { Bounds, Coordinate2D } from './common';
import { ProjectionLike } from 'ol/proj';
import { OLVectorLayer, OLVectorLayerOptions } from "./ol-types";
/**
 * Creates various OpenLayers types used by the viewer
 *
 * @export
 * @interface IOLFactory
 */
export interface IOLFactory {
    /**
     *
     * @param options
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyle(options?: StyleOptions): Style;
    /**
     *
     * @param options
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleFill(options?: FillOptions): FillStyle;
    /**
     *
     * @param options
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleStroke(options?: StrokeOptions): StrokeStyle;
    /**
     *
     * @param options
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleCircle(options?: CircleOptions): CircleStyle;
    /**
     * @since 0.12.6
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleIcon(options?: IconOptions): IconStyle;
    /**
     * @since 0.12.6
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleRegularShape(options: RegularShapeOptions): RegularShapeStyle;
    /**
     * @since 0.12.6
     * @deprecated Will be removed in favor of the IVectorFeatureStyle as that better integrates with the external layer manager component
     */
    createStyleText(options?: TextOptions): TextStyle;
    createFeatureCollection(): Collection<Feature<Geometry>>;
    extentContainsXY(extent: Bounds, x: number, y: number): boolean;
    extendExtent(extent: Bounds, other: Bounds): Bounds;
    createProjection(options: ProjectionOptions): Projection;
    transformCoordinateFromLonLat(lonlat: Coordinate2D, proj?: ProjectionLike): Coordinate2D;
    transformCoordinate(coordinate: Coordinate2D, source: ProjectionLike, target: ProjectionLike): Coordinate2D;
    transformExtent(extent: Bounds, source: ProjectionLike, target: ProjectionLike): Bounds;
    createGeomPoint(coordinates: Coordinate2D): Point;
    createGeomLineString(coordinates: Coordinate2D[]): LineString;
    createGeomCircle(center: Coordinate2D, radius: number | undefined): Circle;
    createGeomLinearRing(coordinates: Coordinate2D[]): LinearRing;
    createGeomPolygon(coordinates: Coordinate2D[][]): Polygon;
    createGeomPolygonFromCircle(circle: Circle): Polygon;
    createGeomMultiLineString(coordinates: Coordinate2D[][]): MultiLineString;
    createGeomMultiPoint(coordinates: Coordinate2D[]): MultiPoint;
    createGeomMultiPolygon(coordinates: Coordinate2D[][][]): MultiPolygon;
    createGeomCollection(geometries: Geometry[]): GeometryCollection;
    createVectorSource(options?: VectorOptions): VectorSource<Geometry>;
    createVectorLayer(options?: OLVectorLayerOptions | undefined): OLVectorLayer;
    createOverlay(options: OverlayOptions): Overlay;
    createInteractionDraw(options: DrawOptions): DrawInteraction;
    /**
     *
     * @since 0.11
     * @param {ModifyOptions} options
     * @returns {ModifyInteraction}
     * @memberof IOLFactory
     */
    createInteractionModify(options: ModifyOptions): ModifyInteraction;
    /**
     *
     * @since 0.11
     * @param {SelectOptions} options
     * @returns {SelectInteraction}
     * @memberof IOLFactory
     */
    createInteractionSelect(options: SelectOptions): SelectInteraction;
    createInteractionExtent(options: ExtentOptions): ExtentInteraction;
    createInteractionSnap(options: SnapOptions): SnapInteraction;
    createInteractionTranslate(options: TranslateOptions): TranslateInteraction;
    createFeature(geomOrProps?: Geometry | {
        [key: string]: any;
    }): Feature<Geometry>;
    createFormatGeoJSON(options?: GeoJSONOptions | undefined): GeoJSONFormat;
    createFormatWKT(options?: WKTOptions | undefined): WKTFormat;
}
/**
 * Creates various OpenLayers types used by the viewer
 *
 * @export
 * @class OLFactory
 * @implements {IOLFactory}
 */
export declare class OLFactory implements IOLFactory {
    createStyle(options?: StyleOptions): Style;
    createStyleFill(options?: FillOptions): FillStyle;
    createStyleStroke(options?: StrokeOptions): StrokeStyle;
    createStyleCircle(options?: CircleOptions): CircleStyle;
    createFeatureCollection(): Collection<Feature<Geometry>>;
    extentContainsXY(extent: Bounds, x: number, y: number): boolean;
    extendExtent(extent: Bounds, other: Bounds): Bounds;
    createProjection(options: ProjectionOptions): Projection;
    transformCoordinateFromLonLat(lonlat: Coordinate2D, proj?: ProjectionLike): Coordinate2D;
    transformCoordinate(coordinate: Coordinate2D, source: ProjectionLike, target: ProjectionLike): Coordinate2D;
    transformExtent(extent: Bounds, source: ProjectionLike, target: ProjectionLike): Bounds;
    createGeomPoint(coordinates: Coordinate2D): Point;
    createGeomLineString(coordinates: Coordinate2D[]): LineString;
    createGeomCircle(center: Coordinate2D, radius: number | undefined): Circle;
    createGeomLinearRing(coordinates: Coordinate2D[]): LinearRing;
    createGeomPolygon(coordinates: Coordinate2D[][]): Polygon;
    createGeomPolygonFromCircle(circle: Circle): Polygon;
    createGeomMultiLineString(coordinates: Coordinate2D[][]): MultiLineString;
    createGeomMultiPoint(coordinates: Coordinate2D[]): MultiPoint;
    createGeomMultiPolygon(coordinates: Coordinate2D[][][]): MultiPolygon;
    createGeomCollection(geometries: Geometry[]): GeometryCollection;
    createVectorSource(options?: VectorOptions): VectorSource<Geometry>;
    createVectorLayer(options?: OLVectorLayerOptions | undefined): OLVectorLayer;
    createOverlay(options: OverlayOptions): Overlay;
    createInteractionDraw(options: DrawOptions): DrawInteraction;
    createInteractionExtent(options: ExtentOptions): ExtentInteraction;
    createInteractionTranslate(options: TranslateOptions): TranslateInteraction;
    createInteractionSnap(options: SnapOptions): SnapInteraction;
    createInteractionModify(options: ModifyOptions): ModifyInteraction;
    createInteractionSelect(options: SelectOptions): SelectInteraction;
    createFeature(geomOrProps?: Geometry | {
        [key: string]: any;
    }): Feature<Geometry>;
    createFormatGeoJSON(options?: GeoJSONOptions | undefined): GeoJSONFormat;
    createFormatWKT(options?: WKTOptions | undefined): WKTFormat;
    /**
     * @since 0.12.6
     */
    createStyleIcon(options?: IconOptions | undefined): IconStyle;
    /**
     * @since 0.12.6
     */
    createStyleRegularShape(options: RegularShapeOptions): RegularShapeStyle;
    /**
     * @since 0.12.6
     */
    createStyleText(options?: TextOptions | undefined): TextStyle;
}
