{"version":3,"file":"TrackDrawSymbolImpl.mjs","sources":["../../../../../../packages/sdk/plugins/TrackDraw/TrackDrawSymbolImpl.ts"],"sourcesContent":["import { toRaw, unref } from 'vue'\nimport L from 'leaflet'\nimport { ShipxyOptions } from '@map-sdk/sdk/config'\nimport { CanvasShipUtils } from '@map-sdk/sdk/utils/CanvasShipUtils'\nimport { canvasIconLayer } from '@map-sdk/sdk/plugins/canvasMarker'\nimport { drawUtil } from '@map-sdk/sdk/plugins/Draw/DrawUtils'\n\ninterface TrackDrawSymbolImplOptions {\n  callBack?: (...params: any) => void\n  drawEndCallBack?: (...params: any) => void\n  unit?: string\n  symbol?: string\n  lineColor?: string\n  lineTextColor?: string\n  dash?: boolean\n  dashArray?: number[]\n  showMarkerText?: boolean\n  showLineText?: boolean\n}\n\n// 定义 TrackDrawSymbolImpl 类\nclass TrackDrawSymbolImpl {\n  options: TrackDrawSymbolImplOptions\n  id: string\n  map: any // 应替换为实际的地图对象类型\n  offsetC: any // 应根据实际类型定义\n  items: any[] // 应根据实际类型定义\n  markers: any[] // 同上\n  txtMarkers: any[]\n  polyLineLayer!: any // 应根据实际的PolyLine Layer类型定义\n  polyLineShape: any\n  featureGroup: any // 应根据实际的图层组类型定义\n\n  constructor(map: any, options?: TrackDrawSymbolImplOptions, trackData?: any) {\n    this.map = map\n    this.id = `${Date.now()}_tds`\n    this.options = {\n      unit: 'nm',\n      symbol: '',\n      lineColor: '#DA462D',\n      lineTextColor: '#DA462D',\n      dash: true,\n      dashArray: [5, 5],\n      showMarkerText: true,\n      showLineText: true,\n      ...(options || {}),\n    }\n\n    this.offsetC = this.map.offsetC\n    this.items = []\n    this.markers = []\n    this.txtMarkers = []\n    this.polyLineShape = null\n\n    this.featureGroup = L.featureGroup().addTo(this.map)\n    if (!this.map.markersLayer_track) {\n      this.map.markersLayer_track = canvasIconLayer()\n    }\n    this.map.markersLayer_track.addTo(this.map)\n    if (!this.map.canvas_track) {\n      this.map.canvas_track = L.canvas()\n    }\n    if (trackData) {\n      this.showTrack(trackData, true, false)\n    }\n    if (this.map.shipsService) {\n      this.map.shipsService.setZIndex()\n    }\n    this.map.off('moveend', this._Event.moveend, this)\n    this.map.on('moveend', this._Event.moveend, this)\n    this.map.off('baselayerchange', this._Event.baselayerchange, this)\n    this.map.on('baselayerchange', this._Event.baselayerchange, this)\n  }\n\n  private _Event = {\n    moveend: () => this._onMapZoom,\n    baselayerchange: () => this._onBaseLayerChange,\n  }\n  private _onMapZoom(): void {\n    this._drawAllMarker()\n    this._drawText()\n  }\n  private _onBaseLayerChange(): void {\n    let markerLatLngs: L.LatLngLiteral[] = []\n    if (this.markers && this.markers.length > 0) {\n      markerLatLngs = this._getMarkerLatLngs()\n    } else if (this.polyLineLayer) {\n      markerLatLngs = this.polyLineLayer.getLatLngs()\n    }\n\n    if (\n      markerLatLngs &&\n      markerLatLngs.length > 0 &&\n      this.offsetC !== this.map.offsetC\n    ) {\n      if (this.map.offsetC) {\n        for (const markerLatLng of markerLatLngs) {\n          let latlng = L.latLng(markerLatLng.lat, markerLatLng.lng)\n          latlng = CanvasShipUtils.GPSEncryptByMapToLatLng(latlng, this.map)\n          markerLatLng.lat = latlng.lat\n          markerLatLng.lng = latlng.lng\n        }\n      } else {\n        for (const markerLatLng of markerLatLngs) {\n          let latlng = L.latLng(markerLatLng.lat, markerLatLng.lng)\n          latlng = CanvasShipUtils.getGPSLatLngByMap(latlng, this.map)\n          markerLatLng.lat = latlng.lat\n          markerLatLng.lng = latlng.lng\n        }\n      }\n    }\n    this.setItemsByArray(markerLatLngs)\n    this.offsetC = this.map.offsetC\n  }\n\n  private showTrack(\n    trackData: any,\n    fitBounds: boolean,\n    drawImmediately = false,\n    offsetLng?: number\n  ): void {\n    trackData && this.setItems(trackData)\n    if (offsetLng != undefined) {\n      for (let i = 0; i < this.items.length; i++) {\n        this.items[i].lng += Number(offsetLng)\n      }\n    }\n    this.removeTrack(false, drawImmediately)\n    this._drawAllMarker()\n    this._drawText()\n    this._drawLine()\n    if (fitBounds) this._fitBounds()\n    setTimeout(() => {\n      if (this.map.markersLayer_track) {\n        this.map.markersLayer_track._reset()\n      }\n    }, 10)\n  }\n\n  private removeTrack(clearAll = false, endDraw = false): void {\n    if (endDraw) {\n      this.endDrawTrack()\n    }\n    this._removeAllMarker()\n    if (this.featureGroup) {\n      this.featureGroup.clearLayers()\n      this.featureGroup.remove()\n      this.featureGroup = null\n    }\n    this._removeAllTxtMarker()\n    this._removeAllLine()\n    if (clearAll) {\n      this.items = []\n    }\n  }\n\n  private _getLatLngArray(): L.LatLngExpression[] {\n    const latLngArray: L.LatLngExpression[] = []\n    for (let i = 0; i < this.items.length; i++) {\n      const item = this.items[i]\n      latLngArray.push([item.lat, item.lng])\n    }\n    return latLngArray\n  }\n\n  private _getLatLngs(): L.LatLng[] {\n    const latLngs: L.LatLng[] = []\n    for (let i = 0; i < this.items.length; i++) {\n      const item = this.items[i]\n      latLngs.push(L.latLng([item.lat, item.lng]))\n    }\n    return latLngs\n  }\n\n  private _getMarkerLatLngs(): L.LatLng[] {\n    const latLngs: L.LatLng[] = []\n    for (let i = 0; i < this.markers.length; i++) {\n      const marker = this.markers[i]\n      latLngs.push(marker.getLatLng())\n    }\n    return latLngs\n  }\n\n  private _fitBounds(): void {\n    const map = toRaw(unref(this.map))\n    const latLngArray = this._getLatLngArray()\n    if (latLngArray && latLngArray.length > 0) {\n      map.fitBounds(CanvasShipUtils.getLatLngBoundsBoxArea(latLngArray))\n      map.fire('moveend')\n    }\n  }\n\n  private setItems(items: any[]): void {\n    const map = toRaw(unref(this.map))\n    this.removeTrack(true)\n    const processedItems = CanvasShipUtils.latlngsFrom180(items)\n    this.items = processedItems\n    if (map.offsetC) {\n      for (let i = 0; i < this.items.length; i++) {\n        const item = this.items[i]\n        const latlng = CanvasShipUtils.GPSEncryptByMapToLatLng(\n          L.latLng(item.lat, item.lng),\n          map\n        )\n        this.items[i].lat = latlng.lat\n        this.items[i].lng = latlng.lng\n      }\n    }\n    this.calculationTrack()\n  }\n\n  private setItemsByArray(coords: L.LatLngLiteral[]): void {\n    this.items = []\n    for (const [i, coord] of coords.entries()) {\n      this.items.push({\n        id: i,\n        lat: coord.lat,\n        lng: coord.lng,\n      })\n    }\n    this.calculationTrack()\n    this._drawAllMarker()\n    this._drawText()\n    this._drawLine()\n  }\n\n  /**\n   * 计算距离\n   */\n  private calculationTrack(): void {\n    if (this.items) {\n      let totalDistance = 0\n      this.items.forEach((item, index) => {\n        item.id = index + 1\n        item.name = this.options.symbol\n          ? this.options.symbol + item.id\n          : `${item.id}`\n        item.bDistance = 0\n        item.pDistance = 0\n        item.eDistance = 0\n        const latlng = L.latLng(item.lat, item.lng)\n        if (index > 0) {\n          const prevLatlng = L.latLng(\n            this.items[index - 1].lat,\n            this.items[index - 1].lng\n          )\n          item.pDistance = CanvasShipUtils.getDistance(\n            [item.lat, item.lng],\n            [this.items[index - 1].lat, this.items[index - 1].lng],\n            this.options.unit || 'nm'\n          )\n          totalDistance += Number(item.pDistance)\n          item.bDistance = totalDistance.toFixed(2)\n          item.eDistance = 0\n          item.cog = CanvasShipUtils.getAngleByLatLngToBigCircle(\n            prevLatlng,\n            latlng\n          )\n        }\n      })\n      let endDistance = 0\n      for (let i = this.items.length - 2; i >= 0; i--) {\n        endDistance += Number(this.items[i + 1].pDistance)\n        this.items[i].eDistance = endDistance.toFixed(2)\n      }\n      if (this.options.callBack) {\n        let llx = 0\n        const adjustedItems = this.items.map((item) => {\n          const adjustedItem = { ...item }\n          if (adjustedItem.lng >= 180 && llx !== 360) {\n            llx = 360\n          }\n          if (this.map.offsetC) {\n            const adjustedLatlng = CanvasShipUtils.getGPSLatLngByMap(\n              L.latLng(adjustedItem.lat, adjustedItem.lng),\n              this.map\n            )\n            adjustedItem.lat = adjustedLatlng.lat\n            adjustedItem.lng = adjustedLatlng.lng\n          }\n          return adjustedItem\n        })\n        this.options.callBack(CanvasShipUtils.latlngsTo180(adjustedItems), llx)\n      }\n    }\n  }\n\n  public getItems(): any[] {\n    return this.items\n  }\n  public drawTrack(): void {\n    if (this.map.shipsService) {\n      this.map.shipsService.setZIndex()\n    }\n    this.showTrack(null, false, true)\n    setTimeout(() => {\n      this.map._container.classList.remove('m_cursor')\n      this.map._container.classList.add('m_cursor')\n      this.map.doubleClickZoom.disable()\n      this.map.off('click', this._onClick, this)\n      this.map.off('dblclick', this._onDblclick, this)\n      this.map.on('click', this._onClick, this)\n      this.map.on('dblclick', this._onDblclick, this)\n    }, 100)\n  }\n\n  private _drawText(): void {\n    let showText = false\n    let latLngs: L.LatLng[] | L.LatLng[][] | L.LatLng[][][] = []\n    if (this.markers && this.markers.length > 0) {\n      latLngs = this._getLatLngs()\n    } else if (this.polyLineLayer) {\n      latLngs = this.polyLineLayer.getLatLngs()\n    }\n\n    const bounds = this.map.getBounds()\n    for (const latLng of latLngs) {\n      if (bounds.contains(latLng)) {\n        showText = true\n        break\n      }\n    }\n    if (showText) {\n      this._drawLineText()\n    }\n  }\n\n  private _onClick(e: L.LeafletMouseEvent): void {\n    this.addMarker(e.latlng)\n  }\n\n  private _onDblclick(): void {\n    if (this.items.length > 0) {\n      this.items.splice(-1, 1)\n      this.showTrack(null, false, true)\n      this.calculationTrack()\n    }\n  }\n  public addMarker(latlng: L.LatLng): void {\n    const map = toRaw(unref(this.map))\n    this.items.push(latlng)\n    this.calculationTrack()\n    const marker = this._addOneMarker(this.items.length - 1)\n    const showText = this._markerTextShow(\n      false,\n      false,\n      marker,\n      this.items[this.items.length - 1].name\n    )\n    if (!this.featureGroup) {\n      this.featureGroup = L.featureGroup().addTo(map)\n    }\n    marker.addTo(map.markersLayer_track)\n    if (showText) {\n      marker.openTooltip()\n    }\n    this._drawLine()\n    this._drawText()\n  }\n\n  private _addOneMarker(index: number): L.Marker {\n    const icon = L.icon({\n      iconUrl: ShipxyOptions.COM_IMG_BASE64.circular_01,\n      iconSize: [8, 8],\n      iconAnchor: [4, 4],\n    })\n    const item = this.items[index]\n    const latlng = L.latLng(item.lat, item.lng)\n    const marker = L.marker(latlng, { icon })\n    marker.off('click')\n    this.markers.push(marker)\n    return marker\n  }\n\n  private _getMarkerTextShowFlg(marker1: L.Marker, marker2: L.Marker): boolean {\n    return !(\n      CanvasShipUtils.getMaxXYByLatlngs(\n        this.map,\n        marker1.getLatLng(),\n        marker2.getLatLng()\n      ) < 50\n    )\n  }\n\n  private _markerTextShow(\n    isShow: boolean,\n    zoomLevel: boolean,\n    marker: L.Marker,\n    text: string,\n    referenceElement?: L.Marker\n  ): boolean {\n    const zoom = this.map.getZoom()\n    if (!zoomLevel && referenceElement) {\n      zoomLevel =\n        zoom > 8 &&\n        isShow &&\n        this._getMarkerTextShowFlg(referenceElement, marker)\n    }\n    // TODO: 将会影响缩放事件\n    marker.bindTooltip(text, {\n      direction: 'auto',\n      offset: new L.Point(0, -15),\n      opacity: 1,\n      permanent: zoomLevel,\n      className: 'wp_marker',\n    })\n\n    return false //zoomLevel\n  }\n\n  private _drawLineText(): void {\n    this._removeAllTxtMarker()\n    if (this.options.showLineText && this.items && this.items.length > 0) {\n      const lineTextColor = this.options.lineTextColor || '#DA462D'\n      const unit = this.options.unit || 'nm'\n      if (!this.featureGroup) {\n        this.featureGroup = L.featureGroup().addTo(this.map)\n      }\n      for (let i = 0; i < this.items.length; i++) {\n        if (i > 0) {\n          const currentLatLng = L.latLng(this.items[i].lat, this.items[i].lng)\n          const previousLatLng = L.latLng(\n            this.items[i - 1].lat,\n            this.items[i - 1].lng\n          )\n          const latlngs = [previousLatLng, currentLatLng]\n          if (\n            CanvasShipUtils.getMaxXYByLatlngs(\n              this.map,\n              latlngs[0],\n              latlngs[1]\n            ) < 60\n          ) {\n            continue\n          }\n          const angle = CanvasShipUtils.getAngleByLatLng(\n            previousLatLng,\n            currentLatLng\n          )\n\n          if (Math.abs(angle) > 90) {\n            latlngs.reverse()\n          }\n          const cogText = `CA ${this.items[i].cog}`\n          const textOptions = {\n            repeat: false,\n            offset: -8,\n            center: true,\n            attributes: {\n              fill: '#666',\n              'font-weight': '100',\n              'font-size': '12px',\n              'font-family': 'Microsoft YaHei',\n              stroke: lineTextColor,\n              'stroke-width': '0.5px',\n            },\n          }\n          const distanceText = this.items[i].pDistance + unit\n          const polyline = L.polyline(latlngs, {\n            fillColor: '#fff',\n            fillOpacity: 0.5,\n            color: '#000000',\n            weight: 0,\n            opacity: 0,\n            lineCap: 'butt',\n            lineJoin: 'bevel',\n          }) as any\n          polyline.setText(cogText, {\n            ...textOptions,\n            offset: -5,\n          })\n          polyline.addTo(this.featureGroup)\n          this.txtMarkers.push(polyline)\n          const distancePolyline = L.polyline(latlngs, {\n            fillColor: '#fff',\n            fillOpacity: 0.5,\n            color: '#000000',\n            weight: 0,\n            opacity: 0,\n            lineCap: 'butt',\n            lineJoin: 'bevel',\n          }) as any\n          distancePolyline.setText(distanceText, {\n            ...textOptions,\n            offset: 15,\n          })\n          distancePolyline.addTo(this.featureGroup)\n          this.txtMarkers.push(distancePolyline)\n        }\n      }\n    }\n  }\n\n  public endDrawTrack(): void {\n    const map = this.map\n    map.shipsService && map.shipsService.restoreZIndex()\n    map.off('click', this._onClick, this)\n    map.off('dblclick', this._onDblclick, this)\n    map._container.classList.remove('m_cursor')\n    map.doubleClickZoom.enable()\n    if (this.options.drawEndCallBack) {\n      let llx = 0\n      const itemsToProcess = this.items.map((item) => {\n        const adjustedItem = Object.assign({}, item)\n        if (adjustedItem.lng >= 180 && llx !== 360) {\n          llx = 360\n        }\n        if (map.offsetC) {\n          const adjustedLatlng = CanvasShipUtils.getGPSLatLngByMap(\n            L.latLng(adjustedItem.lat, adjustedItem.lng),\n            map\n          )\n          adjustedItem.lat = adjustedLatlng.lat\n          adjustedItem.lng = adjustedLatlng.lng\n        }\n        return adjustedItem\n      })\n      this.options.drawEndCallBack(\n        CanvasShipUtils.latlngsTo180(itemsToProcess),\n        llx\n      )\n    }\n  }\n\n  private _drawLine(): void {\n    const latLngs = this._getMarkerLatLngs()\n    if (latLngs && latLngs.length > 0) {\n      if (!this.featureGroup) {\n        this.featureGroup = L.featureGroup().addTo(this.map)\n      }\n      const lineColor = this.options.lineColor || '#DA462D'\n      const polylineOptions = {\n        renderer: this.map.canvas_track,\n        color: lineColor,\n      } as any\n      if (this.options.dash) {\n        polylineOptions.dash = this.options.dash\n      }\n      if (this.options.dashArray && this.options.dashArray.length === 2) {\n        polylineOptions.dashArray = this.options.dashArray\n      }\n      if (this.polyLineLayer) {\n        this.polyLineLayer.setLatLngs(latLngs)\n      } else {\n        this.polyLineLayer = L.polyline(latLngs, polylineOptions).addTo(\n          this.featureGroup\n        )\n      }\n    }\n  }\n\n  public editLine(): void {\n    this.endDrawTrack()\n    this._removeAllMarker()\n    this._removeAllLine()\n\n    const lineColor = this.options.lineColor || '#DA462D'\n    const options = L.extend(\n      {\n        hintlineStyle: {\n          color: lineColor,\n          dash: this.options.dash,\n          dashArray: this.options.dashArray,\n          weight: 0,\n        },\n        templineStyle: {\n          color: lineColor,\n          dash: this.options.dash,\n          dashArray: this.options.dashArray,\n        },\n        pathOptions: {\n          fill: false,\n          color: lineColor,\n          dash: this.options.dash,\n          dashArray: this.options.dashArray,\n        },\n        snappable: true,\n        snapDistance: 15,\n      },\n      this.options,\n      {\n        shape: 'Line',\n      }\n    )\n\n    const latLngs = this._getLatLngs()\n    if (latLngs && latLngs.length > 0) {\n      if (this.map.shipsService) {\n        this.map.shipsService.setZIndex()\n      }\n      const draw = drawUtil(toRaw(unref(this.map)))\n      this.polyLineLayer = draw._showPolyLine(latLngs, options)\n      draw.edit(this.polyLineLayer)\n      this.polyLineLayer.on('pm:edit', () => {\n        this.setItemsByArray(this.polyLineLayer.getLatLngs())\n        this._drawText()\n      })\n      this._drawText()\n    }\n  }\n\n  public cancelLine() {\n    const draw = drawUtil(toRaw(unref(this.map)))\n    draw.cancelEdit(this.polyLineLayer)\n  }\n\n  private _removeAllMarker(): void {\n    const map = this.map\n    for (let i = 0; i < this.markers.length; i++) {\n      if (map.markersLayer_track) {\n        map.markersLayer_track.removeMarker(this.markers[i])\n      }\n      this.markers[i].closeTooltip()\n      this.markers[i].remove()\n    }\n    if (map.markersLayer_track) {\n      map.markersLayer_track._reset()\n    }\n    this.markers = []\n  }\n\n  private _removeAllTxtMarker(): void {\n    for (let i = 0; i < this.txtMarkers.length; i++) {\n      this.txtMarkers[i].remove()\n    }\n    this.txtMarkers = []\n  }\n\n  private _removeAllLine(): void {\n    if (this.polyLineLayer) {\n      this.polyLineLayer.remove()\n      this.polyLineLayer = null\n    }\n  }\n\n  private _drawAllMarker(): void {\n    this._removeAllMarker()\n    const map = toRaw(unref(this.map))\n    if (this.items) {\n      if (!this.featureGroup) {\n        this.featureGroup = L.featureGroup().addTo(map)\n      }\n      const bounds = map.getBounds()\n      let index = 0\n      const len = this.items.length\n      for (let i = 0; i < len; i++) {\n        const item = this.items[i]\n        const marker = this._addOneMarker(i)\n        let showText = false\n        if (bounds.contains(marker.getLatLng())) {\n          if (i === len - 1 || i === index) {\n            showText = this._markerTextShow(true, true, marker, item.name)\n            index = i\n          } else {\n            showText = this._markerTextShow(\n              true,\n              false,\n              marker,\n              item.name,\n              this.markers[index]\n            )\n            if (showText) {\n              index = i\n            }\n          }\n\n          if (map.markersLayer_track) {\n            map.markersLayer_track.addMarker(marker)\n          }\n\n          if (showText) {\n            marker.openTooltip()\n          }\n        } else {\n          index = i + 1\n        }\n      }\n    }\n  }\n}\n\nexport const trackDrawSymbolImpl = (\n  map: any,\n  options?: TrackDrawSymbolImplOptions,\n  trackData?: any\n) => new TrackDrawSymbolImpl(map, options, trackData)\n"],"names":["v","constructor","e","s","t","this","_Event","moveend","_onMapZoom","baselayerchange","_onBaseLayerChange","map","id","Date","now","options","unit","symbol","lineColor","lineTextColor","dash","dashArray","showMarkerText","showLineText","offsetC","items","markers","txtMarkers","polyLineShape","featureGroup","n","addTo","markersLayer_track","u","canvas_track","canvas","showTrack","shipsService","setZIndex","off","on","_drawAllMarker","_drawText","length","_getMarkerLatLngs","polyLineLayer","getLatLngs","latLng","lat","lng","o","GPSEncryptByMapToLatLng","getGPSLatLngByMap","setItemsByArray","a","setItems","i","Number","removeTrack","_drawLine","_fitBounds","setTimeout","_reset","endDrawTrack","_removeAllMarker","clearLayers","remove","_removeAllTxtMarker","_removeAllLine","_getLatLngArray","push","_getLatLngs","getLatLng","p","c","fitBounds","getLatLngBoundsBoxArea","fire","latlngsFrom180","r","calculationTrack","entries","forEach","name","bDistance","pDistance","eDistance","getDistance","toFixed","cog","getAngleByLatLngToBigCircle","callBack","l","latlngsTo180","getItems","drawTrack","_container","classList","add","doubleClickZoom","disable","_onClick","_onDblclick","getBounds","contains","_drawLineText","addMarker","latlng","splice","_addOneMarker","_markerTextShow","openTooltip","icon","iconUrl","y","COM_IMG_BASE64","circular_01","iconSize","iconAnchor","marker","_getMarkerTextShowFlg","getMaxXYByLatlngs","getZoom","bindTooltip","direction","offset","Point","opacity","permanent","className","getAngleByLatLng","Math","abs","reverse","h","g","repeat","center","attributes","fill","stroke","k","m","polyline","fillColor","fillOpacity","color","weight","lineCap","lineJoin","setText","L","restoreZIndex","enable","drawEndCallBack","Object","assign","renderer","setLatLngs","editLine","extend","hintlineStyle","templineStyle","pathOptions","snappable","snapDistance","shape","d","_showPolyLine","edit","cancelLine","cancelEdit","removeMarker","closeTooltip","trackDrawSymbolImpl","f"],"mappings":"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"}