From cdc5d53cb0f338685bf9e5d4d78b02d6c8867d9b Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 09 Nov 2024 15:55:49 +0800
Subject: [PATCH] turf引入 图片静态资源引入 增加污染物处理菜单 风险源、企业分布上图样式调整 企业详情初始化定位调整

---
 src/views/space/index.vue                                 |    6 
 src/views/pd/components/box/fireContent.vue               |   25 
 public/img/mapicon/fxy.png                                |    0 
 src/styles/base/dc-base.scss                              |   51 
 src/views/companyInfo/index.vue                           |   25 
 public/img/mapicon/qy.png                                 |    0 
 pnpm-lock.yaml                                            | 1471 ++++++++++++++++++++++++++++++++++++
 src/views/pd/index.vue                                    |   30 
 public/al/企业公司.png                                        |    0 
 src/utils/turfPolygon.js                                  |  194 ++++
 src/views/pd/components/leftContainer.vue                 |   47 +
 src/views/space/components/leftContainer.vue              |   21 
 public/al/水库icon.png                                      |    0 
 src/views/layout/components/mainMenu.vue                  |    8 
 src/views/layout/components/scomponents/layersControl.vue |   52 
 public/al/GIS-TL_泵站1.png                                  |    0 
 public/al/GIS-TL_泵站.png                                   |    0 
 src/styles/base/index.scss                                |    1 
 src/views/pd/components/box/fireSource.vue                |   25 
 src/views/space/components/rightContainer.vue             |   72 -
 public/al/btn-排水管网.png                                    |    0 
 src/views/pd/components/box/fireTrend.vue                 |   25 
 src/router/index.js                                       |    9 
 src/views/pd/components/box/occurStatistics.vue           |   25 
 src/views/pd/components/rightContainer.vue                |   86 ++
 public/al/急.png                                           |    0 
 public/al/消防_1.png                                        |    0 
 src/views/pd/components/box/publicContent.vue             |   26 
 src/views/pd/components/box/unitContent.vue               |   25 
 package.json                                              |    3 
 public/al/水库水情.png                                        |    0 
 src/hooks/initMap.js                                      |    4 
 public/al/原液阀门运行.png                                      |    0 
 src/views/pd/components/box/dataContent.vue               |  158 +++
 34 files changed, 2,262 insertions(+), 127 deletions(-)

diff --git a/package.json b/package.json
index f8a9aa1..eb0937b 100644
--- a/package.json
+++ b/package.json
@@ -16,11 +16,12 @@
     "@dvgis/vite-plugin-dc": "^2.2.0",
     "@element-plus/icons-vue": "^2.3.1",
     "@fortawesome/fontawesome-free": "^6.6.0",
+    "@turf/turf": "^7.1.0",
     "axios": "^1.7.7",
     "crypto-js": "^4.1.1",
+    "echarts": "^5.5.1",
     "element-plus": "^2.8.6",
     "element-tree-line": "^0.2.1",
-    "echarts": "^5.5.1",
     "js-base64": "^3.7.4",
     "js-md5": "^0.7.3",
     "nprogress": "^0.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1896037..fc1e3a7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,6 +17,9 @@
   '@fortawesome/fontawesome-free':
     specifier: ^6.6.0
     version: 6.6.0
+  '@turf/turf':
+    specifier: ^7.1.0
+    version: 7.1.0
   axios:
     specifier: ^1.7.7
     version: 1.7.7
@@ -717,9 +720,1345 @@
     resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
     dev: false
 
+  /@turf/along@7.1.0:
+    resolution: {integrity: sha512-WLgBZJ/B6CcASF6WL7M+COtHlVP0hBrMbrtKyF7KBlicwRuijJZXDtEQA5oLgr+k1b2HqGN+UqH2A0/E719enQ==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/angle@7.1.0:
+    resolution: {integrity: sha512-YMHEV/YrARsWgWoQuXEWrQMsvB8z67nTMw2eiLZ883V7jwkhWQGvCW6W+/mGgsWQdHppjCZNcKryryhD2GRWVA==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/area@7.1.0:
+    resolution: {integrity: sha512-w91FEe02/mQfMPRX2pXua48scFuKJ2dSVMF2XmJ6+BJfFiCPxp95I3+Org8+ZsYv93CDNKbf0oLNEPnuQdgs2g==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/bbox-clip@7.1.0:
+    resolution: {integrity: sha512-PhZubKCzF/afwStUzODqOJluiCbCw244lCtVhXA9F+Pgkhvk8KvbFdgpPquOZ45OwuktrchSB28BrBkSBiadHw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/bbox-polygon@7.1.0:
+    resolution: {integrity: sha512-fvZB09ErCZOVlWVDop836hmpKaGUmfXnR9naMhS73A/8nn4M3hELbQtMv2R8gXj7UakXCuxS/i9erdpDFZ2O+g==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/bbox@7.1.0:
+    resolution: {integrity: sha512-PdWPz9tW86PD78vSZj2fiRaB8JhUHy6piSa/QXb83lucxPK+HTAdzlDQMTKj5okRCU8Ox/25IR2ep9T8NdopRA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/bearing@7.1.0:
+    resolution: {integrity: sha512-X5lackrZ6FW+YhgjWxwVFRgWD1j4xm4t5VvE6EE6v/1PVaHQ5OCjf6u1oaLx5LSG+gaHUhjTlAHrn9MYPFaeTA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/bezier-spline@7.1.0:
+    resolution: {integrity: sha512-bhBY70bcVYJEosuW7B/TFtnE5rmPTTpxmJvljhGC0eyM84oNVv7apDBuseb5KdlTOOBIvdD9nIE4qV8lmplp6w==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-clockwise@7.1.0:
+    resolution: {integrity: sha512-H5DYno+gHwZx+VaiC8DUBZXZQlxYecdSvqCfCACWi1uMsKvlht/O+xy65hz2P57lk2smlcV+1ETFVxJlEZduYg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-concave@7.1.0:
+    resolution: {integrity: sha512-IFCN25DI+hvngxIsv4+MPuRJQRl/Lz/xnZgpH82leCn4Jqn5wW7KqKFMz7G4GoKK+93cK5/6ioAxY7hVWBXxJw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-contains@7.1.0:
+    resolution: {integrity: sha512-ldy4j1/RVChYTYjEb4wWaE/JyF1jA87WpsB4eVLic6OcAYJGs7POF1kfKbcdkJJiRBmhI3CXNA+u+m9y4Z/j3g==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-crosses@7.1.0:
+    resolution: {integrity: sha512-LK8UM3AENycuGinLCDaL0QSznGMnD0XsjFDGnY4KehshiL5Zd8ZsPyKmHOPygUJT9DWeH69iLx459lOc+5Vj2w==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/polygon-to-line': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-disjoint@7.1.0:
+    resolution: {integrity: sha512-JapOG03kOCoGeYMWgTQjEifhr1nUoK4Os2cX0iC5X9kvZF4qCHeruX8/rffBQDx7PDKQKusSTXq8B1ISFi0hOw==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/polygon-to-line': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-equal@7.1.0:
+    resolution: {integrity: sha512-deghtFMApc7fNsdXtZdgYR4gsU+TVfowcv666nrvZbPPsXL6NTYGBhDFmYXsJ8gPTCGT9uT0WXppdgT8diWOxA==}
+    dependencies:
+      '@turf/clean-coords': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      geojson-equality-ts: 1.0.2
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-intersects@7.1.0:
+    resolution: {integrity: sha512-gpksWbb0RT+Z3nfqRfoACY3KEFyv2BPaxJ3L76PH67DhHZviq3Nfg85KYbpuhS64FSm+9tXe4IaKn6EjbHo20g==}
+    dependencies:
+      '@turf/boolean-disjoint': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-overlap@7.1.0:
+    resolution: {integrity: sha512-mJRN0X8JiPm8eDZk5sLvIrsP03A2GId6ijx4VgSE1AvHwV6qB561KlUbWxga2AScocIfv/y/qd2OCs+/TQSZcg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/line-overlap': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      geojson-equality-ts: 1.0.2
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-parallel@7.1.0:
+    resolution: {integrity: sha512-tA84Oux0X91CxUc6c/lZph5W9wUZGNT4fxFOg5Gp1IMTSwtxSYL1LMvKsr/VmMnwdOUkNcqAgU06+t4wBLtDfg==}
+    dependencies:
+      '@turf/clean-coords': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/line-segment': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-point-in-polygon@7.1.0:
+    resolution: {integrity: sha512-mprVsyIQ+ijWTZwbnO4Jhxu94ZW2M2CheqLiRTsGJy0Ooay9v6Av5/Nl3/Gst7ZVXxPqMeMaFYkSzcTc87AKew==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      point-in-polygon-hao: 1.1.0
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-point-on-line@7.1.0:
+    resolution: {integrity: sha512-Kd83EjeTyY4kVMAhcW3Lb8aChwh24BUIhmpE9Or8M+ETNsFGzn9M7qtIySJHLRzKAL3letvWSKXKQPuK1AhAzg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-touches@7.1.0:
+    resolution: {integrity: sha512-qN4LCs3RfVtNAAdn5GpsUFBqoZyAaK9UzSnGSh67GP9sy5M8MEHwM/HAJ5zGWJqQADrczI3U6BRWGLcGfGSz3Q==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-valid@7.1.0:
+    resolution: {integrity: sha512-zq1QCfQEyn+piHlvxxDifjmsJn2xl53i4mnKFYdMQI/i09XiX+Fi/MVM3i2hf3D5AsEPsud8Tk7C7rWNCm4nVw==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-crosses': 7.1.0
+      '@turf/boolean-disjoint': 7.1.0
+      '@turf/boolean-overlap': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@types/geojson': 7946.0.14
+      geojson-polygon-self-intersections: 1.2.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/boolean-within@7.1.0:
+    resolution: {integrity: sha512-pgXgKCzYHssADQ1nClB1Q9aWI/dE1elm2jy3B5X59XdoFXKrKDZA+gCHYOYgp2NGO/txzVfl3UKvnxIj54Fa4w==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/buffer@7.1.0:
+    resolution: {integrity: sha512-QM3JiCMYA19k5ouO8wJtvICX3Y8XntxVpDfHSKhFFidZcCkMTR2PWWOpwS6EoL3t75rSKw/FOLIPLZGtIu963w==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/center': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/jsts': 2.7.1
+      '@turf/meta': 7.1.0
+      '@turf/projection': 7.1.0
+      '@types/geojson': 7946.0.14
+      d3-geo: 1.7.1
+    dev: false
+
+  /@turf/center-mean@7.1.0:
+    resolution: {integrity: sha512-NQZB1LUVsyAD+p0+D4huzX2XVnfVx1yEEI9EX602THmi+g+nkge4SK9OMV11ov/Tv8JJ6aVNVPo/cy1vm/LCIQ==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/center-median@7.1.0:
+    resolution: {integrity: sha512-jx4/Ql5+v41Cd0J/gseNCUbLTzWUT2LUaiXn8eFWDrvmEgqHIx7KJcGcJd5HzV+9zJwng4AXxyh5NMvUR0NjwA==}
+    dependencies:
+      '@turf/center-mean': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/center-of-mass@7.1.0:
+    resolution: {integrity: sha512-j38oBlj7LBoCjZbrIo8EoHVGhk7UQmMLQ1fe8ZPAF9pd05XEL1qxyHKZKdQ/deGISiaEhXCyfLNrKAHAuy25RA==}
+    dependencies:
+      '@turf/centroid': 7.1.0
+      '@turf/convex': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/center@7.1.0:
+    resolution: {integrity: sha512-p9AvBMwNZmRg65kU27cGKHAUQnEcdz8Y7f/i5DvaMfm4e8zmawr+hzPKXaUpUfiTyLs8Xt2W9vlOmNGyH+6X3w==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/centroid@7.1.0:
+    resolution: {integrity: sha512-1Y1b2l+ZB1CZ+ITjUCsGqC4/tSjwm/R4OUfDztVqyyCq/VvezkLmTNqvXTGXgfP0GXkpv68iCfxF5M7QdM5pJQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/circle@7.1.0:
+    resolution: {integrity: sha512-6qhF1drjwH0Dg3ZB9om1JkWTJfAqBcbtIrAj5UPlrAeHP87hGoCO2ZEsFEAL9Q18vntpivT89Uho/nqQUjJhYw==}
+    dependencies:
+      '@turf/destination': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/clean-coords@7.1.0:
+    resolution: {integrity: sha512-q1U8UbRVL5cRdwOlNjD8mad8pWjFGe0s4ihg1pSiVNq7i47WASJ3k20yZiUFvuAkyNjV0rZ/A7Jd7WzjcierFg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/clone@7.1.0:
+    resolution: {integrity: sha512-5R9qeWvL7FDdBIbEemd0eCzOStr09oburDvJ1hRiPCFX6rPgzcZBQ0gDmZzoF4AFcNLb5IwknbLZjVLaUGWtFA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/clusters-dbscan@7.1.0:
+    resolution: {integrity: sha512-BmrBTOEaKN5FIED6b3yb3V3ejfK0A2Q3pT9/ji3mcRLJiBaRGeiN5V6gtGXe7PeMYdoqhHykU5Ye2uUtREWRdQ==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      rbush: 3.0.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/clusters-kmeans@7.1.0:
+    resolution: {integrity: sha512-M8cCqR6iE1jDSUF/UU9QdPUFrobZS2fo59TfF1IRHZ2G1EjbcK4GzZcUfmQS6DZraGudYutpMYIuNdm1dPMqdQ==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      skmeans: 0.9.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/clusters@7.1.0:
+    resolution: {integrity: sha512-7CY3Ai+5V6q2O9/IgqLpJQrmrTy7aUJjTW1iRan8Tz3WixvxyJHeS3iyRy8Oc0046chQIaHLtyTgKVt2QdsPSA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/collect@7.1.0:
+    resolution: {integrity: sha512-6indMWLiKeBh4AsioNeFeFnO0k9U5CBsWAFEje6tOEFI4c+P7LF9mNA9z91H8KkrhegR9XNO5Vm2rmdY63aYXw==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      rbush: 3.0.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/combine@7.1.0:
+    resolution: {integrity: sha512-Xl7bGKKjgzIq2T/IemS6qnIykyuxU6cMxKtz+qLeWJGoNww/BllwxXePSV+dWRPXZTFFj96KIhBXAW0aUjAQKQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/concave@7.1.0:
+    resolution: {integrity: sha512-aSid53gYRee4Tjc4pfeI3KI+RoBUnL/hRMilxIPduagTgZZS+cvvk01OQWBKm5UTVfHRGuy0XIqnK8y9RFinDQ==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/tin': 7.1.0
+      '@types/geojson': 7946.0.14
+      topojson-client: 3.1.0
+      topojson-server: 3.0.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/convex@7.1.0:
+    resolution: {integrity: sha512-w9fUMZYE36bLrEWEj7L7aVMCB7NBtr2o8G+avRvUIwF4DPqbtcjlcZE9EEBfq44uYdn+/Pke6Iq42T/zyD/cpg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      concaveman: 1.2.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/destination@7.1.0:
+    resolution: {integrity: sha512-97XuvB0iaAiMg86hrnZ529WwP44TQAA9mmI5PMlchACiA4LFrEtWjjDzvO6234coieoqhrw6dZYcJvd5O2PwrQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/difference@7.1.0:
+    resolution: {integrity: sha512-+JVzdskICQ8ULKQ9CpWUM5kBvoXxN4CO78Ez/Ki3/7NXl7+HM/nb12B0OyM8hkJchpb8TsOi0YwyJiKMqEpTBA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      polygon-clipping: 0.15.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/dissolve@7.1.0:
+    resolution: {integrity: sha512-fyOnCSYVUZ8SF9kt9ROnQYlkJTE0hpWSoWwbMZQCAR7oVZVPiuPq7eIbzTP+k5jzEAnofsqoGs5qVDTjHcWMiw==}
+    dependencies:
+      '@turf/flatten': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      polygon-clipping: 0.15.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/distance-weight@7.1.0:
+    resolution: {integrity: sha512-8m6s4y8Yyt6r3itf44yAJjXC+62UkrkhOpskIfaE0lHcBcvZz9wjboHoBf3bS4l/42E4StcanbFZdjOpODAdZw==}
+    dependencies:
+      '@turf/centroid': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/distance@7.1.0:
+    resolution: {integrity: sha512-hhNHhxCHB3ddzAGCNY4BtE29OZh+DAJPvUapQz+wOjISnlwvMcwLKvslgHWSYF536QDVe/93FEU2q67+CsZTPA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/ellipse@7.1.0:
+    resolution: {integrity: sha512-AfOahUmStDExWGPg8ZWxxkgom+fdJs7Mn9DzZH+fV/uZ+je1bLQpbPCUu9/ev6u/HhbYGl4VAL/CeQzjOyy6LQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/rhumb-destination': 7.1.0
+      '@turf/transform-rotate': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/envelope@7.1.0:
+    resolution: {integrity: sha512-WeLQse9wuxsxhzSqrJA6Ha7rLWnLKgdKY9cfxmJKHSpgqcJyNk60m7+T3UpI/nkGwpfbpeyB3EGC1EWPbxiDUg==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/bbox-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/explode@7.1.0:
+    resolution: {integrity: sha512-To+GUbU6HtcHZ8S0w/dw1EbdQIOCXALTr6Ug5/IFg8hIBMJelDpVr3Smwy8uqhDRFinY2eprBwQnDPcd10eCqA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/flatten@7.1.0:
+    resolution: {integrity: sha512-Kb23pqEarcLsdBqnQcK0qTrSMiWNTVb9tOFrNlZc66DIhDLAdpOKG4eqk00CMoUzWTixlnawDgJRqcStRrR4WA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/flip@7.1.0:
+    resolution: {integrity: sha512-vac73W8WblzzNFanzWYLBzWDIcqc5xczOrtEO07RDEiKEI3Heo0471Jed3v9W506uuOX6/HAiCjXbRjTLjiLfw==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/geojson-rbush@7.1.0:
+    resolution: {integrity: sha512-j1C7Ohlxa1z644bNOpgibcFGaDLgLXGLOzwF1tfQaP5y7E4PJQUXL0DWIgNb3Ke7gZC05LPHM25a5TRReUfFBQ==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      rbush: 3.0.1
+    dev: false
+
+  /@turf/great-circle@7.1.0:
+    resolution: {integrity: sha512-92q5fqUp5oW+FYekUIrUVR5PZBWbOV6NHKHPIiNahiPvtkpZItbbjoO+tGn5+2i8mxZP9FGOthayJe4V0a1xkg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/helpers@7.1.0:
+    resolution: {integrity: sha512-dTeILEUVeNbaEeoZUOhxH5auv7WWlOShbx7QSd4s0T4Z0/iz90z9yaVCtZOLbU89umKotwKaJQltBNO9CzVgaQ==}
+    dependencies:
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/hex-grid@7.1.0:
+    resolution: {integrity: sha512-I+Apx0smOPkMzaS5HHL44YOxSkSUvrz+wtSIETsDFWWLT2xKNkaaEcYU5MkgSoEfQsj082M7EkOIIpocXlA3kg==}
+    dependencies:
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/intersect': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/interpolate@7.1.0:
+    resolution: {integrity: sha512-VWec1OW9gHZLPS3yYkUXAHKMGQuYO4aqh8WCltT7Ym4efrKqkSOE5T+mBqO68QgcL8nY4kiNa8lxwXd0SfXDSA==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/hex-grid': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/point-grid': 7.1.0
+      '@turf/square-grid': 7.1.0
+      '@turf/triangle-grid': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/intersect@7.1.0:
+    resolution: {integrity: sha512-T0VhI6yhptX9EoMsuuBETyqV+edyq31SUC8bfuM6kdJ5WwJ0EvUfQoC+3bhMtCOn60lHawrUuGBgW+vCO8KGMg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      polygon-clipping: 0.15.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/invariant@7.1.0:
+    resolution: {integrity: sha512-OCLNqkItBYIP1nE9lJGuIUatWGtQ4rhBKAyTfFu0z8npVzGEYzvguEeof8/6LkKmTTEHW53tCjoEhSSzdRh08Q==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/isobands@7.1.0:
+    resolution: {integrity: sha512-iMLTOP/K5C05AttF4N1WeV+KrY4O5VWW/abO0N86XCWh1OeqmIUgqIBKEmhDzttAqC0UK2YrUfj0lI1Ez1fYZQ==}
+    dependencies:
+      '@turf/area': 7.1.0
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/explode': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      marchingsquares: 1.3.3
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/isolines@7.1.0:
+    resolution: {integrity: sha512-V6QTHXBT5ZsL3s9ZVBJgHYtz3gCFKqNnQLysNE02LE0fVVqaSao3sFrcpghmdDxf0hBCDK8lZVvyRGO6o32LHQ==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      marchingsquares: 1.3.3
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/jsts@2.7.1:
+    resolution: {integrity: sha512-+nwOKme/aUprsxnLSfr2LylV6eL6T1Tuln+4Hl92uwZ8FrmjDRCH5Bi1LJNVfWCiYgk8+5K+t2zDphWNTsIFDA==}
+    dependencies:
+      jsts: 2.7.1
+    dev: false
+
+  /@turf/kinks@7.1.0:
+    resolution: {integrity: sha512-KKLYUsyJPU17fODwA81mhHzFYGQYocdbk9NxDPCcdRHvxzM8t95lptkGx/2k/9rXBs1DK7NmyzI4m7zDO0DK7g==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/length@7.1.0:
+    resolution: {integrity: sha512-wUJj9WLKEudG1ngNao2ZwD+Dt6UkvWIbubuJ6lR6FndFDL3iezFhNGy0IXS+0xH9kXi2apiTnM9Vk5+i8BTEvQ==}
+    dependencies:
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/line-arc@7.1.0:
+    resolution: {integrity: sha512-9/bM34PozTyJ5FXXPAzl/j0RpcTImgMFJZ0WhH0pZZEZRum6P0rJnENt2E2qI441zeozQ9H6X5DCiJogDmRUEw==}
+    dependencies:
+      '@turf/circle': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/line-chunk@7.1.0:
+    resolution: {integrity: sha512-1lIUfqAQvCWAuUNC2ip8UYmM5kDltXOidLPW45Ee1OAIKYGBeFNtjwnxc0mQ40tnfTXclTYLDdOOP9LShspT9w==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/length': 7.1.0
+      '@turf/line-slice-along': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/line-intersect@7.1.0:
+    resolution: {integrity: sha512-JI3dvOsAoCqd4vUJ134FIzgcC42QpC/tBs+b4OJoxWmwDek3REv4qGaZY6wCg9X4hFSlCKFcnhMIQQZ/n720Qg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      sweepline-intersections: 1.5.0
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/line-offset@7.1.0:
+    resolution: {integrity: sha512-pz6irzhiQlJurU7DoXada6k3ei7PzY+VpsE/Wotm0D2KEAnoxqum2WK0rqqrhKPHKn+xpUGsHN9W/6K+qtmaHg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/line-overlap@7.1.0:
+    resolution: {integrity: sha512-BdHuEoFAtqvVw3LkjCdivG035nfuwZuxji2ijst+mkmDnlv7uwSBudJqcDGjU6up2r8P1mXChS4im4xjUz+lwg==}
+    dependencies:
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/geojson-rbush': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-segment': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/nearest-point-on-line': 7.1.0
+      '@types/geojson': 7946.0.14
+      fast-deep-equal: 3.1.3
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/line-segment@7.1.0:
+    resolution: {integrity: sha512-9rgIIH6ZzC3IiWxDQtKsq+j6eu8fRinMkJeusfI9HqOTm4vO02Ll4F/FigjOMOO/6X3TJ+Pqe3gS99TUaBINkw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/line-slice-along@7.1.0:
+    resolution: {integrity: sha512-UwfnFORZnu4xdnuRXiQM3ODa8f9Q0FBjQF/XHNsPEI/xxmnwgQj3MZiULbAeHUbtU/7psTC7gEjfE3Lf0tcKQw==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/line-slice@7.1.0:
+    resolution: {integrity: sha512-44xcjgMQxTa7tTAZlSD3t1cFjHi5SCfAqjg1ONv45EYKsQSonPaxD7LGzCbU5pR2RJjx3R7QRJx2G88hnGcXjQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/nearest-point-on-line': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/line-split@7.1.0:
+    resolution: {integrity: sha512-QqUAmtlrnEu75cpLOmpEuiYU63BeVwpSKOBllBbu5gkP+7H/WBM/9fh7J0VgHNFHzqZCKiu8v4158k+CZr0QAg==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/geojson-rbush': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/line-segment': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/nearest-point-on-line': 7.1.0
+      '@turf/square': 7.1.0
+      '@turf/truncate': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/line-to-polygon@7.1.0:
+    resolution: {integrity: sha512-n/IWBRbo+l4XDTz4sfQsQm5bU9xex8KrthK397jQasd7a9PiOKGon9Z1t/lddTJhND6ajVyJ3hl+eZMtpQaghQ==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/mask@7.1.0:
+    resolution: {integrity: sha512-d+u3IIiRhe17TDfP/+UMn9qRlJYPJpK7sj6WorsssluGi0yIG/Z24uWpcLskWKSI8NNgkIbDrp+GIYkJi2t7SA==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      polygon-clipping: 0.15.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/meta@7.1.0:
+    resolution: {integrity: sha512-ZgGpWWiKz797Fe8lfRj7HKCkGR+nSJ/5aKXMyofCvLSc2PuYJs/qyyifDPWjASQQCzseJ7AlF2Pc/XQ/3XkkuA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /@turf/midpoint@7.1.0:
+    resolution: {integrity: sha512-uiUU9TwRZOCeiTUn8+7oE6MJUvclfq+n6KQ5VCMTZXiRUJjPu7nDLpBle1t2WSv7/w7O0kSQ4FfKXh0gHnkJOw==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/moran-index@7.1.0:
+    resolution: {integrity: sha512-xsvAr3IRF/C6PlRMoN/ANrRx6c3QFUJgBCIVfI7re+Lkdprrzgw1HZA48ZjP4F91xbhgA1scnRgQdHFi2vO2SA==}
+    dependencies:
+      '@turf/distance-weight': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/nearest-neighbor-analysis@7.1.0:
+    resolution: {integrity: sha512-FAhT8/op3DuvqH0XFhv055JhYq/FC4aaIxEZ4hj8c7W6sYhUHAQgdRZ0tJ1RLe5/h+eXhCTbQ+DFfnfv3klu8g==}
+    dependencies:
+      '@turf/area': 7.1.0
+      '@turf/bbox': 7.1.0
+      '@turf/bbox-polygon': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/nearest-point': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/nearest-point-on-line@7.1.0:
+    resolution: {integrity: sha512-aTjAOm7ab0tl5JoxGYRx/J/IbRL1DY1ZCIYQDMEQjK5gOllhclgeBC0wDXDkEZFGaVftjw0W2RtE2I0jX7RG4A==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/nearest-point-to-line@7.1.0:
+    resolution: {integrity: sha512-rY2F/iY4S6U8H0hIoOI25xMWYEiKywxeTvTvn5GP8KCu+2oemfZROWa7n2+hQDRwO2/uaegrGEpxO7zlFarvzg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/point-to-line-distance': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/nearest-point@7.1.0:
+    resolution: {integrity: sha512-VyInmhqfVWp+jE7sCK95o46qc4tDjAgzbRfRjr+rTgfFS1Sndyy1PdwyNn6TjBFDxiM6e+mjMEeGPjb1smJlEg==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/planepoint@7.1.0:
+    resolution: {integrity: sha512-hFORBkCd7Q0kNUzLqksT4XglLgTQF9tCjG+dbnZ1VehpZu+w+vlHdoW/mY7XCX3Kj1ObiyzVmXffmVYgwXwF6Q==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/point-grid@7.1.0:
+    resolution: {integrity: sha512-ihuuUcWuCu4Z1+34UYCM5NGsU2DJaB4uE8cS3jDQoUqlc+8ii2ng8kcGEtTwVn0HdPsoKA7bgvSZcisJO0v6Ww==}
+    dependencies:
+      '@turf/boolean-within': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/point-on-feature@7.1.0:
+    resolution: {integrity: sha512-lOO5J9I0diuGbN+r6jViEKRH3qfymsBvv25b7U0MuP8g/YC19ncUXZ86dmKfJx1++Rb485DS9h0nFvPmJpaOdg==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/center': 7.1.0
+      '@turf/explode': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/nearest-point': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/point-to-line-distance@7.1.0:
+    resolution: {integrity: sha512-Ps9eTOCaiNgxDaSNQux0wAcSLcrI0y0zYFaD9HnVm+yCMRliQXneFti2XXotS+gR7TpgnLRAAzyx4VzJMSN2tw==}
+    dependencies:
+      '@turf/bearing': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/projection': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@turf/rhumb-distance': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/points-within-polygon@7.1.0:
+    resolution: {integrity: sha512-SzqeD9Gcp11rEya+rCVMy6IPuYMrphNEkCiQ39W6ec9hsaqKlruqmtudKhhckMGVLVUUBCQAu5f55yjcDfVW2w==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/polygon-smooth@7.1.0:
+    resolution: {integrity: sha512-mTlmg4XUP5rKgCP/73N91owkAXIc3t1ZKLuwsJGQM1/Op48T3rJmDwVR/WZIMnVlxl5tFbssWCCB3blj4ivx9g==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/polygon-tangents@7.1.0:
+    resolution: {integrity: sha512-ffBgHXtkrpgkNs8E6s9sVLSKG4lPGH3WBk294FNKBt9NS+rbhNCv8yTuOMeP0bOm/WizaCq/SUtVryJpUSoI/g==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/boolean-within': 7.1.0
+      '@turf/explode': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/nearest-point': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/polygon-to-line@7.1.0:
+    resolution: {integrity: sha512-FBlfyBWNQZCTVGqlJH7LR2VXmvj8AydxrA8zegqek/5oPGtQDeUgIppKmvmuNClqbglhv59QtCUVaDK4bOuCTA==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/polygonize@7.1.0:
+    resolution: {integrity: sha512-FBjxnOzO29MbE7MWnMPHHYtOo93cQopT5pXhkuPyoKgcTUCntR1+iVFpl5YFbMkYup0j5Oexjo/pbY38lVSZGw==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/envelope': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/projection@7.1.0:
+    resolution: {integrity: sha512-3wHluMoOvXnTe7dfi0kcluTyLNG5MwGsSsK5OA98vkkLH6a1xvItn8e9GcesuT07oB2km/bgefxYEIvjQG5JCA==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/quadrat-analysis@7.1.0:
+    resolution: {integrity: sha512-4O5h9PyWgpqYXja9O+kzr+qk5MUz0IkJqPtt5oWWX5s4jRcLNqiEUf+zi/GDBQkVV8jH3S5klT5CLrF1fxK3hQ==}
+    dependencies:
+      '@turf/area': 7.1.0
+      '@turf/bbox': 7.1.0
+      '@turf/bbox-polygon': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/point-grid': 7.1.0
+      '@turf/random': 7.1.0
+      '@turf/square-grid': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/random@7.1.0:
+    resolution: {integrity: sha512-22mXv8ejDMUWkz8DSMMqdZb0s7a0ISJzXt6T9cHovfT//vsotzkVH+5PDxJQjvmigKMnpaUgobHmQss23tAwEQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/rectangle-grid@7.1.0:
+    resolution: {integrity: sha512-4d2AuDj4LfMMJxNHbds5yX1oFR3mIVAB5D7mx6pFB0e+YkQW0mE2dUWhDTFGJZM+n45yqbNQ5hg19bmiXv94ug==}
+    dependencies:
+      '@turf/boolean-intersects': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/rewind@7.1.0:
+    resolution: {integrity: sha512-zX0KDZpeiH89m1vYLTEJdDL6mFyoAsCxcG0P94mXO7/JXWf0AaxzA9MkNnA/d2QYX0G4ioCMjZ5cD6nXb8SXzw==}
+    dependencies:
+      '@turf/boolean-clockwise': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/rhumb-bearing@7.1.0:
+    resolution: {integrity: sha512-ESZt70eOljHVnQMFKIdiu8LIHuQlpZgzh2nqSfV40BrYjsjI/sBKeK+sp2cBWk88nsSDlriPuMTNh4f50Jqpkw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/rhumb-destination@7.1.0:
+    resolution: {integrity: sha512-WA2TeO3qrv5ZrzNihtTLLYu8X4kd12WEC6JKElm99XhgLao1/4ao2SJUi43l88HqwbrnNiq4TueGQ6tYpXGU7A==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/rhumb-distance@7.1.0:
+    resolution: {integrity: sha512-fR1V+yC4E1tnbdThomosiLcv0PQOwbfLSPM8rSWuxbMcJtffsncWxyJ0+N1F5juuHbcdaYhlduX8ri5I0ZCejw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/sample@7.1.0:
+    resolution: {integrity: sha512-9Iq/Ankr4+sgBoh4FpuVVvoW+AA10eej3FS89Zu79SFdCqUIdT7T42Nn3MlSVj4jMyA1oXyT2HIAlNWkwgLw6Q==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/sector@7.1.0:
+    resolution: {integrity: sha512-2FI2rg//eXpa/l+WJtFfvHaf1NJ7ie2MoJ+RH5dKANtrfoof1Ed+y9dXSyuhem2tp/Srq2GhrjaSofFN5/g5vA==}
+    dependencies:
+      '@turf/circle': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/line-arc': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/shortest-path@7.1.0:
+    resolution: {integrity: sha512-1UmFhS5zHNacLv5rszoFOXq02BGov1oJvjlDatXsSWAd+Z7tqxpDc8D+41edrXy0ZB0Yxsy6WPNagM6hG9PRaA==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/bbox-polygon': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/clean-coords': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/transform-scale': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/simplify@7.1.0:
+    resolution: {integrity: sha512-JypymaoiSiFzGHwEoUkK0OPW1KQSnH3hEsEW3UIRS+apzltJ4HdFovYjsfqQgGZJZ+NJ9+dv7h8pgGLYuqcBUQ==}
+    dependencies:
+      '@turf/clean-coords': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/square-grid@7.1.0:
+    resolution: {integrity: sha512-JyhsALULVRlkh8htdTi9aXaXFSUv6wRNbeFbqyGJKKlA5eF+AYmyWdI/BlFGQN27xtbtMPeAuLmj+8jaB2omGw==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/rectangle-grid': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/square@7.1.0:
+    resolution: {integrity: sha512-ANuA+WXZheGTLW6Veq0i+/B2S4KMhEHAixDv9gQEb9e6FTyqTJVwrqP4CHI3OzA3DZ/ytFf+NTKVofetO/BBQg==}
+    dependencies:
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/standard-deviational-ellipse@7.1.0:
+    resolution: {integrity: sha512-JqvQFH/witHh+3XgPC1Qk4+3G8w8WQta2NTJjnGinOgFulH+7RD4DcxCT+XXtCHoeq8IvL9VPJRX3ciaW5nSCg==}
+    dependencies:
+      '@turf/center-mean': 7.1.0
+      '@turf/ellipse': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/points-within-polygon': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/tag@7.1.0:
+    resolution: {integrity: sha512-cD8TC++DnNmdI1B/apTf3nj2zRNY6SoLRliB8K76OB+70Kev8tOf4ZVgAqOd0u+Hpdg/T6l7dO7fyJ6UouE7jA==}
+    dependencies:
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/tesselate@7.1.0:
+    resolution: {integrity: sha512-E/Z94Mx6kUjvQVbEcSuM9MbEo2dkOczRe4ZzjhFlLgJh1dCkfRgwYLH49mb2CcfG/me1arxoCgmtG+qgm7LrCg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      earcut: 2.2.4
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/tin@7.1.0:
+    resolution: {integrity: sha512-h8Bdm0IYN6OpKHM8lBRWGxkJnZcxL0KYecf8U6pa6DCEYsEXuEExMTvYSD2OmqIsL5ml8P6RjwgyI+dZeE0O9A==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/transform-rotate@7.1.0:
+    resolution: {integrity: sha512-Vp7VBZ6DqaPV8mkwSycksBFRLqSj3y16zg+uEPSCsXUjbFtw9DOLcyH2F5vMpnC2bOpS9NOB4hebhJRwBwAPWQ==}
+    dependencies:
+      '@turf/centroid': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@turf/rhumb-destination': 7.1.0
+      '@turf/rhumb-distance': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/transform-scale@7.1.0:
+    resolution: {integrity: sha512-m5fLnh3JqrWSv0sAC8Aieet/fr5IZND8BFaE9LakMidtNaJqOIPOyVmUoklcrGn6eK6MX+66rRPn+5a1pahlLQ==}
+    dependencies:
+      '@turf/bbox': 7.1.0
+      '@turf/center': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@turf/rhumb-destination': 7.1.0
+      '@turf/rhumb-distance': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/transform-translate@7.1.0:
+    resolution: {integrity: sha512-XA6Oh7VqUDrieY9m9/OF4XpBTd8qlfVGi3ObywojCqtHaHKLK3aXwTBZ276i0QKmZqOQA+2jFa9NhgF/TgBDrw==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/rhumb-destination': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/triangle-grid@7.1.0:
+    resolution: {integrity: sha512-hrPyRAuX5PKu7txmc/11VPKrlJDR+JGzd+eijupKTspNLR4n2sqZUx8UXqSxZ/1nq06ScTyjIfGQJVzlRS8BTg==}
+    dependencies:
+      '@turf/distance': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/intersect': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/truncate@7.1.0:
+    resolution: {integrity: sha512-rrF3AML9PGZw2i5wmt53ESI+Ln9cZyCXgJ7QrEvkT8NbE4OFgmw6p8/1xT8+VEWFSpD4gHz+hmM+5FaFxXvtNg==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/turf@7.1.0:
+    resolution: {integrity: sha512-7NA6tAjbu9oIvIfpRO5AdPrZbFTlUFU02HVA7sLJM9jFeNIZovW09QuDo23uoS2z5l94SXV1GgKKxN5wo7prCw==}
+    dependencies:
+      '@turf/along': 7.1.0
+      '@turf/angle': 7.1.0
+      '@turf/area': 7.1.0
+      '@turf/bbox': 7.1.0
+      '@turf/bbox-clip': 7.1.0
+      '@turf/bbox-polygon': 7.1.0
+      '@turf/bearing': 7.1.0
+      '@turf/bezier-spline': 7.1.0
+      '@turf/boolean-clockwise': 7.1.0
+      '@turf/boolean-concave': 7.1.0
+      '@turf/boolean-contains': 7.1.0
+      '@turf/boolean-crosses': 7.1.0
+      '@turf/boolean-disjoint': 7.1.0
+      '@turf/boolean-equal': 7.1.0
+      '@turf/boolean-intersects': 7.1.0
+      '@turf/boolean-overlap': 7.1.0
+      '@turf/boolean-parallel': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/boolean-point-on-line': 7.1.0
+      '@turf/boolean-touches': 7.1.0
+      '@turf/boolean-valid': 7.1.0
+      '@turf/boolean-within': 7.1.0
+      '@turf/buffer': 7.1.0
+      '@turf/center': 7.1.0
+      '@turf/center-mean': 7.1.0
+      '@turf/center-median': 7.1.0
+      '@turf/center-of-mass': 7.1.0
+      '@turf/centroid': 7.1.0
+      '@turf/circle': 7.1.0
+      '@turf/clean-coords': 7.1.0
+      '@turf/clone': 7.1.0
+      '@turf/clusters': 7.1.0
+      '@turf/clusters-dbscan': 7.1.0
+      '@turf/clusters-kmeans': 7.1.0
+      '@turf/collect': 7.1.0
+      '@turf/combine': 7.1.0
+      '@turf/concave': 7.1.0
+      '@turf/convex': 7.1.0
+      '@turf/destination': 7.1.0
+      '@turf/difference': 7.1.0
+      '@turf/dissolve': 7.1.0
+      '@turf/distance': 7.1.0
+      '@turf/distance-weight': 7.1.0
+      '@turf/ellipse': 7.1.0
+      '@turf/envelope': 7.1.0
+      '@turf/explode': 7.1.0
+      '@turf/flatten': 7.1.0
+      '@turf/flip': 7.1.0
+      '@turf/geojson-rbush': 7.1.0
+      '@turf/great-circle': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/hex-grid': 7.1.0
+      '@turf/interpolate': 7.1.0
+      '@turf/intersect': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@turf/isobands': 7.1.0
+      '@turf/isolines': 7.1.0
+      '@turf/kinks': 7.1.0
+      '@turf/length': 7.1.0
+      '@turf/line-arc': 7.1.0
+      '@turf/line-chunk': 7.1.0
+      '@turf/line-intersect': 7.1.0
+      '@turf/line-offset': 7.1.0
+      '@turf/line-overlap': 7.1.0
+      '@turf/line-segment': 7.1.0
+      '@turf/line-slice': 7.1.0
+      '@turf/line-slice-along': 7.1.0
+      '@turf/line-split': 7.1.0
+      '@turf/line-to-polygon': 7.1.0
+      '@turf/mask': 7.1.0
+      '@turf/meta': 7.1.0
+      '@turf/midpoint': 7.1.0
+      '@turf/moran-index': 7.1.0
+      '@turf/nearest-neighbor-analysis': 7.1.0
+      '@turf/nearest-point': 7.1.0
+      '@turf/nearest-point-on-line': 7.1.0
+      '@turf/nearest-point-to-line': 7.1.0
+      '@turf/planepoint': 7.1.0
+      '@turf/point-grid': 7.1.0
+      '@turf/point-on-feature': 7.1.0
+      '@turf/point-to-line-distance': 7.1.0
+      '@turf/points-within-polygon': 7.1.0
+      '@turf/polygon-smooth': 7.1.0
+      '@turf/polygon-tangents': 7.1.0
+      '@turf/polygon-to-line': 7.1.0
+      '@turf/polygonize': 7.1.0
+      '@turf/projection': 7.1.0
+      '@turf/quadrat-analysis': 7.1.0
+      '@turf/random': 7.1.0
+      '@turf/rectangle-grid': 7.1.0
+      '@turf/rewind': 7.1.0
+      '@turf/rhumb-bearing': 7.1.0
+      '@turf/rhumb-destination': 7.1.0
+      '@turf/rhumb-distance': 7.1.0
+      '@turf/sample': 7.1.0
+      '@turf/sector': 7.1.0
+      '@turf/shortest-path': 7.1.0
+      '@turf/simplify': 7.1.0
+      '@turf/square': 7.1.0
+      '@turf/square-grid': 7.1.0
+      '@turf/standard-deviational-ellipse': 7.1.0
+      '@turf/tag': 7.1.0
+      '@turf/tesselate': 7.1.0
+      '@turf/tin': 7.1.0
+      '@turf/transform-rotate': 7.1.0
+      '@turf/transform-scale': 7.1.0
+      '@turf/transform-translate': 7.1.0
+      '@turf/triangle-grid': 7.1.0
+      '@turf/truncate': 7.1.0
+      '@turf/union': 7.1.0
+      '@turf/unkink-polygon': 7.1.0
+      '@turf/voronoi': 7.1.0
+      '@types/geojson': 7946.0.14
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/union@7.1.0:
+    resolution: {integrity: sha512-7VI8jONdBg9qmbfNlLQycPr93l5aU9HGMgWI9M6pb4ERuU2+p8KgffCgs2NyMtP2HxPrKSybzj31g7bnbEKofQ==}
+    dependencies:
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      polygon-clipping: 0.15.7
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/unkink-polygon@7.1.0:
+    resolution: {integrity: sha512-pqkirni2aLpRA1ELFIuJz+mkjYyJQX8Ar6BflSu1b0ajY/CTrcDxbIv1x8UfvbybLzdJc4Gxzg5mo4cEtSwtaQ==}
+    dependencies:
+      '@turf/area': 7.1.0
+      '@turf/boolean-point-in-polygon': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/meta': 7.1.0
+      '@types/geojson': 7946.0.14
+      rbush: 3.0.1
+      tslib: 2.8.1
+    dev: false
+
+  /@turf/voronoi@7.1.0:
+    resolution: {integrity: sha512-xUvzPDG6GaqEekgxd+pjeMKJXOYJ3eFIqUHbTe/ISKzzv3f2cFGiR2VH7ZGXri8d4ozzCQbUQ27ilHPPLf5+xw==}
+    dependencies:
+      '@turf/clone': 7.1.0
+      '@turf/helpers': 7.1.0
+      '@turf/invariant': 7.1.0
+      '@types/d3-voronoi': 1.1.12
+      '@types/geojson': 7946.0.14
+      d3-voronoi: 1.1.2
+      tslib: 2.8.1
+    dev: false
+
+  /@types/d3-voronoi@1.1.12:
+    resolution: {integrity: sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==}
+    dev: false
+
   /@types/estree@1.0.6:
     resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
     dev: true
+
+  /@types/geojson@7946.0.14:
+    resolution: {integrity: sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==}
+    dev: false
 
   /@types/lodash-es@4.17.12:
     resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
@@ -915,7 +2254,15 @@
 
   /commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-    dev: true
+
+  /concaveman@1.2.1:
+    resolution: {integrity: sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==}
+    dependencies:
+      point-in-polygon: 1.1.0
+      rbush: 3.0.1
+      robust-predicates: 2.0.4
+      tinyqueue: 2.0.3
+    dev: false
 
   /confbox@0.1.8:
     resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -927,6 +2274,20 @@
 
   /csstype@3.1.3:
     resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+  /d3-array@1.2.4:
+    resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==}
+    dev: false
+
+  /d3-geo@1.7.1:
+    resolution: {integrity: sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==}
+    dependencies:
+      d3-array: 1.2.4
+    dev: false
+
+  /d3-voronoi@1.1.2:
+    resolution: {integrity: sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==}
+    dev: false
 
   /dayjs@1.11.13:
     resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
@@ -963,6 +2324,10 @@
     engines: {node: '>=0.10'}
     hasBin: true
     dev: true
+
+  /earcut@2.2.4:
+    resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==}
+    dev: false
 
   /echarts@5.5.1:
     resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==}
@@ -1076,6 +2441,10 @@
     engines: {node: '>= 0.6'}
     dev: false
 
+  /fast-deep-equal@3.1.3:
+    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+    dev: false
+
   /fast-glob@3.3.2:
     resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
     engines: {node: '>=8.6.0'}
@@ -1141,6 +2510,18 @@
     requiresBuild: true
     dev: true
     optional: true
+
+  /geojson-equality-ts@1.0.2:
+    resolution: {integrity: sha512-h3Ryq+0mCSN/7yLs0eDgrZhvc9af23o/QuC4aTiuuzP/MRCtd6mf5rLsLRY44jX0RPUfM8c4GqERQmlUxPGPoQ==}
+    dependencies:
+      '@types/geojson': 7946.0.14
+    dev: false
+
+  /geojson-polygon-self-intersections@1.2.1:
+    resolution: {integrity: sha512-/QM1b5u2d172qQVO//9CGRa49jEmclKEsYOQmWP9ooEjj63tBM51m2805xsbxkzlEELQ2REgTf700gUhhlegxA==}
+    dependencies:
+      rbush: 2.0.2
+    dev: false
 
   /glob-parent@5.1.2:
     resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
@@ -1209,6 +2590,11 @@
       graceful-fs: 4.2.11
     dev: false
 
+  /jsts@2.7.1:
+    resolution: {integrity: sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==}
+    engines: {node: '>= 12'}
+    dev: false
+
   /local-pkg@0.5.0:
     resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
     engines: {node: '>=14'}
@@ -1241,6 +2627,10 @@
     resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
     dependencies:
       '@jridgewell/sourcemap-codec': 1.5.0
+
+  /marchingsquares@1.3.3:
+    resolution: {integrity: sha512-gz6nNQoVK7Lkh2pZulrT4qd4347S/toG9RXH2pyzhLgkL5mLkBoqgv4EvAGXcV0ikDW72n/OQb3Xe8bGagQZCg==}
+    dev: false
 
   /memoize-one@6.0.0:
     resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
@@ -1391,6 +2781,21 @@
       pathe: 1.1.2
     dev: true
 
+  /point-in-polygon-hao@1.1.0:
+    resolution: {integrity: sha512-3hTIM2j/v9Lio+wOyur3kckD4NxruZhpowUbEgmyikW+a2Kppjtu1eN+AhnMQtoHW46zld88JiYWv6fxpsDrTQ==}
+    dev: false
+
+  /point-in-polygon@1.1.0:
+    resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==}
+    dev: false
+
+  /polygon-clipping@0.15.7:
+    resolution: {integrity: sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==}
+    dependencies:
+      robust-predicates: 3.0.2
+      splaytree: 3.1.2
+    dev: false
+
   /postcss@8.4.47:
     resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
     engines: {node: ^10 || ^12 || >=14}
@@ -1407,9 +2812,29 @@
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
     dev: true
 
+  /quickselect@1.1.1:
+    resolution: {integrity: sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==}
+    dev: false
+
+  /quickselect@2.0.0:
+    resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==}
+    dev: false
+
   /range-parser@1.2.1:
     resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
     engines: {node: '>= 0.6'}
+    dev: false
+
+  /rbush@2.0.2:
+    resolution: {integrity: sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==}
+    dependencies:
+      quickselect: 1.1.1
+    dev: false
+
+  /rbush@3.0.1:
+    resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==}
+    dependencies:
+      quickselect: 2.0.0
     dev: false
 
   /readdirp@4.0.2:
@@ -1421,6 +2846,14 @@
     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
     dev: true
+
+  /robust-predicates@2.0.4:
+    resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==}
+    dev: false
+
+  /robust-predicates@3.0.2:
+    resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+    dev: false
 
   /rollup@4.24.0:
     resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==}
@@ -1531,6 +2964,10 @@
     resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
     dev: false
 
+  /skmeans@0.9.7:
+    resolution: {integrity: sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==}
+    dev: false
+
   /source-map-js@1.2.1:
     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
     engines: {node: '>=0.10.0'}
@@ -1547,6 +2984,10 @@
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /splaytree@3.1.2:
+    resolution: {integrity: sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A==}
+    dev: false
+
   /statuses@2.0.1:
     resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
     engines: {node: '>= 0.8'}
@@ -1558,6 +2999,12 @@
       js-tokens: 9.0.0
     dev: true
 
+  /sweepline-intersections@1.5.0:
+    resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==}
+    dependencies:
+      tinyqueue: 2.0.3
+    dev: false
+
   /terser@5.31.1:
     resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==}
     engines: {node: '>=10'}
@@ -1568,6 +3015,10 @@
       commander: 2.20.3
       source-map-support: 0.5.21
     dev: true
+
+  /tinyqueue@2.0.3:
+    resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==}
+    dev: false
 
   /to-regex-range@5.0.1:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -1581,10 +3032,28 @@
     engines: {node: '>=0.6'}
     dev: false
 
+  /topojson-client@3.1.0:
+    resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==}
+    hasBin: true
+    dependencies:
+      commander: 2.20.3
+    dev: false
+
+  /topojson-server@3.0.1:
+    resolution: {integrity: sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==}
+    hasBin: true
+    dependencies:
+      commander: 2.20.3
+    dev: false
+
   /tslib@2.3.0:
     resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
     dev: false
 
+  /tslib@2.8.1:
+    resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+    dev: false
+
   /ufo@1.5.4:
     resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
     dev: true
diff --git "a/public/al/GIS-TL_\346\263\265\347\253\231.png" "b/public/al/GIS-TL_\346\263\265\347\253\231.png"
new file mode 100644
index 0000000..6e119b7
--- /dev/null
+++ "b/public/al/GIS-TL_\346\263\265\347\253\231.png"
Binary files differ
diff --git "a/public/al/GIS-TL_\346\263\265\347\253\2311.png" "b/public/al/GIS-TL_\346\263\265\347\253\2311.png"
new file mode 100644
index 0000000..3dcfadc
--- /dev/null
+++ "b/public/al/GIS-TL_\346\263\265\347\253\2311.png"
Binary files differ
diff --git "a/public/al/btn-\346\216\222\346\260\264\347\256\241\347\275\221.png" "b/public/al/btn-\346\216\222\346\260\264\347\256\241\347\275\221.png"
new file mode 100644
index 0000000..5201dee
--- /dev/null
+++ "b/public/al/btn-\346\216\222\346\260\264\347\256\241\347\275\221.png"
Binary files differ
diff --git "a/public/al/\344\274\201\344\270\232\345\205\254\345\217\270.png" "b/public/al/\344\274\201\344\270\232\345\205\254\345\217\270.png"
new file mode 100644
index 0000000..01038d6
--- /dev/null
+++ "b/public/al/\344\274\201\344\270\232\345\205\254\345\217\270.png"
Binary files differ
diff --git "a/public/al/\345\216\237\346\266\262\351\230\200\351\227\250\350\277\220\350\241\214.png" "b/public/al/\345\216\237\346\266\262\351\230\200\351\227\250\350\277\220\350\241\214.png"
new file mode 100644
index 0000000..ff7f557
--- /dev/null
+++ "b/public/al/\345\216\237\346\266\262\351\230\200\351\227\250\350\277\220\350\241\214.png"
Binary files differ
diff --git "a/public/al/\346\200\245.png" "b/public/al/\346\200\245.png"
new file mode 100644
index 0000000..3b9bc16
--- /dev/null
+++ "b/public/al/\346\200\245.png"
Binary files differ
diff --git "a/public/al/\346\260\264\345\272\223icon.png" "b/public/al/\346\260\264\345\272\223icon.png"
new file mode 100644
index 0000000..cbabe59
--- /dev/null
+++ "b/public/al/\346\260\264\345\272\223icon.png"
Binary files differ
diff --git "a/public/al/\346\260\264\345\272\223\346\260\264\346\203\205.png" "b/public/al/\346\260\264\345\272\223\346\260\264\346\203\205.png"
new file mode 100644
index 0000000..05c5f03
--- /dev/null
+++ "b/public/al/\346\260\264\345\272\223\346\260\264\346\203\205.png"
Binary files differ
diff --git "a/public/al/\346\266\210\351\230\262_1.png" "b/public/al/\346\266\210\351\230\262_1.png"
new file mode 100644
index 0000000..72d41b9
--- /dev/null
+++ "b/public/al/\346\266\210\351\230\262_1.png"
Binary files differ
diff --git a/public/img/mapicon/fxy.png b/public/img/mapicon/fxy.png
new file mode 100644
index 0000000..7d6b220
--- /dev/null
+++ b/public/img/mapicon/fxy.png
Binary files differ
diff --git a/public/img/mapicon/qy.png b/public/img/mapicon/qy.png
new file mode 100644
index 0000000..358f057
--- /dev/null
+++ b/public/img/mapicon/qy.png
Binary files differ
diff --git a/src/hooks/initMap.js b/src/hooks/initMap.js
index 3d10d98..0151059 100644
--- a/src/hooks/initMap.js
+++ b/src/hooks/initMap.js
@@ -12,6 +12,7 @@
 const { VITE_APP_BASE } = import.meta.env
 import { useMap } from 'store/map'
 import { nextTick, onMounted, onUnmounted } from 'vue'
+import * as turf from '@turf/turf'
 
 export function readyViewer () {
   const Cesium = DC.getLib('Cesium')
@@ -22,7 +23,8 @@
 
     nextTick(() => {
       DC.ready({
-        baseUrl: `${VITE_APP_BASE}libs/dc-sdk/resources/`
+        baseUrl: `${VITE_APP_BASE}libs/dc-sdk/resources/`,
+        turf,
       }).then(() => {
 
         viewer = new DC.Viewer('viewer-container')
diff --git a/src/router/index.js b/src/router/index.js
index 72ea201..3e36fae 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -41,7 +41,7 @@
       {
         path: 'rs',
         meta: {
-          title: '固定风险源'
+          title: '风险源'
         },
         component: () => import('@/views/rs/index.vue')
       },
@@ -74,6 +74,13 @@
         component: () => import('@/views/rt/index.vue')
       },
       {
+        path: 'pd',
+        meta: {
+          title: '污染物处理'
+        },
+        component: () => import('@/views/pd/index.vue')
+      },
+      {
         path: 'sub',
         name: 'sub',
         component: defineAsyncComponent(() => import('@/views/sub/index.vue')),
diff --git a/src/styles/base/dc-base.scss b/src/styles/base/dc-base.scss
index fd0295d..68be596 100644
--- a/src/styles/base/dc-base.scss
+++ b/src/styles/base/dc-base.scss
@@ -4,38 +4,61 @@
 
 .public-map-popup {
   position: absolute;
-  bottom: 60px;
+  bottom: 80px;
   pointer-events: all;
   display: block;
   transform-origin: left bottom;
   transform: translate(-50%, 0px);
+  border-radius: 5px;
   z-index: auto;
 
+  &::after {
+    content: "";
+    position: absolute;
+    bottom: -80px;
+    left: calc(50% - 3px);
+    display: block;
+    width: 3px;
+    height: 80px;
+    border-right: 3px solid #fff;
+  }
+
   .marsBlueGradientPnl {
+    padding: 4px 8px;
     text-align: center;
-    padding: 5px 30px;
     margin: 0;
     color: #fff;
-    background: linear-gradient(rgb(7 10 203 / 75%), rgb(16 238 220));
     -webkit-border-radius: 5px;
     -moz-border-radius: 5px;
     border-radius: 5px;
-    max-height: 130px;
+    line-height: 32px;
+    width: 112px;
     -webkit-user-select: none;
     -moz-user-select: none;
     -ms-user-select: none;
     user-select: none;
-    white-space: nowrap;
+    word-wrap: break-word;
+    font-size: 14px;
+    background: linear-gradient(rgb(7 10 203 / 75%), rgb(16 238 220));
+  }
 
-    &::after {
-      content: "";
-      position: absolute;
-      bottom: -60px;
-      left: calc(50% - 3px);
-      display: block;
-      width: 3px;
-      height: 60px;
-      border-right: 3px solid #2bcdbb;
+  .map-name {
+    width: 112px;
+    line-height: 24px;
+    text-align: center;
+    color: #FFEB3B;
+    word-wrap: break-word;
+    font-size: 14px;
+    font-weight: bold;
+  }
+
+  .map-icon {
+    display: flex;
+    justify-content: center;
+
+    img {
+      width: 40px;
+      height: 40px;
     }
   }
 }
\ No newline at end of file
diff --git a/src/styles/base/index.scss b/src/styles/base/index.scss
index 119d9d1..d390aaf 100644
--- a/src/styles/base/index.scss
+++ b/src/styles/base/index.scss
@@ -24,6 +24,7 @@
 #app {
   width: 100%;
   height: 100%;
+  overflow: hidden;
 }
 
 ::-webkit-scrollbar {
diff --git a/src/utils/turfPolygon.js b/src/utils/turfPolygon.js
new file mode 100644
index 0000000..ae0b098
--- /dev/null
+++ b/src/utils/turfPolygon.js
@@ -0,0 +1,194 @@
+/*
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-31 10:52:25
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-11-09 15:26:11
+ * @FilePath: \bigScreen\src\utils\turfPolygon.js
+ * @Description:
+ *
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
+ */
+import * as turf from "@turf/turf"
+
+function getAllRegionCenter (data) {
+  let arr = []
+
+  data.forEach((item) => {
+    if (item.position && item.position.length > 0) {
+      arr.push(getRegionCenter(item.position))
+    }
+  })
+
+  arr.push(arr[0])
+
+  if (arr.length == 1) {
+    return arr[0]
+  } else if (arr.length == 2) {
+    return turf.centroid(turf.midpoint(turf.point(arr[0]), turf.point(arr[1])))
+      .geometry.coordinates
+  } else {
+    arr.push(arr[0])
+
+    return turf.centroid(turf.polygon([arr])).geometry.coordinates
+  }
+}
+
+function getRegionCenter (params) {
+  let arr = []
+
+  params.forEach((areaArray) => {
+    let data = JSON.parse(areaArray)
+    if (data.type == "Polygon") {
+      data.coordinates.forEach((item) => {
+        arr.push(turf.centroid(turf.polygon([item])).geometry.coordinates)
+      })
+    } else {
+      data.coordinates.forEach((item) => {
+        arr.push(turf.centroid(turf.polygon([item[0]])).geometry.coordinates)
+      })
+    }
+  })
+
+  if (arr.length == 1) {
+    return arr[0]
+  } else if (arr.length == 2) {
+    return turf.centroid(turf.midpoint(turf.point(arr[0]), turf.point(arr[1])))
+      .geometry.coordinates
+  } else {
+    arr.push(arr[0])
+
+    return turf.centroid(turf.polygon([arr])).geometry.coordinates
+  }
+}
+
+export const getCurRegionCenter = (params) => {
+  let arr = []
+
+  params.forEach((areaArray) => {
+    let data = JSON.parse(areaArray)
+    if (data.type == "Polygon") {
+      data.coordinates.forEach((item) => {
+        arr.push(turf.centroid(turf.polygon([item])).geometry.coordinates)
+      })
+    } else {
+      data.coordinates.forEach((item) => {
+        arr.push(turf.centroid(turf.polygon([item[0]])).geometry.coordinates)
+      })
+    }
+  })
+
+  if (arr.length == 1) {
+    return arr[0]
+  } else if (arr.length == 2) {
+    return turf.centroid(turf.midpoint(turf.point(arr[0]), turf.point(arr[1])))
+      .geometry.coordinates
+  } else {
+    arr.push(arr[0])
+
+    return turf.centroid(turf.polygon([arr])).geometry.coordinates
+  }
+}
+
+export const computerCapacity = (data, type = "", multiple = 4) => {
+  if (type != "") {
+    const center = getAllRegionCenter(data)
+
+    if (type == "all") {
+      window.$viewer.flyToPosition(
+        new global.DC.Position(
+          Number(center[0] + 0.03),
+          Number(center[1] - 0.3),
+          Number(36000),
+          Number(-3),
+          Number(-45),
+          Number(0)
+        ),
+        function () { },
+        3
+      )
+    } else {
+      window.$viewer.flyToPosition(
+        new global.DC.Position(
+          Number(center[0] + 0.0046),
+          Number(center[1] - 0.04),
+          Number(4000),
+          Number(-3),
+          Number(-45),
+          Number(0)
+        ),
+        function () { },
+        3
+      )
+    }
+  } else {
+    let pointArr = []
+    data.forEach((item) => {
+      if (item.longitude && item.latitude) {
+        pointArr.push(turf.point([item.longitude, item.latitude]))
+        return
+      }
+
+      if (item.lng && item.lat) {
+        pointArr.push(turf.point([item.lng, item.lat]))
+        return
+      }
+    })
+
+    const features = turf.featureCollection(pointArr)
+
+    const scope = turf.envelope(features).bbox
+
+    // const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]])
+
+    var poly = turf.polygon([
+      [
+        [scope[0], scope[1]],
+        [scope[2], scope[1]],
+        [scope[2], scope[3]],
+        [scope[0], scope[3]],
+        [scope[0], scope[1]],
+      ],
+    ])
+    var scaledPoly = turf.transformScale(poly, multiple)
+
+    let boxPoint = []
+    scaledPoly.geometry.coordinates[0].forEach((item) => {
+      boxPoint.push(turf.point(item))
+    })
+
+    const boxFeatures = turf.featureCollection(boxPoint)
+
+    const boxScope = turf.envelope(boxFeatures).bbox
+
+    window.$viewer.flyToBounds(
+      boxScope,
+      { heading: 0, pitch: -90, roll: 0 },
+      (e) => { },
+      3
+    )
+  }
+}
+
+export const getMapBounds = (data, type = "") => {
+  let pointArr = []
+
+  data.forEach((item) => {
+    pointArr.push(turf.point([item.x, item.y]))
+    return
+  })
+
+  const features = turf.featureCollection(pointArr)
+
+  const scope = turf.envelope(features).bbox
+
+  // const poly = turf.polygon([[[0, 29], [3.5, 29], [2.5, 32], [0, 29]]])
+
+  return scope
+}
+
+export const getLineSpeed = (data, multiple) => {
+  var line = turf.lineString(data)
+  var length = turf.length(line, { units: "miles" })
+
+  return (length * 1000) / multiple
+}
diff --git a/src/views/companyInfo/index.vue b/src/views/companyInfo/index.vue
index e18d6da..0c9cc94 100644
--- a/src/views/companyInfo/index.vue
+++ b/src/views/companyInfo/index.vue
@@ -2,19 +2,22 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-11-08 11:00:30
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-11-08 12:10:21
+ * @LastEditTime: 2024-11-09 15:31:53
  * @FilePath: \bigScreen\src\views\companyInfo\index.vue
  * @Description: 
  * 
  * Copyright (c) 2024 by shuishen, All Rights Reserved. 
 -->
 <script setup>
+import { computerCapacity } from "utils/turfPolygon.js"
 import qyfw from "@/assets/json/qyfw"
 import rightContainer from './components/rightContainer.vue'
 import centerContainer from './components/centerContainer.vue' // 修改这里
 import mainMenuVue from './components/mainMenu.vue'
 import { onUnmounted } from "vue"
-
+const Cesium = DC.getLib('Cesium')
+const turf = DC.getLib('turf')
+console.log(Cesium, turf, 1111)
 let buttonIndex = ref(1)
 let data = reactive({
   companyInfo: {}
@@ -26,30 +29,20 @@
 data.companyInfo = JSON.parse(localStorage.getItem('companyInfo'))
 let curCompany = qyfw.features.find(item => item.properties.name == data.companyInfo.name)
 
-console.log(curCompany.geometry.coordinates[0].map(d => [...d, 150].join(',')).join(';'), 111)
-
 let wall = new DC.Wall(
-  curCompany.geometry.coordinates[0].map(d => [...d, 150].join(',')).join(';')
+  curCompany.geometry.coordinates[0].map(d => [...d, 125].join(',')).join(';')
 )
 
 wall.setStyle({
   material: new DC.WallTrailMaterialProperty({
-    color: DC.Color.YELLOW,
-    speed: 2
+    color: Cesium.Color.fromBytes(255, 255, 0, 180),
+    speed: 10
   })
 })
 curCompanyWall.addOverlay(wall)
 
 onMounted(() => {
-  window.$viewer.zoomToPosition(new DC.Position(
-    Number(data.companyInfo.lng),
-    Number(data.companyInfo.lat),
-    800,
-    0,
-    -80,
-    0
-  ), () => {
-  })
+  window.$viewer.flyTo(curCompanyWall)
 })
 
 onUnmounted(() => {
diff --git a/src/views/layout/components/mainMenu.vue b/src/views/layout/components/mainMenu.vue
index 238d496..e424b72 100644
--- a/src/views/layout/components/mainMenu.vue
+++ b/src/views/layout/components/mainMenu.vue
@@ -24,7 +24,7 @@
       path: '/layout/survey'
     },
     {
-      menuName: '固定风险源',
+      menuName: '风险源',
       path: '/layout/rs'
     },
     {
@@ -42,6 +42,10 @@
     {
       menuName: '救援队伍',
       path: '/layout/rt'
+    },
+    {
+      menuName: '污染物处理',
+      path: '/layout/pd'
     },
   ]
 )
@@ -90,7 +94,7 @@
   &>div {
     background-image: url(/images/mode-tab.png);
     background-size: cover;
-    width: 150px;
+    width: 136px;
     height: 50px;
     font-size: 16px;
     text-align: center;
diff --git a/src/views/layout/components/scomponents/layersControl.vue b/src/views/layout/components/scomponents/layersControl.vue
index 240b3ab..c40416c 100644
--- a/src/views/layout/components/scomponents/layersControl.vue
+++ b/src/views/layout/components/scomponents/layersControl.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-10-31 10:47:29
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-11-07 17:17:21
+ * @LastEditTime: 2024-11-09 15:08:15
  * @FilePath: \bigScreen\src\views\layout\components\scomponents\layersControl.vue
  * @Description:
  *
@@ -59,7 +59,7 @@
 const { VITE_APP_BASE } = import.meta.env
 
 const treeRef = ref(null)
-
+const Cesium = DC.getLib('Cesium')
 const treeProps = {
   indent: 16,
   showLabelLine: true,
@@ -68,7 +68,7 @@
 const data = [
   {
     id: '1',
-    label: '化工园区',
+    label: '园区倾斜摄影',
     type: 'layer',
     subType: '3Dtile',
     url: VITE_APP_BASE + 'mx/tileset.json',
@@ -84,6 +84,8 @@
     params: {
       size: 1000
     },
+    backgroundIcon: VITE_APP_BASE + 'img/mapicon/qy.png',
+    showPanel: false,
     layerName: 'qyfb'
   },
 
@@ -193,6 +195,8 @@
       size: 1000
     },
     showParams: 'category',
+    backgroundIcon: VITE_APP_BASE + 'img/mapicon/fxy.png',
+    showPanel: false,
     layerName: 'fxy'
   },
 
@@ -308,16 +312,7 @@
       if (item.subType == '3Dtile') {
         if (!addTileLayers[item.layerName]) {
           addTileLayers[item.layerName] = new DC.Tileset(
-            item.url,
-            {
-              maximumMemoryUsage: 128,
-              progressiveResolutionHeightFraction: 0.5,
-              dynamicScreenSpaceErrorDensity: 0.1,
-              cullWithChildrenBounds: false,
-              maximumScreenSpaceError: 256,
-              skipLevelOfDetail: true,
-              preferLeaves: true
-            })
+            item.url)
 
           tileLayers.addOverlay(addTileLayers[item.layerName])
         } else {
@@ -334,13 +329,28 @@
             let data = res.data.data.records
 
             data.filter(i => i.lng && i.lng != '' && i.lat && i.lat != '').forEach(i => {
+              let iconEl = ''
+
+              if ('showPanel' in item && item.showPanel == false) {
+                if (item.backgroundIcon) {
+                  iconEl = `
+                  <div class="map-name">${i[item.showParams] || i.name}</div>
+                  <div class="map-icon">
+                    <img src="${item.backgroundIcon}">
+                  </div>
+                  `
+                }
+              } else {
+                iconEl = `<div class="marsBlueGradientPnl">
+                  <div>${i[item.showParams] || i.name}</div>
+                </div>`
+              }
+
               let divIcon = new DC.DivIcon(
                 new DC.Position(i.lng, i.lat, 0),
                 `<div class="public-map-popup">
-                <div class="marsBlueGradientPnl">
-                  <div>${i[item.showParams] || i.name}</div>
-                </div>
-              </div>`
+                    ${iconEl}
+                  </div>`
               )
 
               addTileLayers[item.layerName].addOverlay(divIcon)
@@ -356,13 +366,13 @@
 
           item.source.features.forEach(i => {
             let wall = new DC.Wall(
-              i.geometry.coordinates[0].map(d => [...d, 200].join(',')).join(';')
+              i.geometry.coordinates[0].map(d => [...d, 125].join(',')).join(';')
             )
 
             wall.setStyle({
               material: new DC.WallTrailMaterialProperty({
-                color: DC.Color.GREEN,
-                speed: 2
+                color: Cesium.Color.fromBytes(0, 123, 255, 180),
+                speed: 10
               })
             })
             addTileLayers[item.layerName].addOverlay(wall)
@@ -375,7 +385,7 @@
           addTileLayers[item.layerName] = new DC.VectorLayer(item.layerName)
           window.$viewer.addLayer(addTileLayers[item.layerName])
 
-          function computeCircle(radius) {
+          function computeCircle (radius) {
             var positions = []
             for (var i = 0; i < 1080; i++) {
               var radians = DC.Math.toRadians(i)
diff --git a/src/views/pd/components/box/dataContent.vue b/src/views/pd/components/box/dataContent.vue
new file mode 100644
index 0000000..1dfeb7c
--- /dev/null
+++ b/src/views/pd/components/box/dataContent.vue
@@ -0,0 +1,158 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from "./publicContent.vue";
+import { getList } from "@/api/rescueTeam/rescueTeam";
+import { reactive } from "vue";
+
+const loading = ref(false);
+
+const tableData = ref([]);
+const pages = {
+  page: 1,
+  pageSize: 13,
+  total: 0,
+};
+
+onMounted(() => {
+  getLists();
+});
+// 表格样式
+const tableCellStyle = ({ row, column }) => {
+  return { background: "#152851", color: "#fff" };
+};
+// 表格表头样式
+const headerCellStyle = ({ }) => {
+  return {
+    background: "#152851",
+    color: "#fff",
+  };
+};
+// 搜索条件
+const formInline = reactive({
+  perInCha: "",
+  type: ''
+});
+
+// 提交查询
+const onSubmit = () => {
+  pages.page = 1
+  pages.pageSize = 13
+  pages.total = 0
+  console.log("submit!");
+  getLists(formInline);
+};
+
+// 分页树改变
+const handleSizeChange = (val) => {
+  pages.pageSize = val;
+  getLists(formInline);
+}
+// 分页改变
+const handleCurrentChange = (val) => {
+  pages.page = val;
+  getLists(formInline);
+}
+// 重置条件
+const clearBtn = () => {
+  formInline.perInCha = ''
+  formInline.type = ''
+  pages.page = 1
+  pages.pageSize = 13
+  pages.total = 0
+  getLists(formInline);
+}
+
+// 查询分页数据
+function getLists(param = {}) {
+  param.current = pages.page;
+  param.size = pages.pageSize;
+  loading.value = true;
+  getList(param)
+    .then((res) => {
+      const data = res.data.data;
+      data.records.forEach((element) => {
+        if (element.type == 1) {
+          element.ownership = "园区";
+        } else {
+          element.ownership = "企业";
+        }
+      });
+      tableData.value = data.records;
+      pages.total = data.total;
+      loading.value = false;
+    })
+    .catch((err) => {
+      loading.value = false;
+      console.log(err);
+    });
+}
+</script>
+
+<template>
+  <public-content>
+    <template #content>
+      <div>
+        <el-form :inline="true" :model="formInline" class="demo-form-inline">
+          <el-form-item label="姓名">
+            <el-input v-model="formInline.perInCha" placeholder="请输入姓名" clearable style="width: 120px" />
+          </el-form-item>
+          <el-form-item label="归属">
+            <el-select v-model="formInline.type" placeholder="请选择" clearable style="width: 120px">
+              <el-option label="园区" value="1" />
+              <el-option label="企业" value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="onSubmit">查询</el-button>
+            <el-button type="" @click="clearBtn">重置</el-button>
+          </el-form-item>
+        </el-form>
+        <el-table :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle" :cell-style="tableCellStyle"
+          v-loading="loading">
+          <el-table-column fixed prop="perInCha" label="责任人姓名" />
+          <el-table-column prop="perInChaPho" label="联系电话" />
+          <!-- <el-table-column prop="firmName" label="单位名称" /> -->
+          <el-table-column prop="ownership" label="归属" width="100" />
+        </el-table>
+        <div class="el-page">
+          <el-pagination background layout="prev, pager, next" :page-size="pages.pageSize" :total="pages.total"
+            @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+        </div>
+      </div>
+    </template>
+  </public-content>
+</template>
+
+<style lang="scss" scoped>
+::v-deep .el-table__body-wrapper {
+  background-color: #152851;
+}
+
+.el-form-item__label {
+  color: #fff !important;
+}
+
+/* 当表格没有数据时,修改表格的背景颜色 */
+.el-table--empty .el-table__body {
+  background-color: rgba(135, 158, 199, 0.3) !important;
+  /* 你想要的背景颜色 */
+}
+
+.el-page {
+  margin-top: 10px;
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  // margin-bottom:10px;
+}
+</style>
diff --git a/src/views/pd/components/box/fireContent.vue b/src/views/pd/components/box/fireContent.vue
new file mode 100644
index 0000000..7152a88
--- /dev/null
+++ b/src/views/pd/components/box/fireContent.vue
@@ -0,0 +1,25 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from './publicContent.vue'
+</script>
+
+<template>
+    <public-content>
+        <template #content>
+            <div>
+
+            </div>
+        </template>
+    </public-content>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/pd/components/box/fireSource.vue b/src/views/pd/components/box/fireSource.vue
new file mode 100644
index 0000000..7152a88
--- /dev/null
+++ b/src/views/pd/components/box/fireSource.vue
@@ -0,0 +1,25 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from './publicContent.vue'
+</script>
+
+<template>
+    <public-content>
+        <template #content>
+            <div>
+
+            </div>
+        </template>
+    </public-content>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/pd/components/box/fireTrend.vue b/src/views/pd/components/box/fireTrend.vue
new file mode 100644
index 0000000..7152a88
--- /dev/null
+++ b/src/views/pd/components/box/fireTrend.vue
@@ -0,0 +1,25 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from './publicContent.vue'
+</script>
+
+<template>
+    <public-content>
+        <template #content>
+            <div>
+
+            </div>
+        </template>
+    </public-content>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/pd/components/box/occurStatistics.vue b/src/views/pd/components/box/occurStatistics.vue
new file mode 100644
index 0000000..7152a88
--- /dev/null
+++ b/src/views/pd/components/box/occurStatistics.vue
@@ -0,0 +1,25 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from './publicContent.vue'
+</script>
+
+<template>
+    <public-content>
+        <template #content>
+            <div>
+
+            </div>
+        </template>
+    </public-content>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/pd/components/box/publicContent.vue b/src/views/pd/components/box/publicContent.vue
new file mode 100644
index 0000000..2ff1476
--- /dev/null
+++ b/src/views/pd/components/box/publicContent.vue
@@ -0,0 +1,26 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-10-25 18:33:46
+ * @FilePath: \bigScreen\src\views\statistics\components\box\publicContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+
+</script>
+
+<template>
+  <div class="content">
+    <slot name="content"></slot>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.content {
+  padding: 20px 0;
+  height: calc(100% - 32px);
+}
+</style>
\ No newline at end of file
diff --git a/src/views/pd/components/box/unitContent.vue b/src/views/pd/components/box/unitContent.vue
new file mode 100644
index 0000000..7152a88
--- /dev/null
+++ b/src/views/pd/components/box/unitContent.vue
@@ -0,0 +1,25 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-13 14:54:26
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 15:00:55
+ * @FilePath: \forest-fire\src\views\statistics\components\box\dataContent.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import publicContent from './publicContent.vue'
+</script>
+
+<template>
+    <public-content>
+        <template #content>
+            <div>
+
+            </div>
+        </template>
+    </public-content>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/pd/components/leftContainer.vue b/src/views/pd/components/leftContainer.vue
new file mode 100644
index 0000000..a679a60
--- /dev/null
+++ b/src/views/pd/components/leftContainer.vue
@@ -0,0 +1,47 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-10 15:27:59
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-11-08 11:39:11
+ * @FilePath: \bigScreen\src\views\rt\components\leftContainer.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import dataContent from './box/dataContent.vue'
+import unitContent from './box/unitContent.vue'
+import fireContent from './box/fireContent.vue'
+</script>
+
+<template>
+  <div class="left-container">
+    <div class="data box">
+      <data-content></data-content>
+    </div>
+
+    <!-- <div class="unit box">
+      <title-box>
+        <template #titleName>
+          入住单位统计
+        </template>
+</title-box>
+<unit-content></unit-content>
+</div>
+
+<div class="fire box">
+  <title-box>
+    <template #titleName>
+          实时火警事件
+        </template>
+  </title-box>
+  <fire-content></fire-content>
+</div> -->
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.left-container {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/pd/components/rightContainer.vue b/src/views/pd/components/rightContainer.vue
new file mode 100644
index 0000000..67eb54e
--- /dev/null
+++ b/src/views/pd/components/rightContainer.vue
@@ -0,0 +1,86 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-10 15:27:59
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-10-26 14:49:05
+ * @FilePath: \bigScreen\src\views\survey\components\rightContainer.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import fireSource from './box/fireSource.vue'
+import fireTrend from './box/fireTrend.vue'
+import occurStatistics from './box/occurStatistics.vue'
+import publicContent from './box/publicContent.vue'
+</script>
+
+<template>
+  <div class="right-container">
+    <div class="fire-source box">
+      <title-box>
+        <template #titleName>
+          火警事件来源
+        </template>
+      </title-box>
+      <fire-source></fire-source>
+    </div>
+
+    <div class="occur-statistics box">
+      <title-box>
+        <template #titleName>
+          易发区统计
+        </template>
+      </title-box>
+      <fire-trend></fire-trend>
+    </div>
+
+    <div class="fire-trend box">
+      <title-box>
+        <template #titleName>
+          火警上报趋势
+        </template>
+      </title-box>
+      <occur-statistics></occur-statistics>
+    </div>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.right-container {
+  display: flex;
+  flex-direction: column;
+  padding: 20px;
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 440px;
+  height: 100%;
+  pointer-events: auto;
+
+  .box {
+    margin-top: 20px;
+
+    .header {
+      height: 32px;
+      background: url(/img/bg/sub-title.png) no-repeat;
+    }
+  }
+
+  .fire-source {
+    flex: 3;
+  }
+
+  .occur-statistics {
+    flex: 3;
+  }
+
+  .fire-trend {
+    flex: 4;
+  }
+
+  .box:first-child {
+    margin-top: 0;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/pd/index.vue b/src/views/pd/index.vue
new file mode 100644
index 0000000..039387e
--- /dev/null
+++ b/src/views/pd/index.vue
@@ -0,0 +1,30 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-10 15:27:59
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-03-13 16:02:07
+ * @FilePath: \forest-fire\src\views\statistics\index.vue
+ * @Description: 综合设计
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import leftContainer from './components/leftContainer.vue'
+import rightContainer from './components/rightContainer.vue'
+</script>
+
+<template>
+    <div class="container page-container">
+        <left-container></left-container>
+
+        <!-- <right-container></right-container> -->
+    </div>
+</template>
+
+<style lang="scss" scoped>
+.container {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/space/components/leftContainer.vue b/src/views/space/components/leftContainer.vue
index e1d9633..362a7e7 100644
--- a/src/views/space/components/leftContainer.vue
+++ b/src/views/space/components/leftContainer.vue
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-10 15:27:59
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-11-08 15:49:02
+ * @LastEditTime: 2024-11-09 15:46:30
  * @FilePath: \bigScreen\src\views\space\components\leftContainer.vue
  * @Description: 
  * 
@@ -15,17 +15,7 @@
 </script>
 
 <template>
-  <div class="left-container">
-    <div class="data box h0 flex-1">
-      <title-box>
-        <template #titleName>
-          应急空间信息
-        </template>
-      </title-box>
-      <div class="content-box">
-        <data-content></data-content>
-      </div>
-    </div>
+  <div class="left-container cur-container">
 
     <!-- <div class="unit box">
       <title-box>
@@ -47,4 +37,9 @@
   </div>
 </template>
 
-<style lang="scss" scoped></style>
\ No newline at end of file
+<style lang="scss" scoped>
+.cur-container {
+  background: transparent;
+  pointer-events: none;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/space/components/rightContainer.vue b/src/views/space/components/rightContainer.vue
index 67eb54e..a22198b 100644
--- a/src/views/space/components/rightContainer.vue
+++ b/src/views/space/components/rightContainer.vue
@@ -2,85 +2,49 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-10 15:27:59
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-10-26 14:49:05
- * @FilePath: \bigScreen\src\views\survey\components\rightContainer.vue
+ * @LastEditTime: 2024-11-08 15:49:02
+ * @FilePath: \bigScreen\src\views\space\components\leftContainer.vue
  * @Description: 
  * 
  * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
 -->
 <script setup>
-import fireSource from './box/fireSource.vue'
-import fireTrend from './box/fireTrend.vue'
-import occurStatistics from './box/occurStatistics.vue'
-import publicContent from './box/publicContent.vue'
+import dataContent from './box/dataContent.vue'
+import unitContent from './box/unitContent.vue'
+import fireContent from './box/fireContent.vue'
 </script>
 
 <template>
   <div class="right-container">
-    <div class="fire-source box">
+    <div class="data box h0 flex-1">
       <title-box>
         <template #titleName>
-          火警事件来源
+          应急空间信息
         </template>
       </title-box>
-      <fire-source></fire-source>
+      <div class="content-box">
+        <data-content></data-content>
+      </div>
     </div>
 
-    <div class="occur-statistics box">
+    <!-- <div class="unit box">
       <title-box>
         <template #titleName>
-          易发区统计
+          入住单位统计
         </template>
       </title-box>
-      <fire-trend></fire-trend>
+      <unit-content></unit-content>
     </div>
 
-    <div class="fire-trend box">
+    <div class="fire box">
       <title-box>
         <template #titleName>
-          火警上报趋势
+          实时火警事件
         </template>
       </title-box>
-      <occur-statistics></occur-statistics>
-    </div>
+      <fire-content></fire-content>
+    </div> -->
   </div>
 </template>
 
-<style lang="scss" scoped>
-.right-container {
-  display: flex;
-  flex-direction: column;
-  padding: 20px;
-  position: absolute;
-  top: 0;
-  right: 0;
-  width: 440px;
-  height: 100%;
-  pointer-events: auto;
-
-  .box {
-    margin-top: 20px;
-
-    .header {
-      height: 32px;
-      background: url(/img/bg/sub-title.png) no-repeat;
-    }
-  }
-
-  .fire-source {
-    flex: 3;
-  }
-
-  .occur-statistics {
-    flex: 3;
-  }
-
-  .fire-trend {
-    flex: 4;
-  }
-
-  .box:first-child {
-    margin-top: 0;
-  }
-}
-</style>
\ No newline at end of file
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/space/index.vue b/src/views/space/index.vue
index 0730fa9..f230165 100644
--- a/src/views/space/index.vue
+++ b/src/views/space/index.vue
@@ -2,8 +2,8 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2023-03-10 15:27:59
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2023-03-13 16:02:07
- * @FilePath: \forest-fire\src\views\statistics\index.vue
+ * @LastEditTime: 2024-11-09 15:43:51
+ * @FilePath: \bigScreen\src\views\space\index.vue
  * @Description: 综合设计
  * 
  * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
@@ -16,7 +16,7 @@
 <template>
     <div class="container page-container">
         <left-container></left-container>
-        <!-- <right-container></right-container> -->
+        <right-container></right-container>
     </div>
 </template>
 

--
Gitblit v1.9.3