/**
 * The controller for the routing directive.
 *
 * @hidden
 */
export class Controller {
    /**
     * @param {angular.IScope} $scope Scope.
     * @param {import('ngeo/routing/RoutingService').RoutingService} ngeoRoutingService service for OSRM
     *    routing.
     * @param {import('ngeo/routing/NominatimService').NominatimService} ngeoNominatimService service for
     *    Nominatim.
     * @param {angular.IQService} $q Angular q service
     * @param {import('ngeo/misc/debounce').miscDebounce<function(): void>} ngeoDebounce ngeo Debounce
     *    service.
     * @param {import('ngeo/options').ngeoRoutingOptions} ngeoRoutingOptions The options.
     */
    constructor($scope: angular.IScope, ngeoRoutingService: import("ngeo/routing/RoutingService").RoutingService, ngeoNominatimService: import("ngeo/routing/NominatimService").NominatimService, $q: angular.IQService, ngeoDebounce: import("ngeo/misc/debounce").miscDebounce<() => void>, ngeoRoutingOptions: import("ngeo/options").ngeoRoutingOptions);
    /**
     * @type {angular.IScope}
     * @private
     */
    private $scope_;
    /**
     * @type {import('ngeo/routing/RoutingService').RoutingService}
     * @private
     */
    private ngeoRoutingService_;
    /**
     * @type {import('ngeo/routing/NominatimService').NominatimService}
     * @private
     */
    private ngeoNominatimService_;
    /**
     * @type {import('ngeo/options').ngeoRoutingOptions}
     * @private
     */
    private routingOptions_;
    /**
     * Available routing profiles.
     * Example: [
     *            {
     *              label: 'Car', // used as label in the UI
     *              profile: 'routed-car' // used as part of the query
     *            }
     *          ]
     *
     * @type {import('ngeo/options').RoutingProfile[]}
     */
    routingProfiles: import("ngeo/options").RoutingProfile[];
    /**
     * @type {?import('ngeo/options').RoutingProfile}
     */
    selectedRoutingProfile: import("ngeo/options").RoutingProfile | null;
    /**
     * @type {angular.IQService}
     * @private
     */
    private $q_;
    /**
     * @type {?import('ol/Map').default}
     */
    map: import("ol/Map").default | null;
    /**
     * @type {string}
     */
    errorMessage: string;
    /**
     * @type {?olFeature<import('ol/geom/Geometry').default>}
     */
    startFeature_: olFeature<import("ol/geom/Geometry").default> | null;
    /**
     * @type {?olFeature<import('ol/geom/Geometry').default>}
     */
    targetFeature_: olFeature<import("ol/geom/Geometry").default> | null;
    /**
     * @type {RoutingVia[]}
     */
    viaArray: RoutingVia[];
    /**
     * @type {Object<string, string>}
     */
    colors: {
        [x: string]: string;
    };
    /**
     * @type {import('ol/source/Vector').default<import('ol/geom/Geometry').default>}
     * @private
     */
    private routeSource_;
    /**
     * @type {import('ol/layer/Vector').default<import('ol/source/Vector').default<import('ol/geom/Geometry').default>>}
     * @private
     */
    private routeLayer_;
    /**
     * Distance of route in meters
     *
     * @type {number}
     */
    routeDistance: number;
    /**
     * Duration of route in minutes.
     *
     * @type {?number}
     */
    routeDuration: number | null;
    /**
     * @type {RegExp}
     * @private
     */
    private regexIsFormattedCoord;
    /**
     * @type {?import('ol/interaction/Draw').default}
     * @private
     */
    private draw_;
    /**
     * Debounced because in some cases (reverse route) multiple changes are done
     * at once and spam this function.
     *
     * @type {function(): void}
     */
    handleChange: () => void;
    /**
     * Init the controller
     */
    $onInit(): void;
    /**
     * Clears start, end and vias. Removes features from map.
     */
    clearRoute(): void;
    /**
     * Converts feature point into LonLat coordinate.
     *
     * @param {olFeature<import('ol/geom/Geometry').default>} point Feature point to convert
     * @returns {?import('ol/coordinate').Coordinate} LonLat coordinate
     * @private
     */
    private getLonLatFromPoint_;
    /**
     * Flip start and target and re-calculate route.
     */
    reverseRoute(): void;
    /**
     * @param {import('./RoutingService').Route} route Routes of OSRM response
     * @returns {olFeature<import('ol/geom/Geometry').default>[]} parsed route features
     * @private
     */
    private parseRoute_;
    /**
     */
    calculateRoute(): void;
    /**
     */
    addVia(): void;
    /**
     * @param {number} index Array index.
     */
    deleteVia(index: number): void;
}
export namespace Controller {
    let $inject: string[];
}
export default myModule;
export type RoutingVia = {
    feature?: olFeature<import("ol/geom/Geometry").default>;
    onSelect?: (arg0: import("ngeo/routing/NominatimService").NominatimSearchResult) => void;
};
import olFeature from 'ol/Feature';
import angular from 'angular';
/**
 * @typedef {Object} RoutingVia
 * @property {olFeature<import('ol/geom/Geometry').default>} [feature]
 * @property {function(import('ngeo/routing/NominatimService').NominatimSearchResult): void} [onSelect]
 */
/**
 * @type {angular.IModule}
 * @hidden
 */
declare const myModule: angular.IModule;
