import type { IframeMessenger } from "./iframe-messenger.js";
export type WindDirectionData = {
    /** Degrees in clockwise orientation compared to North, i.e.:
     *   0: North
     *  45: North-East
     *  90: East
     * ...
     * 315: North-West
     */
    direction: 0 | 45 | 90 | 135 | 180 | 225 | 270 | 315;
    /** Probability of wind coming from direction (0-1). Sum of probabilities for all directions must not exceed unity. */
    probability: number;
    /** [Weibull parameters](https://en.wikipedia.org/wiki/Weibull_distribution) describing the probability distribution for incoming wind speed given the direction */
    weibull_parameters: {
        scale: number;
        shape: number;
    };
};
export type WindParameters = {
    data: WindDirectionData[];
    height: number;
    roughness: number;
};
/**
 * HeightMaps represent a height raster for a given area. They are used as input to predict wind conditions for the area.
 *
 * The heightmaps should have a resolution of 500x500 provided as flat arrays in row-major order starting in north-west corner. Each pixel should represent a physical length of 1.5m.
 *
 * The area you are interested in getting a prediction for should be in the center of the 500x500 grid, as results are only provided for a 200*200 grid in the center.
 *
 * They need to be normalized with respect to the minimum and maximum height and fitted into the 0-255 (Uint8) range.
 * @example
 * // These should have length of 500*500 = 250000
 * const terrainHeight = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
 * const buildingAndTerrainHeight = [0, 10, 20, 60, 60, 60, 60, 70, 80, 90]
 * const minHeight = Math.min(...terrainHeight, ...buildingAndTerrainHeight)
 * const maxHeight = Math.max(...terrainHeight, buildingAndTerrainHeight)
 * const terrainHeightArray = terrainHeight.map((height) => {
 *  return  Math.round((height - minHeight) / (maxHeight - minHeight) * 255)
 * }
 * const buildingAndTerrainHeightArray = buildingAndTerrainHeight.map((height) => {
 *  return  Math.round((height - minHeight) / (maxHeight - minHeight) * 255)
 * }
 */
export type HeightMaps = {
    /** Height of terrain at each point normalized to values between 0-255 */
    terrainHeightArray: number[];
    /** Height of terrain+buildings at each point normalized to values between 0-255 */
    buildingAndTerrainHeightArray: number[];
    minHeight: number;
    maxHeight: number;
};
export type PredictiveAnalysisGroundGrid = {
    /** Flat array representing row-major two dimensional grid width and height */
    grid: Float32Array;
    /** Width of the grid */
    width: number;
    /** Height of the grid */
    height: number;
    /** Scale of each value in x and y direction in meters */
    scale: {
        x: number;
        y: number;
    };
};
/**
 * Interact with Forma Site Design's native predictive models for [rapid analysis](https://help.autodeskforma.com/en/articles/6977396-rapid-wind-analysis).
 *
 * @remarks
 * Available via {@link auto.Forma | Forma}.{@link index.EmbeddedViewSdk.prediction | prediction}.
 */
export declare class PredictiveAnalysisApi {
    #private;
    constructor(iframeMessenger: IframeMessenger);
    /**
     * This function returns the wind parameters used by Forma Site Design to predict wind conditions.
     * It includes a wind rose with 8 directions and a surface roughness.
     */
    getWindParameters(): Promise<WindParameters>;
    /**
     * Predict wind conditions using Forma Site Design's rapid wind model.
     * Read more about rapid wind at [Forma Site Design Help](https://help.autodeskforma.com/en/articles/6977396-rapid-wind-analysis).
     *
     * @returns 2d grid of wind conditions. For wind comfort values are 0-4 where lower is better conditions.
     *
     * @example
     * const windRose = await Forma.prediction.getWindParameters()
     * // See HeightMaps for more infor on how to create heightMaps
     * const heightMaps = computeHeightMaps(terrainGeometry, terrainAndBuildingsGeometry)
     * const prediction = await Forma.prediction.predictWind({
     *  heightMaps,
     *  windRose,
     *  type: "comfort",
     *  roughness: windRose.roughness,
     *  comfortScale: "lawson_lddc",
     * })
     * // calculate statistics, mix with other grids, etc.
     */
    predictWind(request: {
        /** HeightMaps represent a height raster for a given area. */
        heightMaps: HeightMaps;
        /** Windrose with 8 directions. Value used by Forma Site Design can be retrieved using `getWindParameters`. */
        windRose: {
            data: WindDirectionData[];
            height: number;
        };
        /** Type of wind results to predict. Only wind comfort supported for now. */
        type: "comfort";
        /** Surface roughness. Value used by Forma Site Design can be retrieved using `getWindParameters`. */
        roughness: number;
        /** Read more about [Comfort scales](https://help.autodeskforma.com/en/articles/6994344-how-to-analyze-pedestrian-wind-comfort). */
        comfortScale: "lawson_lddc" | "davenport" | "lawson" | "lawson_2001" | "nen8100" | "cstb";
    }): Promise<PredictiveAnalysisGroundGrid>;
}
