{"version":3,"file":"PolylineMeasureExtend.mjs","sources":["../../../../../packages/sdk/plugins/PolylineMeasureExtend.ts"],"sourcesContent":["// 测距离\nimport 'leaflet.polylinemeasure'\nimport L from 'leaflet'\nimport { CanvasShipUtils } from '@map-sdk/sdk/utils/CanvasShipUtils'\nimport { ShipxyOptions } from '@map-sdk/sdk/config'\nimport type { MyMap } from '@map-sdk/sdk/ShipxyAPISDK'\nimport type { LatLng, LatLngExpression } from 'leaflet'\n\ninterface PolylineMeasureOptions extends L.Control.PolylineMeasureOptions2 {\n  scaleTextClass?: string\n  scaleOneClass?: string\n  scaleTwoClass?: string\n}\n\ninterface PolylinePath {\n  arrowMarkers?: L.Marker[]\n  polylinePath: L.Polyline\n  circleMarkers: L.CircleMarker[]\n  circleCoords: LatLngExpression[]\n  tooltips: L.Tooltip[]\n}\n\nexport class PolylineMeasureExtend extends L.Control.PolylineMeasure {\n  [x: string]: any\n  constructor(options?: PolylineMeasureOptions) {\n    super(options)\n  }\n\n  private _clearMeasurementsByID(id: number | string) {\n    if (this._layerPaint && this._arrPolylines) {\n      const arrPolylinesId = this._arrPolylines[id]\n      if (arrPolylinesId) {\n        const removeList = ['arrowMarkers', 'circleMarkers', 'tooltips']\n        for (let i = 0; i < removeList.length; i++)\n          if (arrPolylinesId[removeList[i]]) {\n            for (let j = 0; j < arrPolylinesId[removeList[i]].length; j++)\n              this._layerPaint.removeLayer(arrPolylinesId[removeList[i]][j])\n          }\n        if (arrPolylinesId.polylinePath) {\n          if (arrPolylinesId.polylinePath.arrowMarkers) {\n            for (\n              let i = 0;\n              i < arrPolylinesId.polylinePath.arrowMarkers.length;\n              i++\n            )\n              this._layerPaint.removeLayer(\n                arrPolylinesId.polylinePath.arrowMarkers[i]\n              )\n          }\n          this._layerPaint.removeLayer(arrPolylinesId.polylinePath)\n        }\n        delete this._arrPolylines[id]\n      }\n    }\n  }\n\n  public addCloseButtonToPolyline(event: any, map: MyMap) {\n    const polylinePat = event.polylinePath\n    // 添加关闭按钮到线段的最后一个点附近\n    const lastMarker = polylinePat.getLatLngs().slice(-1)[0]\n\n    L.marker(lastMarker, {\n      icon: L.icon({\n        iconUrl: ShipxyOptions.data_img.close_red,\n        iconSize: [16, 16],\n        iconAnchor: [16, 22],\n      }),\n    })\n      .on('click', (e) => {\n        setTimeout(() => {\n          e.target.remove()\n          this._clearMeasurementsByID(event.id)\n          this.options.oneCloseCallBack &&\n            this.options.oneCloseCallBack(this._arrPolylines)\n        }, 50)\n      })\n      .addTo(map)\n  }\n\n  drawScaleByLine(polylineMeasure: any): L.Marker[] | null {\n    const distances: L.Marker[] = []\n    if (\n      !polylineMeasure ||\n      !polylineMeasure.circleMarkers ||\n      polylineMeasure.circleMarkers.length < 1\n    ) {\n      return null\n    }\n    const totalDistance = this._getDistance(polylineMeasure.distance)\n    const stepSize = this.getStepByZoom() / 2\n\n    if (!(totalDistance.value / stepSize < 1)) {\n      let accumulatedDistance = 0\n      let currentDistance = 0\n      let markerCount = 0\n      for (let i = 1; i < polylineMeasure.circleMarkers.length; i++) {\n        const startMarker = polylineMeasure.circleMarkers[\n          i - 1\n        ].getLatLng() as LatLng\n        const endMarker = polylineMeasure.circleMarkers[i].getLatLng()\n        const startCoord = polylineMeasure.circleCoords[i - 1]\n        const endCoord = polylineMeasure.circleCoords[i]\n        let midPoint = L.latLng(startMarker.lat, startMarker.lng)\n        const angle = CanvasShipUtils.getAngleForLatLngByDistFromLatLngs(\n          startMarker,\n          endMarker\n        )\n        const distance = this._getDistance(startCoord.distanceTo(endCoord))\n\n        accumulatedDistance += Number(distance)\n        const integerDistance = Math.floor(accumulatedDistance)\n\n        for (\n          let markerIndex = Math.ceil(currentDistance / stepSize);\n          markerIndex < integerDistance;\n          markerIndex++\n        ) {\n          const offset = currentDistance - stepSize\n\n          if (offset > 0) {\n            const unitDistance = CanvasShipUtils.unitToM(\n              offset,\n              totalDistance.unit\n            )\n            const markerLatLng = CanvasShipUtils.getLatLngByDistFromLatLngs(\n              startMarker,\n              endMarker,\n              angle,\n              unitDistance\n            )\n\n            if (markerLatLng && this._map.getBounds().contains(markerLatLng)) {\n              const angleOffset =\n                -Math.atan2(\n                  midPoint.lat - markerLatLng.lat,\n                  midPoint.lng - markerLatLng.lng\n                ) * 57.29578\n\n              let iconHTML = ''\n              const scaleClass =\n                accumulatedDistance % 2 === 0\n                  ? this.options.scaleTextClass\n                  : this.options.scaleOneClass\n              const scaleContent =\n                accumulatedDistance % 2 === 0\n                  ? `${currentDistance}&nbsp;${this._unitToCN(\n                      totalDistance.unit\n                    )}`\n                  : '&#921;'\n\n              if (angleOffset >= 128 && angleOffset < 160) {\n                iconHTML = `\n                  <div class=\"polyline-measure-scale ${scaleClass}\" style=\"transform: rotate(${angleOffset}deg)\">\n                    ${scaleContent}\n                  </div>\n                `\n              } else {\n                iconHTML = `\n                  <div class=\"polyline-measure-scale ${this.options.scaleTwoClass}\" style=\"transform: rotate(${angleOffset}deg)\">\n                    ${scaleContent}\n                  </div>\n                `\n              }\n\n              const markerIcon = L.divIcon({\n                className: '',\n                iconSize: [1, 1],\n                iconAnchor: [angleOffset, 0],\n                html: iconHTML,\n              })\n\n              const newMarker = L.marker(markerLatLng, {\n                icon: markerIcon,\n                zIndexOffset: -100,\n              }).addTo(this._layerPaint)\n\n              distances.push(newMarker)\n              midPoint = L.latLng(markerLatLng.lat, markerLatLng.lng)\n            }\n\n            currentDistance = (markerCount += 1) * stepSize\n            markerIndex = Math.ceil(currentDistance / stepSize)\n          }\n        }\n\n        currentDistance += Number(distance)\n      }\n\n      return distances\n    }\n    return distances\n  }\n\n  _drawScaleAll(polylineData: PolylinePath): void {\n    if (polylineData && polylineData.polylinePath) {\n      const polyline = polylineData.polylinePath as any\n      this.clearScaleAll(polyline)\n      const arrows = this.drawScaleByLine(polylineData)\n      if (!polyline.arrowMarkers) {\n        polyline.arrowMarkers = []\n      }\n      if (arrows && arrows.length > 0) {\n        polyline.arrowMarkers = [...polyline.arrowMarkers, ...arrows]\n      }\n    }\n  }\n\n  clearScaleAll(polylineData: PolylinePath): void {\n    if (polylineData && polylineData.arrowMarkers) {\n      for (let i = 0, len = polylineData.arrowMarkers.length; i < len; i++) {\n        polylineData.arrowMarkers[i].removeFrom(this._layerPaint)\n      }\n      polylineData.arrowMarkers = []\n    }\n  }\n\n  getStepByZoom(): number {\n    const STEP_BY_ZOOM: Record<number, number> = {\n      1: 2000,\n      2: 1500,\n      3: 1000,\n      4: 500,\n      5: 200,\n      6: 150,\n      7: 100,\n      8: 50,\n      9: 20,\n      10: 15,\n      11: 10,\n      12: 5,\n      13: 2,\n      14: 1,\n      15: 0.5,\n      16: 0.2,\n      17: 0.15,\n      18: 0.1,\n    }\n    return STEP_BY_ZOOM[this._map.getZoom()] || 0.01\n  }\n\n  reDrawAll(): void {\n    this.options = this._resetOptionByMapType()\n    if (this._unitControl) {\n      this._unitControl.title = `${\n        this.options.changeUnitsText\n      } . ${this._unitToCN(this.options.unit || '')}`\n    }\n    for (let i = 0; i < this._arrPolylines.length; i++) {\n      const polyline = this._arrPolylines[i]\n      let cumulativeDistance = 0\n      const newCoordinates: LatLngExpression[] = []\n\n      this.clearScaleAll(polyline.polylinePath)\n\n      polyline.circleMarkers.forEach((circleMarker: any, index: number) => {\n        if (index >= 1) {\n          const segmentDistance = polyline.circleCoords[index - 1].distanceTo(\n            polyline.circleCoords[index]\n          )\n          cumulativeDistance += segmentDistance\n          this._updateTooltip(\n            polyline.tooltips[index],\n            polyline.tooltips[index - 1].getLatLng(),\n            cumulativeDistance,\n            segmentDistance,\n            polyline.circleMarkers[index - 1].getLatLng(),\n            polyline.circleMarkers[index].getLatLng()\n          )\n          const arcPoints = this._polylineArc(\n            polyline.circleMarkers[index - 1].getLatLng(),\n            polyline.circleMarkers[index].getLatLng()\n          )\n          newCoordinates.push(...(arcPoints as any))\n        }\n      })\n\n      this._layerPaint.removeLayer(polyline.polylinePath)\n      polyline.polylinePath = L.polyline(newCoordinates, {\n        color: this.options.fixedLine.color,\n        weight: this.options.fixedLine.weight,\n        interactive: false,\n      })\n        .addTo(this._layerPaint)\n        .bringToBack()\n\n      this.drawScaleAll(polyline)\n\n      let currentCircleIndex = 0\n      const lastCircleIndex = polyline.circleMarkers.length - 1\n      polyline.circleMarkers.forEach(\n        (circleMarker: { setStyle: (arg0: any) => void }) => {\n          if (currentCircleIndex === 0) {\n            circleMarker.setStyle(this.options.startCircle)\n          } else if (currentCircleIndex === lastCircleIndex) {\n            circleMarker.setStyle(this.options.endCircle)\n          } else {\n            circleMarker.setStyle(this.options.intermedCircle)\n          }\n          currentCircleIndex++\n        }\n      )\n\n      currentCircleIndex = 0\n      polyline.tooltips.forEach((tooltip: { _icon: any }) => {\n        if (\n          currentCircleIndex === 0 ||\n          currentCircleIndex === lastCircleIndex\n        ) {\n          // No action\n        } else {\n          const currentLatLng =\n            polyline.circleMarkers[currentCircleIndex].getLatLng()\n          const previousLatLng =\n            polyline.circleMarkers[currentCircleIndex - 1].getLatLng()\n          const pointCurrent = this._map.latLngToLayerPoint(currentLatLng)\n          const pointPrevious = this._map.latLngToLayerPoint(previousLatLng)\n          const dx = Math.abs(pointCurrent.x - pointPrevious.x)\n          const dy = Math.abs(pointCurrent.y - pointPrevious.y)\n          if (dx <= 130 && dy <= 15) {\n            console.log(tooltip._icon)\n            // $(tooltip._icon).hide()\n          } else {\n            console.log(tooltip._icon)\n            // $(tooltip._icon).show()\n          }\n        }\n        currentCircleIndex++\n      })\n    }\n  }\n\n  _resetOptionByMapType(): PolylineMeasureOptions {\n    if ('MT_SATELLITE' === (this._map as any).mapType) {\n      this.options.scaleTextClass = 'polyline-measure-scale-txt-wx'\n      this.options.scaleOneClass = 'polyline-measure-scale-one-wx'\n      this.options.scaleTwoClass = 'polyline-measure-scale-two-wx'\n\n      L.extend(this.options, {\n        tempLine: {\n          color: '#FFFFFF',\n          weight: 0x2,\n        },\n        fixedLine: {\n          color: '#FFFFFF',\n          weight: 0x3,\n          stroke: true,\n        },\n        startCircle: {\n          weight: 0x2,\n          color: '#FFFFFF',\n          fillColor: '#88FF88',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n        intermedCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#2F302F',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n        currentCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#2F302F',\n          fillOpacity: 0x1,\n          radius: 0x3,\n        },\n        endCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#e33647',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n      })\n    } else {\n      this.options.scaleTextClass = 'polyline-measure-scale-txt'\n      this.options.scaleOneClass = 'polyline-measure-scale-one'\n      this.options.scaleTwoClass = 'polyline-measure-scale-two'\n\n      L.extend(this.options, {\n        tempLine: {\n          color: '#2F302F',\n          weight: 0x2,\n        },\n        fixedLine: {\n          color: '#2F302F',\n          weight: 0x3,\n          stroke: true,\n        },\n        startCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#88FF88',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n        intermedCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#FFFFFF',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n        currentCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#FFFFFF',\n          fillOpacity: 0x1,\n          radius: 0x3,\n        },\n        endCircle: {\n          weight: 0x2,\n          color: '#2F302F',\n          fillColor: '#e33647',\n          fillOpacity: 0x1,\n          radius: 0x4,\n        },\n      })\n    }\n\n    return this.options\n  }\n\n  _unitToCN(unit: string): string {\n    let unitName = '海里'\n    switch (unit) {\n      case 'mi':\n      case 'landmiles':\n        unitName = '英里'\n        break\n      case 'nm':\n      case 'nauticalmiles':\n        unitName = '海里'\n        break\n      case 'km':\n      case 'metres':\n        unitName = '千米'\n    }\n    return unitName\n  }\n\n  _autoMoveMap(marker: any, latlng: LatLng): void {\n    marker._map_move = false\n    marker.to_lat = 0\n    marker.to_lng = 0\n    if (marker._map_move_time) {\n      clearTimeout(marker._map_move_time)\n    }\n\n    const bounds = this._map.getBounds()\n    const northEast = bounds.getNorthEast()\n    const southWest = bounds.getSouthWest()\n    const northEastPoint = this._map.latLngToLayerPoint(northEast)\n    const southWestPoint = this._map.latLngToLayerPoint(southWest)\n    const markerPoint = this._map.latLngToLayerPoint(latlng)\n\n    if (Math.abs(southWestPoint.y - markerPoint.y) <= 0x32) {\n      marker.to_lat = southWest.lat - latlng.lat\n    } else if (Math.abs(northEastPoint.y - markerPoint.y) <= 0x32) {\n      marker.to_lat = northEast.lat - latlng.lat\n    }\n\n    if (Math.abs(southWestPoint.x - markerPoint.x) <= 0x32) {\n      marker.to_lng = southWest.lng - latlng.lng\n    } else if (Math.abs(northEastPoint.x - markerPoint.x) <= 0x32) {\n      marker.to_lng = northEast.lng - latlng.lng\n    }\n\n    this.moveMap(marker)\n\n    if (marker._map_move === 0x1 && this._currentLine !== null) {\n      console.log('=======_map_move===========', marker.to_lat, marker.to_lng)\n      const newLatLng = L.latLng(\n        latlng.lat + marker.to_lat,\n        latlng.lng + marker.to_lng\n      )\n      marker._map_move_time = setTimeout(() => {\n        this._autoMoveMap(marker, newLatLng)\n      }, 200)\n    }\n  }\n\n  moveMap(marker: any): void {\n    if (\n      marker.to_lat !== 0 ||\n      (marker.to_lng !== 0 && this._currentLine !== null)\n    ) {\n      const center = this._map.getCenter()\n      const newCenter = L.latLng(\n        center.lat + marker.to_lat,\n        center.lng + marker.to_lng\n      )\n      this._map.panTo(newCenter)\n      marker._map_move_time = setTimeout(() => {\n        this.moveMap(marker)\n      }, 200)\n    }\n  }\n}\n"],"names":["PolylineMeasureExtend","r","Control","PolylineMeasure","constructor","t","super","_clearMeasurementsByID","this","_layerPaint","_arrPolylines","e","i","o","length","s","removeLayer","polylinePath","arrowMarkers","addCloseButtonToPolyline","getLatLngs","slice","marker","icon","iconUrl","k","data_img","close_red","iconSize","iconAnchor","on","setTimeout","target","remove","id","options","oneCloseCallBack","addTo","drawScaleByLine","circleMarkers","_getDistance","distance","getStepByZoom","value","a","n","l","c","getLatLng","h","L","circleCoords","m","g","latLng","lat","lng","C","f","getAngleForLatLngByDistFromLatLngs","d","distanceTo","Number","F","Math","floor","_","ceil","M","P","unitToM","unit","p","getLatLngByDistFromLatLngs","_map","getBounds","contains","y","atan2","u","w","scaleTextClass","scaleOneClass","x","_unitToCN","scaleTwoClass","T","divIcon","className","html","v","zIndexOffset","push","_drawScaleAll","clearScaleAll","removeFrom","getZoom","reDrawAll","_resetOptionByMapType","_unitControl","title","changeUnitsText","forEach","_updateTooltip","tooltips","_polylineArc","polyline","color","fixedLine","weight","interactive","bringToBack","drawScaleAll","setStyle","startCircle","endCircle","intermedCircle","latLngToLayerPoint","abs","mapType","extend","tempLine","stroke","fillColor","fillOpacity","radius","currentCircle","_autoMoveMap","_map_move","to_lat","to_lng","_map_move_time","clearTimeout","getNorthEast","getSouthWest","moveMap","_currentLine","getCenter","panTo"],"mappings":"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"}