{"version":3,"file":"Arc.mjs","sources":["../../../../../../../packages/sdk/plugins/weather/Typhoon/Arc.ts"],"sourcesContent":["import * as L from 'leaflet'\nimport type { MyMap } from '@map-sdk/sdk/ShipxyAPISDK'\n\ninterface ArcOptions extends L.PathOptions {\n  radius: number\n  startAngle: number\n  endAngle: number\n  clockwise: boolean\n}\n\nclass Arc extends L.Path {\n  override options: ArcOptions\n  latlng: L.LatLng\n  _mRadius: number\n  override _map: MyMap\n\n  constructor(latLng: L.LatLngExpression, map: MyMap, options?: ArcOptions) {\n    super(options)\n    this.options = {\n      radius: 0,\n      startAngle: 0,\n      endAngle: 270,\n      clockwise: true,\n      ...options,\n    }\n\n    L.Util.setOptions(this, options)\n    this.latlng = L.latLng(latLng)\n    this._mRadius = this.options.radius\n    this._map = map\n    this._project()\n  }\n\n  getBounds(): L.LatLngBounds {\n    const _ = this as any\n    const xy = [_._radius, _._radiusY || _._radius]\n    return new L.LatLngBounds(\n      this._map.layerPointToLatLng(_._point.subtract(xy)),\n      this._map.layerPointToLatLng(_._point.add(xy))\n    )\n  }\n\n  private _project() {\n    const lng = this.latlng.lng\n    const lat = this.latlng.lat\n    const map = this._map\n    const Earth = L.CRS.Earth\n    const crs = map.options.crs\n\n    const degToRad = Math.PI / 180\n    const mRadiusInRadians = this._mRadius / (Earth as any).R / degToRad\n\n    let projection1, projection2, center, distanceRadian\n    if (crs && crs.distance === Earth.distance) {\n      projection1 = map.project([lat + mRadiusInRadians, lng])\n      projection2 = map.project([lat - mRadiusInRadians, lng])\n      center = projection1.add(projection2).divideBy(2)\n      const unprojectedCenterLat = map.unproject(center).lat\n      distanceRadian =\n        Math.acos(\n          (Math.cos(mRadiusInRadians * degToRad) -\n            Math.sin(lat * degToRad) *\n              Math.sin(unprojectedCenterLat * degToRad)) /\n            (Math.cos(lat * degToRad) *\n              Math.cos(unprojectedCenterLat * degToRad))\n        ) / degToRad\n\n      if (Number.isNaN(distanceRadian) || distanceRadian === 0) {\n        distanceRadian = mRadiusInRadians / Math.cos((Math.PI / 180) * lat)\n      }\n      const _ = this as any\n      _._point = center.subtract(map.getPixelOrigin())\n      _._radius = Number.isNaN(distanceRadian)\n        ? 0\n        : center.x - map.project([unprojectedCenterLat, lng - distanceRadian]).x\n      _._radiusY = center.y - projection1.y\n    } else {\n      const _ = this as any\n      if (crs) {\n        const shiftedLatLng = crs.unproject(\n          crs.project(this.latlng).subtract([this._mRadius, 0])\n        )\n        _._point = map.latLngToLayerPoint(this.latlng)\n        _._radius = _._point.x - map.latLngToLayerPoint(shiftedLatLng).x\n      }\n    }\n  }\n\n  public path(): {\n    start: { x: number; y: number }\n    end: { x: number; y: number }\n    path: string[]\n    bounds: L.LatLngBounds\n  } {\n    const _ = this as any\n    const options = this.options\n    const point = _._point\n    const radius = _._radius\n    const rotatedStart = this._rotatePoint(\n      point.x,\n      point.y,\n      radius,\n      options.startAngle,\n      options.clockwise\n    )\n    const pathData = [\n      `M${rotatedStart.x.toFixed(2)}`,\n      rotatedStart.y.toFixed(2),\n      `A${radius}`,\n      radius,\n      0,\n      options.endAngle - options.startAngle >= 180 ? 1 : 0,\n      options.clockwise ? 0 : 1,\n    ]\n    const rotatedEnd = this._rotatePoint(\n      point.x,\n      point.y,\n      radius,\n      options.endAngle,\n      options.clockwise\n    )\n    pathData.push(rotatedEnd.x.toFixed(2), rotatedEnd.y.toFixed(2))\n\n    return {\n      start: rotatedStart,\n      end: rotatedEnd,\n      path: pathData,\n      bounds: this.getBounds(),\n    }\n  }\n\n  private _rotatePoint(\n    x: number,\n    y: number,\n    radius: number,\n    angle: number,\n    clockwise: boolean\n  ): { x: number; y: number } {\n    const angleInRadians = (angle / 180) * Math.PI\n    const cosTheta = radius * Math.cos(angleInRadians)\n    const sinTheta = radius * Math.sin(angleInRadians)\n    return clockwise\n      ? { x: x - sinTheta, y: y + cosTheta }\n      : { x: x + cosTheta, y: y + sinTheta }\n  }\n}\n\nconst arc = (latLng: L.LatLngExpression, map: MyMap, options?: ArcOptions) => {\n  return new Arc(latLng, map, options).path()\n}\n\nexport { Arc, arc }\n"],"names":["L","h","Path","constructor","s","t","n","super","this","options","radius","startAngle","endAngle","clockwise","Util","setOptions","latlng","latLng","_mRadius","_map","_project","getBounds","_radius","_radiusY","LatLngBounds","layerPointToLatLng","_point","subtract","add","lng","lat","e","CRS","Earth","o","crs","a","Math","PI","i","R","c","m","p","d","distance","project","divideBy","r","unproject","acos","cos","sin","Number","isNaN","u","getPixelOrigin","x","y","latLngToLayerPoint","path","_rotatePoint","toFixed","push","start","end","bounds","_","l","g"],"mappings":"0BAA0B,MAAMA,UAAUC,EAAEC,KAAK,WAAAC,CAAYC,EAAEC,EAAEC,GAAGC,MAAMD,GAAGE,KAAKC,QAAQ,CAACC,OAAO,EAAEC,WAAW,EAAEC,SAAS,IAAIC,WAAU,KAAMP,GAAGL,EAAEa,KAAKC,WAAWP,KAAKF,GAAGE,KAAKQ,OAAOf,EAAEgB,OAAOb,GAAGI,KAAKU,SAASV,KAAKC,QAAQC,OAAOF,KAAKW,KAAKd,EAAEG,KAAKY,UAAU,CAAC,SAAAC,GAAY,MAAMjB,EAAEI,KAAKH,EAAE,CAACD,EAAEkB,QAAQlB,EAAEmB,UAAUnB,EAAEkB,SAAS,OAAO,IAAIrB,EAAEuB,aAAahB,KAAKW,KAAKM,mBAAmBrB,EAAEsB,OAAOC,SAAStB,IAAIG,KAAKW,KAAKM,mBAAmBrB,EAAEsB,OAAOE,IAAIvB,IAAI,CAAC,QAAAe,GAAW,MAAMhB,EAAEI,KAAKQ,OAAOa,IAAIxB,EAAEG,KAAKQ,OAAOc,IAAIxB,EAAEE,KAAKW,KAAKY,EAAE9B,EAAE+B,IAAIC,MAAMC,EAAE5B,EAAEG,QAAQ0B,IAAIC,EAAEC,KAAKC,GAAG,IAAIC,EAAE/B,KAAKU,SAASa,EAAES,EAAEJ,EAAE,IAAIK,EAAEC,EAAEC,EAAEC,EAAE,GAAGV,GAAGA,EAAEW,WAAWd,EAAEc,SAAS,CAACJ,EAAEnC,EAAEwC,QAAQ,CAACzC,EAAEkC,EAAEnC,IAAIsC,EAAEpC,EAAEwC,QAAQ,CAACzC,EAAEkC,EAAEnC,IAAIuC,EAAEF,EAAEb,IAAIc,GAAGK,SAAS,GAAG,MAAMC,EAAE1C,EAAE2C,UAAUN,GAAGb,IAAIc,EAAEP,KAAKa,MAAMb,KAAKc,IAAIZ,EAAEH,GAAGC,KAAKe,IAAI/C,EAAE+B,GAAGC,KAAKe,IAAIJ,EAAEZ,KAAKC,KAAKc,IAAI9C,EAAE+B,GAAGC,KAAKc,IAAIH,EAAEZ,KAAKA,GAAGiB,OAAOC,MAAMV,IAAQ,IAAJA,KAASA,EAAEL,EAAEF,KAAKc,IAAId,KAAKC,GAAG,IAAIjC,IAAI,MAAMkD,EAAE/C,KAAK+C,EAAE7B,OAAOiB,EAAEhB,SAASrB,EAAEkD,kBAAkBD,EAAEjC,QAAQ+B,OAAOC,MAAMV,GAAG,EAAED,EAAEc,EAAEnD,EAAEwC,QAAQ,CAACE,EAAE5C,EAAEwC,IAAIa,EAAEF,EAAEhC,SAASoB,EAAEe,EAAEjB,EAAEiB,CAAC,KAAK,CAAC,MAAMV,EAAExC,KAAK,GAAG0B,EAAE,CAAC,MAAMqB,EAAErB,EAAEe,UAAUf,EAAEY,QAAQtC,KAAKQ,QAAQW,SAAS,CAACnB,KAAKU,SAAS,KAAK8B,EAAEtB,OAAOpB,EAAEqD,mBAAmBnD,KAAKQ,QAAQgC,EAAE1B,QAAQ0B,EAAEtB,OAAO+B,EAAEnD,EAAEqD,mBAAmBJ,GAAGE,CAAC,CAAC,CAAC,CAAC,IAAAG,GAAO,MAAavD,EAAEG,KAAKC,QAAQH,EAApBE,KAAwBkB,OAAOK,EAA/BvB,KAAmCc,QAAQY,EAAE1B,KAAKqD,aAAavD,EAAEmD,EAAEnD,EAAEoD,EAAE3B,EAAE1B,EAAEM,WAAWN,EAAEQ,WAAWuB,EAAE,CAAC,IAAIF,EAAEuB,EAAEK,QAAQ,KAAK5B,EAAEwB,EAAEI,QAAQ,GAAG,IAAI/B,IAAIA,EAAE,EAAE1B,EAAEO,SAASP,EAAEM,YAAY,IAAI,EAAE,EAAEN,EAAEQ,UAAU,EAAE,GAAG0B,EAAE/B,KAAKqD,aAAavD,EAAEmD,EAAEnD,EAAEoD,EAAE3B,EAAE1B,EAAEO,SAASP,EAAEQ,WAAW,OAAOuB,EAAE2B,KAAKxB,EAAEkB,EAAEK,QAAQ,GAAGvB,EAAEmB,EAAEI,QAAQ,IAAI,CAACE,MAAM9B,EAAE+B,IAAI1B,EAAEqB,KAAKxB,EAAE8B,OAAO1D,KAAKa,YAAY,CAAC,YAAAwC,CAAazD,EAAEC,EAAEC,EAAEyB,EAAEG,GAAG,MAAME,EAAEL,EAAE,IAAIM,KAAKC,GAAGC,EAAEjC,EAAE+B,KAAKc,IAAIf,GAAGK,EAAEnC,EAAE+B,KAAKe,IAAIhB,GAAG,OAAOF,EAAE,CAACuB,EAAErD,EAAEqC,EAAEiB,EAAErD,EAAEkC,GAAG,CAACkB,EAAErD,EAAEmC,EAAEmB,EAAErD,EAAEoC,EAAE,EAAO,MAAC0B,EAAE,CAACC,EAAEC,EAAEjE,IAAI,IAAIJ,EAAEoE,EAAEC,EAAEjE,GAAGwD"}