{"version":3,"file":"PirateSymbol.mjs","sources":["../../../../../../../packages/sdk/plugins/AreaView/layer/PirateSymbol.ts"],"sourcesContent":["/*\n * @Author: Yolo\n * @Date: 2024-06-24 14:15:32\n * @Last Modified by: Yolo\n * @Last Modified time: 2024-06-24 15:47:48\n * @Desc 海盗事件\n */\n\nimport L from 'leaflet'\nimport { CanvasShipUtils } from '@map-sdk/sdk/utils/CanvasShipUtils'\nimport { CommUtils } from '@map-sdk/sdk/utils/CommUtils'\nimport { AreaViewBase, type AreaViewBaseOptions } from '../AreaViewBase'\nimport { result } from './PirateSymbolData'\nimport type { MyMap } from '@map-sdk/sdk/ShipxyAPISDK'\n\nclass PirateSymbol extends AreaViewBase {\n  hashMark: Record<number, L.Marker> = {}\n  //mark数据缓存\n  hash: any[] = []\n  hashArea: any[] = []\n  markLayer = {}\n  markOpt = null\n\n  drawObjs: Record<string, L.Marker> = {}\n  checkIDs = []\n  locationCenterObj!: L.Layer // 保存选中的图层信息\n  constructor(map: MyMap, options?: Partial<AreaViewBaseOptions>) {\n    super(map, { minzoom: 2, maxzoom: 18, ...options })\n    this._data = result.data\n\n    //加载航标点击事件\n    map.on('zoomend', () => {\n      this.zoomShowMarkToolTip()\n    })\n  }\n\n  _show(): this {\n    if (!this._data) {\n      return this\n    }\n    this.getList()\n    this.drawMark()\n    return this\n  }\n\n  _hide() {\n    this.drawMarkClear()\n  }\n\n  private getList() {\n    this.hash = result.data || []\n    this.hashArea = result.area || []\n    // this.listHtml()\n    this.drawMark()\n    this.zoomShowMarkToolTip()\n  }\n\n  //绘制标签\n  drawMark() {\n    const d = this.hash\n    if (d == null) {\n      return\n    }\n    this.drawMarkClear()\n\n    for (const [i, element] of d.entries()) {\n      if (element.IsShow == 1) {\n        const sig = L.icon({\n          iconUrl: `https://cdn.xplusship.com/img/images/${this.getPirateImg(\n            element.EventTypeCn\n          )}.png`,\n\n          iconSize: [20, 28], // size of the icon\n          shadowSize: [0, 0], // size of the shadow\n          iconAnchor: [10, 28], // point of the icon which will correspond to marker's location\n          shadowAnchor: [0, 0], // the same for the shadow\n          popupAnchor: [0, -28],\n        })\n        const newP = CanvasShipUtils.GPSEncryptByMapToLatLng(\n          L.latLng(element.Lat, element.Lng),\n          this._map\n        )\n        const latlngMarker: any = [newP.lat, newP.lng]\n        const m = L.marker(latlngMarker, {\n          icon: sig,\n        })\n\n        // m.on('click', function () {})\n        this.bounds.push(latlngMarker)\n        this.drawObjs[String(element.ID)] = m\n        m.bindTooltip(\n          `<div class='_pirate_poptip' ><p style='font-weight:bold;text-align:center;font-size:16px;'>${element.EventTypeCn} (${element.EventTypeEn})` +\n            `</p><p style='width:160px'>时间：${CommUtils.dataFormat(\n              element.EventTime\n            )} (UTC)</p><p>坐标：${CanvasShipUtils.latFormatter(\n              element.Lat\n            )}，${CanvasShipUtils.latFormatter(element.Lng)}</p><p>类型：${\n              element.ShipTypeCn\n            }</p><p>位置：${element.AddressCn}</p></div>`,\n          {\n            direction: 'right',\n            permanent: false,\n            className: 'my_class_pirate',\n          }\n        )\n        m.addTo(this._map)\n        this.hashMark[i] = m\n      }\n    }\n    if (this.options.isInit) {\n      this._map.fitBounds(this.bounds)\n      this.options.isInit = false\n    }\n  }\n\n  //清楚绘制的标签\n  drawMarkClear() {\n    this.bounds = []\n    const objIDS = Object.keys(this.drawObjs)\n    for (const objID of objIDS) {\n      const _layer = this.drawObjs[objID]\n      if (_layer) {\n        this._map.removeLayer(_layer)\n      }\n    }\n  }\n\n  //获取海盗事件图片\n  getPirateImg(type: any) {\n    let _t = 'qita'\n    switch (type) {\n      case '可疑船只':\n        _t = 'keyichuanzhi'\n        break\n      case '企图攻击':\n        _t = 'qitugongji'\n        break\n      case '登船':\n        _t = 'dengchuan'\n        break\n      case '交火':\n        _t = 'jiaohuo'\n        break\n      case '劫持':\n        _t = 'jiechi'\n        break\n      case '被盗':\n        _t = 'beidao'\n        break\n      default:\n        _t = 'qita'\n        break\n    }\n    return _t\n  }\n\n  private zoomShowMarkToolTip() {\n    const _zoom = this._map.getZoom()\n    const vals = Object.keys(this.hashMark)\n    for (const val of vals) {\n      if (_zoom >= 6) {\n        this.hashMark[Number(val)].openTooltip()\n      } else {\n        this.hashMark[Number(val)].closeTooltip()\n      }\n    }\n  }\n  /**\n   * 通过id过去某一个mark的属性\n   * @param markId\n   */\n  openMarkPophtmlByMarkID(markId: string) {\n    const ob = this.drawObjs[markId]\n    ob.openPopup()\n    const { lat, lng } = CanvasShipUtils.GPSEncryptByMapToLatLng(\n      L.latLng(ob.getLatLng().lat, ob.getLatLng().lng),\n      this._map\n    )\n    this._map.setView([lat, lng], this._map.getZoom())\n    this.locationClose()\n    this.locationPic(lat, lng)\n  }\n\n  /**\n   * 移除图片\n   */\n  locationClose() {\n    this.locationCenterObj && this._map.removeLayer(this.locationCenterObj)\n  }\n\n  /**\n   * 定位图片显示\n   * @param lat\n   * @param lon\n   */\n  locationPic(lat: number, lon: number) {\n    const latlon = CanvasShipUtils.GPSEncryptByMapToLatLng(\n      L.latLng([lat, lon]),\n      this._map\n    )\n    this._map.setView(latlon, this._map.getZoom())\n\n    const m = L.marker(latlon, {\n      icon: L.icon({\n        iconUrl: 'https://cdn.xplusship.com/img/images/haidao_chose.png',\n        iconSize: [30, 30], // size of the icon\n        shadowSize: [0, 0], // size of the shadow\n        iconAnchor: [15, 30], // point of the icon which will correspond to marker's location\n        shadowAnchor: [0, 0], // the same for the shadow\n        popupAnchor: [0, -30],\n      }),\n    })\n\n    this.locationCenterObj = m\n    m.addTo(this._map)\n  }\n}\n\nconst pirateSymbol = (map: MyMap, options?: Partial<AreaViewBaseOptions>) => {\n  map.pirateService =\n    map.pirateService || new PirateSymbol(map, { ...options, isInit: true })\n  return map.pirateService\n}\nexport { pirateSymbol, PirateSymbol }\n"],"names":["m","g","constructor","i","a","super","minzoom","maxzoom","this","hashMark","hash","hashArea","markLayer","markOpt","drawObjs","checkIDs","_data","h","data","on","zoomShowMarkToolTip","_show","getList","drawMark","_hide","drawMarkClear","area","t","entries","IsShow","o","e","icon","iconUrl","getPirateImg","EventTypeCn","iconSize","shadowSize","iconAnchor","shadowAnchor","popupAnchor","c","r","GPSEncryptByMapToLatLng","latLng","Lat","Lng","_map","l","lat","lng","n","marker","bounds","push","String","ID","bindTooltip","EventTypeEn","d","dataFormat","EventTime","latFormatter","ShipTypeCn","AddressCn","direction","permanent","className","addTo","options","isInit","fitBounds","Object","keys","removeLayer","getZoom","Number","openTooltip","closeTooltip","openMarkPophtmlByMarkID","openPopup","getLatLng","setView","locationClose","locationPic","locationCenterObj","k","s","p","pirateService"],"mappings":"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"}