{"version":3,"file":"GlobalSeaAreaSymbol.mjs","sources":["../../../../../../../packages/sdk/plugins/AreaView/layer/GlobalSeaAreaSymbol.ts"],"sourcesContent":["/*\n * @Author: Yolo\n * @Date: 2024-07-02 09:13:23\n * @Last Modified by: Yolo\n * @Last Modified time: 2024-07-02 09:15:28\n * @Desc 全球海区\n */\nimport L from 'leaflet'\nimport { merge } from 'lodash-unified'\nimport { CanvasShipUtils } from '@map-sdk/sdk/utils/CanvasShipUtils'\nimport { AreaViewBase } from '@map-sdk/sdk/plugins/AreaView/AreaViewBase'\nimport { globalSeaAreaSymbolArea } from '@map-sdk/sdk/plugins/AreaView/layer/GlobalSeaAreaSymbolData'\nimport type { AreaViewBaseOptions } from '@map-sdk/sdk/plugins/AreaView/AreaViewBase'\nimport type { MyMap } from '@map-sdk/sdk/ShipxyAPISDK'\n\nclass GlobalSeaAreaSymbol extends AreaViewBase {\n  constructor(map: MyMap, options?: Partial<AreaViewBaseOptions>) {\n    super(map, merge({ isShowName: true }, options))\n    this._data = globalSeaAreaSymbolArea\n  }\n\n  _show() {\n    if (!this._data) {\n      console.error('区域图形展示，请求无数据！')\n      return this\n    }\n\n    let color = '#333'\n    if ('MT_SATELLITE' === this._map.mapType) {\n      color = '#fff'\n    }\n\n    for (let i = 0; i < this._data.length; ++i) {\n      const multiGeometrys = this._data[i].multiGeometry.multiGeometry\n      let name = this._data[i].name\n      if (!CanvasShipUtils.isEmpty(name)) {\n        name = `全球海区：${name}`\n      }\n\n      for (const multiGeometry of multiGeometrys) {\n        const outerBoundaryIs = multiGeometry.outerBoundaryIs\n        const innerBoundaryIs = multiGeometry.innerBoundaryIs\n        this.drawBoundary(outerBoundaryIs, color, name)\n        this.drawBoundary(innerBoundaryIs, '', name) // 假设内部边界也需要标题\n      }\n    }\n    return this\n  }\n\n  drawBoundary(data: any[], color: string, title?: string) {\n    for (const datum of data) {\n      const coordinatesList = datum.coordinates.split(',')\n      const latlngs1: L.LatLngExpression[] = []\n      const latlngs2: L.LatLngExpression[] = []\n\n      for (let j = 0; j < coordinatesList.length / 2; j++) {\n        const lng = Number(coordinatesList[2 * j])\n        const lat = Number(coordinatesList[2 * j + 1])\n        latlngs1.push([lat, lng])\n        latlngs2.push([lat, lng + 360])\n      }\n\n      const polygon1 = L.polygon(latlngs1, {\n        color,\n        opacity: 0.5,\n        weight: 3,\n        fillOpacity: 0,\n        dashArray: [4, 8],\n      })\n\n      const polygon2 = L.polygon(latlngs2, {\n        color,\n        opacity: 0.5,\n        weight: 3,\n        fillOpacity: 0,\n        dashArray: [4, 8],\n      })\n\n      if (this.options.isShowName && title) {\n        const options: L.PopupOptions = {\n          className: 'area-popup',\n          closeButton: false,\n        }\n\n        const getHtml = (title: string): string => `\n          <div class=\"box\">\n            <div class=\"title\">${title}</div>\n          </div>\n        `\n\n        polygon1.bindPopup(getHtml(title), options)\n        polygon1.on('mousemove', (e) => {\n          e.target.openPopup(e.latlng)\n        })\n        polygon1.on('mouseout', (e) => {\n          e.target.closePopup()\n        })\n\n        polygon2.bindPopup(getHtml(title), options)\n        polygon2.on('mousemove', (e) => {\n          e.target.openPopup(e.latlng)\n        })\n        polygon2.on('mouseout', (e) => {\n          e.target.closePopup()\n        })\n      }\n\n      polygon1.addTo(this._map)\n      this._areaLayers.push(polygon1)\n\n      polygon2.addTo(this._map)\n      this._areaLayers.push(polygon2)\n    }\n  }\n}\n\n// 实例化工厂方法\nfunction globalSeaAreaSymbol(\n  map: MyMap,\n  options?: Partial<AreaViewBaseOptions>\n) {\n  return new GlobalSeaAreaSymbol(map, options)\n}\n\nexport { GlobalSeaAreaSymbol, globalSeaAreaSymbol }\n"],"names":["c","f","constructor","a","t","super","h","isShowName","this","_data","w","_show","_map","mapType","length","i","multiGeometry","s","name","g","isEmpty","r","m","outerBoundaryIs","u","innerBoundaryIs","drawBoundary","coordinates","split","e","l","Number","o","push","n","y","polygon","color","opacity","weight","fillOpacity","dashArray","p","options","className","closeButton","bindPopup","on","target","openPopup","latlng","closePopup","addTo","_areaLayers","A","d"],"mappings":"8PAAmT,MAAMA,UAAUC,EAAE,WAAAC,CAAYC,EAAEC,GAAGC,MAAMF,EAAEG,EAAE,CAACC,YAAW,GAAIH,IAAII,KAAKC,MAAMC,CAAC,CAAC,KAAAC,GAAQ,IAAIH,KAAKC,MAAM,OAAuGD,KAAK,IAAIL,EAAE,OAA2B,iBAApBK,KAAKI,KAAKC,UAA2BV,EAAE,QAAQ,IAAI,IAAIC,EAAE,EAAEA,EAAEI,KAAKC,MAAMK,SAASV,EAAE,CAAC,MAAMW,EAAEP,KAAKC,MAAML,GAAGY,cAAcA,cAAc,IAAIC,EAAET,KAAKC,MAAML,GAAGc,KAAKC,EAAEC,QAAQH,KAAKA,EAAE,QAAiCA,KAAK,IAAI,MAAMI,KAAKN,EAAE,CAAC,MAAMO,EAAED,EAAEE,gBAAgBC,EAAEH,EAAEI,gBAAgBjB,KAAKkB,aAAaJ,EAAEnB,EAAEc,GAAGT,KAAKkB,aAAaF,EAAE,GAAGP,EAAE,CAAC,CAAC,OAAOT,IAAI,CAAC,YAAAkB,CAAavB,EAAEC,EAAEW,GAAG,IAAI,MAAME,KAAKd,EAAE,CAAC,MAAMkB,EAAEJ,EAAEU,YAAYC,MAAM,KAAKN,EAAE,GAAGE,EAAE,GAAG,IAAI,IAAIK,EAAE,EAAEA,EAAER,EAAEP,OAAO,EAAEe,IAAI,CAAC,MAAMC,EAAEC,OAAOV,EAAE,EAAEQ,IAAIG,EAAED,OAAOV,EAAE,EAAEQ,EAAE,IAAIP,EAAEW,KAAK,CAACD,EAAEF,IAAIN,EAAES,KAAK,CAACD,EAAEF,EAAE,KAAK,CAAC,MAAMI,EAAEC,EAAEC,QAAQd,EAAE,CAACe,MAAMjC,EAAEkC,QAAQ,GAAGC,OAAO,EAAEC,YAAY,EAAEC,UAAU,CAAC,EAAE,KAAKC,EAAEP,EAAEC,QAAQZ,EAAE,CAACa,MAAMjC,EAAEkC,QAAQ,GAAGC,OAAO,EAAEC,YAAY,EAAEC,UAAU,CAAC,EAAE,KAAK,GAAGjC,KAAKmC,QAAQpC,YAAYQ,EAAE,CAAC,MAAMc,EAAE,CAACe,UAAU,aAAaC,aAAY,GAAIf,EAAEE,GAAG,iEAE/uCA,sCAEvBE,EAAEY,UAAUhB,EAAEf,GAAGc,GAAGK,EAAEa,GAAG,aAAYf,IAAIA,EAAEgB,OAAOC,UAAUjB,EAAEkB,WAAUhB,EAAEa,GAAG,YAAWf,IAAIA,EAAEgB,OAAOG,gBAAeT,EAAEI,UAAUhB,EAAEf,GAAGc,GAAGa,EAAEK,GAAG,aAAYf,IAAIA,EAAEgB,OAAOC,UAAUjB,EAAEkB,WAAUR,EAAEK,GAAG,YAAWf,IAAIA,EAAEgB,OAAOG,eAAc,CAACjB,EAAEkB,MAAM5C,KAAKI,MAAMJ,KAAK6C,YAAYpB,KAAKC,GAAGQ,EAAEU,MAAM5C,KAAKI,MAAMJ,KAAK6C,YAAYpB,KAAKS,EAAE,CAAC,EAAE,SAASY,EAAEC,EAAEpD,GAAG,OAAO,IAAIH,EAAEuD,EAAEpD,EAAE"}