import L from 'leaflet'; import dayjs from 'dayjs'; import { CanvasShip } from 'map-sdk-leaflet/es/sdk/model/CanvasShip'; import type { Template } from 'map-sdk-leaflet/es/sdk/CanvasShipSymbol'; import type { LatLng, LatLngExpression, LatLngLiteral, LatLngTuple, Layer, Map, Point, Tooltip, TooltipOptions } from 'leaflet'; export interface CustomMap extends L.Map { mapType?: string; shipxy_tooltip?: Tooltip | null; shipxy_tooltip_timer?: ReturnType; } interface ShipTemplate { name: string; area: [number, number][]; centerXY: [number, number]; headXY: [number, number]; tailXY: [number, number]; radius: number; headLength?: number; length?: number; width?: number; } export declare class CanvasShipUtils { static shipTemplaterThree: { name: string; area: number[][]; centerXY: number[]; headXY: number[]; headXY2: number[]; headLength: number; r: number; }; shipTemplaterArc_noUse: { name: string; area: number[][]; centerXY: number[]; headXY: number[]; headXY2: number[]; r: number; }; static dis: any; static isEmpty: (obj: string | number | [] | string[] | null | undefined) => boolean; static getObjType: (obj: any) => string; static YuzhengHaijianBaimingdan: undefined; /** * 特定形状船只的模板对象,其中包含了船只各部位的几何属性(如轮廓坐标、中心坐标、头部坐标、尾部坐标、半径、长度和宽度等)。通过给定的高度和宽度先计算出它们各自的一半并除以缩放因子,然后基于这些计算值来构造船只的轮廓区域和其他相关属性。最后,函数返回这个构建完成的船只模板对象 * @param height 船体高度 * @param width 船体宽度 * @param scale 缩放因子 * @returns */ static getShipTemplaterNine(length: number, width: number, metersPerPixel: number): ShipTemplate; /** * 地图实例、船只数据、缩放阈值和默认模板。函数主要目的是根据地图的缩放级别、船只数据以及屏幕像素与实际米数的比例关系,确定是否应用一种特定的(由 this.getShipTemplaterNine 计算得出的)船只渲染模板,并最终返回一个包含渲染所需信息的模板对象。如果某些条件不满足(例如缩放级别低于阈值、船只数据不完整、长宽比不合适等),则返回默认模板 * @param mapInstance * @param shipData * @param zoomThreshold * @param defaultTemplate * @returns */ static getShipTemplater(mapInstance: L.Map, shipData: { length: number; width: number; }, zoomThreshold: number, defaultTemplate?: { name: string; area: number[][]; centerXY: number[]; headXY: number[]; headXY2: number[]; headLength: number; r: number; }): (Template & { name: string; area: number[][]; centerXY: number[]; headXY: number[]; headXY2: number[]; headLength: number; r: number; }) | (Template & ShipTemplate); /** * 接受一个船体模板数据和一个缩放因子,将船体模板的所有坐标属性(包括area、centerXY、headXY以及r)根据缩放因子进行缩放,并返回一个新的船体模板数据。 * @param shipData * @param zoomFactor * @returns */ static sizeZoomShipTemplater(shipData: Template, zoomFactor: number): { name: string; area: any; centerXY: any; headXY: any; radius: number; }; /** * 接受一个点坐标、旋转中心坐标以及旋转角度(以度为单位),返回该点绕着旋转中心旋转指定角度后的坐标。 * @param point * @param origin * @param angleInDegrees * @returns */ static pointRotate(point: any[], origin: any[], angleInDegrees: number): any[]; static getBoundingBoxArea(latlngs: L.LatLngExpression[]): L.Bounds; static getLatLngBoundsBoxArea(points: L.LatLngExpression[], map?: L.Map): L.LatLngBounds; static fitBoundsByLatlngs(map: L.Map, bounds: L.LatLngBoundsExpression, options?: { timeout?: number; extend: number[]; }): void; static getSplitLatLngBounds(bounds: L.LatLngBounds, zoom: number): { bounds: L.LatLngBounds; offset: number; }[]; static getSplitLatLngBounds180(bounds: L.LatLngBounds): L.LatLngBounds[]; static meters2pixel(map: L.Map): number; static getShipRealCenterPoint(point: L.Point, ship: any, meters2pixel: number): L.Point; static getMousePos(target: HTMLElement, event: any): [number, number]; /** * 该函数接收一个表示经纬度坐标点的数组 latlng 和一个多边形顶点数组 data,用于判断给定点 latlng 是否在由 data 定义的多边形区域内。 函数通过计算给定点与多边形每条边的交叉数来判断点是否在多边形内部。若交叉数不为零,则说明点位于多边形内。 * @param latlng * @param data * @returns */ static LatLngInRegion(latlng: [number, number], data: Array<[number, number]>): boolean; static mouseInArr(target: HTMLElement, event: MouseEvent, regions: any[]): any | null; static calcLabel(map: L.Map, center: L.Point, text: string, labelList: any[], allowance: number, avoidOverlap: boolean, font: any, imgObj?: { imgWidth: number; imgSize: number; }): any | null; static askLabelSpace(center: L.Point, imgWidth: number, imgSize: number, labelList: any[], allowance: number | undefined, avoidOverlap: boolean): { center: L.Point; x: L.Point; l: L.Point; r: L.Point; bounds: L.Bounds; position: number; } | null; /** * 为点上的图形请求可用空间 * @param existingGraphicsData 已存在的图形及其边界信息数据 * @param centerPoint 图形中心点坐标 * @param imageWidth 图片宽度 * @param imageSize 图片高度 * @param tolerance 容差值,默认为50 * @param startingSearchIndex 开始搜索的位置,默认从起始方向开始,表示循环8个方向 * @returns 如果找到可用空间,则返回包含该空间信息的对象;否则返回null */ static askPointSpace(data: Record, point: L.Point, imgWidth: number, imgSize: number, allowance?: number, startingSearchIndex?: number): { center: L.Point; x: L.Point; l: L.Point; r: L.Point; bounds: L.Bounds; position: number; } | null; /** * 计算点与图片边界的矩形范围 * @param point 坐标点 * @param key 图片位置索引 * @param imgWidth 图片宽度 * @param imgSize 图片高度 * @param allowance 容差值,默认留白空间 * @returns 返回包含边界信息的L.Bounds对象 */ static getPointBound(point: L.Point, key: number, imgWidth: number, imgSize: number, allowance: number): L.Bounds; /** * 计算标签的边界范围 * @param point 坐标点 * @param key 图片位置索引 * @param imgWidth 图片宽度 * @param imgSize 图片高度 * @param allowance 容差值,默认留白空间 * @returns 返回包含边界信息的L.Bounds对象 */ static _getLabelBound(point: L.Point, key: number, imgWidth: number, imgSize: number, allowance: number): L.Bounds; /** * 计算标签锚点的位置 * @param point 坐标点 * @param key 图片位置索引 * @param imgWidth 图片宽度 * @param imgSize 图片高度 * @param allowance 容差值,默认留白空间 * @returns 返回包含锚点信息的L.Point对象 */ static _getLabelAnchor(point: L.Point, key: number, imgWidth?: number, imgSize?: number, allowance?: number): L.Point; static calcStrWidthOnCanvas(text: string, font?: string): number; static calcStrLength(map: Map, text: string, font?: string): number; static drawRectangleRadius(canvas: CanvasRenderingContext2D, x: number, y: number, xAllowance: number, yAllowance: number, strokeStyle?: string, fillStyle?: string): void; static trackUnitConversion(ship: any): Record | null; static mToUnit(distance: number, unit: string): number | string; static unitToM(distance: number, unit: string): number; static dataToShip(data: any, options?: any, normalizeData?: boolean): CanvasShip; sortArray(sortingArr: any[], keyName?: string | boolean, ascendingFlag?: boolean): any[]; static getNumber(value: any, precision?: number, roundingMethod?: 'round' | 'floor' | 'ceil'): number; static openTooltip(mapInstance: CustomMap, latlng: LatLngLiteral | LatLngExpression, content: string | HTMLElement, tooltipOptions: TooltipOptions): L.Tooltip; static closeTooltip(mapInstance: CustomMap, specificTooltip?: Layer): void; static dataFormat(date: string | number | Date | dayjs.Dayjs | null | undefined, format: string | undefined): string; static getGPSLatLngByMap(mapCoordinate: LatLngLiteral | LatLngTuple, mapParams: any): LatLng; static GPSEncryptByMapToLatLng(latLng: LatLngExpression, map: L.Map): LatLng; static GPSEncryptByMapTypeToLatLng(latLng: LatLngExpression, type: string): LatLng; static GPSEncryptByMapTypeToPoint(latLng: LatLngExpression, mapType: string, map: L.Map): Point; static GPSEncryptByMapToPoint(latLng: LatLngExpression, map: L.Map): Point; static latFormatter(lat: number): string; static lngFormatter(lng: number): string; static latlngFormatter(latlng: L.LatLngLiteral | L.LatLng): string; /** * 格式化鼠标悬浮经纬度 * @param value * @param isLng 参数来区分经度和纬度的处理方式 * @returns */ static formatDegreesToDMS(value: number, isLng: boolean): string; static isLatLngInRegion(latlng: [number, number], data: [number, number][]): boolean; static getAngleByLatLng(latLng: L.LatLngExpression, latLng1: L.LatLngExpression): number; static getAngleByLatLngToBigCircle(beforeLatLng: L.LatLngExpression, latLng: L.LatLngExpression): number; static getAngleForLatLngByDistFromLatLngs(startLatLng: L.LatLngExpression, endLatLng: L.LatLngExpression): number; static getLatLngByDistFromLatLngs(startLatLng: L.LatLng, endLatLng: L.LatLng, distanceRatio: number, distance: number): L.LatLng | null; static getDistance(latLng1: [number, number], latLng2: [number, number], unitConversionFactor: string): number; static polylineArc(item: any, nextItem: any, resolution?: number): [number, number][]; static getAngle(hdg: number, sog: number, cog: number): number; static angleAbs(val: number): number; static lngTo360(val: any): number; static lngTo360ForArray(inputArray: { lon?: number; lng?: number; }[]): { lon?: number; lng?: number; }[]; static latlngsFrom180(points: any[]): any[]; static objFrom180(points: any[] & { [key: string]: any; }, propertyPath?: string, correction?: number): any[]; static objFrom180ToLine(points: any[] & { [key: string]: any; }, propertyPath?: string): any[]; static lngTo180(lng: any): number; static latlngsTo180(latlngs: L.LatLng[]): L.LatLngLiteral[]; static xTo360(val: any): number; static getMaxXYByLatlngs(map: L.Map, layerLatLng: L.LatLngExpression, latLng: L.LatLngExpression): number; static getDistanceXYByLatlngs(map: L.Map, layerLatLng: L.LatLngExpression, latLng: L.LatLngExpression): { x: number; y: number; }; static getUrlParam(url: string): { [key: string]: string; }; static isCNShip(mmsi: string): number; static isYUNZHENAndHAIJIAN(shipName: string, shipMMSI: string, ship: any): boolean; /** * 获取由经纬度生成的网格键,默认网格大小为 1,前缀为空字符串,连接符为下划线 _。 * @param lat 纬度 * @param lng 经度 * @param gridSize 网格大小,默认为 1 * @param prefix 前缀,默认为空字符串 * @param linkStr 连接符,默认为下划线 _ * @returns 网格键字符串 */ static getGridKeyByLatLng(lat: number, lng: number, gridSize?: number, prefix?: string, linkStr?: string): string; static openLoadingPopup(time: number, cb: any): void; static closeLoadingPopup(): void; /** * 据给定的 key、距离计算方法 disMethod 和语言环境 language 返回对应的描述信息 * @param key * @param disMethod * @param language * @returns */ static getDisValue(key: string | number, disMethod: string, language?: 'zh_CN' | string): string; static getDisValueEN(key: number, disMethod: string, language: 'en_US'): string; static getShipTypeCN(key: number): string; static getShipTypeEN(key: number): string; static getNewShipTypeCN(key: number): string; } export {};