import { FDSNCommon } from "../fdsn/common";
import { Station, Channel } from "../stations/stationxml";
import { Quake } from "../events/quakeml";
export declare const IRIS_HOST = "service.iris.edu";
export declare const TEXT_FORMAT = "text";
export declare const JSON_FORMAT = "json";
export declare const SVG_FORMAT = "svg";
/**
 * Type for json returned by iris traveltime web service
 *
 */
export type TraveltimeJsonType = {
    model: string;
    sourcedepth: number;
    receiverdepth: number;
    phases: Array<string>;
    arrivals: Array<TraveltimeArrivalType>;
};
export type TraveltimeArrivalType = {
    distdeg: number;
    phase: string;
    time: number;
    rayparam: number;
    takeoff: number;
    incident: number;
    puristdist: number;
    puristname: string;
};
/**
 * Verifies that JSON matches the types we expect, for typescript.
 *
 * @param  v JSON object, usually from the traveltime web service
 * @returns   true if matches expected structure
 */
export declare function isValidTraveltimeJsonType(v: unknown): v is TraveltimeJsonType;
export declare function isValidTraveltimeArrivalType(v: unknown): v is TraveltimeArrivalType;
/**
 * converts a text line from the text format into an
 *  TraveltimeArrivalType object like what is returned by the json format.
 *
 *  @param ttimeline travel time output line for an arrival
 *  @returns parsed travel time arrival
 */
export declare function convertTravelTimeLineToObject(ttimeline: string): TraveltimeArrivalType;
/**
 * Creates a fake arrival for the origin time, useful to display a flag
 * at origin time similar to the P and S arrival.
 * @param  distdeg earthquake to station distance, in degrees
 * @returns      an arrival for the origin
 */
export declare function createOriginArrival(distdeg: number): TraveltimeArrivalType;
/**
 * Query to the IRIS traveltime webservice, based on the TauP Toolkit. See
 * https://service.iris.edu/irisws/traveltime/1/ and
 * https://www.seis.sc.edu/TauP/
 *
 * @param host optional host to connect to, defaults to IRIS
 */
export declare class TraveltimeQuery extends FDSNCommon {
    /** @private */
    _evdepth: number;
    /** @private */
    _distdeg: Array<number> | undefined;
    /** @private */
    _model: string | undefined;
    /** @private */
    _phases: string | undefined;
    /** @private */
    _stalat: number | undefined;
    /** @private */
    _stalon: number | undefined;
    /** @private */
    _receiverdepth: number | undefined;
    /** @private */
    _evlat: number | undefined;
    /** @private */
    _evlon: number | undefined;
    /** @private */
    _format: string;
    /** @private */
    _noheader: boolean;
    constructor(host?: string | null);
    protocol(value?: string): TraveltimeQuery;
    getProtocol(): string | undefined;
    host(value?: string): TraveltimeQuery;
    getHost(): string | undefined;
    /**
     * Gets/Sets the remote port to connect to.
     *
     * @param value optional new value if setting
     * @returns new value if getting, this if setting
     */
    port(value?: number): TraveltimeQuery;
    getPort(): number | undefined;
    /**
     * Gets/Sets the nodata parameter, usually 404 or 204 (default), controlling
     * the status code when no matching data is found by the service.
     *
     * @param value optional new value if setting
     * @returns new value if getting, this if setting
     */
    nodata(value?: number): TraveltimeQuery;
    getNodata(): number | undefined;
    specVersion(value?: string): TraveltimeQuery;
    getSpecVersion(): string | undefined;
    evdepth(value?: number): TraveltimeQuery;
    evdepthInMeter(value?: number): TraveltimeQuery;
    getEvdepth(): number | undefined;
    distdeg(value?: number | Array<number>): TraveltimeQuery;
    getDistdeg(): Array<number> | undefined;
    model(value?: string): TraveltimeQuery;
    getModel(): string | undefined;
    phases(value?: string): TraveltimeQuery;
    getPhases(): string | undefined;
    stalat(value?: number): TraveltimeQuery;
    getStalat(): number | undefined;
    stalon(value?: number): TraveltimeQuery;
    getStalon(): number | undefined;
    latLonFromStation(station: Station): TraveltimeQuery;
    receiverdepth(value?: number): TraveltimeQuery;
    receiverdepthInMeter(value?: number): TraveltimeQuery;
    receiverdepthFromChannel(channel: Channel): TraveltimeQuery;
    getReceiverdepth(): number | undefined;
    evlat(value?: number): TraveltimeQuery;
    getEvlat(): number | undefined;
    evlon(value?: number): TraveltimeQuery;
    getEvlon(): number | undefined;
    latLonFromQuake(quake: Quake): TraveltimeQuery;
    format(value?: string): TraveltimeQuery;
    getFormat(): string | undefined;
    noheader(value?: boolean): TraveltimeQuery;
    getNoheader(): boolean | undefined;
    /**
     * Get/Set the timeout in seconds for the request. Default is 30.
     *
     * @param value optional new value if setting
     * @returns new value if getting, this if setting
     */
    timeout(value?: number): TraveltimeQuery;
    getTimeout(): number | undefined;
    queryText(): Promise<string>;
    queryJson(): Promise<TraveltimeJsonType>;
    querySvg(): Promise<Element>;
    queryWadl(): Promise<Document>;
    query(): Promise<TraveltimeJsonType | Element | string>;
    formBaseURL(): string;
    formURL(): string;
    queryTauPVersion(): Promise<string>;
    formTauPVersionURL(): string;
    formWadlURL(): string;
}
export declare const FAKE_EMPTY_TEXT_MODEL = "Model: ";
export declare const FAKE_EMPTY_TEXT_HEADERS = "\nDistance   Depth   Phase   Travel    Ray Param  Takeoff  Incident  Purist    Purist\n  (deg)     (km)   Name    Time (s)  p (s/deg)   (deg)    (deg)   Distance   Name\n-----------------------------------------------------------------------------------\n";
export declare function createEmptyTraveltimeJson(ttquery: TraveltimeQuery): TraveltimeJsonType;
export declare const FAKE_EMPTY_SVG = "\n<svg version=\"1.1\" baseProfile=\"full\" xmlns=\"http://www.w3.org/2000/svg\" width=\"500\" height=\"500\" viewBox=\"0 0 14016.2 14016.2\">\n<!--\n This script will plot ray paths generated by TauP using SVG. -->\n<defs>\n    <style type=\"text/css\"><![CDATA[\n        circle {\n            vector-effect: non-scaling-stroke;\n            stroke: grey;\n            fill: none;\n        }\n        polyline {\n            vector-effect: non-scaling-stroke;\n            stroke: black;\n            fill: none;\n        }\n    ]]></style>\n</defs>\n<g transform=\"translate(7008.1,7008.1)\" >\n<!-- draw surface and label distances.-->\n<!-- tick marks every 30 degrees.-->\n  <polyline points=\"    0.00  -6371.00,     0.00  -6689.55\" />\n  <polyline points=\" 3185.50  -5517.45,  3344.78  -5793.32\" />\n  <polyline points=\" 5517.45  -3185.50,  5793.32  -3344.77\" />\n  <polyline points=\" 6371.00      0.00,  6689.55      0.00\" />\n  <polyline points=\" 5517.45   3185.50,  5793.32   3344.77\" />\n  <polyline points=\" 3185.50   5517.45,  3344.78   5793.32\" />\n  <polyline points=\"    0.00   6371.00,     0.00   6689.55\" />\n  <polyline points=\"-3185.50   5517.45, -3344.77   5793.32\" />\n  <polyline points=\"-5517.45   3185.50, -5793.32   3344.77\" />\n  <polyline points=\"-6371.00      0.00, -6689.55      0.00\" />\n  <polyline points=\"-5517.45  -3185.50, -5793.32  -3344.78\" />\n  <polyline points=\"-3185.50  -5517.45, -3344.78  -5793.32\" />\n  <circle cx=\"0.0\" cy=\"0.0\" r=\"6371.0\" />\n  </g>\n</svg>\n";
