import { ExternalLoaderBody, ExternalLoaderHeaders, ExternalLoaderInterface, ExternalLoaderParams } from "../../ExternalLoader";
import { ErrorCallback, GeocodedResultsCallback, NominatimGeocoded, NominatimReverseQuery, NominatimReverseQueryObject, NominatimGeocodeQueryObject, NominatimGeocodeQuery, ProviderInterface, ProviderOptionsInterface } from "./..";
interface NominatimErrorResponse {
    error: string;
}
export declare type NominatimOsmType = "node" | "way" | "relation";
export interface NominatimResult {
    place_id: number;
    licence: string;
    osm_type: NominatimOsmType;
    osm_id: number;
    boundingbox: [string, string, string, string];
    lat: string;
    lon: string;
    display_name: string;
    category: string;
    type: string;
    importance: number;
    icon: string;
    address: {
        attraction?: string;
        pedestrian?: string;
        house_name?: string;
        house_number?: string;
        road?: string;
        retail?: string;
        commercial?: string;
        industrial?: string;
        farmyard?: string;
        farm?: string;
        residental?: string;
        city_block?: string;
        quarter?: string;
        allotments?: string;
        neighbourhood?: string;
        isolated_dwelling?: string;
        croft?: string;
        hamlet?: string;
        city_district?: string;
        district?: string;
        borough?: string;
        subdivision?: string;
        suburb?: string;
        municipality?: string;
        city?: string;
        town?: string;
        village?: string;
        region?: string;
        state_district?: string;
        state?: string;
        county?: string;
        postcode?: string;
        country?: string;
        country_code?: string;
        continent?: string;
    };
    extratags?: {
        phone?: string;
        website?: string;
        wikidata?: string;
        wikipedia?: string;
        wheelchair?: string;
        opening_hours?: string;
    };
    namedetails?: {
        name: string;
        [name: string]: string;
    };
    geojson?: {
        type: "Point";
        coordinates: [number, number];
    };
    geokml?: string;
    svg?: string;
    geotext?: string;
}
export declare type NominatimResponse = NominatimErrorResponse | NominatimResult | NominatimResult[];
export interface NominatimProviderOptionsInterface extends ProviderOptionsInterface {
    readonly host?: string;
    readonly userAgent: string;
    readonly referer?: string;
    readonly countryCodes?: string[];
}
export declare const defaultNominatimProviderOptions: {
    host: string;
    userAgent: string;
    useSsl?: boolean | undefined;
    useJsonp?: boolean | undefined;
    apiKey?: string | undefined;
};
declare type NominatimGeocodedResultsCallback = GeocodedResultsCallback<NominatimGeocoded>;
export default class NominatimProvider implements ProviderInterface<NominatimGeocoded> {
    private externalLoader;
    private options;
    constructor(_externalLoader: ExternalLoaderInterface, options?: NominatimProviderOptionsInterface);
    geocode(query: string | NominatimGeocodeQuery | NominatimGeocodeQueryObject): Promise<NominatimGeocoded[]>;
    geocode(query: string | NominatimGeocodeQuery | NominatimGeocodeQueryObject, callback: NominatimGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    geodecode(query: NominatimReverseQuery | NominatimReverseQueryObject): Promise<NominatimGeocoded[]>;
    geodecode(query: NominatimReverseQuery | NominatimReverseQueryObject, callback: NominatimGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    geodecode(latitude: number | string, longitude: number | string): Promise<NominatimGeocoded[]>;
    geodecode(latitude: number | string, longitude: number | string, callback: NominatimGeocodedResultsCallback, errorCallback?: ErrorCallback): void;
    private withCommonParams;
    private getHeaders;
    executeRequest(params: ExternalLoaderParams, callback: NominatimGeocodedResultsCallback, headers?: ExternalLoaderHeaders, body?: ExternalLoaderBody, errorCallback?: ErrorCallback): void;
    static mapToGeocoded(result: NominatimResult): NominatimGeocoded;
}
export {};
//# sourceMappingURL=NominatimProvider.d.ts.map