/**
 * @param {angular.IScope} $scope Angular scope.
 * @param {angular.IHttpService} $http Angular http service.
 * @param {JQuery} $element Element.
 * @param {angular.IFilterService} $filter Angular filter
 * @param {angular.gettext.gettextCatalog} gettextCatalog Gettext catalog.
 * @param {string} gmfProfileJsonUrl URL of GMF service JSON profile.
 * @param {import('gmf/options').gmfProfileOptions} gmfProfileOptions The options.
 * @param {import('ngeo/options').ngeoProfileOptions} ngeoProfileOptions The options.
 * @class
 * @hidden
 * @ngdoc controller
 * @ngname GmfProfileController
 */
export function ProfileController($scope: angular.IScope, $http: angular.IHttpService, $element: JQuery, $filter: angular.IFilterService, gettextCatalog: angular.gettext.gettextCatalog, gmfProfileJsonUrl: string, gmfProfileOptions: import("gmf/options").gmfProfileOptions, ngeoProfileOptions: import("ngeo/options").ngeoProfileOptions): void;
export class ProfileController {
    /**
     * @param {angular.IScope} $scope Angular scope.
     * @param {angular.IHttpService} $http Angular http service.
     * @param {JQuery} $element Element.
     * @param {angular.IFilterService} $filter Angular filter
     * @param {angular.gettext.gettextCatalog} gettextCatalog Gettext catalog.
     * @param {string} gmfProfileJsonUrl URL of GMF service JSON profile.
     * @param {import('gmf/options').gmfProfileOptions} gmfProfileOptions The options.
     * @param {import('ngeo/options').ngeoProfileOptions} ngeoProfileOptions The options.
     * @class
     * @hidden
     * @ngdoc controller
     * @ngname GmfProfileController
     */
    constructor($scope: angular.IScope, $http: angular.IHttpService, $element: JQuery, $filter: angular.IFilterService, gettextCatalog: angular.gettext.gettextCatalog, gmfProfileJsonUrl: string, gmfProfileOptions: import("gmf/options").gmfProfileOptions, ngeoProfileOptions: import("ngeo/options").ngeoProfileOptions);
    options: import("ngeo/options").gmfProfileOptions;
    ngeoOptions: import("ngeo/options").ngeoProfileOptions;
    /**
     * @type {angular.IScope}
     */
    $scope_: angular.IScope;
    /**
     * @type {angular.IHttpService}
     */
    $http_: angular.IHttpService;
    /**
     * @type {JQuery}
     */
    $element_: JQuery;
    /**
     * @type {angular.IFilterService}
     */
    $filter_: angular.IFilterService;
    /**
     * @type {angular.gettext.gettextCatalog}
     */
    gettextCatalog_: angular.gettext.gettextCatalog;
    /**
     * @type {import('ngeo/map/FeatureOverlay').FeatureOverlay}
     */
    pointHoverOverlay_: import("ngeo/map/FeatureOverlay").FeatureOverlay;
    /**
     * @type {string}
     */
    gmfProfileJsonUrl_: string;
    /**
     * @type {import('ngeo/download/Csv').DownloadCsvService}
     */
    ngeoCsvDownload_: import("ngeo/download/Csv").DownloadCsvService;
    /**
     * @type {?import('ol/Map').default}
     */
    map_: import("ol/Map").default | null;
    /**
     * @type {string[]}
     */
    layersNames_: string[];
    /**
     * @type {number}
     */
    nbPoints_: number;
    /**
     * @type {?import('ol/geom/LineString').default}
     */
    line: import("ol/geom/LineString").default | null;
    /**
     * @type {ProfileElement[]}
     */
    profileData: ProfileElement[];
    /**
     * @type {ProfileHoverPointInformations}
     */
    currentPoint: ProfileHoverPointInformations;
    /**
     * Distance to highlight on the profile. (Property used in ngeo.Profile.)
     *
     * @type {number}
     */
    profileHighlight: number;
    /**
     * Overlay to show the measurement.
     *
     * @type {?import('ol/Overlay').default}
     */
    measureTooltip_: import("ol/Overlay").default | null;
    /**
     * The measure tooltip element.
     *
     * @type {?HTMLElement}
     */
    measureTooltipElement_: HTMLElement | null;
    /**
     * @type {olFeature<import('ol/geom/Geometry').default>}
     */
    snappedPoint_: olFeature<import("ol/geom/Geometry").default>;
    /**
     * @type {import('ngeo/profile/elevationComponent').I18n}
     */
    profileLabels_: import("ngeo/profile/elevationComponent").I18n;
    /**
     * @type {?import('ngeo/profile/elevationComponent').ProfileOptions<ProfileElement>}
     */
    profileOptions: import("ngeo/profile/elevationComponent").ProfileOptions<ProfileElement> | null;
    /**
     * @type {boolean}
     */
    active: boolean;
    /**
     * @type {?import('ol/events').EventsKey}
     */
    pointerMoveKey_: import("ol/events").EventsKey | null;
    /**
     * @type {boolean}
     */
    isErrored: boolean;
    /**
     * @type {boolean}
     */
    isLoading: boolean;
    /**
     * @type {function():import('ol/Map').default}
     */
    getMapFn: () => import("ol/Map").default;
    getOptionsFn: () => {};
    /**
     * Init the controller
     */
    $onInit(): void;
    update_(): void;
    updateEventsListening_(): void;
    /**
     * Return the distance between the beginning of the line and the given point.
     * The point must be on the line. If not, this function will return the total
     * length of the line.
     *
     * @param {import('ol/coordinate').Coordinate} pointOnLine A point on the given line.
     * @returns {number} A distance.
     */
    getDistanceOnALine_(pointOnLine: import("ol/coordinate").Coordinate): number;
    /**
     * @typedef {Object} Point
     * @property {number} x
     * @property {number} y
     */
    /**
     * @param {unknown} pointObject Point.
     * @param {number} dist distance on the line.
     * @param {string} xUnits X units label.
     * @param {Object<string, number>} elevationsRef Elevations references.
     * @param {string} yUnits Y units label.
     */
    hoverCallback_(pointObject: unknown, dist: number, xUnits: string, elevationsRef: {
        [x: string]: number;
    }, yUnits: string): void;
    outCallback_(): void;
    /**
     * @returns {string} A text formatted to a tooltip.
     */
    getTooltipHTML_(): string;
    /**
     * Creates a new 'hover' tooltip
     */
    createMeasureTooltip_(): void;
    /**
     * Destroy the 'hover' tooltip
     */
    removeMeasureTooltip_(): void;
    /**
     * Return the styler value of a ProfileLineConfiguration.
     *
     * @param {string} layerName name of the elevation layer.
     * @returns {object} The object representation of the style.
     */
    getStyle(layerName: string): object;
    /**
     * Return a copy of the existing layer names.
     *
     * @returns {string[]} The names of layers.
     */
    getLayersNames(): string[];
    /**
     * @param {string} layerName name of the elevation layer.
     * @returns {function(ProfileElement): number} Z extractor function.
     */
    getZFactory_(layerName: string): (arg0: ProfileElement) => number;
    /**
     * Extractor for the 'dist' value in profileData.
     *
     * @param {ProfileElement} item The item.
     * @returns {number} The distance.
     */
    getDist_(item: ProfileElement): number;
    /**
     * Request the profile.
     */
    getJsonProfile_(): void;
    /**
     * @param {angular.IHttpResponse<ProfileServiceResult>} resp Response.
     */
    getProfileDataSuccess_(resp: angular.IHttpResponse<ProfileServiceResult>): void;
    /**
     * @param {angular.IHttpResponse<never>} resp Response.
     */
    getProfileDataError_(resp: angular.IHttpResponse<never>): void;
    /**
     * Request the csv profile with the current profile data.
     */
    downloadCsv(): void;
}
export namespace ProfileController {
    let $inject: string[];
}
export default myModule;
export type ProfileElement = {
    dist: number;
    x: number;
    y: number;
    values: {
        [x: string]: number;
    };
};
/**
 * The eesult of the profile service
 */
export type ProfileServiceResult = {
    profile: ProfileElement[];
};
/**
 * Information to display for a given point in the profile. The point is
 * typically given by the profile's hover.
 */
export type ProfileHoverPointInformations = {
    /**
     * Coordinate of the point.
     */
    coordinate?: import("ol/coordinate").Coordinate;
    /**
     * distance of the point on the line. Can be in meters or kilometers.
     */
    distance?: number;
    /**
     * Elevations of the point (example:
     * {aster: 556.5, srtm: 560}).
     */
    elevations?: {
        [x: string]: number;
    };
    /**
     * Units of the x axis.
     */
    xUnits?: string;
    /**
     * Units of the y axis.
     */
    yUnits?: string;
};
export type Point = {
    x: number;
    y: number;
};
import angular from 'angular';
import olFeature from 'ol/Feature';
/**
 * @typedef {Object} ProfileElement
 * @property {number} dist
 * @property {number} x
 * @property {number} y
 * @property {Object<string, number>} values
 */
/**
 * @typedef {Object} ProfileServiceResult
 * The eesult of the profile service
 * @property {ProfileElement[]} profile
 */
/**
 * Information to display for a given point in the profile. The point is
 * typically given by the profile's hover.
 *
 * @typedef {Object} ProfileHoverPointInformations
 * @property {import('ol/coordinate').Coordinate} [coordinate] Coordinate of the point.
 * @property {number} [distance] distance of the point on the line. Can be in meters or kilometers.
 * @property {Object<string, number>} [elevations] Elevations of the point (example:
 *    {aster: 556.5, srtm: 560}).
 * @property {string} [xUnits] Units of the x axis.
 * @property {string} [yUnits] Units of the y axis.
 */
/**
 * @type {angular.IModule}
 * @hidden
 */
declare const myModule: angular.IModule;
