/**
 * @typedef {Object} NominatimSearchResult
 * @property {string} name
 * @property {string} [label]
 * @property {string[]} coordinate
 */
/**
 * @typedef {Object} NominatimSearchResponseResult
 * @property {string} display_name
 * @property {string} lon
 * @property {string} lat
 */
/**
 * Service to provide access to Nominatim, which allows to search for
 * OSM data by name and address.
 *
 * @param {angular.IHttpService} $http Angular http service.
 * @param {import('ngeo/misc/debounce').miscDebounce<function(string, function(NominatimSearchResult[]): void, (function(NominatimSearchResult[]): void)|undefined): void>}  ngeoDebounce
 *    ngeo Debounce service.
 * @param {string} ngeoNominatimUrl The nominatim URL.
 * @param {import('ngeo/options').ngeoNominatimSearchDefaultParams} ngeoNominatimSearchDefaultParams The search parameters
 * @class
 * @ngdoc service
 * @ngname ngeoNominatimService
 * @see https://wiki.openstreetmap.org/wiki/Nominatim
 * @hidden
 */
export function NominatimService($http: angular.IHttpService, ngeoDebounce: import("ngeo/misc/debounce").miscDebounce<(arg0: string, arg1: (arg0: NominatimSearchResult[]) => void, arg2: ((arg0: NominatimSearchResult[]) => void) | undefined) => void>, ngeoNominatimUrl: string, ngeoNominatimSearchDefaultParams: import("ngeo/options").ngeoNominatimSearchDefaultParams): void;
export class NominatimService {
    /**
     * @typedef {Object} NominatimSearchResult
     * @property {string} name
     * @property {string} [label]
     * @property {string[]} coordinate
     */
    /**
     * @typedef {Object} NominatimSearchResponseResult
     * @property {string} display_name
     * @property {string} lon
     * @property {string} lat
     */
    /**
     * Service to provide access to Nominatim, which allows to search for
     * OSM data by name and address.
     *
     * @param {angular.IHttpService} $http Angular http service.
     * @param {import('ngeo/misc/debounce').miscDebounce<function(string, function(NominatimSearchResult[]): void, (function(NominatimSearchResult[]): void)|undefined): void>}  ngeoDebounce
     *    ngeo Debounce service.
     * @param {string} ngeoNominatimUrl The nominatim URL.
     * @param {import('ngeo/options').ngeoNominatimSearchDefaultParams} ngeoNominatimSearchDefaultParams The search parameters
     * @class
     * @ngdoc service
     * @ngname ngeoNominatimService
     * @see https://wiki.openstreetmap.org/wiki/Nominatim
     * @hidden
     */
    constructor($http: angular.IHttpService, ngeoDebounce: import("ngeo/misc/debounce").miscDebounce<(arg0: string, arg1: (arg0: NominatimSearchResult[]) => void, arg2: ((arg0: NominatimSearchResult[]) => void) | undefined) => void>, ngeoNominatimUrl: string, ngeoNominatimSearchDefaultParams: import("ngeo/options").ngeoNominatimSearchDefaultParams);
    /**
     * @type {angular.IHttpService}
     */
    $http_: angular.IHttpService;
    /**
     * @type {import('ngeo/misc/debounce').miscDebounce<function(string, function(NominatimSearchResult[]): void, (function(NominatimSearchResult[]): void)|undefined): void>}
     */
    ngeoDebounce_: import("ngeo/misc/debounce").miscDebounce<(arg0: string, arg1: (arg0: NominatimSearchResult[]) => void, arg2: ((arg0: NominatimSearchResult[]) => void) | undefined) => void>;
    /**
     * URL for Nominatim backend
     * Defaults openstreetmap instance.
     *
     * @type {string}
     */
    nominatimUrl_: string;
    /**
     * @type {import('ngeo/options').ngeoNominatimSearchDefaultParams}
     */
    searchDefaultParams_: import("ngeo/options").ngeoNominatimSearchDefaultParams;
    /**
     * Delay (in milliseconds) to avoid calling the API too often.
     * Only if there were no calls for that many milliseconds,
     * the last call will be executed.
     *
     * @type {number}
     */
    typeaheadDebounceDelay_: number;
    /**
     * @type {(query: string, syncResults: (result: NominatimSearchResult[]) => void, asyncResults: ((result: NominatimSearchResult[]) => void) | undefined) => void}
     */
    typeaheadSourceDebounced: (query: string, syncResults: (result: NominatimSearchResult[]) => void, asyncResults: ((result: NominatimSearchResult[]) => void) | undefined) => void;
    /**
     * Search by name
     *
     * @param {string} query Search query
     * @param {?Object<string, string>} params Optional parameters
     * @returns {angular.IHttpPromise<NominatimSearchResponseResult[]>} promise of the Nominatim API request
     * @see https://wiki.openstreetmap.org/wiki/Nominatim#Search
     */
    search(query: string, params: {
        [x: string]: string;
    } | null): angular.IHttpPromise<NominatimSearchResponseResult[]>;
    /**
     * Reverse Geocoding
     *
     * @param {import('ol/coordinate').Coordinate} coordinate Search coordinate in LonLat projection
     * @param {(Object<string, string>|undefined)} params Optional parameters
     * @returns {angular.IHttpPromise<import('./NominatimService').NominatimSearchResponseResult>} promise of the Nominatim API request
     * @see https://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocoding
     */
    reverse(coordinate: import("ol/coordinate").Coordinate, params: ({
        [x: string]: string;
    } | undefined)): angular.IHttpPromise<import("./NominatimService").NominatimSearchResponseResult>;
    /**
     * @param {string} query Search query
     * @param {(result: NominatimSearchResult[]) => void} syncResults Callback for synchronous execution, unused
     * @param {(result: NominatimSearchResult[]) => void} [asyncResults] Callback for asynchronous execution
     */
    typeaheadSource_(query: string, syncResults: (result: NominatimSearchResult[]) => void, asyncResults?: (result: NominatimSearchResult[]) => void): void;
}
export namespace NominatimService {
    let $inject: string[];
}
export default myModule;
export type NominatimSearchResult = {
    name: string;
    label?: string;
    coordinate: string[];
};
export type NominatimSearchResponseResult = {
    display_name: string;
    lon: string;
    lat: string;
};
import angular from 'angular';
/**
 * @type {angular.IModule}
 * @hidden
 */
declare const myModule: angular.IModule;
