From b2392458ebf42594b9fc5390fda40d7a0a12f923 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 03 九月 2025 17:40:52 +0800
Subject: [PATCH] 调试自动生成网格融合图片功能(待完成)

---
 package-lock.json                                 |   22 +
 src/views/underwaymix/UnderwayMixMode.vue         |    6 
 package.json                                      |    2 
 src/utils/chart/shanghai.js                       |  587 ++++++++++++++++++++++++++++++++++
 src/components.d.ts                               |    2 
 src/utils/chart/chart-map.js                      |  123 +++++++
 src/views/historymode/component/MissionReport.vue |  100 +++++
 src/utils/chart/chart-map-amap.js                 |  161 +++++++++
 8 files changed, 997 insertions(+), 6 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 2159988..b191bd1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,8 @@
         "docxtemplater": "^3.65.3",
         "docxtemplater-image-module-free": "^1.1.1",
         "echarts": "^5.5.0",
+        "echarts-china-cities-js": "^0.1.1",
+        "echarts-extension-amap": "^1.12.0",
         "element-plus": "^2.6.2",
         "file-saver": "^2.0.5",
         "jquery": "^3.7.1",
@@ -2171,6 +2173,16 @@
         "tslib": "2.3.0",
         "zrender": "5.5.0"
       }
+    },
+    "node_modules/echarts-china-cities-js": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/echarts-china-cities-js/-/echarts-china-cities-js-0.1.1.tgz",
+      "integrity": "sha512-Xc7ShyUCaKeS5JHLygvpdZQ6A2nPN8MdVSMLMJhnl7Inatu1eRCJ6DtkeN4WtrjjpRmFYuQfYxKJ2K6Nb+3KLg=="
+    },
+    "node_modules/echarts-extension-amap": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmmirror.com/echarts-extension-amap/-/echarts-extension-amap-1.12.0.tgz",
+      "integrity": "sha512-JpCCLhafpUGSfMcAB44lTnjnNuYWQ1jPuyvOF3t/zziQ1jbDjGLTkhIFenpKMuZOz9GzS4tREXL/zGeNrZpxDw=="
     },
     "node_modules/echarts/node_modules/tslib": {
       "version": "2.3.0",
@@ -7396,6 +7408,16 @@
         }
       }
     },
+    "echarts-china-cities-js": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/echarts-china-cities-js/-/echarts-china-cities-js-0.1.1.tgz",
+      "integrity": "sha512-Xc7ShyUCaKeS5JHLygvpdZQ6A2nPN8MdVSMLMJhnl7Inatu1eRCJ6DtkeN4WtrjjpRmFYuQfYxKJ2K6Nb+3KLg=="
+    },
+    "echarts-extension-amap": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmmirror.com/echarts-extension-amap/-/echarts-extension-amap-1.12.0.tgz",
+      "integrity": "sha512-JpCCLhafpUGSfMcAB44lTnjnNuYWQ1jPuyvOF3t/zziQ1jbDjGLTkhIFenpKMuZOz9GzS4tREXL/zGeNrZpxDw=="
+    },
     "editorconfig": {
       "version": "1.0.4",
       "resolved": "https://registry.npmmirror.com/editorconfig/-/editorconfig-1.0.4.tgz",
diff --git a/package.json b/package.json
index f2b4b81..30351da 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,8 @@
     "docxtemplater": "^3.65.3",
     "docxtemplater-image-module-free": "^1.1.1",
     "echarts": "^5.5.0",
+    "echarts-china-cities-js": "^0.1.1",
+    "echarts-extension-amap": "^1.12.0",
     "element-plus": "^2.6.2",
     "file-saver": "^2.0.5",
     "jquery": "^3.7.1",
diff --git a/src/components.d.ts b/src/components.d.ts
index 0fc11c1..c67b3a0 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -31,6 +31,7 @@
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDialog: typeof import('element-plus/es')['ElDialog']
+    ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDropdown: typeof import('element-plus/es')['ElDropdown']
     ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
     ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
@@ -39,6 +40,7 @@
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
     ElLink: typeof import('element-plus/es')['ElLink']
     ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
diff --git a/src/utils/chart/chart-map-amap.js b/src/utils/chart/chart-map-amap.js
new file mode 100644
index 0000000..b55f204
--- /dev/null
+++ b/src/utils/chart/chart-map-amap.js
@@ -0,0 +1,161 @@
+import * as echarts from 'echarts';
+import 'echarts-extension-amap';
+
+/**
+ * 璁$畻鍦板浘涓績鐐瑰拰缂╂斁姣斾緥
+ * @param {*} gridData 缃戞牸鏁版嵁
+ * @returns
+ */
+function calCenterPointAndZoom(gridData) {
+  let centerLng = 0;
+  let centerLat = 0;
+  let maxLng = -180;
+  let minLng = 180;
+  let maxLat = -90;
+  let minLat = 90;
+  let zoom = 10;
+  gridData.forEach((g) => {
+    centerLng += g.centerLng;
+    centerLat += g.centerLat;
+    maxLng = Math.max(maxLng, g.centerLng);
+    minLng = Math.min(minLng, g.centerLng);
+    maxLat = Math.max(maxLat, g.centerLat);
+    minLat = Math.min(minLat, g.centerLat);
+  });
+  if (gridData.length > 0) {
+    centerLng /= gridData.length;
+    centerLat /= gridData.length;
+  }
+
+  return {
+    centerLng,
+    centerLat,
+    zoom
+  };
+}
+
+function generateGridMap(gridData) {
+  // 1. 鍒涘缓涓存椂DOM鍏冪礌
+  const div = document.createElement('div');
+  div.style.width = '800px';
+  div.style.height = '400px';
+  document.body.appendChild(div);
+  // 娉ㄥ唽涓婃捣甯傚湴鍥炬暟鎹�
+  // console.log(shanghaiMap);
+
+  // shanghaiMap(echarts);
+  const chart = echarts.init(div);
+
+  chart.on('amaproam', function (e) {
+    console.log(e);
+  });
+
+  // // get AMap extension component
+  // var amapComponent = chart.getModel().getComponent('amap');
+  // // get the instance of AMap
+  // var amap = amapComponent.getAMap();
+  // // add some controls provided by AMap.
+  // amap.addControl(new AMap.Scale());
+  // amap.addControl(new AMap.ToolBar());
+  // // add SatelliteLayer and RoadNetLayer to map
+  // // var satelliteLayer = new AMap.TileLayer.Satellite();
+  // // var roadNetLayer = new AMap.TileLayer.RoadNet();
+  // // amap.add([satelliteLayer, roadNetLayer]);
+  // // Add a marker to map
+  // amap.add(
+  //   new AMap.Marker({
+  //     position: [110, 35]
+  //   })
+  // );
+
+  // 1. 鍑嗗缃戞牸鏁版嵁锛堣浆鎹负ECharts澶氳竟褰㈡牸寮忥級
+  const gridPolygons = gridData.map((grid, index) => ({
+    name: `grid_${index}`,
+    value: [grid.centerLng, grid.centerLat, grid.value], // 涓績鐐圭粡绾害鍜屾暟鍊�
+    coords: grid.coordinates // 缃戞牸鍥涜缁忕含搴﹀潗鏍囨暟缁� [[lng1,lat1], [lng2,lat2], ...]
+  }));
+  const { centerLng, centerLat, zoom } = calCenterPointAndZoom(gridData);
+
+  // 2. 閰嶇疆椤�
+  const option = {
+    title: {
+      text: 'Travel Routes'
+    },
+    // amap component option
+    amap: {
+      // enable 3D mode
+      viewMode: '3D',
+      // initial options of AMap
+      // See https://lbs.amap.com/api/javascript-api/reference/map#MapOption for details
+      // initial map center [lng, lat]
+      center: [centerLng, centerLat],
+      // initial map zoom
+      zoom: zoom,
+      // whether the map and echarts automatically handles browser window resize to update itself.
+      resizeEnable: true,
+      // customized map style, see https://lbs.amap.com/dev/mapstyle/index for details
+      mapStyle: 'amap://styles/dark',
+      // whether echarts layer should be rendered when the map is moving. Default is true.
+      // if false, it will only be re-rendered after the map `moveend`.
+      // It's better to set this option to false if data is large.
+      renderOnMoving: false,
+      // the zIndex of echarts layer for AMap, default value is 2000.
+      // deprecated since v1.9.0, use `echartsLayerInteractive` instead.
+      // echartsLayerZIndex: 2019,
+      // whether echarts layer is interactive. Default value is true
+      // supported since v1.9.0
+      echartsLayerInteractive: true,
+      // whether to enable large mode. Default value is false
+      // supported since v1.9.0
+      largeMode: false,
+      // whether to return map camera state in `amaproam` event.
+      // supported since v1.10.0
+      returnMapCameraState: true
+      // Note: Please DO NOT use the initial option `layers` to add Satellite/RoadNet/Other layers now.
+      // There are some bugs about it, we can use `amap.add` instead.
+      // Refer to the codes at the bottom.
+
+      // More initial options...
+    },
+    series: [
+      {
+        type: 'custom',
+        coordinateSystem: 'geo',
+        renderItem: (params, api) => {
+          // 灏嗙粡绾害杞崲涓哄睆骞曞潗鏍�
+          const grid = gridPolygons[params.dataIndex];
+          // const v = api.value(0);
+          // const points = grid.coords.map((coord) => api.coord(coord));
+          const points = grid.coords;
+          return {
+            type: 'polygon',
+            transition: ['shape'],
+            shape: { points },
+            style: api.style({
+              fill: grid.value[2],
+              stroke: grid.value[2],
+              lineWidth: 2
+            })
+          };
+        },
+        data: gridPolygons,
+        label: { show: false }
+      }
+    ]
+  };
+
+  chart.setOption(option);
+  // 3. 瀵煎嚭涓哄浘鐗囷紙杩斿洖base64锛�
+  return new Promise((resolve, reject) => {
+    setTimeout(() => {
+      const url = chart.getDataURL({
+        type: 'png',
+        pixelRatio: 1,
+        backgroundColor: '#fff'
+      });
+      resolve(url);
+    }, 3000);
+  });
+}
+
+export default { generateGridMap };
diff --git a/src/utils/chart/chart-map.js b/src/utils/chart/chart-map.js
new file mode 100644
index 0000000..cb40c75
--- /dev/null
+++ b/src/utils/chart/chart-map.js
@@ -0,0 +1,123 @@
+import * as echarts from 'echarts';
+// import * as shanghaiMap from 'echarts-china-cities-js/echarts-china-cities-js/shanghai.js'; // 淇鍦板浘鏁版嵁鏂囦欢璺緞
+// import 'echarts-china-cities-js/echarts-china-cities-js/shanghai.js'; // 淇鍦板浘鏁版嵁鏂囦欢璺緞
+import { shanghai, jingan } from '@/utils/chart/shanghai.js'; // 纭繚璺緞姝g‘
+
+/**
+ * 璁$畻鍦板浘涓績鐐瑰拰缂╂斁姣斾緥
+ * @param {*} gridData 缃戞牸鏁版嵁
+ * @returns
+ */
+function calCenterPointAndZoom(gridData) {
+  let centerLng = 0;
+  let centerLat = 0;
+  let maxLng = -180;
+  let minLng = 180;
+  let maxLat = -90;
+  let minLat = 90;
+  let zoom = 100;
+  gridData.forEach((g) => {
+    centerLng += g.centerLng;
+    centerLat += g.centerLat;
+    maxLng = Math.max(maxLng, g.centerLng);
+    minLng = Math.min(minLng, g.centerLng);
+    maxLat = Math.max(maxLat, g.centerLat);
+    minLat = Math.min(minLat, g.centerLat);
+  });
+  if (gridData.length > 0) {
+    centerLng /= gridData.length;
+    centerLat /= gridData.length;
+  }
+
+  console.log((maxLng - centerLng) / zoom);
+
+  return {
+    centerLng,
+    centerLat,
+    zoom
+  };
+}
+
+function generateGridMap(gridData) {
+  // 1. 鍒涘缓涓存椂DOM鍏冪礌
+  const div = document.createElement('div');
+  div.style.width = '800px';
+  div.style.height = '400px';
+  document.body.appendChild(div);
+  // 娉ㄥ唽涓婃捣甯傚湴鍥炬暟鎹�
+  // console.log(shanghaiMap);
+
+  // shanghaiMap(echarts);
+  echarts.registerMap('shanghai', { geoJSON: shanghai });
+  const chart = echarts.init(div);
+
+  // 1. 鍑嗗缃戞牸鏁版嵁锛堣浆鎹负ECharts澶氳竟褰㈡牸寮忥級
+  const gridPolygons = gridData.map((grid, index) => ({
+    name: `grid_${index}`,
+    value: [grid.centerLng, grid.centerLat, grid.value], // 涓績鐐圭粡绾害鍜屾暟鍊�
+    coords: grid.coordinates // 缃戞牸鍥涜缁忕含搴﹀潗鏍囨暟缁� [[lng1,lat1], [lng2,lat2], ...]
+  }));
+  const { centerLng, centerLat, zoom } = calCenterPointAndZoom(gridData);
+
+  // 2. 閰嶇疆椤�
+  const option = {
+    // title: {
+    //   text: 'Travel Routes'
+    // },
+    geo: {
+      map: 'shanghai', // 鍩虹鍦板浘
+      center: [centerLng, centerLat],
+      roam: true, // 绂佹缂╂斁骞崇Щ
+      zoom: zoom, // 鍦板浘缂╂斁姣斾緥
+      label: { show: true }, // 鏄剧ず鍦板悕鏍囩
+      itemStyle: { areaColor: '#ddddddff', borderColor: '#999' }
+    },
+    // series: [
+    //   {
+    //     type: 'scatter',
+    //     coordinateSystem: 'geo',
+    //     data: [
+    //       {
+    //         name: '榛勬郸鍖�',
+    //         value: [121.490317, 31.222771, 100] // 涓績鐐瑰潗鏍�+鏁板��
+    //       }
+    //     ]
+    //   }
+    // ]
+    series: [
+      {
+        type: 'custom',
+        coordinateSystem: 'geo',
+        renderItem: (params, api) => {
+          // 灏嗙粡绾害杞崲涓哄睆骞曞潗鏍�
+          const grid = gridPolygons[params.dataIndex];
+          // const v = api.value(0);
+          const points = grid.coords.map((coord) => api.coord(coord));
+          // const points = grid.coords;
+          return {
+            type: 'polygon',
+            transition: ['shape'],
+            shape: { points },
+            style: api.style({
+              fill: grid.value[2],
+              stroke: 'white',
+              lineWidth: 1
+            })
+          };
+        },
+        data: gridPolygons,
+        label: { show: false }
+      }
+    ]
+  };
+
+  chart.setOption(option);
+  // 3. 瀵煎嚭涓哄浘鐗囷紙杩斿洖base64锛�
+  return chart.getDataURL({
+    type: 'png',
+    pixelRatio: 1,
+    backgroundColor: '#ddddddff'
+  });
+}
+
+export default { generateGridMap };
diff --git a/src/utils/chart/shanghai.js b/src/utils/chart/shanghai.js
new file mode 100644
index 0000000..1b5f6e8
--- /dev/null
+++ b/src/utils/chart/shanghai.js
@@ -0,0 +1,587 @@
+const shanghai = {
+  type: 'FeatureCollection',
+  features: [
+    {
+      id: '310101',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@AHV@BDCPEPLENFHCJHFBNCAGBGXWFIBGCGMUKKCCcGCDGBALCPIAAPGR'
+        ],
+        encodeOffsets: [[124373, 31970]]
+      },
+      properties: {
+        cp: [121.490317, 31.222771],
+        name: '榛勬郸鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310104',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@CEAMMAA@C@AFA@@BC@ABC@@BD@@BH@@BB@EHDDCBECADGEEAEBFNET]CMRELQjOEGRFBAHDBAHH@@B@BDA`H@F@BC@AB@FD@DD@@@CH@DDAFDD^LEPF@DFTDPHHQBOJBDOBKHADCOGCEAE@EFOBMAEUW@GBEHILMBE@KGM'
+        ],
+        encodeOffsets: [[124381, 31859]]
+      },
+      properties: {
+        cp: [121.43752, 31.179973],
+        name: '寰愭眹鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310105',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@AACE@FO]KCCBECCG@@D@@CCmBSAcKG@EBAEGC@DC@QE@CA@@BEBMTNFAFDBA`D@BDA@AA@FFBBLD@@@IBDBABDB@@DBADB@CHA@@DC@C@@@BBABFDH@AHD@ACDA@FD@BCA@@CJCNWJ@BCHAFEF@XCV@DFH@VFBBCFD@HEFFFBB@@IDAJFBABIFK'
+        ],
+        encodeOffsets: [[124354, 31964]]
+      },
+      properties: {
+        cp: [121.4222, 31.218123],
+        name: '闀垮畞鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310106',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@AB@PCJBNG@ABBDBB@DNBAJJ@@FB@@H@@@DF@ENB@BDD@BAT@BENDFDPB@AF@A]G@BOCKCEBA@G@KBEDCLMVQ@EACDECABCDKECGDMEKFFODOACU@BGOGUCELAJABIECBBNFHJBTLHB@BADDD@FB@@DC@BHOVUJCFIG'
+        ],
+        encodeOffsets: [[124340, 32022]]
+      },
+      properties: {
+        cp: [121.448224, 31.229003],
+        name: '闈欏畨鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310107',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@DB@DHBBCDBB@A@DF@@DFDDHGBDDALZCB@@EBA@ACQ@@DGBEFBB@FD@J@BFMBCCCDID@AODAEIDBDEBABBB@DC@AF@@AFGACBADBB@@NFADD@@BB@B@BAB@@@BBDA@HBB@AJ@@AD@@BB@AFHBDCJFHBGQAAJA@ALCBBF@@AB@@BD@@@JABDABD@@BHBBBNACEJA@ADAAA@B@ADAAAJBIQB@FCBBD@AGJ@@EJA@EHADDAB@BFANNDEVIPUAGD@@CA@@ECCBC@AGASKIAEGACA@EAEEA@EFC@DEAAUEG@CEU@WDE@EFGBADI@MV'
+        ],
+        encodeOffsets: [[124267, 31987]]
+      },
+      properties: {
+        cp: [121.392499, 31.241701],
+        name: '鏅檧鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310109',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@OHWVFBABIKK@MJCJGBKV[C@@I[AOEODCACCCLADDBCFBD@FURQT@J@F@HABDFDLAPH@BTVCLBBE'
+        ],
+        encodeOffsets: [[124402, 32064]]
+      },
+      properties: {
+        cp: [121.491832, 31.26097],
+        name: '铏瑰彛鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310110',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@JD@U\\ALIHID@NLLAJABUEGX@PVA@ZDDADGFX`ZKDHFAFHpSNGDCDGDM@cBGL[BKAGEGMOcY[GWA'
+        ],
+        encodeOffsets: [[124433, 31997]]
+      },
+      properties: {
+        cp: [121.522797, 31.270755],
+        name: '鏉ㄦ郸鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310112',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@EBAD@@A@E_GCB@A@AG@BGCABGEAHQPFRiFKNQ^DFSEMFAFBHFBCFDDACCFGA@@AG@@AC@@AD@BAD@@AB@BED@B@F@B@FBBNDFLCDBCBFB@DFG@CBBABDB@CDBAFCB@DABD@B@DB@BD@@B@BB@B@@FJ@DKLFB@DMDBBABBCFDB@@HB@BBABBDCBGNBDAB@@BPDBAF@@AB@@AB@@CDB@BF@DGB@@CD@FDADF@BADDDCBBDCAAC@BCFEAAB@FECABC@ADBBEB@@EGCABAB@@CAA@CAIABAAA@@ECDGD@BCBBD@BBHBFALABAFBD@@CGA@BC@BCEAA@A@@AEA@@AAA@G@DCG@CCBAAA@ADBDAEAC@ACE@BCC@BG@ACBBAEAAA@B@CECDEAEBAB@BDB@DBD@BBD@FDBGBBFCAABCBDBCEC@UBACA@AAA@ABB@CCCE@AA@ADCD@@BF@@FB@@BDB@CDB@ED@DFB@ABB@HDAADCBE@CCACC@CACIABA@@@BD@@AD@DICABCECFA@AMEO@@CC@ABA@@ABA@GCACBADCDA@@BAAAB@BICADE@@BEAABC@GHC@E@@FD@@BA@CFC@@BC@AASEKG@ACAIZBFGDYCIAKGKAU@OCGAKIMIMCOEeC聭WOBQHI@C@CBB\\HBPTBHJHABECM@ADBB@J@F@D@B@FBDAD@NBBBN@T@DBBADFCFDDGTDJFAFNB@DB@EFFBADD@@DFDDCDBADERCDAB@DELGAADMCEPHB@AB@@BHF@@GNQV@DEJCDC@ADD@@BCFABADA@@FCB@DCD@DABA@EJEF@BEJCLGJABCHAB@BABCFCB@BED@BA@@BABADGFAAA@@CAAKGCAKAUTC@CDDBADIHDFCF@@CDBDCHDBAHGDBDCDABCAABAFKACBDDABBF@@@BHBBDDBC@BDFFFBBDD@@AH@HB@EFC@ABC@FFCFBB@LCFBBAEGFEDABGJMJCL@XGNFH@PDBB@FHDBAAA@@D@D@@CB@DGA@BCCA@@CABACAJA@@C@AKEA@EBBB@ACC@B_CABEMENSFA@AB@@DRFD@@CHDBFFAH@dLTBjA'
+        ],
+        encodeOffsets: [[124327, 31940]]
+      },
+      properties: {
+        cp: [121.375972, 31.111658],
+        name: '闂佃鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310113',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@JE@@BOAECMCAFS@ABC@ACA@FME@@C@@@GA@@EI@BIMA@CCA@CBAH@AMDI@OBACEEB@ABACCGB@FIB@FI@BHC@AAEDA@JRIABBCB@B@ABBCB@BIBDFMBAAGA@AC@BAACIB@@C@@AA@@BE@AAKD@BIBBBHRC@ICCCCDGABEA@@AC@@BI@@BAA@GCBAAA@ABBBCDAAEJFDB@P\\J@@FB@@DGA@FD@@DAAADCF@@ABBBCDDB@DF@CLCAEFEB@DG@@HD@DB@BB@@FHD@BADA@CFCFABDB@BED@BCDEFFBABB@ADG@GNCBFHAFA@@DCAIB@DB@@FBBEF^JBAH@AFD@A@@DA@@BFDABD@@JB@@BA@AD@DB@@FCJ@FA@C@ABAAABENDB@BCDCFG@ADDBEDDDABA@ADB@ADF@BD@BEACD@BCBJF@BABA@BBCFE@ABCLABBBAFEB@A@BCDEBADD@CBBBBAADBBD@B@BBADFADDDA@ED@ACB@FF@DFBBCB@@AC@@GF@B@AFD@@DB@@AD@@BD@\\PfK^I|]BAEGBE\\Q`W|i\\UdSXUBD@DFAEG\\UQQQY@QJONIVIEGEBCGYLW_HEBCCC@YUBAFKAUD'
+        ],
+        encodeOffsets: [[124384, 32068]]
+      },
+      properties: {
+        cp: [121.489934, 31.398896],
+        name: '瀹濆北鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310114',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@A@A@@AC@BCME@@AABCDAHBBE@@BED@@CAABAFAACJCBFPC@BJCDCDDNAAEI@C@@EAAFEHA@CR@BDB@FA@@DAKYCBACGHCCCE@@CEB@A@CAADGA@CCAADGB@DB@ADC@@ECBBDC@BGG@CCIC@EAAOCG@OEUHK@IDINAHCBEFFHABEAKDA@EAED@EAD@BED@FGAG@@BC@@AC@@DA@@CCBEA@DGAKFOB@CG@@BAA@CGCBAEA@CA@@DEA@FCFB@ABAAABAC@AAACFGEBCABCCABCCABCAB@@CC@ADGDEEC@EDCA@BA@BDA@ACEFECABC@@BB@BDC@AJIJCAADC@CGEB@@AB@BDF@JDD@DHBABD@B@@BCHE@@BC@@DCA@DC@@DDBADA@EDFBIPCFIIBCMAE@AJ@B@FAB@DAJDB@DDB@FD@@BCBBBB@@DABAB@DCBBBAHBB@FMCKB@HF@EHIACBE@BFCBBLAH@DD@@CD@D@BFNBCDGBAFTHBEBB@DB@@AJD@ANFABBBD@ABD@@ANDBDCD@BABA@ABLDCFDBF@ABC@ABDB@BFDADJDDCCDBDCDAAABBB@BC@ABA@ABC@@HA@C@@DJ@@DFB@BD@HB@AD@ABBDFA@HA@@CA@BDABOBMFAFB@ADBDAB\\LDAHBBADBHAPFJFAFBFFD@BJHRD@FHFNHDACCLADBH@DDFABHCB@BHJF@AJ@@FAFDB@AEFE@CBIHB@AC@@AA@DEHD@BD@ADB@BDB@AKD@@DBA@@@AD@DBBDBBDBD@@FDDBA@CDAHDBBHDADB@FA@BD@DCD@BFFCJD@DA@FBBDFADC@A@BFABEAABADKBAF@DEAAB@BA@AIEDA@ADCFB@AACE@BCA@BCB@BACCFCCABCH@DEDC@ACAFMBABBBAD@B@@EDI@EA@@CBCB@@AA@@IC@BAEC@AB@@CB@C@BEG@AB]IFEAA@EA@@CJADB@CB@BEEGDAHMH@BCA@BAEAFEDC@AFC@ACABALQGC@ECCE@@GH@@CFAFEDBDKE@@CCADCAABA@@DEBCBB@CC@@EHB@CA@@EI@GMEMICFIBBBABAAA'
+        ],
+        encodeOffsets: [[124249, 32046]]
+      },
+      properties: {
+        cp: [121.250333, 31.383524],
+        name: '鍢夊畾鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310115',
+      type: 'Feature',
+      geometry: {
+        type: 'MultiPolygon',
+        coordinates: [
+          [
+            '@@bM虏WLC募脩NI^_脠茂聵聯聙sJQ露卤`e`Z隆L聝D聡CsEWOWs@GBI\\wsYg|QNUB模Fq聞AZHZB@@JHBAJFRA@BB@HABB@@J@HBDBLAJC@@BD@ABA@B@AD@FB@@BA@@BA@G@@FC@AB@DA@ABCAC@@DEA@DD@BDEF@FQJE@CAGJA@ABCAEDBDGHADWR_TYJI@G@SD@AA@@AA@IDGB@A@BQBmAA@CBOAGFELC@AAaDACS@C@@AIAABKA@BEBFDADDBCJC@@BC@@A@@ABJBBD@DDDDB@DAFCDBBGCA@BAA@CEC@@FCA@DCA@AA@@EE@@AC@CD@BBBF@DD@DAA@BBB@BDBAB@VFDADACADBBEDAAAHECC@AAC@CAA@ACA@ABBFCFFD@D@ABBFBABDA@BAHD@ADF@BDD@FBCBCA@BBBABDDH@CDH@B@BB@@FB@BB@B@FBADD@@AHB@DC@EAABKBEBGAAAC@AAADC@CHFD@@BBABJBDBB@DB@@BABAHD@FA@AFCA@BADDBEFA@BBEFADD@BBCDAACDCCABE@BCECC@@DA@CHE@@ACA@DA@@BA@@BE@ABOC@AA@CBMAAHCDAAAB@AGA@@CADEAAABCACNA@KECLC@E@@EA@A@@A@AC@@AAAA@A@C@BA@CDABEAAADCABAAA@DEH@CEADACAKDHN@LAFKNGJAF@D@DBFNLHLANEP@FBFJJJDdHDDLLNVDHAHEJWXAF@FJFHDtDXHhZNPFHBHALK\\AH@dCNCHCDMHoTUJMJIP@RRZRR'
+          ],
+          ['@@PDNAvOFGBKCeEQGEI@IBMNY\\GJELATBJ'],
+          ['@@HRHJNBX@XCRGfEFGBM@eYuGIgCIAK@KDMPIREVCXARBP']
+        ],
+        encodeOffsets: [[[124438, 32149]], [[124808, 31991]], [[124870, 31965]]]
+      },
+      properties: {
+        cp: [121.567706, 31.245944],
+        name: '娴︿笢鏂板尯',
+        childNum: 3
+      }
+    },
+    {
+      id: '310116',
+      type: 'Feature',
+      geometry: {
+        type: 'MultiPolygon',
+        coordinates: [
+          ['@@DBBAGCBD'],
+          ['@@HADA@AGCKHBBF@'],
+          ['@@FACAAD'],
+          [
+            '@@DB@EB@@CB@@GEQ@IEKAM@ATE@EHADF@GDCFFPD^BBED@@BD@@DPBB@@CDB@BLC@ADB@BF@@CF@@DB@BDCDA@@DCACBC@AB@HDBRTHGBCHBDB@AF@B@NACQ@@@AC@@CC@CIEE@CFCFHDBHABDN@BED@BDNA@HAF@FCBADDLD@DAAC@AB@@ANC@ANC@TDBL@DGJC^BDBDBJ@^F\\VHGPB@CD@BAF@DKDBBCA@BAC@FK@E@BD@@BNABCF@@AFB@AD@BADB@GA@@AF@BCFBDKB@@BDBB@BEDBBDF@@CFB@HD@@F@@@HA@BBA@BDC@BJADBBLB@AA@@ED@DIHA@BB@BDDBBCBA@@@BF@@CB@ABFBBCFB@BD@FCF@DBBAD@BAD@BABBBAHDJ@ABDDABDBHCBDJIBOFE@IDKJAFCBAJELAAEBCBKAA@GD@AIBEAIDOK@@EDEAABA@A@BB@@@B@B@AAD@@ADA@EJ@@CB@H@BLDBFA@@B@@GEB@EB@@CB@DETAAADA@GH@BHLAPA@ABBD@JU@ABBFCB@聜拢芦ugW聸聫OCOCgB聡DaAE`@HCBBFCBAJA@AFDFAFFD@FDFCFBBA@BBAFBDA@CDAAA@STCBWLAAABBBCBAACB@AABBBIFAPCHCFBBCB@HA@CAABGPIBO@ICCEDMGAILADACCBCA@CECEAKCADCBADAAKAEC@HEBCAEDQBACEAAB@BGCYDEJCB@BBFN@B@@JDbHRJL@D@FA@@CCB@DABBDEFACSDA@AAA@DDBLFHAB@BABCAIDADABCEKCABC@CDABBBC@@B@BA@BBcO[@MGDCC@DK_KFMGBCFGADEA@AGCA@@DAD@AFB@BCB@DGOCCLKR]JADEAMMABBCA@CB@BABCAACB@CEAB@CAAGBDFGFHFGBBDFHF@BDB@ABBFDADFF@DHD@DFFADDGDDDADDABDA@DDCDFFBDEBFFDCDBCBDDEBBDB@@@CDCDI@GB@BBFAB]DAHCDDH@DDBHB@DHABDB@@FG@CABJBl@FEFCFBB@LB@J@@GPDA@DD@AD@D@@CCA@BCA@CB@A@@AF@BGFAADDB@ARF'
+          ]
+        ],
+        encodeOffsets: [
+          [[124321, 31442]],
+          [[124337, 31429]],
+          [[124341, 31419]],
+          [[123933, 31687]]
+        ]
+      },
+      properties: {
+        cp: [121.330736, 30.724697],
+        name: '閲戝北鍖�',
+        childNum: 4
+      }
+    },
+    {
+      id: '310117',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@DLB@BFTHAFB@DABHFELFBBAH@DIHB@GB@@CB@BEDAB@LAPB@DFBADD@@BBBN@@DRB@BADALHABlH@@\\ABAFQPOLDBDBDCJBBJFA@FCJC@@DCAABDDBDKHB@CDBDEBCEINHDABFB@DDDD@F@@ABCAA@EB@@CH@B@BCBABD@DLBBCB@R@ADD@BAJ@BBBB@BA@@NG@AFELC@AB@@CBA@KJAAA@CAC@CLD@ABBBGJDBBDCFBBDCFDADBBDCABB@@BA@HHDBABFFDCBBDCB@BABB@AFEBBBED@FEDDBED@BALB@CD@DEHBBGDBBCB@BFB@@LC@@FJA@AJB@@B@@FB@@HH@@BJ@CJDDADDBB@B@BCJD@DB@AB@FC@@FC@@D@FDA@X\\ILF@CAA@ABBJ@DEXFPBI_CM@CF@NFF@BBB@BAADBLFBJABHKB@@L@BHXCAGBAF@@BB@@BCFBDDBD@BB^ENNEFEAEHCC@DBB@BB@AH@BFCD@B@ABDB@@FAF@ABXFnNHKB@BA@CDC@CDA@EB@BCBADE@AC@BCD@DCFI@CRUHM@@GE@AA@@BGAFONDBCHBFK@CBAHODICACDEC@CC@BCEAFEA@@CMABEIESCCHECEDBCAA@WAMAA@MBCAC@E@A@C@E@IAABCN@FDBAIGAGOSGAA[DAD@J@XIJ@PDDI@ODK@UD@BCAAGADSG@CAA@AABAAAA@@BECBC@IFCBC@CIG@A@AGDCABACCBAA@@@G@GCCB@AABC@ABC@ABCAE@EDC@@AEAADEABAA@@DE@@A@@ABADCAACA@@AGBCJC@@FB@@BMCBCAID@ACB@AAB@@G@@@EC@@GEA@DE@ACCAAFA@CA@AA@CLEAADE@@BB@@HCAABC@@BEA@BE@ADMB@AC@@A@FELD@ABB@ADCACLE@ABC@@DOAGH[U]EI@CACA]AIDCHK@CA@SMD@BMD@BA@@BBDCBC@CKBCDA@EBE@GMBACC@AFM@ACGBCAEGED@DFFDJD@@DD@@B@@DRMBA@E@@BCAGAADGHQSCA@GBAD@DADB@CB@DCACA@@CE@@DE@@ACA@BKD@ACA@DA@OA@CC@@AC@AF]AOCEECD@HCEGB@FSF@BBNFL@JFR@HA@@DA@@FCA'
+        ],
+        encodeOffsets: [[123933, 31687]]
+      },
+      properties: {
+        cp: [121.223543, 31.03047],
+        name: '鏉炬睙鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310118',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@@GCIBA@@FADHD@BCDBJIBID@ACA@@AD@BAFDFEBDB@ACB@@ADBFCD@FFHCBCD@@DA@DBBADDBADDBAADHFDEBB@BBDBABBBAA@DE@EFB@CB@@DFBABHD@DBB@AH@@DPALEHB@CFBDA@DB@@CD@AAEAEEACD@CAACGA@A@@AEBACCDALBBEBADBBADCACHCBGCADGACDC@@DECEJGBCCADCD@VSLBDBLHBB@DB@BBFCDEBA@AB@@AFC@ADADEBA@ABADGBAHIDKJOmMWEBAE@EB@@CABAA@C@ED@ABGA@@AAA@CDDFGFBFEMM]FAAC@CAACDE@AA@@AE@ABBHWDAGK@@@LAAGIBEAAKBCABA@AAE@MEE@@DDNJ`OAWECFI@AA@BBB@DKE[J@WCB@E@CD@@ED@@EBAA@@CICADA@A@CABCCCDII@@AG@@GA@@EA@@@IA@BIB@ED@@KA@AEA@ADCAAHGACFC@@DKAABC@AFCCEFC@AFAAEF@BAAABA@CDAACDEEBACAGGB@@AA@BACDAABCECCDAADGAACAHIAABAC@@EDEB@HBBBLIB@DA@@BAD@FKBEH@@MB@@AAAAAI@ABC@BCQ@A@ADKA@CACABADA@G@@DA@@FBBAD@BE@C@CC@CEABAGCJMDFFAACDCA@LGACCCBADB@CD@DI@EEBAIIACDCACAPKROBEBA@[G@AkGBBKBC@AQA@CM@AA@AC@BCEA@COAKBA@CBAFA@@DA@@HGACJG@ABEAFKGEBA@CEAGBEUKA@CQE@BCABCEBAHE@@BB@A@@DDB@ADB@DC@C@@BCCB@OC@HM@AHC@AHF@CHBF@BC@@DB@ADBB@BNB@BB@@FDB@DC@A@CRA@CFBBAFGAADDB@HA@@DB@@D@@ADBBEJDBM@ADg@ABFFABGBCNGBC@CACBAADAAEFACK[AAAJK@AC@GBEDG@ACOFOEAD@JQ@@FBdCDEL@FCD@H@JHXBPHABDEJ@BEDCACHCFAHA@@EG@QB@BBDE@@DE@AAE@@CG@ABADA@ABCAABCDBLD@DHNJDD@HDHHHJFdDPCTD\\JnE聙MPDvBJHADHBBD@BD@@EHBFCBEDB@AD@HREB@FHD@DHBBGD@H@ABDBL@@AB@@AD@@CFA@BAFFD@BBB@CB@@FHDADB@@DEAADJB@DCHEAABBB@BFBAFEFADJDABIAADFB@DAB@B@BDBABCB@BE@@DD@Kz@DD@@HD@@DC@ADA@A@AFFB@HBA@BAB@FC@@AIBDBDABD@NA@BBBBABBRA@@@dFFDDHEBBHDNFFABDBDADCB@@AB@BCFO@ABCHCD@BBC@@@FDPRF@FA@DB@@AHAACFCHA@DFAACD@BBDAAABAD@BBD@@CDALBFB'
+        ],
+        encodeOffsets: [[124062, 32028]]
+      },
+      properties: {
+        cp: [121.113021, 31.151209],
+        name: '闈掓郸鍖�',
+        childNum: 1
+      }
+    },
+    {
+      id: '310120',
+      type: 'Feature',
+      geometry: {
+        type: 'Polygon',
+        coordinates: [
+          '@@LBBAJB@BD@T@BDbCBBD@FKHEPBDAB@nBRA@A@BHAJCB@@BB@@BTCH@J@ZI`SXQBCHGACFCDBBAB@HIDBF@NGDA@EFEACC@@CFB@CD@DBBAB@@CBAD@@EH@B@@AB@@AA@@EBCA@B@BAC@@AD@BIAKAC@G@IA@BA@GAAB@EQBIGA@IA@GYBYr聝磨D聝E聼U隆_聣[聧g聛陇A@EDAA@BIVC@AA@BOBKBAGG@@HCBBBSBCFA@@DA@@FFA@HA@@@EBCAAKG@A@@DI@@FCB@BC@BBA@A@@@A@@A@BABBBCF@FL@CPBJAFBJC@@HBBALADBFKBIFABEDIBCL@JEFAPKJHFBFADED@JADFD@AB@BBABBBB@DBH@CTHBBBADC@@VCL@PCJ聜TfD^JNJLJHBPDV@LBLHJBZDHCAEJYDB@BLHTFBBD@@AD@DEB@@AC@@EF@D@HGD@BAFB@AF@BCJD@ABABB@AB@DCBCDADB@HAB@BB@BAD@@DP@NF'
+        ],
+        encodeOffsets: [[124489, 31743]]
+      },
+      properties: {
+        cp: [121.458472, 30.912345],
+        name: '濂夎搐鍖�',
+        childNum: 1
+      }
+    },
+    {
+      type: 'Feature',
+      properties: { name: '宕囨槑鍖�' },
+      geometry: {
+        id: '310151',
+        type: 'MultiPolygon',
+        coordinates: [
+          ['@@脝聹p@dG露聝聬Y聙I脨聫tu脝u卢聫RW聢Wck臏yPV膯g冒脮TUm聟U楼c}S聯H楼|梅聦聺^oG臐卢氓聤碌x聝b聶聻cAXor聭職]d職聙'],
+          ['@@聰M職URm@kYiD[YRwRmdS^ChQv'],
+          ['@@卢Q聵SzoMU忙gLShQ聰e^sFwS_aL聯聮茂聻{d\\ungZeNGZ']
+        ],
+        encodeOffsets: [[[124119, 32586]], [[124716, 32134]], [[124427, 32249]]]
+      }
+    }
+  ],
+  UTF8Encoding: !0
+};
+
+const jingan = {
+  type: 'FeatureCollection',
+  features: [
+    {
+      type: 'Feature',
+      properties: {
+        adcode: 310106,
+        name: '闈欏畨鍖�',
+        center: [121.448224, 31.229003],
+        centroid: [121.450659, 31.270821],
+        childrenNum: 0,
+        level: 'district',
+        acroutes: [100000, 310000],
+        parent: { adcode: 310000 }
+      },
+      geometry: {
+        type: 'MultiPolygon',
+        coordinates: [
+          [
+            [
+              [121.457686, 31.220193],
+              [121.457341, 31.221073],
+              [121.456896, 31.221918],
+              [121.456836, 31.222496],
+              [121.45683, 31.223524],
+              [121.456756, 31.223898],
+              [121.463101, 31.223965],
+              [121.464071, 31.22396],
+              [121.465837, 31.223818],
+              [121.467041, 31.223818],
+              [121.46746, 31.223866],
+              [121.467634, 31.224483],
+              [121.467658, 31.225632],
+              [121.467914, 31.225714],
+              [121.46762, 31.226205],
+              [121.467326, 31.226987],
+              [121.467171, 31.228149],
+              [121.466971, 31.230888],
+              [121.466521, 31.233394],
+              [121.466323, 31.234315],
+              [121.466123, 31.234911],
+              [121.465596, 31.235913],
+              [121.464792, 31.237236],
+              [121.46428, 31.238272],
+              [121.462973, 31.2414],
+              [121.463977, 31.241383],
+              [121.464964, 31.241177],
+              [121.466288, 31.240751],
+              [121.466713, 31.240541],
+              [121.468365, 31.239476],
+              [121.46956, 31.239214],
+              [121.470546, 31.239326],
+              [121.471621, 31.239771],
+              [121.472217, 31.240104],
+              [121.473497, 31.240947],
+              [121.474129, 31.241227],
+              [121.474847, 31.241421],
+              [121.475601, 31.241491],
+              [121.476666, 31.241425],
+              [121.477235, 31.241178],
+              [121.478915, 31.240294],
+              [121.479632, 31.240108],
+              [121.480324, 31.240106],
+              [121.481051, 31.240316],
+              [121.481494, 31.240543],
+              [121.482989, 31.24192],
+              [121.48241, 31.243204],
+              [121.482349, 31.243485],
+              [121.482133, 31.245363],
+              [121.48177, 31.246579],
+              [121.481234, 31.247955],
+              [121.480922, 31.248386],
+              [121.479589, 31.249809],
+              [121.479809, 31.249983],
+              [121.481668, 31.250694],
+              [121.481137, 31.251637],
+              [121.480238, 31.252688],
+              [121.480142, 31.252672],
+              [121.479626, 31.253389],
+              [121.480299, 31.254318],
+              [121.480586, 31.255244],
+              [121.480606, 31.255687],
+              [121.480494, 31.258569],
+              [121.479924, 31.258773],
+              [121.479596, 31.259014],
+              [121.47806, 31.260385],
+              [121.476536, 31.261668],
+              [121.475907, 31.262157],
+              [121.475187, 31.262575],
+              [121.473565, 31.263954],
+              [121.471293, 31.266139],
+              [121.470196, 31.267128],
+              [121.469601, 31.267802],
+              [121.468328, 31.269536],
+              [121.467741, 31.270393],
+              [121.466818, 31.271619],
+              [121.464722, 31.274298],
+              [121.464298, 31.274684],
+              [121.463842, 31.274959],
+              [121.463094, 31.27521],
+              [121.46284, 31.275389],
+              [121.461868, 31.277313],
+              [121.461826, 31.2784],
+              [121.461477, 31.278881],
+              [121.461513, 31.279676],
+              [121.461773, 31.279726],
+              [121.461842, 31.28015],
+              [121.461791, 31.280839],
+              [121.461401, 31.2818],
+              [121.461341, 31.282394],
+              [121.461566, 31.283042],
+              [121.461807, 31.284695],
+              [121.461584, 31.285232],
+              [121.461471, 31.286237],
+              [121.46141, 31.287236],
+              [121.461073, 31.287937],
+              [121.460985, 31.288811],
+              [121.460449, 31.289318],
+              [121.460086, 31.28978],
+              [121.460165, 31.29011],
+              [121.460831, 31.290782],
+              [121.461385, 31.291657],
+              [121.461584, 31.292112],
+              [121.461852, 31.292391],
+              [121.462448, 31.292745],
+              [121.463238, 31.295091],
+              [121.463738, 31.295745],
+              [121.463956, 31.296366],
+              [121.464207, 31.296623],
+              [121.46425, 31.297359],
+              [121.464527, 31.297993],
+              [121.464328, 31.299093],
+              [121.464173, 31.299625],
+              [121.464224, 31.300182],
+              [121.464529, 31.300877],
+              [121.463837, 31.304554],
+              [121.463532, 31.306002],
+              [121.467679, 31.306304],
+              [121.468138, 31.313354],
+              [121.468277, 31.315201],
+              [121.46839, 31.31745],
+              [121.468139, 31.320323],
+              [121.465222, 31.320395],
+              [121.465377, 31.3214],
+              [121.457137, 31.320999],
+              [121.454704, 31.319248],
+              [121.453006, 31.318544],
+              [121.450502, 31.317729],
+              [121.447887, 31.317103],
+              [121.447298, 31.318571],
+              [121.446717, 31.319813],
+              [121.43677, 31.319667],
+              [121.43669, 31.319671],
+              [121.436459, 31.320871],
+              [121.433712, 31.320923],
+              [121.433599, 31.320868],
+              [121.433191, 31.318541],
+              [121.432471, 31.318666],
+              [121.434621, 31.312298],
+              [121.432939, 31.311956],
+              [121.432167, 31.311686],
+              [121.432497, 31.310515],
+              [121.432488, 31.310298],
+              [121.432011, 31.30996],
+              [121.431673, 31.309578],
+              [121.431925, 31.308556],
+              [121.43213, 31.307382],
+              [121.432434, 31.305914],
+              [121.431048, 31.305769],
+              [121.431294, 31.303635],
+              [121.428471, 31.303309],
+              [121.426428, 31.303203],
+              [121.426398, 31.303136],
+              [121.426566, 31.301729],
+              [121.426869, 31.299864],
+              [121.426937, 31.298531],
+              [121.426513, 31.298408],
+              [121.423642, 31.297254],
+              [121.420493, 31.296932],
+              [121.420033, 31.296912],
+              [121.420399, 31.29572],
+              [121.419766, 31.295616],
+              [121.419635, 31.295002],
+              [121.419141, 31.294837],
+              [121.419245, 31.294164],
+              [121.418872, 31.294026],
+              [121.418827, 31.293039],
+              [121.418645, 31.292889],
+              [121.418645, 31.292256],
+              [121.418915, 31.292288],
+              [121.418932, 31.291689],
+              [121.419618, 31.291678],
+              [121.419695, 31.291068],
+              [121.421249, 31.291377],
+              [121.422392, 31.291115],
+              [121.423801, 31.291057],
+              [121.423634, 31.289408],
+              [121.423514, 31.289124],
+              [121.423315, 31.288167],
+              [121.42327, 31.287252],
+              [121.422852, 31.284456],
+              [121.422977, 31.283988],
+              [121.423608, 31.282076],
+              [121.423971, 31.28115],
+              [121.424439, 31.280233],
+              [121.424544, 31.27986],
+              [121.424656, 31.278808],
+              [121.424544, 31.278365],
+              [121.424752, 31.277268],
+              [121.424326, 31.27603],
+              [121.424491, 31.274629],
+              [121.424568, 31.271929],
+              [121.424716, 31.271298],
+              [121.425252, 31.270666],
+              [121.429579, 31.274707],
+              [121.429838, 31.274926],
+              [121.431236, 31.273054],
+              [121.431635, 31.272599],
+              [121.432414, 31.27194],
+              [121.437095, 31.26944],
+              [121.438855, 31.268794],
+              [121.441255, 31.268019],
+              [121.44226, 31.267654],
+              [121.44272, 31.26738],
+              [121.442953, 31.26712],
+              [121.44595, 31.263248],
+              [121.449614, 31.258406],
+              [121.449796, 31.258205],
+              [121.450376, 31.257229],
+              [121.451043, 31.256263],
+              [121.450393, 31.255578],
+              [121.450056, 31.25513],
+              [121.44989, 31.25457],
+              [121.449883, 31.253838],
+              [121.449492, 31.253565],
+              [121.449319, 31.252923],
+              [121.451467, 31.251992],
+              [121.451285, 31.250735],
+              [121.450644, 31.250767],
+              [121.450696, 31.250599],
+              [121.45074, 31.249199],
+              [121.450619, 31.248408],
+              [121.45041, 31.247747],
+              [121.449422, 31.246393],
+              [121.448609, 31.245627],
+              [121.448314, 31.24522],
+              [121.448435, 31.244523],
+              [121.448755, 31.24419],
+              [121.449994, 31.243294],
+              [121.449283, 31.242527],
+              [121.449102, 31.242443],
+              [121.447232, 31.241971],
+              [121.445956, 31.241445],
+              [121.443854, 31.240191],
+              [121.443358, 31.23981],
+              [121.442583, 31.239454],
+              [121.441226, 31.238662],
+              [121.440291, 31.238051],
+              [121.439537, 31.237777],
+              [121.43798, 31.237016],
+              [121.43728, 31.236321],
+              [121.436038, 31.235579],
+              [121.435165, 31.235251],
+              [121.434589, 31.235149],
+              [121.433085, 31.234998],
+              [121.431336, 31.235141],
+              [121.431007, 31.235103],
+              [121.430505, 31.234336],
+              [121.428423, 31.231865],
+              [121.427912, 31.231149],
+              [121.427748, 31.230668],
+              [121.427515, 31.229284],
+              [121.42787, 31.225897],
+              [121.427877, 31.224958],
+              [121.427713, 31.224225],
+              [121.427912, 31.224093],
+              [121.429031, 31.22309],
+              [121.429769, 31.223936],
+              [121.430148, 31.22421],
+              [121.430636, 31.22438],
+              [121.431702, 31.22452],
+              [121.43221, 31.22466],
+              [121.433275, 31.225253],
+              [121.434302, 31.225891],
+              [121.43541, 31.225069],
+              [121.435435, 31.224379],
+              [121.435872, 31.222598],
+              [121.436119, 31.220855],
+              [121.436787, 31.219099],
+              [121.437315, 31.217976],
+              [121.43777, 31.217211],
+              [121.438651, 31.215329],
+              [121.439252, 31.214432],
+              [121.443164, 31.21522],
+              [121.444506, 31.215506],
+              [121.446559, 31.215743],
+              [121.447999, 31.216023],
+              [121.449545, 31.216475],
+              [121.451527, 31.21718],
+              [121.452317, 31.217496],
+              [121.454984, 31.219196],
+              [121.455921, 31.219758],
+              [121.457686, 31.220193]
+            ]
+          ]
+        ]
+      }
+    }
+  ]
+};
+
+export { shanghai, jingan };
diff --git a/src/views/historymode/component/MissionReport.vue b/src/views/historymode/component/MissionReport.vue
index 41e34ec..2f55c67 100644
--- a/src/views/historymode/component/MissionReport.vue
+++ b/src/views/historymode/component/MissionReport.vue
@@ -32,22 +32,54 @@
           鐢熸垚鍥剧墖
         </el-button>
       </el-form-item>
+      <el-form-item>
+        <el-image :src="base64Url" fit="fill" :preview-src-list="[base64Url]" />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          class="el-button-custom"
+          @click="handleMixClick"
+          :loading="docLoading"
+        >
+          鐢熸垚缃戞牸鍥剧墖
+        </el-button>
+        <el-form-item>
+          <el-form-item>
+            <el-image
+              :src="gridBase64Url"
+              fit="fill"
+              :preview-src-list="[gridBase64Url]"
+            />
+          </el-form-item>
+        </el-form-item>
+      </el-form-item>
     </el-form>
-    <el-form-item>
-      <el-image :src="base64Url" fit="fill" :preview-src-list="[base64Url]" />
-    </el-form-item>
   </CardDialog>
 </template>
 <script setup>
 import { computed, ref } from 'vue';
 import moment from 'moment';
 import dataAnalysisApi from '@/api/dataAnalysisApi';
+import gridApi from '@/api/gridApi';
 import { exportDocx } from '@/utils/doc';
 import { radioOptions } from '@/constant/radio-options';
 import { TYPE0 } from '@/constant/device-type';
 import { FactorDatas } from '@/model/FactorDatas';
 import factorDataParser from '@/utils/chart/factor-data-parser';
 import chartToImg from '@/utils/chart/chart-to-img';
+import chartMap from '@/utils/chart/chart-map';
+import chartMapAmap from '@/utils/chart/chart-map-amap';
+import { Legend } from '@/model/Legend';
+import { getHexColor, getColorBetweenTwoColors } from '@/utils/color';
+
+// 鍊熺敤鍗槦閬ユ祴妯″潡涓殑100绫崇綉鏍�
+const props = defineProps({
+  groupId: {
+    type: Number,
+    default: import.meta.env.VITE_DATA_MODE == 'jingan' ? 2 : 3
+  }
+});
 
 const formObj = ref({
   timeArray: [new Date('2025-07-01T00:00:00'), new Date('2025-08-31T23:59:59')],
@@ -57,6 +89,9 @@
 const docLoading = ref(false);
 
 const base64Url = ref(null);
+const gridBase64Url = ref(null);
+
+const gridCellList = ref([]);
 
 const params = computed(() => {
   return {
@@ -313,6 +348,65 @@
   return images;
 }
 
+function handleMixClick() {
+  const tags = [1, 2];
+  const fetchGridData = () => {
+    gridApi.mixUnderwayGridData(props.groupId, tags).then((res) => {
+      const gridData = res.data.map((v) => {
+        const data = v.pm25;
+        const grid = gridCellList.value.find((g) => {
+          return g.cellIndex == v.cellId;
+        });
+        const { color, nextColor, range, nextRange } =
+          Legend.getStandardColorAndNext('PM25', data);
+        const ratio = (data - range) / (nextRange - range);
+        const _color = getColorBetweenTwoColors(
+          color.map((v) => v * 255),
+          nextColor.map((v) => v * 255),
+          ratio
+        );
+
+        // // 鏍规嵁閬ユ祴鏁版嵁璁$畻缃戞牸棰滆壊
+        //         const { color, nextColor, range, nextRange } =
+        //           Legend.getCustomColorAndNext(data, min, max);
+        //         const ratio = (data - range) / (nextRange - range);
+
+        //         const _color = getColorBetweenTwoColors(
+        //           color.map((v) => v * 255),
+        //           nextColor.map((v) => v * 255),
+        //           ratio
+        //         );
+        return {
+          centerLng: grid.longitude,
+          centerLat: grid.latitude,
+          value: _color,
+          coordinates: [
+            [grid.point1Lon, grid.point1Lat],
+            [grid.point2Lon, grid.point2Lat],
+            [grid.point3Lon, grid.point3Lat],
+            [grid.point4Lon, grid.point4Lat]
+          ]
+        };
+      });
+      // chartMapAmap.generateGridMap(gridData).then((url) => {
+      //   gridBase64Url.value = url;
+      // });
+      gridBase64Url.value = chartMap.generateGridMap(gridData);
+    });
+  };
+
+  if (gridCellList.value.length == 0) {
+    gridApi
+      .fetchGridCell(props.groupId)
+      .then((res) => {
+        gridCellList.value = res.data;
+      })
+      .then(() => fetchGridData());
+  } else {
+    fetchGridData();
+  }
+}
+
 function generateDocx() {
   exportDocx(
     '/underway_season_report.docx',
diff --git a/src/views/underwaymix/UnderwayMixMode.vue b/src/views/underwaymix/UnderwayMixMode.vue
index eefbb4c..060cb1d 100644
--- a/src/views/underwaymix/UnderwayMixMode.vue
+++ b/src/views/underwaymix/UnderwayMixMode.vue
@@ -128,13 +128,13 @@
                 prop="zone"
                 label="鍖哄煙"
                 align="center"
-                width="50"
+                width="60"
               />
               <el-table-column
                 prop="pollutionDegree"
                 label="姹℃煋鑳屾櫙"
                 align="center"
-                width="70"
+                width="66"
               />
             </el-table>
 
@@ -229,7 +229,7 @@
 const props = defineProps({
   groupId: {
     type: Number,
-    default: 3
+    default: import.meta.env.VITE_DATA_MODE == 'jingan' ? 2 : 3
   }
 });
 const show = ref(true);

--
Gitblit v1.9.3