/**
 * 路口象限，路口中心点为坐标轴原点，正北方向为0°。
 * 225° ~ 315°：西象限。
 * 315° ~ 45°：北象限。
 * 45° ~ 135°：东象限。
 * 135° ~ 225°：南象限。
 */
import * as Three from 'three';
export interface IMapInitializerParams {
    container: string | HTMLElement;
    mapConfig: any;
    markerClickCallback?: (type: string, id: string, detail: any, event?: any) => void;
    mapClickCallback?: (mapPoint: number[], screenPoint: number[], event?: any) => void;
}
export declare enum QuadrantCode {
    West = "1",
    North = "2",
    East = "3",
    South = "4"
}
export interface IResult {
    status: number;
    message: string;
    result?: any;
}
export interface IVehicleTrack {
    time?: string;
    timestamp: number;
    localTimestamp: number;
    crossId?: string;
    ptcId: string;
    vehicleId: string;
    x: number;
    y: number;
    ptcType: number;
    vehicleType: number;
    heading: number;
    vehicleColor: number | string;
    plateColor: number;
    showName?: string;
    state?: string;
    fixAngle?: number;
    speed?: number;
    plateNo?: string;
    roadLayer?: string;
    step?: number;
}
export interface IVehicleRecord {
    model: Three.Mesh | Three.Object3D;
    data: IVehicleTrack;
    segmentStartTime?: number;
    segmentTotalTime?: number;
    waitForDelete: boolean;
    isMoving: boolean;
    currentPos?: number[];
}
export interface ILaneNumberParams {
    lanes: {
        crossId: string;
        laneNumber: string;
        stopLineCenter: number[];
        laneDirection?: number;
    }[];
}
export interface ISetMapCenterParams {
    center?: number[];
    target?: __esri.GoToTarget2D;
    zoom?: number;
    duration?: number;
}
export interface ILayerVisibleParams {
    id: string;
    visible: boolean;
}
export interface ILookAtParams {
    center: number[];
    height: number;
    tilt?: number;
    heading?: number;
    duration?: number;
}
export interface IStartCrossBufferParam {
    crossId: string;
    crossCenter: number[];
    bufferRadius?: number;
}
export interface IPoint {
    type: string;
    x: number;
    y: number;
    z?: number;
}
export interface ILine {
    type: string;
    paths: number[][][];
}
export interface IPolygon {
    type: string;
    rings: number[][][];
}
export interface IPointSymbol {
    type: string;
    style?: string;
    url?: string;
    width?: number | string;
    height?: number | string;
    xoffset?: number;
    yoffset?: number;
    horizontalOrigin?: string;
    verticalOrigin?: string;
    color?: string;
    size?: number;
    outline?: {
        color?: string | number[];
        width?: number;
    };
}
export interface ILineSymbol {
    type: string;
    color?: string | number[];
    width?: number;
    height?: number;
    extrudeHeight?: number;
    cornerType?: string;
}
export interface IPolygonSymbol {
    type: string;
    style?: string;
    color?: string | number[];
    outline?: {
        color?: string | number[];
        width?: number;
    };
}
export interface IOverlay {
    geometry: IPoint | ILine | IPolygon;
    id?: string;
    visible?: boolean;
    symbol?: IPointSymbol | ILineSymbol | IPolygonSymbol;
    properties?: any;
}
export interface IMaskParam {
    geometry: IPolygon;
    maskColor?: number[];
    maskSize?: number;
    needZoom?: boolean;
}
export interface IOverlayParam {
    type?: string;
    defaultSymbol?: IPointSymbol | ILineSymbol | IPolygonSymbol;
    defaultVisible?: boolean;
    overlays: Array<IOverlay>;
    needZoom?: boolean;
    zIndex?: number;
}
export interface IClusterPointParams {
    type?: string;
    clusterSymbol?: any;
    pointSymbol?: any;
    points: IClusterLocation[];
    scaleThreshold?: number;
    countBackgroundColor?: number[];
    countFontColor?: number[];
}
export interface IClusterLocation {
    id: string;
    x: number;
    y: number;
    properties?: any;
    visited?: boolean;
    filtered?: boolean;
    clusterId?: number;
    symbol?: any;
}
export interface ICluster {
    id: number;
    items: IClusterLocation[];
    count: number;
    center: {
        x: number;
        y: number;
    } | null;
}
export interface ISetMapCameraParams {
    name: string;
    zoom?: number;
    duration?: number;
}
export interface IQueueLengthParams {
    crossNo: string;
    laneId: number;
    queueLength: number;
}
export interface IToggleTrafficInfoParams {
    name: string;
    visible: boolean;
}
export interface ITraceRendererInterface {
    init(): Promise<void>;
    getLog(): (string | number | undefined)[][];
    addVehicles(objects: IVehicleTrack[]): Promise<void>;
    updateVehicles(objects: IVehicleTrack[]): Promise<void>;
    deleteVehicles(idList: string[]): void;
    clearVehicles(): void;
    updatePanelContent(contentType: EVehiclePlateState): void;
    toggleGroundVehicle(visible: boolean): void;
    toggleElevatedVehicle(visible: boolean): void;
    toggleTrafficInfo(params: IToggleTrafficInfoParams): void;
    togglePause(pause: boolean): void;
    setInterpolate(enable: boolean): void;
}
export declare enum EVehiclePlateState {
    None = 0,
    PlateNumber = 1,
    Id = 2,
    Mix = 3
}
export interface ILaneInfo {
    roadId: string;
    sectionId: number;
    laneId: number;
}
/** 采样后的车道 */
export interface ISampledLane {
    id: number;
    type: string;
    innerPath: number[][];
    outerPath: number[][];
}
/** 采样后的路段 */
export interface ISampledLaneSection {
    id: number;
    lanePaths: ISampledLane[];
}
/** 采样后的道路 */
export interface ISampledRoad {
    id: string;
    name: string;
    junction: string;
    refLine: number[][];
    laneSections: ISampledLaneSection[];
}
export interface IRoadLink {
    elementId: string;
    elementType: string;
    contactPoint?: string;
}
export interface IRoadStopLinesResult {
    junctionId: string;
    stopLines: {
        roadId: string;
        line: number[][];
    }[];
}
export interface IShowOpenDriveFromFileParams {
    server: string;
    file: string;
    options?: {
        showJunctionPolygon: boolean;
        showJunctionPoint?: boolean;
        showJunctionLane: boolean;
        showRoadName: boolean;
        needZoom?: boolean;
    };
    selectedCallback?: (info: any) => void;
}
export interface IFindSumoParams {
    type: string;
    id: string;
    flash?: boolean;
}
export interface IUnselectSumoParams {
    type: string;
    id?: string;
}
export interface ISplitOpenDriveLaneParams {
    id: string;
    start?: number;
    end?: number;
}
export interface IBlockOpenDriveLaneParams {
    roadsectId: string;
    roadsectBaseId: string;
    laneId: string;
}
export interface IJunctionTableData {
    id: string;
    name: string;
    nodeType: string;
    type: string;
    coordinates: number[];
    district: string;
    crossId?: string;
    factoryCode?: string;
}
export interface ISignalCountdownProps {
    flash: boolean;
    displayMode: string;
    crossId: string;
    roadId: string;
    mapPoint: number[];
    stopLine: number[][];
    position: {
        left: number;
        top: number;
    };
    rotation: number;
    scale: number;
    lampStatus: {
        uNumber?: number;
        uColor?: string;
        lNumber?: number;
        lColor?: string;
        sNumber?: number;
        sColor?: string;
        rNumber?: number;
        rColor?: string;
    };
}
export interface IShowSignalControlAreaParams {
    areaList: any[];
    style?: string;
}
export interface ISignalSubSystem {
    subAreaCode: string;
    subShape?: number[][][] | string;
    nodeSymbol?: any;
    roadSymbol?: any;
    children?: {
        x: number;
        y: number;
        lat?: number;
        lon?: number;
        nodeId: string;
        nodeName: string;
        symbol?: any;
    }[];
}
export interface ISignalSystem {
    areaCode: string;
    areaName: string;
    shape: number[][];
    lineSymbol?: any;
    children: ISignalSubSystem[];
}
export interface IShowSignalSystemParams {
    areaList: ISignalSystem[];
}
export interface IShowSubSignalSystemParams {
    areaList: ISignalSubSystem[];
}
export interface ISignalCross {
    signalId: string;
    crossId: string;
    name: string;
    brand?: string;
    isOnline?: boolean;
    isMalfunction?: boolean;
    x: number;
    y: number;
    districtId?: string;
    subDistrictId?: string;
}
export interface IShowSignalCrossParams {
    style: string;
    showName: string;
    changeStyle?: boolean;
    points: ISignalCross[];
}
export interface IDistrictRoad {
    id: string;
    coordinates: number[][];
    districtId: string;
    subDistrictId: string;
    color?: number[];
}
export interface IFindSignalControlAreaParams {
    type: string;
    id: string;
    needZoom?: boolean;
}
export interface IHighlightSignalControlAreaParams {
    areaCode: string;
    subAreaCode?: string;
    nonHighlightMode?: 'hide' | 'gray';
    needZoom?: boolean;
}
export interface INode {
    id: string;
    longitude: number;
    latitude: number;
    name: string;
    signalId?: string;
    coordinates?: number[][];
    active?: boolean;
}
export interface IEditSignalControlAreaParams {
    crossesInArea: INode[];
    addCrossCallback: (params: INode) => void;
    removeCrossCallback: (params: {
        id: string;
    }) => void;
    removeAllCrossCallback?: () => void;
    odrServer: string;
}
export interface IShowGreenWaveBandParams {
    bandId: string;
    coordinates: number[][];
    nodeList?: INode[];
    lineColor?: string | number[];
    lineWidth?: number;
    arrowColor?: string | number[];
    /** 箭头方向，single: 单向，double: 双向，默认为 double */
    arrowDirection?: 'single' | 'double';
    /** 箭头流动速度，默认为 1，值越大越快 */
    animationSpeed?: number;
    needZoom?: boolean;
    lineOnly?: boolean;
}
export interface IRoadLine {
    id: string;
    fromNode: string;
    toNode: string;
    coordinates: number[][];
}
export interface IShowJurisdictionParams {
    type: string;
    id: string;
}
export interface IShowEdpassDeviceParams {
    deviceType: string;
    deviceState?: string;
    style?: string;
    visible: boolean;
    zdCode?: string;
    ddCode?: string;
}
export interface IStartDrawParams {
    geometryType: 'Point' | 'LineString' | 'Polygon' | 'Circle' | 'Rectangle';
    callback: (drawResult: any) => void;
    style?: any;
}
/**
 * 全息流轨迹点数据结构
 */
export interface IHoloTraceData {
    crossId: string;
    jgsj?: number;
    newVehList: any[];
    updateVehList: any[];
    delVehIdList: string[];
}
export interface IShowRoadFlowParams {
    roadSegmentList: {
        roadId: string;
        flow: number;
        avgSpeed: number;
        shape: number[][];
    }[];
    options?: {
        needZoom?: boolean;
    };
}
export interface IShowRoadsectIndexParams {
    roadsects: {
        roadId: string;
        flowVolume: number;
        avgTravelTimeS: number;
    }[];
    options: {
        theme: 'flow' | 'speed' | 'both';
        needZoom?: boolean;
    };
}
export interface IShowSignalSystemNoShapeParams {
    subAreas: {
        subareaId: string;
        /** 子区颜色，路段和节点使用此颜色；不传则保留默认颜色 */
        color?: string;
        nodeVOList: {
            nodeId: string;
            nodeName: string;
            latitude: number;
            longitude: number;
            orderIndex: number;
        }[];
    }[];
    options?: {
        needZoom?: boolean;
    };
}
export interface IStartGetClickCoordinatesParams {
    changeCursor?: boolean;
    callback: (mapPoint: number[], screenPoint: number[], event?: any) => void;
}
interface IODPair {
    fromId: string;
    fromName: string;
    toId: string;
    toName: string;
    fromCoord: [number, number];
    toCoord: [number, number];
    fromColor?: string | number[];
    toColor?: string | number[];
}
export interface IShowOdLinesParams {
    odPairs: IODPair[];
    options?: {
        fromColor?: string | number[];
        toColor?: string | number[];
        showNodeName?: boolean;
        onNodeClick?: (node: {
            id: string;
            name: string;
            coord: [number, number];
            count: number;
        }) => void;
    };
}
export declare type SumoNodeType = 'priority' | 'unregulated' | 'dead_end' | 'traffic_light' | 'default' | 'internal';
export interface ISumoNode {
    id: string;
    x: number;
    y: number;
    type: SumoNodeType;
    shape?: [number, number][];
    incLanes?: string[];
    intLanes?: string[];
    selected?: boolean;
    color?: string;
}
export interface ISumoLaneData {
    index: number;
    width: number;
    shape: [number, number][];
    speed: number;
}
export declare type SumoVehicleClass = 'passenger' | 'truck' | 'trailer' | 'bus' | 'coach' | 'bicycle' | 'pedestrian';
export interface ISumoEdge {
    id: string;
    from: string;
    to: string;
    numLanes: number;
    speed: number;
    priority: number;
    allow?: SumoVehicleClass[];
    lanes?: ISumoLaneData[];
    bidirectional?: boolean;
    selected?: boolean;
    color?: string;
    isInternal?: boolean;
}
/** 箭头类型 */
export declare type ArrowType = 'S' | 'L' | 'R' | 'SL' | 'SR' | 'LR' | 'SLR' | 'T' | 'default';
export declare type TurnDirection = 'L' | 'R' | 'S' | 'T';
export interface ISumoConnection {
    id: string;
    from: string;
    to: string;
    fromLane?: number;
    toLane?: number;
    via?: string;
    dir?: TurnDirection;
    allow?: SumoVehicleClass[];
    tl?: string;
    linkIndex?: number;
}
export declare type TLType = 'static' | 'actuated' | 'off' | 'manual';
export interface ISumoPhase {
    duration: number;
    state: string;
    minDuration?: number;
    maxDuration?: number;
}
export interface ISumoTrafficLightLogic {
    id: string;
    programID: string;
    type: TLType;
    offset: number;
    phases: ISumoPhase[];
}
export {};
