import L from 'leaflet'; import { CanvasShip } from 'map-sdk-leaflet/es/sdk/model/CanvasShip'; import type { MyMap } from 'map-sdk-leaflet/es/sdk/ShipxyAPISDK'; import type { CustomMap } from 'map-sdk-leaflet/es/sdk/utils/CanvasShipUtils'; import type { Layer } from 'leaflet'; interface Ship { custom_name: string; group_name: string; remark?: string; source: number; source_real: number; mmsi: string; shipid: string; terminalid: undefined; terminaltype: undefined; lng: number; lat: number; hdg: number | undefined; hdg_source: undefined; cog: number | undefined; sog: number | undefined; rot: number | undefined; navistatus: string; lastdyn: number; lastdyn_active: boolean; type: number | string; name: string; cnname: undefined; nameen: undefined; callsign: undefined; imo: string; length: number; width: number; left: number; trail: number; draught: number; dest: undefined; eta: undefined; laststa: undefined; tracks: never[]; istop: boolean; color: string; state: number; pointCenterReal: undefined; pointCenterGPS: undefined; latlngReal: undefined; latlng: undefined; x: number; y: number; lineWidth: number; rotate: number; bodyArea: undefined; head_x: undefined; head_y: undefined; shiptype: number | string; datapower: number; is_yh: boolean; is_monitor: boolean; monitorOnline: boolean; outCN: boolean; offset: number; country: number; txt_color: string; newtype: string; lineColor: undefined; heightLineColor: undefined; options: undefined; seaareaid: string; isShowLableTime: undefined; isShowLabel: undefined; labelText: undefined; is_radar: boolean; radarid: undefined; radarSource: undefined; radarTarget: undefined; gps_lat: number; gps_lng: number; gps_lastdyn: string; serverTime: undefined; shipxy_tooltip?: L.Tooltip; arr_inde: number; isSelected: boolean; } interface SpecialShip extends Ship { color: string; istop: boolean; } interface LabelData { symbol: any; calcLabel: any; sourceType: any; labelImage: any; labelText: string; txtColor: string; font: string; lineColor: string; lineFillColor: string | null; obliqueLineColor: string | null; lableRotate: any; } export interface CanvasShipServiceOptions { isAutoUpdateSrvtime?: boolean; enableAreaShip?: boolean; enableFleetShip?: boolean; enableDShip?: boolean; enableTracks?: boolean; enableSelectedShip?: boolean; dShipColor?: string; topLabelZoom?: number; generalLabelZoom?: number; weixingLabelZoom?: number; delayTime?: number; bounds?: L.LatLngBoundsExpression; zoomLevel_base?: number; lableRotate?: number | undefined; lableTxtColorMapTypeDark?: string[]; lableTxtColor?: string[]; lableFont?: string[]; lableLineColor?: string[]; monitorShips?: number[]; getAreaShipsCallBack?: (ships: CanvasShip[]) => void; drawShipsEndCallBack?: (shipCount: Record) => void; shipSizeZoom?: number; shipOptions?: any; tooltip_fields?: any; drawBaseShipsGridZoom?: number[]; drawBaseShipsGridMax?: number[]; drawBaseShipsGridSize?: number[]; drawBaseShipsGridMaxCount?: number; areaShipsDataGridSize?: number; openRightMenu?: { selectShip: boolean; isUse: boolean; }; } export interface CanvasShipMap extends CustomMap { _hoverShipId: any; offsetC: any; _selShipId: Record; _size: L.Point; _unselectedShipListener?: (params?: any) => void; shipsService?: CanvasShipService; } declare class CanvasShipService extends L.Class { _filterOptions: { shipType: string; shipSog: string; shipCustomSog: never[]; shipNaviStatus: string; shipLength: number[][]; shipHdg: number[][]; shipCountry: string; validIMO: boolean; }; options: { isAutoUpdateSrvtime: boolean; enableAreaShip: boolean; enableFleetShip: boolean; enableTracks: boolean; enableDShip: boolean; enableSelectedShip: boolean; requestCallback: { getShip: null; getAreaShip: null; getDPlusShip: null; getFleetShip: null; }; dShipColor: string; topLabelZoom: number; generalLabelZoom: number; weixingLabelZoom: number; delayTime: number; offsetLastdyn: number; bounds: undefined; getAreaShipsCallBack: undefined; zoomLevel_base: number; labelLanguage: string; lableRotate: Record; lableFont: Record; lableTxtColorMapTypeDark: string[]; lableTxtColor: Record; lableLineColor: Record; lableLinefillColor: Record; monitorShips: string[]; obliqueLineColor: Record; resetShipColorCallBack?: (params: any) => void; drawShipsEndCallBack?: (params: any) => void; drawShipsBeforeCallBack?: (params: any) => any; drawRequestShipsBeforeCallback?: (params: any) => any; shipSizeZoom: number; shipOptions: { sizeZoom: number; lineColor: string; heightLineColor: string; }; tooltip_fields: string[]; areaShipsDataGridSize: number; drawBaseShipsGridZoom: number[]; drawBaseShipsGridMax: never[]; drawBaseShipsGridSize: never[]; drawBaseShipsGridMaxCount: number; isShowLableTime: undefined; isShowLabel: boolean; radarOptions: { color: string; lineColor: string; heightLineColor: string; lineWidth: number; iconSize: number; }; openRightMenu?: { selectShip: boolean; isUse: boolean; }; netsondeOptions: { show: boolean; color: string; lineColor: string; heightLineColor: string; lineWidth: number; iconSize: number; }; color: string; maptype: string; labelImages: Record; }; _mouseMoveTimer: any | undefined; _timerOpen: boolean; _timer: any | null; _map_move_time_num: number; _canvas_mousedown: boolean; _moveendTimer: null; _labelImages: { common?: boolean; satellite?: boolean; dplus?: boolean; beidou?: boolean; monitor?: boolean; }; _map: MyMap; _srvTime: number; _layerGroup: L.FeatureGroup; _zoomLevel: any; _areaShipIsShow: boolean; _noSelShipIsShow: boolean; _grid_ships: any; _requestAreaShips: CanvasShip[]; _requestAreaShipsLoading: boolean; _requestAreaShips_timer: undefined; _requestAreaShips_num: number; _selectedShipUpdateListener?: ((params: any) => void) | null; _selectedShipListener?: ((params: any) => void) | null; _rightContentMenu?: ((ship: Ship | null, style?: Record) => void) | null; _isRightContentMenuOpen: boolean; _fleetShips: Record; _DShips: Record; _specialShips: Record; _DShips_key: string; _beidou_ships: string[]; _viewShips: CanvasShip[]; _labels: LabelData[]; _labels_time: number; _drawLables: LabelData[]; _scode: number; _continue: number; _monitorShipsHash: Record; _drawCount: number; _topShipsCount: number; _baseShipsCount: number; _baseShipsCount_chouxi: number; _clrState: string[]; _timer_area_num: number; _delayTime: number; _grid_ships_view_filter: Map; _tooltip_txt_templater: { name: string; cnname: string; mmsi: string; imo: string; callsign: string; sog: string; cog: string; hdg: string; draught: string; dest: string; lastdyn: string; navistatus: string; type: string; rot: string; lat: string; lng: string; seaareaid: string; }; _tooltip: Layer | null; constructor(map: MyMap, options?: CanvasShipServiceOptions); resizeHTML(): void; closeRightMenu(): void; disableMap(): boolean; enableMap(): boolean; _getLabelImages(): { common: boolean; satellite: boolean; dplus: boolean; monitor: boolean; beidou: boolean; }; _map_move_end_function(e?: L.LeafletEvent): void; private getMapTransform; private _map_move_function; getShipByEvent(event: MouseEvent): any; private _mousemoveFunction; private _openTooltip; _getMouseLatlng(event: MouseEvent, map: MyMap): L.LatLng; _getTooltipHtml(ship: CanvasShip): string; _getTooltipData(ship: CanvasShip): CanvasShip; _closeTooltip(): void; _callBackObjBuild(ship: CanvasShip): CanvasShip; _updateShips(ships: CanvasShip[]): void; _drawShips(e?: L.LeafletEvent | undefined): void; private _drawShipsEnd; /** * WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块) * GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用 * BD-09:百度坐标偏移标准,Baidu Map使用 */ private _drawShip; _drawLabel(shipInfo: any, Config: CanvasShip, labelText: string): void; _drawLablesFn(drawLables: string | any[]): void; /** * 获取绘制label图标信息 * @param shipItem 船舶对象 * @param imgSize 图标大小 * @param imgOffset 偏移量 * @returns {isDraw:是否绘制,imgTypes:satellite:卫星|beidou:北斗|monitor:监控|monitor_nosign:监视器无信号,imgWidth:图标宽度,imgSize:图标大小,imgOffset:偏移量} */ _getLabelImageInfo(shipItem: CanvasShip, imgSize?: number, imgOffset?: number): { isDraw: boolean; imgTypes: ('common' | 'satellite' | 'dplus' | 'beidou' | 'monitor' | 'monitor_nosign')[]; imgWidth: number; imgSize: number; imgOffset: number; }; /** * 设置是否显示label * @param isShowLabel 是否显示label */ setShowLabel(isShowLabel: boolean): void; _updateSrvTime(time?: number): void; timerFunction(_this: this): void; _drawRequestShips(_that: this): void; _timerStart(): void; _timerStop(): void; _isValidIMO(ship: CanvasShip): boolean; /** * 条件判定是否显示不显示 * @param ship 船舶信息 * @returns */ _isFilter(ship: CanvasShip): boolean; /** * 添加船舶 * 添加船舶,更新缓存,并绘制。 * @params ships Array 船舶数组,[CanvasShip],船舶属性必填项有:shipid、mmsi、lat、lng */ addShips(ships: CanvasShip[]): void; /** * 删除船通过船舶ID * 除船通过船舶ID,船舶ID是,字符串,或逗号分割的字符串,或数组。 * @params shipsid string | array 船舶ID(字符串|逗号分割的字符串|数组) */ deleteShipByShipID(shipsid: string | string[]): void; /** * 删除所有船舶 */ removeAllShips(): void; /** * 添加关注船 * @params ships Array 船舶数组,[CanvasShip],船舶属性必填项有:shipid、mmsi、lat、lng */ addFleetShips(ships: CanvasShip[]): void; /** * 删除指定的关注船 * @params ships Array 船舶mmsi数组,为空则删除所有关注船 */ deleteFleetShips(ships?: string[]): void; /** * 删除所有关注船船舶 */ deleteAllFleetShips(): void; /** * 删除所有区域船船舶 */ deleteAllAreaShips(): void; clearAllShips(): void; /** * 船舶定位 * @params mmsi String mmsi * @params isQueryURL String 缓存查不到,是否查询数据接口,默认:true */ locationShip(mmsi: string, isQueryURL?: boolean, shipInfo?: CanvasShip): CanvasShip | null; /** * 获取船舶信息(通过MMSI) * @params mmsi String mmsi * @params isQueryURL boolean 缓存中查不到数据,是否查询数据接口,默认:true */ getShipByMmsi(mmsi: string, isRequest: boolean): CanvasShip | null; /** * 获取船舶信息(通过船舶ID) * @params shipid String 船舶ID */ getShipByShipid(shipid: string | number): any; /** * 设置船舶筛选条件 1、船舶类型 2、航速 3、船舶长度 4、船舶国籍 5、IMO是否合法 * @params options Object 过滤设置,满足设置的条件将显示船舶,否则不现实 */ setFilter(options: any): void; /** * 获取船舶过滤条件 */ getFilter(): { shipType: string; shipSog: string; shipCustomSog: never[]; shipNaviStatus: string; shipLength: number[][]; shipHdg: number[][]; shipCountry: string; validIMO: boolean; }; /** * 添加船舶右键事件 * 添加船舶右键事件 * @Event listener function 回调方法,返回参数:{"shipid":"船舶唯一标识","mmsi":"船舶的mmsi"} */ addRightContextmenuListener(listener: (ship: Ship | null, style?: Record) => void): void; /** * 移除船舶右键事件 */ removeRightContextmenuListener(): void; /** * 添加选中船舶事件 * 添加选中船舶事件,选中船舶时触发该事件 * @Event listener function 回调方法,返回参数:{"shipid":"船舶唯一标识","mmsi":"船舶的mmsi"} */ addSelectedListener(listener: (params: any) => void): void; /** * 移除选中船舶事件 */ removeSelectedListener(): void; /** * 未选中船舶事件 * @Event listener function 回调方法 */ addUnSelectedListener(listener: (params?: any) => void): void; /** * 移除未选中船舶事件 */ removeUnSelectedListene(): void; /** * 添加选中船数据刷新事件 * @Event listener function 回调方法 */ addSelectedShipUpdateListener(listener: (params?: any) => void): void; /** * 取消添加选中船数据刷新事件 */ removeSelectedShipUpdateListener(): void; /** * 获取区域船显示状态 */ getAreaShipShowStatus(): boolean; /** * 设置区域船显示状态 * @params isShow Boolean 区域船是否可用 */ setAreaShipShowStatus(isShow: boolean): void; /** * 非选中船是否显示 * 非选中船是否显示,并执行重绘 * @params isShow boolean 是否显示 * @params isRedrawShips boolean 是否重绘区域船 */ setNoSelShipIsShow(isShow: boolean, isRedrawShips: boolean): void; /** * 是否相应鼠标事件 * @params isEvent boolean true:响应,false:不响应; */ setPointerEvents(isEvent: boolean): void; /** * 设置选中船 * @params shipid Object 船舶shipId字符串或{shipid:shipid}对象 */ setSelectedShip(shipid: any): void; /** * 获取选中船 */ getSelectedShip(): Record; /** * 取消选中船 */ cancelSelectedShip(): void; /** * 设置船舶绘制图层层级 * @params zindex number 层级 */ setZIndex(zindex?: number): void; /** * 获取船舶绘制图层层级 * 获取船舶绘制图层层级(如不存在返回null) */ getZIndex(): string | null; /** * 恢复默认船舶绘制图层层级 */ restoreZIndex(): void; setOffsetLastdyn(offsetLastdyn: number): number; _requestAreaShips_v3(): void; _requestDShip(): void; _requestFleetShips_v3(): void; _requestShipByMmsi(mmis: string): any; _requestSelectedShips(): void; _requestGreenShips(): void; _getKeyShipid_en(shipId: string | number): string | number; _getKeyShipid_de(id: string): string; /** * 更新设置的监控船列表 * @params monitorShips 监控船列表 * @params isAdd 是否追加 默认不追加,清除原有设置 */ updateMonitorShips(monitorShips: CanvasShip[]): string[]; /** * 获取设置的监控船舶列表 */ getMonitorShips(): string[]; _checkShipIsMonitor(ship: CanvasShip, isHash?: boolean): any; /** * 添加特殊船舶(置顶显示) */ addSpecialShips(specialShips: string | any[]): void; /** * 根据MMSI删除指定特殊船 * @params ships 特殊船舶MMSI */ deleteSpecialShips(isClearCache?: boolean, ships?: string | string[]): void; } export { CanvasShipService };