From 7e6b37afd1295c71bca1de595426330aff88420d Mon Sep 17 00:00:00 2001
From: surprise <15810472099@163.com>
Date: 星期一, 08 一月 2024 09:55:53 +0800
Subject: [PATCH] 代码提交

---
 vue.config.js                                         |    6 
 src/components/menu/tools/plotting.vue                |   10 
 static/SmartEarthSDK/Workers/field/rendermapWorker.js |    2 
 static/img/test03-01.png                              |    0 
 src/assets/js/Layer/test03-01.png                     |    0 
 src/components/menu/tools/roam.vue                    |    6 
 static/image/锥桶.png                                   |    0 
 src/assets/js/Layer/model.js                          |   11 
 src/components/menu/tools/special copy.vue            | 1247 +++++++++++++++
 static/image/施工车辆.png                                 |    0 
 static/layers.json                                    |   94 +
 src/components/menu/tools/special.vue                 |  119 
 src/components/left/layerTree/modelEdit.vue           |    4 
 src/components/left/layerTree/messageInfo.vue         |  129 +
 src/components/left/layerTree/Layer.vue               |   24 
 src/assets/img/model/桶.png                            |    0 
 src/store/index.js                                    |   26 
 src/components/left/layerTree/zhaiHaiInfo.vue         |  204 ++
 src/assets/js/Layer/mapOL.js                          |  217 ++
 src/router/index.js                                   |    2 
 src/components/index.vue                              |   12 
 src/components/menu/tools/measure.vue                 |  130 
 src/components/right/@/assets/img/new/yingxiang.png   |    0 
 src/components/menu/menulist.vue                      |   16 
 static/html/AnalysisResultEchartLine.html             |    2 
 src/components/right/right-bottom.vue                 |   32 
 src/components/left/leftmenu.vue                      |   86 
 src/store/mapSplit.js                                 |    2 
 static/CimSDK/Workers/field/rendermapWorker.js        |    2 
 src/components/right/right-top.vue                    |    9 
 src/assets/img/model/工人.png                           |    0 
 package-lock.json                                     | 1429 ++++++++++++++++
 src/components/right/switchImagerLayer.vue            |   79 
 static/image/路障.png                                   |    0 
 src/components/left/layerTree.vue                     |    4 
 src/components/left/layerTree/menuQuery.vue           |  274 +++
 static/data/layerData.js                              |   49 
 src/api/api.js                                        |    8 
 src/assets/js/Layer/zhuanghao.js                      |  139 +
 src/assets/js/Layer/mapViewer.js                      |   29 
 static/SmartEarthSDK/Workers/prop/property_prop.html  |    2 
 src/assets/js/Layer/mapGeo.js                         |  180 ++
 src/assets/img/model/锥桶.png                           |    0 
 src/assets/js/Layer/mapInfo.js                        |   78 
 src/assets/js/Layer/measure.js                        |   32 
 src/assets/img/model/施工车辆.png                         |    0 
 src/components/left/layerTree/measureCoord.vue        |  175 ++
 static/image/桶.png                                    |    0 
 src/components/map/viewer.vue                         |   63 
 static/image/工人.png                                   |    0 
 src/assets/js/Layer/menuGrid.js                       |   13 
 src/components/map/history.vue                        |    4 
 package.json                                          |    1 
 src/assets/img/model/路障.png                           |    0 
 54 files changed, 4,592 insertions(+), 359 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 99b4990..df2083b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -142,6 +142,1284 @@
       "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
       "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="
     },
+    "@turf/along": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/along/-/along-6.5.0.tgz",
+      "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/angle": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/angle/-/angle-6.5.0.tgz",
+      "integrity": "sha512-4pXMbWhFofJJAOvTMCns6N4C8CMd5Ih4O2jSAG9b3dDHakj3O4yN1+Zbm+NUei+eVEZ9gFeVp9svE3aMDenIkw==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0"
+      }
+    },
+    "@turf/area": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/area/-/area-6.5.0.tgz",
+      "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/bbox": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/bbox/-/bbox-6.5.0.tgz",
+      "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/bbox-clip": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/bbox-clip/-/bbox-clip-6.5.0.tgz",
+      "integrity": "sha512-F6PaIRF8WMp8EmgU/Ke5B1Y6/pia14UAYB5TiBC668w5rVVjy5L8rTm/m2lEkkDMHlzoP9vNY4pxpNthE7rLcQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/bbox-polygon": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz",
+      "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/bearing": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/bearing/-/bearing-6.5.0.tgz",
+      "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/bezier-spline": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/bezier-spline/-/bezier-spline-6.5.0.tgz",
+      "integrity": "sha512-vokPaurTd4PF96rRgGVm6zYYC5r1u98ZsG+wZEv9y3kJTuJRX/O3xIY2QnTGTdbVmAJN1ouOsD0RoZYaVoXORQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/boolean-clockwise": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz",
+      "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/boolean-contains": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz",
+      "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/boolean-point-on-line": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/boolean-crosses": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-crosses/-/boolean-crosses-6.5.0.tgz",
+      "integrity": "sha512-gvshbTPhAHporTlQwBJqyfW+2yV8q/mOTxG6PzRVl6ARsqNoqYQWkd4MLug7OmAqVyBzLK3201uAeBjxbGw0Ng==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/polygon-to-line": "^6.5.0"
+      }
+    },
+    "@turf/boolean-disjoint": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-disjoint/-/boolean-disjoint-6.5.0.tgz",
+      "integrity": "sha512-rZ2ozlrRLIAGo2bjQ/ZUu4oZ/+ZjGvLkN5CKXSKBcu6xFO6k2bgqeM8a1836tAW+Pqp/ZFsTA5fZHsJZvP2D5g==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/polygon-to-line": "^6.5.0"
+      }
+    },
+    "@turf/boolean-equal": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-equal/-/boolean-equal-6.5.0.tgz",
+      "integrity": "sha512-cY0M3yoLC26mhAnjv1gyYNQjn7wxIXmL2hBmI/qs8g5uKuC2hRWi13ydufE3k4x0aNRjFGlg41fjoYLwaVF+9Q==",
+      "requires": {
+        "@turf/clean-coords": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "geojson-equality": "0.1.6"
+      }
+    },
+    "@turf/boolean-intersects": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-intersects/-/boolean-intersects-6.5.0.tgz",
+      "integrity": "sha512-nIxkizjRdjKCYFQMnml6cjPsDOBCThrt+nkqtSEcxkKMhAQj5OO7o2CecioNTaX8EayqwMGVKcsz27oP4mKPTw==",
+      "requires": {
+        "@turf/boolean-disjoint": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/boolean-overlap": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz",
+      "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/line-overlap": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "geojson-equality": "0.1.6"
+      }
+    },
+    "@turf/boolean-parallel": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-parallel/-/boolean-parallel-6.5.0.tgz",
+      "integrity": "sha512-aSHJsr1nq9e5TthZGZ9CZYeXklJyRgR5kCLm5X4urz7+MotMOp/LsGOsvKvK9NeUl9+8OUmfMn8EFTT8LkcvIQ==",
+      "requires": {
+        "@turf/clean-coords": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/line-segment": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0"
+      }
+    },
+    "@turf/boolean-point-in-polygon": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz",
+      "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/boolean-point-on-line": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz",
+      "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/boolean-within": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/boolean-within/-/boolean-within-6.5.0.tgz",
+      "integrity": "sha512-YQB3oU18Inx35C/LU930D36RAVe7LDXk1kWsQ8mLmuqYn9YdPsDQTMTkLJMhoQ8EbN7QTdy333xRQ4MYgToteQ==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/boolean-point-on-line": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/buffer": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/buffer/-/buffer-6.5.0.tgz",
+      "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/center": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/projection": "^6.5.0",
+        "d3-geo": "1.7.1",
+        "turf-jsts": "*"
+      }
+    },
+    "@turf/center": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/center/-/center-6.5.0.tgz",
+      "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/center-mean": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/center-mean/-/center-mean-6.5.0.tgz",
+      "integrity": "sha512-AAX6f4bVn12pTVrMUiB9KrnV94BgeBKpyg3YpfnEbBpkN/znfVhL8dG8IxMAxAoSZ61Zt9WLY34HfENveuOZ7Q==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/center-median": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/center-median/-/center-median-6.5.0.tgz",
+      "integrity": "sha512-dT8Ndu5CiZkPrj15PBvslpuf01ky41DEYEPxS01LOxp5HOUHXp1oJxsPxvc+i/wK4BwccPNzU1vzJ0S4emd1KQ==",
+      "requires": {
+        "@turf/center-mean": "^6.5.0",
+        "@turf/centroid": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/center-of-mass": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/center-of-mass/-/center-of-mass-6.5.0.tgz",
+      "integrity": "sha512-EWrriU6LraOfPN7m1jZi+1NLTKNkuIsGLZc2+Y8zbGruvUW+QV7K0nhf7iZWutlxHXTBqEXHbKue/o79IumAsQ==",
+      "requires": {
+        "@turf/centroid": "^6.5.0",
+        "@turf/convex": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/centroid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/centroid/-/centroid-6.5.0.tgz",
+      "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/circle": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/circle/-/circle-6.5.0.tgz",
+      "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==",
+      "requires": {
+        "@turf/destination": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/clean-coords": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/clean-coords/-/clean-coords-6.5.0.tgz",
+      "integrity": "sha512-EMX7gyZz0WTH/ET7xV8MyrExywfm9qUi0/MY89yNffzGIEHuFfqwhcCqZ8O00rZIPZHUTxpmsxQSTfzJJA1CPw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/clone": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/clone/-/clone-6.5.0.tgz",
+      "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/clusters": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/clusters/-/clusters-6.5.0.tgz",
+      "integrity": "sha512-Y6gfnTJzQ1hdLfCsyd5zApNbfLIxYEpmDibHUqR5z03Lpe02pa78JtgrgUNt1seeO/aJ4TG1NLN8V5gOrHk04g==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/clusters-dbscan": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/clusters-dbscan/-/clusters-dbscan-6.5.0.tgz",
+      "integrity": "sha512-SxZEE4kADU9DqLRiT53QZBBhu8EP9skviSyl+FGj08Y01xfICM/RR9ACUdM0aEQimhpu+ZpRVcUK+2jtiCGrYQ==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "density-clustering": "1.3.0"
+      }
+    },
+    "@turf/clusters-kmeans": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/clusters-kmeans/-/clusters-kmeans-6.5.0.tgz",
+      "integrity": "sha512-DwacD5+YO8kwDPKaXwT9DV46tMBVNsbi1IzdajZu1JDSWoN7yc7N9Qt88oi+p30583O0UPVkAK+A10WAQv4mUw==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "skmeans": "0.9.7"
+      }
+    },
+    "@turf/collect": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/collect/-/collect-6.5.0.tgz",
+      "integrity": "sha512-4dN/T6LNnRg099m97BJeOcTA5fSI8cu87Ydgfibewd2KQwBexO69AnjEFqfPX3Wj+Zvisj1uAVIZbPmSSrZkjg==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "rbush": "2.x"
+      },
+      "dependencies": {
+        "quickselect": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-1.1.1.tgz",
+          "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
+        },
+        "rbush": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmmirror.com/rbush/-/rbush-2.0.2.tgz",
+          "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==",
+          "requires": {
+            "quickselect": "^1.0.1"
+          }
+        }
+      }
+    },
+    "@turf/combine": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/combine/-/combine-6.5.0.tgz",
+      "integrity": "sha512-Q8EIC4OtAcHiJB3C4R+FpB4LANiT90t17uOd851qkM2/o6m39bfN5Mv0PWqMZIHWrrosZqRqoY9dJnzz/rJxYQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/concave": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/concave/-/concave-6.5.0.tgz",
+      "integrity": "sha512-I/sUmUC8TC5h/E2vPwxVht+nRt+TnXIPRoztDFvS8/Y0+cBDple9inLSo9nnPXMXidrBlGXZ9vQx/BjZUJgsRQ==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/tin": "^6.5.0",
+        "topojson-client": "3.x",
+        "topojson-server": "3.x"
+      }
+    },
+    "@turf/convex": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/convex/-/convex-6.5.0.tgz",
+      "integrity": "sha512-x7ZwC5z7PJB0SBwNh7JCeCNx7Iu+QSrH7fYgK0RhhNop13TqUlvHMirMLRgf2db1DqUetrAO2qHJeIuasquUWg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "concaveman": "*"
+      }
+    },
+    "@turf/destination": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/destination/-/destination-6.5.0.tgz",
+      "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/difference": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/difference/-/difference-6.5.0.tgz",
+      "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "polygon-clipping": "^0.15.3"
+      }
+    },
+    "@turf/dissolve": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/dissolve/-/dissolve-6.5.0.tgz",
+      "integrity": "sha512-WBVbpm9zLTp0Bl9CE35NomTaOL1c4TQCtEoO43YaAhNEWJOOIhZMFJyr8mbvYruKl817KinT3x7aYjjCMjTAsQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "polygon-clipping": "^0.15.3"
+      }
+    },
+    "@turf/distance": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/distance/-/distance-6.5.0.tgz",
+      "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/distance-weight": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/distance-weight/-/distance-weight-6.5.0.tgz",
+      "integrity": "sha512-a8qBKkgVNvPKBfZfEJZnC3DV7dfIsC3UIdpRci/iap/wZLH41EmS90nM+BokAJflUHYy8PqE44wySGWHN1FXrQ==",
+      "requires": {
+        "@turf/centroid": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/ellipse": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/ellipse/-/ellipse-6.5.0.tgz",
+      "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/rhumb-destination": "^6.5.0",
+        "@turf/transform-rotate": "^6.5.0"
+      }
+    },
+    "@turf/envelope": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/envelope/-/envelope-6.5.0.tgz",
+      "integrity": "sha512-9Z+FnBWvOGOU4X+fMZxYFs1HjFlkKqsddLuMknRaqcJd6t+NIv5DWvPtDL8ATD2GEExYDiFLwMdckfr1yqJgHA==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/bbox-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/explode": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/explode/-/explode-6.5.0.tgz",
+      "integrity": "sha512-6cSvMrnHm2qAsace6pw9cDmK2buAlw8+tjeJVXMfMyY+w7ZUi1rprWMsY92J7s2Dar63Bv09n56/1V7+tcj52Q==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/flatten": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/flatten/-/flatten-6.5.0.tgz",
+      "integrity": "sha512-IBZVwoNLVNT6U/bcUUllubgElzpMsNoCw8tLqBw6dfYg9ObGmpEjf9BIYLr7a2Yn5ZR4l7YIj2T7kD5uJjZADQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/flip": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/flip/-/flip-6.5.0.tgz",
+      "integrity": "sha512-oyikJFNjt2LmIXQqgOGLvt70RgE2lyzPMloYWM7OR5oIFGRiBvqVD2hA6MNw6JewIm30fWZ8DQJw1NHXJTJPbg==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/great-circle": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/great-circle/-/great-circle-6.5.0.tgz",
+      "integrity": "sha512-7ovyi3HaKOXdFyN7yy1yOMa8IyOvV46RC1QOQTT+RYUN8ke10eyqExwBpL9RFUPvlpoTzoYbM/+lWPogQlFncg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/helpers": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/helpers/-/helpers-6.5.0.tgz",
+      "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="
+    },
+    "@turf/hex-grid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/hex-grid/-/hex-grid-6.5.0.tgz",
+      "integrity": "sha512-Ln3tc2tgZT8etDOldgc6e741Smg1CsMKAz1/Mlel+MEL5Ynv2mhx3m0q4J9IB1F3a4MNjDeVvm8drAaf9SF33g==",
+      "requires": {
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/intersect": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/interpolate": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/interpolate/-/interpolate-6.5.0.tgz",
+      "integrity": "sha512-LSH5fMeiGyuDZ4WrDJNgh81d2DnNDUVJtuFryJFup8PV8jbs46lQGfI3r1DJ2p1IlEJIz3pmAZYeTfMMoeeohw==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/centroid": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/hex-grid": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/point-grid": "^6.5.0",
+        "@turf/square-grid": "^6.5.0",
+        "@turf/triangle-grid": "^6.5.0"
+      }
+    },
+    "@turf/intersect": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/intersect/-/intersect-6.5.0.tgz",
+      "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "polygon-clipping": "^0.15.3"
+      }
+    },
+    "@turf/invariant": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/invariant/-/invariant-6.5.0.tgz",
+      "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/isobands": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/isobands/-/isobands-6.5.0.tgz",
+      "integrity": "sha512-4h6sjBPhRwMVuFaVBv70YB7eGz+iw0bhPRnp+8JBdX1UPJSXhoi/ZF2rACemRUr0HkdVB/a1r9gC32vn5IAEkw==",
+      "requires": {
+        "@turf/area": "^6.5.0",
+        "@turf/bbox": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/explode": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "object-assign": "*"
+      }
+    },
+    "@turf/isolines": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/isolines/-/isolines-6.5.0.tgz",
+      "integrity": "sha512-6ElhiLCopxWlv4tPoxiCzASWt/jMRvmp6mRYrpzOm3EUl75OhHKa/Pu6Y9nWtCMmVC/RcWtiiweUocbPLZLm0A==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "object-assign": "*"
+      }
+    },
+    "@turf/kinks": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/kinks/-/kinks-6.5.0.tgz",
+      "integrity": "sha512-ViCngdPt1eEL7hYUHR2eHR662GvCgTc35ZJFaNR6kRtr6D8plLaDju0FILeFFWSc+o8e3fwxZEJKmFj9IzPiIQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/length": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/length/-/length-6.5.0.tgz",
+      "integrity": "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig==",
+      "requires": {
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/line-arc": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-arc/-/line-arc-6.5.0.tgz",
+      "integrity": "sha512-I6c+V6mIyEwbtg9P9zSFF89T7QPe1DPTG3MJJ6Cm1MrAY0MdejwQKOpsvNl8LDU2ekHOlz2kHpPVR7VJsoMllA==",
+      "requires": {
+        "@turf/circle": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/line-chunk": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-chunk/-/line-chunk-6.5.0.tgz",
+      "integrity": "sha512-i1FGE6YJaaYa+IJesTfyRRQZP31QouS+wh/pa6O3CC0q4T7LtHigyBSYjrbjSLfn2EVPYGlPCMFEqNWCOkC6zg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/length": "^6.5.0",
+        "@turf/line-slice-along": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/line-intersect": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz",
+      "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-segment": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "geojson-rbush": "3.x"
+      }
+    },
+    "@turf/line-offset": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-offset/-/line-offset-6.5.0.tgz",
+      "integrity": "sha512-CEXZbKgyz8r72qRvPchK0dxqsq8IQBdH275FE6o4MrBkzMcoZsfSjghtXzKaz9vvro+HfIXal0sTk2mqV1lQTw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/line-overlap": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-overlap/-/line-overlap-6.5.0.tgz",
+      "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==",
+      "requires": {
+        "@turf/boolean-point-on-line": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-segment": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/nearest-point-on-line": "^6.5.0",
+        "deep-equal": "1.x",
+        "geojson-rbush": "3.x"
+      }
+    },
+    "@turf/line-segment": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-segment/-/line-segment-6.5.0.tgz",
+      "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/line-slice": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-slice/-/line-slice-6.5.0.tgz",
+      "integrity": "sha512-vDqJxve9tBHhOaVVFXqVjF5qDzGtKWviyjbyi2QnSnxyFAmLlLnBfMX8TLQCAf2GxHibB95RO5FBE6I2KVPRuw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/nearest-point-on-line": "^6.5.0"
+      }
+    },
+    "@turf/line-slice-along": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-slice-along/-/line-slice-along-6.5.0.tgz",
+      "integrity": "sha512-KHJRU6KpHrAj+BTgTNqby6VCTnDzG6a1sJx/I3hNvqMBLvWVA2IrkR9L9DtsQsVY63IBwVdQDqiwCuZLDQh4Ng==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/line-split": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-split/-/line-split-6.5.0.tgz",
+      "integrity": "sha512-/rwUMVr9OI2ccJjw7/6eTN53URtGThNSD5I0GgxyFXMtxWiloRJ9MTff8jBbtPWrRka/Sh2GkwucVRAEakx9Sw==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/line-segment": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/nearest-point-on-line": "^6.5.0",
+        "@turf/square": "^6.5.0",
+        "@turf/truncate": "^6.5.0",
+        "geojson-rbush": "3.x"
+      }
+    },
+    "@turf/line-to-polygon": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/line-to-polygon/-/line-to-polygon-6.5.0.tgz",
+      "integrity": "sha512-qYBuRCJJL8Gx27OwCD1TMijM/9XjRgXH/m/TyuND4OXedBpIWlK5VbTIO2gJ8OCfznBBddpjiObLBrkuxTpN4Q==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/mask": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/mask/-/mask-6.5.0.tgz",
+      "integrity": "sha512-RQha4aU8LpBrmrkH8CPaaoAfk0Egj5OuXtv6HuCQnHeGNOQt3TQVibTA3Sh4iduq4EPxnZfDjgsOeKtrCA19lg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "polygon-clipping": "^0.15.3"
+      }
+    },
+    "@turf/meta": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/meta/-/meta-6.5.0.tgz",
+      "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/midpoint": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/midpoint/-/midpoint-6.5.0.tgz",
+      "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/moran-index": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/moran-index/-/moran-index-6.5.0.tgz",
+      "integrity": "sha512-ItsnhrU2XYtTtTudrM8so4afBCYWNaB0Mfy28NZwLjB5jWuAsvyV+YW+J88+neK/ougKMTawkmjQqodNJaBeLQ==",
+      "requires": {
+        "@turf/distance-weight": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/nearest-point": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/nearest-point/-/nearest-point-6.5.0.tgz",
+      "integrity": "sha512-fguV09QxilZv/p94s8SMsXILIAMiaXI5PATq9d7YWijLxWUj6Q/r43kxyoi78Zmwwh1Zfqz9w+bCYUAxZ5+euA==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/nearest-point-on-line": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz",
+      "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/nearest-point-to-line": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/nearest-point-to-line/-/nearest-point-to-line-6.5.0.tgz",
+      "integrity": "sha512-PXV7cN0BVzUZdjj6oeb/ESnzXSfWmEMrsfZSDRgqyZ9ytdiIj/eRsnOXLR13LkTdXVOJYDBuf7xt1mLhM4p6+Q==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/point-to-line-distance": "^6.5.0",
+        "object-assign": "*"
+      }
+    },
+    "@turf/planepoint": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/planepoint/-/planepoint-6.5.0.tgz",
+      "integrity": "sha512-R3AahA6DUvtFbka1kcJHqZ7DMHmPXDEQpbU5WaglNn7NaCQg9HB0XM0ZfqWcd5u92YXV+Gg8QhC8x5XojfcM4Q==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/point-grid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/point-grid/-/point-grid-6.5.0.tgz",
+      "integrity": "sha512-Iq38lFokNNtQJnOj/RBKmyt6dlof0yhaHEDELaWHuECm1lIZLY3ZbVMwbs+nXkwTAHjKfS/OtMheUBkw+ee49w==",
+      "requires": {
+        "@turf/boolean-within": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/point-on-feature": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/point-on-feature/-/point-on-feature-6.5.0.tgz",
+      "integrity": "sha512-bDpuIlvugJhfcF/0awAQ+QI6Om1Y1FFYE8Y/YdxGRongivix850dTeXCo0mDylFdWFPGDo7Mmh9Vo4VxNwW/TA==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/center": "^6.5.0",
+        "@turf/explode": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/nearest-point": "^6.5.0"
+      }
+    },
+    "@turf/point-to-line-distance": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz",
+      "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==",
+      "requires": {
+        "@turf/bearing": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/projection": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0",
+        "@turf/rhumb-distance": "^6.5.0"
+      }
+    },
+    "@turf/points-within-polygon": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/points-within-polygon/-/points-within-polygon-6.5.0.tgz",
+      "integrity": "sha512-YyuheKqjliDsBDt3Ho73QVZk1VXX1+zIA2gwWvuz8bR1HXOkcuwk/1J76HuFMOQI3WK78wyAi+xbkx268PkQzQ==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/polygon-smooth": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/polygon-smooth/-/polygon-smooth-6.5.0.tgz",
+      "integrity": "sha512-LO/X/5hfh/Rk4EfkDBpLlVwt3i6IXdtQccDT9rMjXEP32tRgy0VMFmdkNaXoGlSSKf/1mGqLl4y4wHd86DqKbg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/polygon-tangents": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/polygon-tangents/-/polygon-tangents-6.5.0.tgz",
+      "integrity": "sha512-sB4/IUqJMYRQH9jVBwqS/XDitkEfbyqRy+EH/cMRJURTg78eHunvJ708x5r6umXsbiUyQU4eqgPzEylWEQiunw==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/boolean-within": "^6.5.0",
+        "@turf/explode": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/nearest-point": "^6.5.0"
+      }
+    },
+    "@turf/polygon-to-line": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz",
+      "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/polygonize": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/polygonize/-/polygonize-6.5.0.tgz",
+      "integrity": "sha512-a/3GzHRaCyzg7tVYHo43QUChCspa99oK4yPqooVIwTC61npFzdrmnywMv0S+WZjHZwK37BrFJGFrZGf6ocmY5w==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/envelope": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/projection": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/projection/-/projection-6.5.0.tgz",
+      "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/random": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/random/-/random-6.5.0.tgz",
+      "integrity": "sha512-8Q25gQ/XbA7HJAe+eXp4UhcXM9aOOJFaxZ02+XSNwMvY8gtWSCBLVqRcW4OhqilgZ8PeuQDWgBxeo+BIqqFWFQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/rectangle-grid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/rectangle-grid/-/rectangle-grid-6.5.0.tgz",
+      "integrity": "sha512-yQZ/1vbW68O2KsSB3OZYK+72aWz/Adnf7m2CMKcC+aq6TwjxZjAvlbCOsNUnMAuldRUVN1ph6RXMG4e9KEvKvg==",
+      "requires": {
+        "@turf/boolean-intersects": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/rewind": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/rewind/-/rewind-6.5.0.tgz",
+      "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==",
+      "requires": {
+        "@turf/boolean-clockwise": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/rhumb-bearing": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz",
+      "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/rhumb-destination": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz",
+      "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/rhumb-distance": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz",
+      "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0"
+      }
+    },
+    "@turf/sample": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/sample/-/sample-6.5.0.tgz",
+      "integrity": "sha512-kSdCwY7el15xQjnXYW520heKUrHwRvnzx8ka4eYxX9NFeOxaFITLW2G7UtXb6LJK8mmPXI8Aexv23F2ERqzGFg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/sector": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/sector/-/sector-6.5.0.tgz",
+      "integrity": "sha512-cYUOkgCTWqa23SOJBqxoFAc/yGCUsPRdn/ovbRTn1zNTm/Spmk6hVB84LCKOgHqvSF25i0d2kWqpZDzLDdAPbw==",
+      "requires": {
+        "@turf/circle": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/line-arc": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/shortest-path": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/shortest-path/-/shortest-path-6.5.0.tgz",
+      "integrity": "sha512-4de5+G7+P4hgSoPwn+SO9QSi9HY5NEV/xRJ+cmoFVRwv2CDsuOPDheHKeuIAhKyeKDvPvPt04XYWbac4insJMg==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/bbox-polygon": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/clean-coords": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/transform-scale": "^6.5.0"
+      }
+    },
+    "@turf/simplify": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/simplify/-/simplify-6.5.0.tgz",
+      "integrity": "sha512-USas3QqffPHUY184dwQdP8qsvcVH/PWBYdXY5am7YTBACaQOMAlf6AKJs9FT8jiO6fQpxfgxuEtwmox+pBtlOg==",
+      "requires": {
+        "@turf/clean-coords": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/square": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/square/-/square-6.5.0.tgz",
+      "integrity": "sha512-BM2UyWDmiuHCadVhHXKIx5CQQbNCpOxB6S/aCNOCLbhCeypKX5Q0Aosc5YcmCJgkwO5BERCC6Ee7NMbNB2vHmQ==",
+      "requires": {
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/square-grid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/square-grid/-/square-grid-6.5.0.tgz",
+      "integrity": "sha512-mlR0ayUdA+L4c9h7p4k3pX6gPWHNGuZkt2c5II1TJRmhLkW2557d6b/Vjfd1z9OVaajb1HinIs1FMSAPXuuUrA==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/rectangle-grid": "^6.5.0"
+      }
+    },
+    "@turf/standard-deviational-ellipse": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-6.5.0.tgz",
+      "integrity": "sha512-02CAlz8POvGPFK2BKK8uHGUk/LXb0MK459JVjKxLC2yJYieOBTqEbjP0qaWhiBhGzIxSMaqe8WxZ0KvqdnstHA==",
+      "requires": {
+        "@turf/center-mean": "^6.5.0",
+        "@turf/ellipse": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/points-within-polygon": "^6.5.0"
+      }
+    },
+    "@turf/tag": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/tag/-/tag-6.5.0.tgz",
+      "integrity": "sha512-XwlBvrOV38CQsrNfrxvBaAPBQgXMljeU0DV8ExOyGM7/hvuGHJw3y8kKnQ4lmEQcmcrycjDQhP7JqoRv8vFssg==",
+      "requires": {
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/tesselate": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/tesselate/-/tesselate-6.5.0.tgz",
+      "integrity": "sha512-M1HXuyZFCfEIIKkglh/r5L9H3c5QTEsnMBoZOFQiRnGPGmJWcaBissGb7mTFX2+DKE7FNWXh4TDnZlaLABB0dQ==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "earcut": "^2.0.0"
+      }
+    },
+    "@turf/tin": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/tin/-/tin-6.5.0.tgz",
+      "integrity": "sha512-YLYikRzKisfwj7+F+Tmyy/LE3d2H7D4kajajIfc9mlik2+esG7IolsX/+oUz1biguDYsG0DUA8kVYXDkobukfg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0"
+      }
+    },
+    "@turf/transform-rotate": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz",
+      "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==",
+      "requires": {
+        "@turf/centroid": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0",
+        "@turf/rhumb-destination": "^6.5.0",
+        "@turf/rhumb-distance": "^6.5.0"
+      }
+    },
+    "@turf/transform-scale": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/transform-scale/-/transform-scale-6.5.0.tgz",
+      "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==",
+      "requires": {
+        "@turf/bbox": "^6.5.0",
+        "@turf/center": "^6.5.0",
+        "@turf/centroid": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0",
+        "@turf/rhumb-destination": "^6.5.0",
+        "@turf/rhumb-distance": "^6.5.0"
+      }
+    },
+    "@turf/transform-translate": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/transform-translate/-/transform-translate-6.5.0.tgz",
+      "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==",
+      "requires": {
+        "@turf/clone": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/rhumb-destination": "^6.5.0"
+      }
+    },
+    "@turf/triangle-grid": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/triangle-grid/-/triangle-grid-6.5.0.tgz",
+      "integrity": "sha512-2jToUSAS1R1htq4TyLQYPTIsoy6wg3e3BQXjm2rANzw4wPQCXGOxrur1Fy9RtzwqwljlC7DF4tg0OnWr8RjmfA==",
+      "requires": {
+        "@turf/distance": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/intersect": "^6.5.0"
+      }
+    },
+    "@turf/truncate": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/truncate/-/truncate-6.5.0.tgz",
+      "integrity": "sha512-pFxg71pLk+eJj134Z9yUoRhIi8vqnnKvCYwdT4x/DQl/19RVdq1tV3yqOT3gcTQNfniteylL5qV1uTBDV5sgrg==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0"
+      }
+    },
+    "@turf/turf": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/turf/-/turf-6.5.0.tgz",
+      "integrity": "sha512-ipMCPnhu59bh92MNt8+pr1VZQhHVuTMHklciQURo54heoxRzt1neNYZOBR6jdL+hNsbDGAECMuIpAutX+a3Y+w==",
+      "requires": {
+        "@turf/along": "^6.5.0",
+        "@turf/angle": "^6.5.0",
+        "@turf/area": "^6.5.0",
+        "@turf/bbox": "^6.5.0",
+        "@turf/bbox-clip": "^6.5.0",
+        "@turf/bbox-polygon": "^6.5.0",
+        "@turf/bearing": "^6.5.0",
+        "@turf/bezier-spline": "^6.5.0",
+        "@turf/boolean-clockwise": "^6.5.0",
+        "@turf/boolean-contains": "^6.5.0",
+        "@turf/boolean-crosses": "^6.5.0",
+        "@turf/boolean-disjoint": "^6.5.0",
+        "@turf/boolean-equal": "^6.5.0",
+        "@turf/boolean-intersects": "^6.5.0",
+        "@turf/boolean-overlap": "^6.5.0",
+        "@turf/boolean-parallel": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/boolean-point-on-line": "^6.5.0",
+        "@turf/boolean-within": "^6.5.0",
+        "@turf/buffer": "^6.5.0",
+        "@turf/center": "^6.5.0",
+        "@turf/center-mean": "^6.5.0",
+        "@turf/center-median": "^6.5.0",
+        "@turf/center-of-mass": "^6.5.0",
+        "@turf/centroid": "^6.5.0",
+        "@turf/circle": "^6.5.0",
+        "@turf/clean-coords": "^6.5.0",
+        "@turf/clone": "^6.5.0",
+        "@turf/clusters": "^6.5.0",
+        "@turf/clusters-dbscan": "^6.5.0",
+        "@turf/clusters-kmeans": "^6.5.0",
+        "@turf/collect": "^6.5.0",
+        "@turf/combine": "^6.5.0",
+        "@turf/concave": "^6.5.0",
+        "@turf/convex": "^6.5.0",
+        "@turf/destination": "^6.5.0",
+        "@turf/difference": "^6.5.0",
+        "@turf/dissolve": "^6.5.0",
+        "@turf/distance": "^6.5.0",
+        "@turf/distance-weight": "^6.5.0",
+        "@turf/ellipse": "^6.5.0",
+        "@turf/envelope": "^6.5.0",
+        "@turf/explode": "^6.5.0",
+        "@turf/flatten": "^6.5.0",
+        "@turf/flip": "^6.5.0",
+        "@turf/great-circle": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/hex-grid": "^6.5.0",
+        "@turf/interpolate": "^6.5.0",
+        "@turf/intersect": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "@turf/isobands": "^6.5.0",
+        "@turf/isolines": "^6.5.0",
+        "@turf/kinks": "^6.5.0",
+        "@turf/length": "^6.5.0",
+        "@turf/line-arc": "^6.5.0",
+        "@turf/line-chunk": "^6.5.0",
+        "@turf/line-intersect": "^6.5.0",
+        "@turf/line-offset": "^6.5.0",
+        "@turf/line-overlap": "^6.5.0",
+        "@turf/line-segment": "^6.5.0",
+        "@turf/line-slice": "^6.5.0",
+        "@turf/line-slice-along": "^6.5.0",
+        "@turf/line-split": "^6.5.0",
+        "@turf/line-to-polygon": "^6.5.0",
+        "@turf/mask": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "@turf/midpoint": "^6.5.0",
+        "@turf/moran-index": "^6.5.0",
+        "@turf/nearest-point": "^6.5.0",
+        "@turf/nearest-point-on-line": "^6.5.0",
+        "@turf/nearest-point-to-line": "^6.5.0",
+        "@turf/planepoint": "^6.5.0",
+        "@turf/point-grid": "^6.5.0",
+        "@turf/point-on-feature": "^6.5.0",
+        "@turf/point-to-line-distance": "^6.5.0",
+        "@turf/points-within-polygon": "^6.5.0",
+        "@turf/polygon-smooth": "^6.5.0",
+        "@turf/polygon-tangents": "^6.5.0",
+        "@turf/polygon-to-line": "^6.5.0",
+        "@turf/polygonize": "^6.5.0",
+        "@turf/projection": "^6.5.0",
+        "@turf/random": "^6.5.0",
+        "@turf/rewind": "^6.5.0",
+        "@turf/rhumb-bearing": "^6.5.0",
+        "@turf/rhumb-destination": "^6.5.0",
+        "@turf/rhumb-distance": "^6.5.0",
+        "@turf/sample": "^6.5.0",
+        "@turf/sector": "^6.5.0",
+        "@turf/shortest-path": "^6.5.0",
+        "@turf/simplify": "^6.5.0",
+        "@turf/square": "^6.5.0",
+        "@turf/square-grid": "^6.5.0",
+        "@turf/standard-deviational-ellipse": "^6.5.0",
+        "@turf/tag": "^6.5.0",
+        "@turf/tesselate": "^6.5.0",
+        "@turf/tin": "^6.5.0",
+        "@turf/transform-rotate": "^6.5.0",
+        "@turf/transform-scale": "^6.5.0",
+        "@turf/transform-translate": "^6.5.0",
+        "@turf/triangle-grid": "^6.5.0",
+        "@turf/truncate": "^6.5.0",
+        "@turf/union": "^6.5.0",
+        "@turf/unkink-polygon": "^6.5.0",
+        "@turf/voronoi": "^6.5.0"
+      }
+    },
+    "@turf/union": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/union/-/union-6.5.0.tgz",
+      "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "polygon-clipping": "^0.15.3"
+      }
+    },
+    "@turf/unkink-polygon": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/unkink-polygon/-/unkink-polygon-6.5.0.tgz",
+      "integrity": "sha512-8QswkzC0UqKmN1DT6HpA9upfa1HdAA5n6bbuzHy8NJOX8oVizVAqfEPY0wqqTgboDjmBR4yyImsdPGUl3gZ8JQ==",
+      "requires": {
+        "@turf/area": "^6.5.0",
+        "@turf/boolean-point-in-polygon": "^6.5.0",
+        "@turf/helpers": "^6.5.0",
+        "@turf/meta": "^6.5.0",
+        "rbush": "^2.0.1"
+      },
+      "dependencies": {
+        "quickselect": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-1.1.1.tgz",
+          "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
+        },
+        "rbush": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmmirror.com/rbush/-/rbush-2.0.2.tgz",
+          "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==",
+          "requires": {
+            "quickselect": "^1.0.1"
+          }
+        }
+      }
+    },
+    "@turf/voronoi": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/@turf/voronoi/-/voronoi-6.5.0.tgz",
+      "integrity": "sha512-C/xUsywYX+7h1UyNqnydHXiun4UPjK88VDghtoRypR9cLlb7qozkiLRphQxxsCM0KxyxpVPHBVQXdAL3+Yurow==",
+      "requires": {
+        "@turf/helpers": "^6.5.0",
+        "@turf/invariant": "^6.5.0",
+        "d3-voronoi": "1.1.2"
+      }
+    },
+    "@types/geojson": {
+      "version": "7946.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/geojson/-/geojson-7946.0.8.tgz",
+      "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA=="
+    },
     "@types/json-schema": {
       "version": "7.0.11",
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
@@ -1775,7 +3053,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.0.tgz?cache=0&sync_timestamp=1604117087261&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.0.tgz",
       "integrity": "sha1-JBJwVLs/m9y0sfuCQYGGBy93uM4=",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "get-intrinsic": "^1.0.0"
@@ -2134,8 +3411,7 @@
     "commander": {
       "version": "2.17.1",
       "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1607931342826&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
-      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
-      "dev": true
+      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78="
     },
     "commondir": {
       "version": "1.0.1",
@@ -2196,6 +3472,17 @@
         "inherits": "^2.0.3",
         "readable-stream": "^2.2.2",
         "typedarray": "^0.0.6"
+      }
+    },
+    "concaveman": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/concaveman/-/concaveman-1.2.1.tgz",
+      "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==",
+      "requires": {
+        "point-in-polygon": "^1.1.0",
+        "rbush": "^3.0.1",
+        "robust-predicates": "^2.0.4",
+        "tinyqueue": "^2.0.3"
       }
     },
     "connect-history-api-fallback": {
@@ -3397,6 +4684,24 @@
         "type": "^1.0.1"
       }
     },
+    "d3-array": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+    },
+    "d3-geo": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmmirror.com/d3-geo/-/d3-geo-1.7.1.tgz",
+      "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==",
+      "requires": {
+        "d3-array": "1"
+      }
+    },
+    "d3-voronoi": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz",
+      "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
@@ -3436,7 +4741,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606860754950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
       "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
-      "dev": true,
       "requires": {
         "is-arguments": "^1.0.4",
         "is-date-object": "^1.0.1",
@@ -3455,7 +4759,6 @@
       "version": "1.1.3",
       "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
       "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
-      "dev": true,
       "requires": {
         "object-keys": "^1.0.12"
       }
@@ -3554,6 +4857,11 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
       "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+    },
+    "density-clustering": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/density-clustering/-/density-clustering-1.3.0.tgz",
+      "integrity": "sha512-icpmBubVTwLnsaor9qH/4tG5+7+f61VcqMN3V3pm9sxxSCt2Jcs0zWOgwZW9ARJYaKD3FumIgHiMOcIMRRAzFQ=="
     },
     "depd": {
       "version": "1.1.2",
@@ -3928,7 +5236,6 @@
       "version": "1.2.1",
       "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
       "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=",
-      "dev": true,
       "requires": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
@@ -4638,6 +5945,26 @@
         "globule": "^1.0.0"
       }
     },
+    "geojson-equality": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmmirror.com/geojson-equality/-/geojson-equality-0.1.6.tgz",
+      "integrity": "sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ==",
+      "requires": {
+        "deep-equal": "^1.0.0"
+      }
+    },
+    "geojson-rbush": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz",
+      "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==",
+      "requires": {
+        "@turf/bbox": "*",
+        "@turf/helpers": "6.x",
+        "@turf/meta": "6.x",
+        "@types/geojson": "7946.0.8",
+        "rbush": "^3.0.1"
+      }
+    },
     "geotiff": {
       "version": "2.0.7",
       "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz",
@@ -4674,7 +6001,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/get-intrinsic/download/get-intrinsic-1.0.2.tgz?cache=0&sync_timestamp=1608274324399&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-intrinsic%2Fdownload%2Fget-intrinsic-1.0.2.tgz",
       "integrity": "sha1-aCDaIm5QskiU4IhZRp3Gg2FUXUk=",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
@@ -4808,8 +6134,7 @@
     "has-symbols": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz",
-      "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=",
-      "dev": true
+      "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg="
     },
     "has-unicode": {
       "version": "2.0.1",
@@ -5387,7 +6712,6 @@
       "version": "1.1.0",
       "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz",
       "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0"
       }
@@ -5416,8 +6740,7 @@
     "is-callable": {
       "version": "1.2.2",
       "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz",
-      "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=",
-      "dev": true
+      "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk="
     },
     "is-color-stop": {
       "version": "1.1.0",
@@ -5453,8 +6776,7 @@
     "is-date-object": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz",
-      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
-      "dev": true
+      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4="
     },
     "is-descriptor": {
       "version": "0.1.6",
@@ -5579,7 +6901,6 @@
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz?cache=0&sync_timestamp=1596555709354&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-regex%2Fdownload%2Fis-regex-1.1.1.tgz",
       "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=",
-      "dev": true,
       "requires": {
         "has-symbols": "^1.0.1"
       }
@@ -5615,7 +6936,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz",
       "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
-      "dev": true,
       "requires": {
         "has-symbols": "^1.0.1"
       }
@@ -7499,8 +8819,7 @@
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "dev": true
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
     },
     "object-copy": {
       "version": "0.1.0",
@@ -7527,14 +8846,12 @@
     "object-inspect": {
       "version": "1.9.0",
       "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804265193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz",
-      "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo=",
-      "dev": true
+      "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo="
     },
     "object-is": {
       "version": "1.1.4",
       "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.4.tgz?cache=0&sync_timestamp=1606460471250&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.4.tgz",
       "integrity": "sha1-Y9bIPACkP0y8lDTrl1fIpbhWUGg=",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "define-properties": "^1.1.3"
@@ -7543,8 +8860,7 @@
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
-      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
-      "dev": true
+      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
     },
     "object-visit": {
       "version": "1.0.1",
@@ -7559,7 +8875,6 @@
       "version": "4.1.2",
       "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115104654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz",
       "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "define-properties": "^1.1.3",
@@ -7988,6 +9303,27 @@
       "dev": true,
       "requires": {
         "find-up": "^2.1.0"
+      }
+    },
+    "point-in-polygon": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz",
+      "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw=="
+    },
+    "polygon-clipping": {
+      "version": "0.15.7",
+      "resolved": "https://registry.npmmirror.com/polygon-clipping/-/polygon-clipping-0.15.7.tgz",
+      "integrity": "sha512-nhfdr83ECBg6xtqOAJab1tbksbBAOMUltN60bU+llHVOL0e5Onm1WpAXXWXVB39L8AJFssoIhEVuy/S90MmotA==",
+      "requires": {
+        "robust-predicates": "^3.0.2",
+        "splaytree": "^3.1.0"
+      },
+      "dependencies": {
+        "robust-predicates": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.2.tgz",
+          "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+        }
       }
     },
     "portfinder": {
@@ -10678,7 +12014,6 @@
       "version": "1.3.0",
       "resolved": "https://registry.npm.taobao.org/regexp.prototype.flags/download/regexp.prototype.flags-1.3.0.tgz",
       "integrity": "sha1-erqJs8E6ZFCdq888qNn7ub31y3U=",
-      "dev": true,
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.17.0-next.1"
@@ -10688,7 +12023,6 @@
           "version": "1.17.7",
           "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz?cache=0&sync_timestamp=1601503225168&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fes-abstract%2Fdownload%2Fes-abstract-1.17.7.tgz",
           "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=",
-          "dev": true,
           "requires": {
             "es-to-primitive": "^1.2.1",
             "function-bind": "^1.1.1",
@@ -10911,6 +12245,11 @@
         "hash-base": "^3.0.0",
         "inherits": "^2.0.1"
       }
+    },
+    "robust-predicates": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-2.0.4.tgz",
+      "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg=="
     },
     "run-queue": {
       "version": "1.0.3",
@@ -11340,6 +12679,11 @@
         }
       }
     },
+    "skmeans": {
+      "version": "0.9.7",
+      "resolved": "https://registry.npmmirror.com/skmeans/-/skmeans-0.9.7.tgz",
+      "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg=="
+    },
     "slash": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
@@ -11711,6 +13055,11 @@
         }
       }
     },
+    "splaytree": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/splaytree/-/splaytree-3.1.2.tgz",
+      "integrity": "sha512-4OM2BJgC5UzrhVnnJA4BkHKGtjXNzzUfpQjCO8I05xYPsfS/VuQDwjCGGMi8rYQilHEV4j8NBqTFbls/PZEE7A=="
+    },
     "split-string": {
       "version": "3.1.0",
       "resolved": "https://registry.npm.taobao.org/split-string/download/split-string-3.1.0.tgz",
@@ -11855,7 +13204,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.3.tgz?cache=0&sync_timestamp=1606008054045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.3.tgz",
       "integrity": "sha1-oivVPMpcfPRNfJ1ccyEYhz1s0Ys=",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "define-properties": "^1.1.3"
@@ -11865,7 +13213,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.3.tgz?cache=0&sync_timestamp=1606008053958&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.3.tgz",
       "integrity": "sha1-m0y1kOEjuzZWRAHVmCQpjeUP1ao=",
-      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "define-properties": "^1.1.3"
@@ -12140,6 +13487,11 @@
       "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
       "dev": true
     },
+    "tinyqueue": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/tinyqueue/-/tinyqueue-2.0.3.tgz",
+      "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
+    },
     "to-arraybuffer": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
@@ -12189,6 +13541,22 @@
       "integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=",
       "dev": true
     },
+    "topojson-client": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/topojson-client/-/topojson-client-3.1.0.tgz",
+      "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+      "requires": {
+        "commander": "2"
+      }
+    },
+    "topojson-server": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/topojson-server/-/topojson-server-3.0.1.tgz",
+      "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==",
+      "requires": {
+        "commander": "2"
+      }
+    },
     "toposort": {
       "version": "1.0.7",
       "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-1.0.7.tgz",
@@ -12230,6 +13598,11 @@
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
       "dev": true
     },
+    "turf-jsts": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/turf-jsts/-/turf-jsts-1.2.3.tgz",
+      "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA=="
+    },
     "type": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/type/download/type-1.2.0.tgz",
diff --git a/package.json b/package.json
index a3d9508..6c3702a 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
     "build": "node build/build.js"
   },
   "dependencies": {
+    "@turf/turf": "^6.5.0",
     "animate.css": "^4.1.1",
     "axios": "^0.21.1",
     "echarts": "^5.4.2",
diff --git a/src/api/api.js b/src/api/api.js
index cc6561a..d106ac5 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -23,7 +23,7 @@
   return service.put('system/user/profile/updatePwd', params);
 }
 
-export function Op_SelectByPage(params){
+export function Op_SelectByPage(params) {
   //璇锋眰鍦板潃
   return service.get("/Op/SelectByPage", { params: params });
 }
@@ -31,10 +31,14 @@
   //璇锋眰鍦板潃
   return service.post("/Op/Insert", params);
 }
-export function Op_UpdateById(params){
+export function Op_UpdateById(params) {
   //璇锋眰鍦板潃
   return service.post("/Op/UpdateById", params);
 }
+export function kuanDeng_mp_getMpByLocation(params) {
+  return service.get("https://apis.kuandeng.net/v1/search/mp/getMpByLocation?locations=" + params.lon + "," + params.lat + "&dataVersion=JSJK_210000");
+}
+
 
 
 //浜姙鐧诲綍
diff --git "a/src/assets/img/model/\345\267\245\344\272\272.png" "b/src/assets/img/model/\345\267\245\344\272\272.png"
new file mode 100644
index 0000000..d8ab16c
--- /dev/null
+++ "b/src/assets/img/model/\345\267\245\344\272\272.png"
Binary files differ
diff --git "a/src/assets/img/model/\346\226\275\345\267\245\350\275\246\350\276\206.png" "b/src/assets/img/model/\346\226\275\345\267\245\350\275\246\350\276\206.png"
new file mode 100644
index 0000000..028002d
--- /dev/null
+++ "b/src/assets/img/model/\346\226\275\345\267\245\350\275\246\350\276\206.png"
Binary files differ
diff --git "a/src/assets/img/model/\346\241\266.png" "b/src/assets/img/model/\346\241\266.png"
new file mode 100644
index 0000000..ed797a5
--- /dev/null
+++ "b/src/assets/img/model/\346\241\266.png"
Binary files differ
diff --git "a/src/assets/img/model/\350\267\257\351\232\234.png" "b/src/assets/img/model/\350\267\257\351\232\234.png"
new file mode 100644
index 0000000..0ecc013
--- /dev/null
+++ "b/src/assets/img/model/\350\267\257\351\232\234.png"
Binary files differ
diff --git "a/src/assets/img/model/\351\224\245\346\241\266.png" "b/src/assets/img/model/\351\224\245\346\241\266.png"
new file mode 100644
index 0000000..caef20c
--- /dev/null
+++ "b/src/assets/img/model/\351\224\245\346\241\266.png"
Binary files differ
diff --git a/src/assets/js/Layer/mapGeo.js b/src/assets/js/Layer/mapGeo.js
new file mode 100644
index 0000000..d96c835
--- /dev/null
+++ b/src/assets/js/Layer/mapGeo.js
@@ -0,0 +1,180 @@
+var source = []
+const mapGeo = {
+
+    init(res) {
+        switch (res.type) {
+            case "WangGe":
+                this.addWangGeGeoJson(res);
+                break;
+            case "ZhuangHao":
+                this.addZhuangHaoGeoJson(res)
+                break;
+            case "PingQuXian":
+                this.addPingQuXianGeoJson(res)
+                break;
+            case "ZhongQuXian":
+                this.addZhongQuXianGeoJson(res)
+                break;
+            case "zhaiHai":
+                this.addzhaiHaiGeoJson(res)
+
+                break;
+        }
+    },
+    delGeoSource(res) {
+        if (res.type == "zhaiHai") {
+            Viewer.dataSources.remove(Viewer.dataSources.getByName("zhaiHai2")[0])
+            Viewer.dataSources.remove(Viewer.dataSources.getByName("zhaiHai1")[0])
+            Viewer.dataSources.remove(Viewer.dataSources.getByName("zhaiHai3")[0])
+        } else {
+            Viewer.dataSources.remove(Viewer.dataSources.getByName(res.type)[0])
+        }
+
+    },
+
+    addzhaiHaiGeoJson(res) {
+        var url1 = layerData.config.Model_URL + res.urls[0];
+        var url2 = layerData.config.Model_URL + res.urls[1];
+        var url3 = layerData.config.Model_URL + res.urls[2];
+        var color = Cesium.Color.fromCssColorString("rgb(255,0,255)")
+        var data1 = Cesium.GeoJsonDataSource.load(url1, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: color, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data1.then((dataSource) => {
+            dataSource.name = "zhaiHai1"
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+
+        var data2 = Cesium.GeoJsonDataSource.load(url2, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: color, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data2.then((dataSource) => {
+            dataSource.name = "zhaiHai2"
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+        var data3 = Cesium.GeoJsonDataSource.load(url3, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: color, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data3.then((dataSource) => {
+            dataSource.name = "zhaiHai3"
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+    },
+
+    addZhongQuXianGeoJson(res) {
+        var url = layerData.config.Model_URL + res.urls;
+        var data = Cesium.GeoJsonDataSource.load(url, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: Cesium.Color.ORANGE, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data.then((dataSource) => {
+            dataSource.name = res.type
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+    },
+    addPingQuXianGeoJson(res) {
+        var url = layerData.config.Model_URL + res.urls;
+        var data = Cesium.GeoJsonDataSource.load(url, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: Cesium.Color.SKYBLUE, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data.then((dataSource) => {
+            dataSource.name = res.type
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+    },
+    addWangGeGeoJson(res) {
+        var url = layerData.config.Model_URL + res.urls;
+        var data = Cesium.GeoJsonDataSource.load(url, //瑕佸姞杞界殑 url銆丟eoJSON 瀵硅薄鎴� TopoJSON 瀵硅薄銆�
+            {
+                stroke: Cesium.Color.RED, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ら鑹层��
+                fill: Cesium.Color.WHITE.withAlpha(0.2), //澶氳竟褰㈠唴閮ㄧ殑榛樿棰滆壊銆�
+                strokeWidth: 3, //鎶樼嚎鍜屽杈瑰舰杞粨鐨勯粯璁ゅ搴︺��
+            }
+        )
+        data.then((dataSource) => {
+            dataSource.name = res.type
+            Viewer.dataSources.add(
+                dataSource
+            );
+        })
+    },
+    addZhuangHaoGeoJson(res) {
+
+        var url = layerData.config.Model_URL + res.urls;
+        var img = layerData.config.Model_URL + '/Data/img/img1.png';
+        var source1 = Cesium.GeoJsonDataSource.load(url)
+        source1.then((dataSource) => {
+            dataSource.name = res.type
+            Viewer.dataSources.add(
+                dataSource
+            );
+            const entities = dataSource.entities.values;
+            // 璁剧疆鑱氬悎鍙傛暟
+            dataSource.clustering.enabled = true;
+            dataSource.clustering.pixelRange = 20;
+            dataSource.clustering.minimumClusterSize = 2;
+
+            for (var i = 0; i < entities.length; i++) {
+                const entity = entities[i];
+                entity.billboard = {
+                    image: img,
+                    color: Cesium.Color.AQUA,
+                    width: 32,
+                    height: 32,
+                    pixelOffset: new Cesium.Cartesian3(0, -40, 0),
+                };
+                entity.label = {
+                    text: entity.name,
+                    font: '14px',
+                    pixelOffset: new Cesium.Cartesian3(0, -80, 0),
+                    fillColor: Cesium.Color.BLIUE,
+                };
+
+            }
+            // 娣诲姞鐩戝惉鍑芥暟
+            dataSource.clustering.clusterEvent.addEventListener(
+                function (clusteredEntities, cluster) {
+                    // 鍏抽棴鑷甫鐨勬樉绀鸿仛鍚堟暟閲忕殑鏍囩
+                    cluster.label.show = false;
+                    cluster.billboard.show = false;
+                    cluster.billboard.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;
+                }
+            )
+
+
+
+        })
+
+
+    },
+}
+export default mapGeo;
\ No newline at end of file
diff --git a/src/assets/js/Layer/mapInfo.js b/src/assets/js/Layer/mapInfo.js
new file mode 100644
index 0000000..c0ad663
--- /dev/null
+++ b/src/assets/js/Layer/mapInfo.js
@@ -0,0 +1,78 @@
+import store from "../../../store";
+const mapInfo = {
+    listArr: [
+        '妗╁彿_Point',
+    ],
+    mssageInfo: null,
+    Init(html) {
+
+        if (!html) return;
+        var xmlDoc = this.getXMLNode(html)
+        if (xmlDoc.length == 0) return
+        this.showMapInfo(xmlDoc);
+
+    },
+    setRestLayer() {
+        store.state.showZhaiHaiImg = null;
+        store.state.isshowZhaiHai = false;
+        store.state.showMessageInfo = false;
+        this.mssageInfo = null
+    },
+    setGeoJsonInfo(res) {
+        if (res.projectId && res.frameNo) {
+            this.setRestLayer();
+            
+            store.state.showZhaiHaiImg = res;
+            store.state.isshowZhaiHai = true;
+        } else {
+            var val_name = res._propertyNames;
+            var val = [];
+            for (var i = 0; i < val_name.length; i++) {
+                var obj = {
+                    name: val_name[i],
+                    value: res[val_name[i]]._value,
+                }
+                val.push(obj)
+            }
+            if (val.length == 0) return
+            this.showMapInfo(val);
+        }
+    },
+    showMapInfo(res) {
+        this.setRestLayer();
+        setTimeout(() => {
+            this.mssageInfo = res;
+            store.state.showMessageInfo = true;
+        }, 100);
+    },
+    getXMLNode(html) {
+        let str = html;
+        //鍒涘缓鏂囨。瀵硅薄
+        let xmlDoc = new DOMParser().parseFromString(str, "text/xml");
+        let finds = xmlDoc.getElementsByTagName('Featureinfo');
+        var val = []//鑾峰彇find鑺傜偣
+        for (let i = 0; i < finds.length; i++) {     //寰幆鑺傜偣
+            let finder = finds[i];
+            this.getfun(finder, val);
+        }
+        return val
+    },
+    getfun(res, val) {
+        var child = res.childNodes;
+        for (var i = 0; i < child.length; i++) {
+            var node = child[i].childNodes;
+            if (node.length > 1) {
+                this.getfun(child[i], val)
+            } else {
+                val.push({
+                    name: child[i].nodeName,
+                    value: child[i].childNodes[0].nodeValue
+                })
+            }
+
+        }
+        return val;
+    }
+
+}
+export default mapInfo;
\ No newline at end of file
diff --git a/src/assets/js/Layer/mapOL.js b/src/assets/js/Layer/mapOL.js
new file mode 100644
index 0000000..4080aed
--- /dev/null
+++ b/src/assets/js/Layer/mapOL.js
@@ -0,0 +1,217 @@
+
+
+import VectorLayer from "ol/layer/Vector";
+import VectorSource from "ol/source/Vector";
+import Feature from "ol/Feature";
+import Point from "ol/geom/Point";
+import LineString from "ol/geom/LineString";
+import {fromExtent } from "ol/geom/Polygon";
+import { Polygon} from "ol/geom";
+import { fromLonLat } from "ol/proj";
+import { Circle, Fill, Icon, Stroke, Style, Text } from 'ol/style.js';
+
+const mapOL = {
+    removeLayerData(res){
+        var layers =  window.map.getAllLayers();
+        for(var i=0;i<layers.length;i++){
+            if(res.id === layers[i].values_.id){
+                window.map.removeLayer(layers[i])
+            }
+        }
+    },
+    addLayerData(res) {
+        var type = res.style.type;
+        if (!type) return
+        this.removeLayerData(res)
+        switch (type) {
+            case 'label':
+                this.addLabellayer(res);
+                break;
+            case 'billboard':
+                this.addBillboardlayer(res);
+                break;
+            case 'polyline':
+                this.addPolylinelayer(res);
+                break;
+            case 'rectangle':
+                this.addRectanglelayer(res);
+                break;
+            case 'polygon':
+                this.addPolygonlayer(res);
+                break;
+        }
+    },
+    CesiumTo84(x, y, z) {
+        var ellipsoid = Viewer.scene.globe.ellipsoid;
+       
+        var cartographic = ellipsoid.cartesianToCartographic({ x: x, y: y, z: z });
+        var lat = Cesium.Math.toDegrees(cartographic.latitude);
+        var lng = Cesium.Math.toDegrees(cartographic.longitude);
+        var alt = cartographic.height;
+        return [lng, lat, alt ]
+    },
+    addLabellayer(res) {
+        var style = res.style;
+        var val = this.CesiumTo84(style.position.x, style.position.y, style.position.z)
+        const labelFeature = new Feature({
+            geometry: new Point([val[0], val[1]]),
+        });
+        const labelStyle = new Style({
+            text: new Text({
+                text: style.text,
+                font: style.font,
+                fill: new Fill({
+                    color: style.fillColor,
+                }),
+                stroke: new Stroke({
+                    color: style.outlineColor,
+                    width: style.outlineWidth,
+                }),
+            }),
+        });
+        labelFeature.setStyle([labelStyle])
+        const vectorSource = new VectorSource({
+            features: [labelFeature],
+        });
+        var vectorLayer = new VectorLayer({
+            id: res.id,
+            source: vectorSource,
+        });
+        window.map.addLayer(vectorLayer)
+    },
+    addBillboardlayer(res) {
+        var style = res.style;
+        var val = this.CesiumTo84(style.position.x, style.position.y, style.position.z)
+        const imgFeature = new Feature({
+            geometry: new Point([val[0], val[1]]),
+        });
+        const imgStyle = new Style({
+            image: new Icon({
+                scale: style.scale,
+                src: style.image,
+            }),
+        });
+        imgFeature.setStyle([imgStyle])
+        const vectorSource = new VectorSource({
+            features: [imgFeature],
+        });
+        var vectorLayer = new VectorLayer({
+            id: res.id,
+            source: vectorSource,
+        });
+        window.map.addLayer(vectorLayer)
+    },
+    addPolylinelayer(res) {
+        var style = res.style;
+        var positon = style.positions;
+        var geom = [];
+        for (var i in positon) {
+            var lonlat = positon[i];
+            var val = this.CesiumTo84(lonlat.x, lonlat.y, lonlat.z);
+            geom.push([val[0], val[1]])
+        }
+        const lineFeature = new Feature({
+            geometry: new LineString(geom),
+            name: "Line"
+        });
+        const lineStyle = new Style({
+
+            stroke: new Stroke({
+                color: style.color,
+                width: style.outlineWidth == 0 ? 2 : style.outlineWidth,
+            }),
+
+        });
+        lineFeature.setStyle([lineStyle])
+        const vectorSource = new VectorSource({
+            features: [lineFeature],
+        });
+        var vectorLayer = new VectorLayer({
+            id: res.id,
+            source: vectorSource,
+        });
+        window.map.addLayer(vectorLayer)
+    },
+    addRectanglelayer(res) {
+        var style = res.style;
+       
+        var east = Cesium.Math.toDegrees(
+            style.coordinates.east
+        );
+        var north = Cesium.Math.toDegrees(
+            style.coordinates.north
+        );
+        var west = Cesium.Math.toDegrees(
+            style.coordinates.west
+        );
+        var south = Cesium.Math.toDegrees(
+            style.coordinates.south
+        );
+
+        var rectFeature = new Feature({
+            geometry: new fromExtent([east, south, west, north])
+        });
+        const rectStyle = new Style({
+            //濉厖鑹�
+            fill: new Fill({
+                color:  style.color,
+            }),
+            //杈圭嚎棰滆壊
+            stroke: new Stroke({
+                color:  style.outlineColor,
+                width: 1
+            }),
+        });
+        rectFeature.setStyle(rectStyle)
+        const vectorSource = new VectorSource({
+            features: [rectFeature],
+        });
+        var vectorLayer = new VectorLayer({
+            id: res.id,
+            source: vectorSource,
+        });
+        window.map.addLayer(vectorLayer)
+    },
+    addPolygonlayer(res) {
+        var style = res.style;
+        console.log(style)
+        var positon= style.positions;
+        var geom = [];
+        for (var i in positon) {
+            var lonlat = positon[i];
+            var val = this.CesiumTo84(lonlat.x, lonlat.y, lonlat.z);
+            geom.push([val[0], val[1]])
+        }
+        if(geom[0]!= geom[geom.length-1]){
+            geom.push(geom[0])
+        }
+           var std =[];
+           std.push(geom) 
+        var rectFeature = new Feature({
+            geometry: new Polygon(std)
+        });
+
+        const rectStyle = new Style({
+            //濉厖鑹�
+            fill: new Fill({
+                color:  style.color,
+            }),
+            //杈圭嚎棰滆壊
+            stroke: new Stroke({
+                color:  style.outlineColor,
+                width: 1
+            }),
+        });
+        rectFeature.setStyle(rectStyle)
+        const vectorSource = new VectorSource({
+            features: [rectFeature],
+        });
+        var vectorLayer = new VectorLayer({
+            id: res.id,
+            source: vectorSource,
+        });
+        window.map.addLayer(vectorLayer)
+
+    },
+}
+export default mapOL;
\ No newline at end of file
diff --git a/src/assets/js/Layer/mapViewer.js b/src/assets/js/Layer/mapViewer.js
index b5795dc..65405c5 100644
--- a/src/assets/js/Layer/mapViewer.js
+++ b/src/assets/js/Layer/mapViewer.js
@@ -1,4 +1,5 @@
 import store from "../../../store";
+import mapInfo from "./mapInfo";
 import model from "./model";
 const mapViewer = {
     leftClick: null,
@@ -10,7 +11,9 @@
     addLeftClick() {
         this.leftClick = new Cesium.ScreenSpaceEventHandler(window.Viewer.canvas);
         this.leftClick.setInputAction(function (event) {
-            let cartesian =  window.Viewer.camera.pickEllipsoid(event.position);
+            let nPickFeature = Viewer.scene.pick(event.position);
+            let cartesian = window.Viewer.camera.pickEllipsoid(event.position);
+        
             let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
             let lng = Cesium.Math.toDegrees(cartographic.longitude); // 缁忓害
             let lat = Cesium.Math.toDegrees(cartographic.latitude); // 绾害
@@ -24,18 +27,34 @@
                 roll: 0,
                 scale: 1,
             };
-
-            if(store.state.addModelFlag){
+            store.state.coordinate = coordinate;
+            if (store.state.addModelFlag) {
                 model.setModelCoord(coordinate);
+
             }
+            if(store.state.isMeasureFlag){
+                store.state.measureCoordObj = coordinate;
+                store.state.isShowMeasureCoord= true;
+            }
+            if (Cesium.defined(nPickFeature)) {
+                if(nPickFeature.id && nPickFeature.id.properties){
+                    
+                    mapInfo.setGeoJsonInfo(nPickFeature.id.properties)
+                }
+           
+            }
+            if(store.state.isQueryFalag){
+                console.log(coordinate)
+                store.state.isQyeryCoord = coordinate;
+            }
+
         }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
     },
     addRightClick() {
         this.rightClick = new Cesium.ScreenSpaceEventHandler(window.Viewer.canvas);
         this.rightClick.setInputAction(function (event) {
             let pickedObject = window.Viewer.scene.pick(event.position);
-
-            console.log(pickedObject)
+            store.state.isMeasureFlag = false;
         }, Cesium.ScreenSpaceEventType.RIGHT_CLICK)
     },
 }
diff --git a/src/assets/js/Layer/measure.js b/src/assets/js/Layer/measure.js
new file mode 100644
index 0000000..9f48c37
--- /dev/null
+++ b/src/assets/js/Layer/measure.js
@@ -0,0 +1,32 @@
+import Viewer from "../../../components/map/viewer.vue";
+
+const measure = {
+    imgLabel: [],
+    addImgLabel(res) {
+        // const label = sgworld.factory.createLabel({
+        //     lon: res.lon,
+        //     lat: res.lat,
+        //     alt: 20,
+        //     text: res.dis,
+        //     image: "./test03-01.png",
+        //     // 鏂囨湰鍋忕Щ閲�
+        //     pixelOffset: new SmartEarth.Cesium.Cartesian2(0, -50),
+        //     // 鍥剧墖鍋忕Щ閲�
+        //     iPixelOffset: new SmartEarth.Cesium.Cartesian2(0, -20)
+        // });
+        // this.imgLabel.push(label)
+    },
+    deleteImgLabel() {
+        // for (var i = 0; i< this.imgLabel.length; i++) {
+        //     var label = this.imgLabel[i];
+        //     for(var j = 0; j<Viewer.entities._entities._array.length;j++){
+        //         if(Viewer.entities._entities._array[j].id == label.entity.id){
+        //             Viewer.entities.remove(Viewer.entities._entities._array[j])
+        //         }
+        //     }
+        // }
+        // this.imgLabel=[];
+    }
+}
+
+export default measure;
\ No newline at end of file
diff --git a/src/assets/js/Layer/menuGrid.js b/src/assets/js/Layer/menuGrid.js
new file mode 100644
index 0000000..130be82
--- /dev/null
+++ b/src/assets/js/Layer/menuGrid.js
@@ -0,0 +1,13 @@
+const menuGrid = {
+    init() {
+        console.log(123)
+        var grid = sgworld.Creator.createSimpleGraphic(
+            "rectangle",
+            {
+                // clampToGround: false
+            }, entity => {
+
+            })
+    },
+}
+export default menuGrid;
\ No newline at end of file
diff --git a/src/assets/js/Layer/model.js b/src/assets/js/Layer/model.js
index b1a1365..b1bd8c6 100644
--- a/src/assets/js/Layer/model.js
+++ b/src/assets/js/Layer/model.js
@@ -10,6 +10,14 @@
         this.title = item;
         this.setModelMouseMove();
     },
+    deleteAll() {
+        if (!this.modelLayer) return;
+        for (var i = 0; i < this.modelLayer._primitives.length; i++) {
+            this.modelLayer.remove(this.modelLayer._primitives[i]);
+            i--;
+        }
+        this.modelLayer = null;
+    },
     setModelCoord(res) {
         store.state.addModelFlag = false;
         this.setModelMouseMove();
@@ -62,6 +70,7 @@
         this.getModelLayer();
         var modelMatrix = this.getModelMatrix(res.style);
         var url = layerData.config.Model_URL + res.style.url;
+ 
         var model = this.modelLayer.add(Cesium.Model.fromGltf({
             id: res.id,
             url: url,
@@ -80,7 +89,7 @@
 
         for (var i = 0; i < this.modelLayer._primitives.length; i++) {
             var model = this.modelLayer._primitives[i]
-            if (model.id == res.id) {
+            if (model.id === res.id) {
                 this.modelLayer.remove(this.modelLayer._primitives[i]);
             }
         }
diff --git a/src/assets/js/Layer/test03-01.png b/src/assets/js/Layer/test03-01.png
new file mode 100644
index 0000000..c241360
--- /dev/null
+++ b/src/assets/js/Layer/test03-01.png
Binary files differ
diff --git a/src/assets/js/Layer/zhuanghao.js b/src/assets/js/Layer/zhuanghao.js
new file mode 100644
index 0000000..f8014bd
--- /dev/null
+++ b/src/assets/js/Layer/zhuanghao.js
@@ -0,0 +1,139 @@
+const zhData = {
+
+
+    data: [
+
+        { "value": "1050+000", "lon": 120.236193, "lat": 32.023175, "alt": 13.874103 },
+
+        { "value": "1050+100", "lon": 120.236513, "lat": 32.022301, "alt": 13.874103 },
+        { "value": "1050+200", "lon": 120.236837, "lat": 32.021413, "alt": 13.874103 },
+        { "value": "1050+300", "lon": 120.237136, "lat": 32.020592, "alt": 13.874103 },
+        { "value": "1050+400", "lon": 120.237454, "lat": 32.019719, "alt": 13.874103 },
+        { "value": "1050+500", "lon": 120.237769, "lat": 32.018874, "alt": 13.874103 },
+        { "value": "1050+600", "lon": 120.238103, "lat": 32.017975, "alt": 13.874103 },
+        { "value": "1050+700", "lon": 120.238408, "lat": 32.017154, "alt": 13.874103 },
+        { "value": "1050+800", "lon": 120.238739, "lat": 32.01625, "alt": 13.874103 },
+        { "value": "1050+900", "lon": 120.239023, "lat": 32.015465, "alt": 13.874103 },
+        { "value": "1051+000", "lon": 120.239327, "lat": 32.014617, "alt": 13.874103 },
+        { "value": "1051+100", "lon": 120.239631, "lat": 32.013719, "alt": 13.874103 },
+        { "value": "1051+200", "lon": 120.239857, "lat": 32.013009, "alt": 13.874103 },
+        { "value": "1051+300", "lon": 120.240124, "lat": 32.012116, "alt": 13.874103 },
+        { "value": "1051+400", "lon": 120.240387, "lat": 32.011165, "alt": 13.874103 },
+        { "value": "1051+500", "lon": 120.240613, "lat": 32.010049, "alt": 13.874103 },
+        { "value": "1051+600", "lon": 120.240774, "lat": 32.009161, "alt": 13.874103 },
+        { "value": "1051+700", "lon": 120.241055, "lat": 32.008296, "alt": 13.8741025925 },
+        { "value": "1051+800", "lon": 120.241211, "lat": 32.007445, "alt": 13.195145607000001 },
+        { "value": "1051+900", "lon": 120.241343, "lat": 32.0067, "alt": 12.6165876389 },
+        { "value": "1052+000", "lon": 120.241424, "lat": 32.005901, "alt": 11.9407968521 },
+        { "value": "1052+100", "lon": 120.241581, "lat": 32.004963, "alt": 11.632371902499999 },
+        { "value": "1052+200", "lon": 120.241761, "lat": 32.004085, "alt": 14.4451198578 },
+        { "value": "1052+300", "lon": 120.241923, "lat": 32.003181, "alt": 16.110471725499998 },
+        { "value": "1052+400", "lon": 120.242074, "lat": 32.002269, "alt": 16.478689193699999 },
+        { "value": "1052+500", "lon": 120.242225, "lat": 32.001396, "alt": 16.709852218599998 },
+        { "value": "1052+600", "lon": 120.242369, "lat": 32.000568, "alt": 16.709852218599998 },
+        { "value": "1052+700", "lon": 120.242551, "lat": 31.999642, "alt": 16.709852218599998 },
+        { "value": "1052+800", "lon": 120.242743, "lat": 31.998794, "alt": 16.709852218599998 },
+        { "value": "1052+900", "lon": 120.242949, "lat": 31.997912, "alt": 16.709852218599998 },
+        { "value": "1053+000", "lon": 120.243173, "lat": 31.997058, "alt": 16.709852218599998 },
+        { "value": "1053+100", "lon": 120.243443, "lat": 31.996109, "alt": 16.709852218599998 },
+        { "value": "1053+200", "lon": 120.243715, "lat": 31.995199, "alt": 16.709852218599998 },
+        { "value": "1053+300", "lon": 120.243969, "lat": 31.994404, "alt": 16.709852218599998 },
+        { "value": "1053+400", "lon": 120.244294, "lat": 31.99348, "alt": 16.709852218599998 },
+        { "value": "1053+500", "lon": 120.244607, "lat": 31.992624, "alt": 16.709852218599998 },
+        { "value": "1053+600", "lon": 120.244944, "lat": 31.991762, "alt": 16.709852218599998 },
+        { "value": "1053+700", "lon": 120.245299, "lat": 31.990905, "alt": 16.709852218599998 },
+        { "value": "1053+800", "lon": 120.245658, "lat": 31.99007, "alt": 16.709852218599998 },
+        { "value": "1053+900", "lon": 120.246076, "lat": 31.989147, "alt": 16.709852218599998 },
+        { "value": "1054+000", "lon": 120.246483, "lat": 31.988292, "alt": 16.709852218599998 },
+        { "value": "1054+100", "lon": 120.246895, "lat": 31.987466, "alt": 16.709852218599998 },
+        { "value": "1054+200", "lon": 120.247327, "lat": 31.986631, "alt": 16.709852218599998 },
+        { "value": "1054+300", "lon": 120.247915, "lat": 31.985551, "alt": 16.709852218599998 },
+        { "value": "1054+400", "lon": 120.248195, "lat": 31.98504, "alt": 16.709852218599998 },
+        { "value": "1054+500", "lon": 120.248641, "lat": 31.984206, "alt": 16.709852218599998 },
+        { "value": "1054+600", "lon": 120.249091, "lat": 31.983386, "alt": 16.709852218599998 },
+        { "value": "1054+700", "lon": 120.249526, "lat": 31.982585, "alt": 16.709852218599998 },
+        { "value": "1054+800", "lon": 120.249966, "lat": 31.981759, "alt": 16.709852218599998 },
+        { "value": "1054+900", "lon": 120.250414, "lat": 31.980919, "alt": 16.709852218599998 },
+        { "value": "1055+000", "lon": 120.250851, "lat": 31.980089, "alt": 16.709852218599998 },
+        { "value": "1055+100", "lon": 120.25129, "lat": 31.979273, "alt": 16.709852218599998 },
+        { "value": "1055+200", "lon": 120.251733, "lat": 31.978453, "alt": 16.709852218599998 },
+        { "value": "1055+300", "lon": 120.252173, "lat": 31.977638, "alt": 16.709852218599998 },
+        { "value": "1055+400", "lon": 120.252608, "lat": 31.976833, "alt": 16.709852218599998 },
+        { "value": "1055+500", "lon": 120.25297, "lat": 31.976174, "alt": 16.709852218599998 },
+        { "value": "1055+600", "lon": 120.253387, "lat": 31.975382, "alt": 16.709852218599998 },
+        { "value": "1055+700", "lon": 120.253838, "lat": 31.974543, "alt": 16.709852218599998 },
+        { "value": "1055+800", "lon": 120.254284, "lat": 31.973717, "alt": 16.709852218599998 },
+        { "value": "1055+900", "lon": 120.254794, "lat": 31.972756, "alt": 16.709852218599998 },
+        { "value": "1056+000", "lon": 120.255095, "lat": 31.972097, "alt": 16.709852218599998 },
+        { "value": "1056+100", "lon": 120.255515, "lat": 31.971231, "alt": 16.709852218599998 },
+        { "value": "1056+200", "lon": 120.256005, "lat": 31.970429, "alt": 16.709852218599998 },
+        { "value": "1056+300", "lon": 120.256484, "lat": 31.969579, "alt": 16.709852218599998 },
+        { "value": "1056+400", "lon": 120.256919, "lat": 31.96878, "alt": 16.709852218599998 },
+        { "value": "1056+500", "lon": 120.257362, "lat": 31.967971, "alt": 16.709852218599998 },
+        { "value": "1056+600", "lon": 120.257792, "lat": 31.967166, "alt": 16.709852218599998 },
+        { "value": "1056+700", "lon": 120.258283, "lat": 31.966256, "alt": 16.709852218599998 },
+        { "value": "1056+800", "lon": 120.258693, "lat": 31.9654, "alt": 16.709852218599998 },
+        { "value": "1056+900", "lon": 120.259122, "lat": 31.964611, "alt": 16.709852218599998 },
+        { "value": "1057+000", "lon": 120.259625, "lat": 31.963774, "alt": 16.709852218599998 },
+        { "value": "1057+100", "lon": 120.260034, "lat": 31.963017, "alt": 16.709852218599998 },
+        { "value": "1057+200", "lon": 120.260429, "lat": 31.962285, "alt": 16.709852218599998 },
+        { "value": "1057+300", "lon": 120.260867, "lat": 31.961468, "alt": 16.709852218599998 },
+        { "value": "1057+400", "lon": 120.2613, "lat": 31.960662, "alt": 16.709852218599998 },
+        { "value": "1057+500", "lon": 120.261733, "lat": 31.959852, "alt": 16.709852218599998 },
+        { "value": "1057+600", "lon": 120.262199, "lat": 31.958985, "alt": 16.709852218599998 },
+        { "value": "1057+700", "lon": 120.262641, "lat": 31.958162, "alt": 20.419439315799998 },
+        { "value": "1057+800", "lon": 120.263083, "lat": 31.957342, "alt": 25.1487751007 },
+        { "value": "1057+900", "lon": 120.263539, "lat": 31.956495, "alt": 30.774362564099999 },
+        { "value": "1058+000", "lon": 120.264, "lat": 31.955635, "alt": 36.906631469700002 },
+        { "value": "1058+100", "lon": 120.26446, "lat": 31.954774, "alt": 43.127822876000003 },
+        { "value": "1058+200", "lon": 120.264913, "lat": 31.953932, "alt": 46.632724762000002 },
+        { "value": "1058+300", "lon": 120.265349, "lat": 31.953114, "alt": 49.689373016399998 },
+        { "value": "1058+400", "lon": 120.265786, "lat": 31.952301, "alt": 52.800041198700001 },
+        { "value": "1058+500", "lon": 120.266229, "lat": 31.951482, "alt": 193.290725708 },
+        { "value": "1058+600", "lon": 120.266532, "lat": 31.950922, "alt": 57.504016876199998 },
+        { "value": "1058+700", "lon": 120.266995, "lat": 31.950057, "alt": 59.774166107200003 },
+        { "value": "1058+800", "lon": 120.267458, "lat": 31.949195, "alt": 61.832244873 },
+        { "value": "1058+900", "lon": 120.267924, "lat": 31.948323, "alt": 64.506950378400006 },
+        { "value": "1059+000", "lon": 120.268383, "lat": 31.947459, "alt": 65.622138977099993 },
+        { "value": "1059+100", "lon": 120.268714, "lat": 31.946836, "alt": 66.28465271 },
+        { "value": "1059+200", "lon": 120.269191, "lat": 31.945966, "alt": 66.740493774399994 },
+        { "value": "1059+300", "lon": 120.269659, "lat": 31.945101, "alt": 67.038345336899994 },
+        { "value": "1059+400", "lon": 120.270114, "lat": 31.944238, "alt": 66.820884704600005 },
+        { "value": "1059+500", "lon": 120.270493, "lat": 31.943512, "alt": 66.550170898399998 },
+        { "value": "1059+600", "lon": 120.270954, "lat": 31.942647, "alt": 65.999832153300005 },
+        { "value": "1059+700", "lon": 120.271436, "lat": 31.941751, "alt": 65.308151245100007 },
+        { "value": "1059+800", "lon": 120.271886, "lat": 31.940912, "alt": 64.024765014600007 },
+        { "value": "1059+900", "lon": 120.272358, "lat": 31.940034, "alt": 62.4715614319 },
+        { "value": "1060+000", "lon": 120.272824, "lat": 31.939168, "alt": 60.201644897500003 },
+        { "value": "1060+100", "lon": 120.273267, "lat": 31.938339, "alt": 58.084266662600001 },
+        { "value": "1060+200", "lon": 120.273802, "lat": 31.937337, "alt": 55.740924835199998 },
+        { "value": "1060+300", "lon": 120.274241, "lat": 31.936508, "alt": 55.740925 },
+        { "value": "1060+400", "lon": 120.27467, "lat": 31.935689, "alt": 55.740925 },
+        { "value": "1060+500", "lon": 120.27511, "lat": 31.934861, "alt": 55.740925 },
+        { "value": "1060+600", "lon": 120.275547, "lat": 31.934052, "alt": 55.740925 },
+        { "value": "1060+700", "lon": 120.27594, "lat": 31.93332, "alt": 55.740925 },
+        { "value": "1060+800", "lon": 120.276386, "lat": 31.932513, "alt": 55.740925 },
+        { "value": "1060+900", "lon": 120.276805, "lat": 31.931717, "alt": 55.740925 },
+        { "value": "1061+000", "lon": 120.27713, "lat": 31.931113, "alt": 55.740925 },
+        { "value": "1061+100", "lon": 120.277607, "lat": 31.930438, "alt": 55.740925 },
+        { "value": "1061+200", "lon": 120.278157, "lat": 31.929557, "alt": 55.740925 },
+        { "value": "1061+300", "lon": 120.278596, "lat": 31.928878, "alt": 55.740925 },
+        { "value": "1061+400", "lon": 120.279217, "lat": 31.92785, "alt": 55.740925 },
+        { "value": "1061+500", "lon": 120.279718, "lat": 31.927132, "alt": 55.740925 },
+        { "value": "1061+600", "lon": 120.280311, "lat": 31.926338, "alt": 55.740925 },
+        { "value": "1061+700", "lon": 120.28096, "lat": 31.925491, "alt": 55.740925 },
+        { "value": "1061+800", "lon": 120.28155, "lat": 31.924714, "alt": 55.740925 },
+        { "value": "1061+900", "lon": 120.282201, "lat": 31.923877, "alt": 55.740925 },
+        { "value": "1062+000", "lon": 120.282721, "lat": 31.92326, "alt": 55.740925 },
+        { "value": "1062+100", "lon": 120.283335, "lat": 31.922504, "alt": 55.740925 },
+        { "value": "1062+200", "lon": 120.283865, "lat": 31.921831, "alt": 55.740925 },
+        { "value": "1062+300", "lon": 120.284462, "lat": 31.921045, "alt": 55.740925 },
+        { "value": "1062+400", "lon": 120.284929, "lat": 31.920421, "alt": 55.740925 },
+        { "value": "1062+500", "lon": 120.285564, "lat": 31.919545, "alt": 55.740925 },
+        { "value": "1062+600", "lon": 120.286075, "lat": 31.918817, "alt": 55.740925 },
+        { "value": "1062+700", "lon": 120.286664, "lat": 31.917935, "alt": 55.740925 },
+        { "value": "1062+800", "lon": 120.287156, "lat": 31.917189, "alt": 55.740925 },
+        { "value": "1062+900", "lon": 120.287688, "lat": 31.916341, "alt": 55.740925 },
+    ]
+}
+export default zhData;
\ No newline at end of file
diff --git a/src/components/index.vue b/src/components/index.vue
index 9227b11..5bb3dfd 100644
--- a/src/components/index.vue
+++ b/src/components/index.vue
@@ -23,6 +23,7 @@
     </div>
     <viewer1 class="mapViewer" id="mapOl" :key="switchKey" v-show="viewer1Show" :style="viewer1Style" />
     <viewer class="mapViewer" id="mapView" ref="mapViewer" :style="viewerStyle" />
+    <measure-coord v-show="$store.state.isShowMeasureCoord"></measure-coord>
     <div class="controlPanel" :style="{
       width: `${size}`,
       height: `${size}`,
@@ -53,6 +54,8 @@
     <div id="imageModel" class="imageModel">
       <img id="myImage" class="image" src="">
     </div>
+    <message-info v-if="$store.state.showMessageInfo"></message-info>
+    <zhai-hai-info  v-if="$store.state.isshowZhaiHai"></zhai-hai-info>
   </div>
 </template>
 
@@ -70,7 +73,9 @@
 import signalling from "@/components/menu/signalling";
 import bottommenu from "@/components/menu/bottom-menu";
 import { mapState, mapMutations } from "vuex";
-
+import messageInfo from "@/components/left/layerTree/messageInfo.vue";
+import measureCoord from "@/components/left/layerTree/measureCoord.vue";
+import zhaiHaiInfo from "./left/layerTree/zhaiHaiInfo.vue";
 export default {
   name: "index",
   components: {
@@ -85,7 +90,10 @@
     setting,
     qycharts,
     History,
-    signalling
+    signalling,
+    messageInfo,
+    measureCoord,
+    zhaiHaiInfo
   },
   data() {
     return {
diff --git a/src/components/left/layerTree.vue b/src/components/left/layerTree.vue
index b3b0c3c..51a416f 100644
--- a/src/components/left/layerTree.vue
+++ b/src/components/left/layerTree.vue
@@ -1569,6 +1569,7 @@
           break;
 
         case "wmse":
+     
           layer = sgworld.Creator.CreateWMSImageFeatureLayer(
             treeNode.name,
             {
@@ -1576,7 +1577,8 @@
               url: treeNode.urls,
               queryParameters: {
                 layers: treeNode.layer || ""
-              }
+              },
+         
             },
             {},
             "0",
diff --git a/src/components/left/layerTree/Layer.vue b/src/components/left/layerTree/Layer.vue
index 389efd2..9cb47da 100644
--- a/src/components/left/layerTree/Layer.vue
+++ b/src/components/left/layerTree/Layer.vue
@@ -19,8 +19,8 @@
             <el-button class="button-user" type="primary" icon="el-icon-upload" title="涓婁紶鑷虫湇鍔″櫒"
               @click.stop="saveHistoryPlot"></el-button>
 
-            <!-- <el-button class="button-user historyBtn" type="primary" icon="el-icon-s-order" title="鍘嗗彶璁板綍"
-              @click.stop="histotyPlotting"></el-button> -->
+            <el-button class="button-user historyBtn" type="primary" icon="el-icon-s-order" title="鑾峰彇鏈�鏂版暟鎹�"
+              @click.stop="histotyPlotting"></el-button>
           </el-upload>
         </div>
 
@@ -99,6 +99,7 @@
 import SaveScene from "./SaveScene.vue";
 import { Op_SelectByPage, Op_Insert, Op_UpdateById } from '../../../api/api.js'
 import model from "../../../assets/js/Layer/model";
+import mapOL from "../../../assets/js/Layer/mapOL";
 // 宸ョ▼鏍戝伐鍏�
 let _treeTool;
 function arrGroup(arr, fn) {
@@ -195,7 +196,8 @@
       Bus.$emit("checkTab", "index/add/treeLayer", false);
     },
     closeLayer() {
-      this.$parent.hideLayer();
+      this.$store.state.isShowLayer= false
+      // this.$parent.hideLayer();
     },
     // 瀹氫箟涓浆绔欎簨浠�
     initBusEvent() {
@@ -389,6 +391,9 @@
     },
     // 鍔犺浇鍘嗗彶鏍囩粯鏁版嵁
     async histotyPlotting() {
+      this.setTreeData([]);
+      this.initData({});
+      model.deleteAll();
       const data = await Op_SelectByPage({ pageSize: 1000000, pageIndex: 1, name: '' });
       if (data.status == 200 && data.data.length > 0) {
         var val_data = data.data;
@@ -550,6 +555,7 @@
         if (addData && node._children) {
           node._children.forEach((item) => {
             _treeTool.addData(item);
+            console.log(item)
             this.setAddGLBLayer(item);
           });
         } else {
@@ -586,6 +592,12 @@
           model.addModelLayer(treeNode);
         } else {
           model.setDelGLBModel(treeNode);
+        }
+      } else if (treeNode.sourceType == "SimpleGraphic") {
+        if (isCheck) {
+          mapOL.addLayerData(treeNode);
+        } else {
+          mapOL.removeLayerD(treeNode);
         }
       }
       // 鍙兘鍚屾椂鍔犺浇涓�涓湴褰�
@@ -809,6 +821,8 @@
       if (res.sourceType == "GLB" && res.checked) {
 
         model.addModelLayer(res);
+      } else if (res.sourceType == "SimpleGraphic" && res.checked) {
+        mapOL.addLayerData(res);
       }
     },
     // 娣诲姞婕旂ず鍔ㄧ敾
@@ -943,6 +957,10 @@
       if (this.selectNode.sourceType === "GLB") {
         model.setDelGLBModel(this.selectNode)
       }
+       if (this.selectNode.sourceType === "SimpleGraphic") {
+     
+        mapOL.removeLayerData(this.selectNode)
+      }
 
       this.remove(this.selectNode);
       this.$refs.tree && this.$refs.tree.setCurrentKey(null);
diff --git a/src/components/left/layerTree/measureCoord.vue b/src/components/left/layerTree/measureCoord.vue
new file mode 100644
index 0000000..febde6c
--- /dev/null
+++ b/src/components/left/layerTree/measureCoord.vue
@@ -0,0 +1,175 @@
+<template>
+  <div id="mapInfo" class="modelBox" v-drag>
+    <div>
+      <div class="modleTitle ">
+        <div>鍧愭爣鎷惧彇</div>
+        <div class="modelClose" @click="close"> X</div>
+      </div>
+    </div>
+    <div class="modelContent">
+      <div class="contentMessage" v-for="(item, index) in modelOption" :key="index">
+        <div>{{ item.lon }},{{ item.lat }}</div>
+        <div>{{ item.dis }}</div>
+      </div>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+import model from '../../../assets/js/Layer/model';
+import mapInfo from '../../../assets/js/Layer/mapInfo';
+
+import * as turf from '@turf/turf'
+import measure from '../../../assets/js/Layer/measure';
+export default {
+  name: "modelEdit",
+  components: {
+    menuOpton: [],
+  },
+  computed: {
+    Obj() {
+      return this.$store.state.measureCoordObj;
+    },
+    proObj() {
+      return this.$store.state.isShowMeasureCoord;
+    }
+  },
+  watch: {
+    Obj(newVal, oldVal) {
+      if (newVal) {
+        this.setMeasureCoord(newVal);
+      }
+    },
+    proObj(newVal) {
+      if (newVal == false) {
+        this.modelOption = []
+      }
+    }
+  },
+  data() {
+    return {
+      modelOption: []
+
+    };
+  },
+  mounted() {
+
+  },
+  destroyed() {
+
+  },
+  methods: {
+    close() {
+      this.$store.state.isShowMeasureCoord = false
+      this.$store.state.isMeasureFlag = false
+      this.$store.state.measureCoordObj = false
+      measure.deleteImgLabel()
+    },
+    setMeasureCoord(res) {
+      var dis = null
+      if (this.modelOption.length > 0) {
+        var obj = this.modelOption[this.modelOption.length - 1]
+        var from = turf.point([obj.lon, obj.lat]);
+        var to = turf.point([res.longitude, res.latitude]);
+        var options = { units: 'meters' };
+        var distance = turf.distance(from, to, options);
+        dis = distance > 1000 ? parseFloat((distance / 1000)).toFixed(2) + "鍗冪背" : parseFloat((distance)).toFixed(2) + "绫�";
+      } else {
+        dis = '0绫�';
+      }
+      var obj={
+        lon: res.longitude,
+        lat: res.latitude,
+        dis: dis
+      } 
+      this.modelOption.push(obj);
+      measure.addImgLabel(obj);
+    },
+
+  }
+};
+</script>
+
+<style scoped lang="less">
+.modelBox {
+  width: 360px;
+  height: 40%;
+  border: 1px solid white;
+  top: 30%;
+  right: 60px;
+
+  background-color: rgba(0, 0, 0, 0.6); // #0048fd69 !important
+  z-index: 9999;
+  position: absolute;
+
+
+  .modleTitle {
+    height: 42px;
+    width: 90%;
+    background: #0048fd69 !important;
+    border-bottom: 1px solid white;
+    color: white;
+    font-weight: 700px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0% 5%;
+
+    .modelClose {
+      height: 16px;
+      width: 16px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(128, 128, 128, 0.6);
+      font-size: 14x;
+    }
+  }
+
+  .modelContent {
+    width: 90%;
+    height: calc(95% - 42px);
+    margin: 5%;
+    // display: flex;
+    // justify-content: space-between;
+    overflow-y: auto;
+    overflow-x: hidden;
+
+    .contentMessage {
+      width: 100%;
+      color: white;
+      display: flex;
+      border: 1px solid white;
+      border-top: transparent;
+
+      div {
+        // width: 50%;
+        text-align: center;
+        // margin-bottom: 5%;
+        line-height: 50px;
+      }
+
+      div:first-child {
+        width: 59%;
+        border-right: 1px solid white;
+
+      }
+
+      div:last-child {
+        width: 40%;
+        border-right: 1px solid white;
+
+      }
+    }
+
+    .contentMessage:first-child {
+      border-top: 1px solid white;
+      ;
+    }
+  }
+
+
+}
+</style>
diff --git a/src/components/left/layerTree/menuQuery.vue b/src/components/left/layerTree/menuQuery.vue
new file mode 100644
index 0000000..62f06bd
--- /dev/null
+++ b/src/components/left/layerTree/menuQuery.vue
@@ -0,0 +1,274 @@
+<template>
+  <div class="modelBox" v-drag>
+    <div>
+      <div class="modleTitle ">
+        <div>妗╁彿鏌ヨ</div>
+        <div class="modelClose" @click="$store.state.isShowMenuQuery = false"> X</div>
+      </div>
+    </div>
+    <div class="modelContent">
+      <div>
+        <el-select v-model="formInline.type" @change="setTypeChange" placeholder="璇烽�夋嫨" style="width: 100%;">
+          <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
+          </el-option>
+        </el-select>
+      </div>
+      <div class="contentBox" label-width="80px">
+        <el-form :inline="true" :model="formInline" class="demo-form-inline">
+          <el-form-item label="妗╁彿:" v-if="formInline.type != '2'">
+            <!-- <el-input v-model="formInline.zhuangHao" style="width: 270px" placeholder="璇疯緭鍏ユ々鍙�..."></el-input> -->
+            <el-autocomplete class="inline-input" v-model="formInline.zhuangHao" :fetch-suggestions="querySearch"
+              placeholder="璇疯緭鍏ュ唴瀹�" :trigger-on-focus="false" @select="handleSelect"></el-autocomplete>
+          </el-form-item>
+          <el-form-item label="缁忓害:" v-if="formInline.type == '2'">
+            <el-input v-model="formInline.lon" style="width: 270px" placeholder="璇疯緭鍏ョ粡搴︽垨鎷惧彇鍧愭爣..."></el-input>
+          </el-form-item>
+          <el-form-item label="缁村害:" v-if="formInline.type == '2'">
+            <el-input v-model="formInline.lat" style="width: 270px" placeholder="璇疯緭鍏ョ淮搴︽垨鎷惧彇鍧愭爣..."></el-input>
+          </el-form-item>
+          <el-form-item>
+            <div class="contentButton">
+              <el-button size="small" @click="$store.state.isQueryFalag = true" v-show="formInline.type == '2'">鎷惧彇
+              </el-button>
+              <el-button size="small" @click="setQuery">鏌ヨ</el-button>
+            </div>
+
+          </el-form-item>
+
+        </el-form>
+      </div>
+      <div class="queryBox" v-show="queryData.length > 0" v-for="(item, key) in queryData" :key="key">
+        <div>
+          {{ item.name }}
+        </div>
+        <div>
+          :
+        </div>
+        <div>
+          {{ item.val }}
+        </div>
+      </div>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+import model from '../../../assets/js/Layer/model';
+import zhData from '../../../assets/js/Layer/zhuanghao';
+import { kuanDeng_mp_getMpByLocation } from '../../../api/api'
+
+export default {
+  name: "modelQuery",
+  components: {},
+
+  computed: {
+    Obj() {
+      return this.$store.state.isQyeryCoord;
+    },
+  },
+  watch: {
+    Obj(newVal, oldVal) {
+  
+      if (newVal) {
+        this.formInline.lon= newVal.longitude;
+        this.formInline.lat= newVal.latitude;
+        this.$store.state.isQueryFalag = false;
+        this.$store.state.isQyeryCoord = null;
+      }
+    },
+  },
+  data() {
+    return {
+      options: [{
+        value: '1',
+        label: '妗╁彿鏌ヨ'
+      }, {
+        value: '2',
+        label: '鍧愭爣鏌ヨ'
+      }],
+
+      formInline: {
+        type: '1',
+        zhuangHao: "",
+        lon: "",
+        lat: ""
+      },
+      restaurants: [],
+      queryData: [],
+    };
+  },
+  mounted() {
+    this.setLayerStart();
+  },
+  destroyed() {
+
+  },
+  methods: {
+    setTypeChange() {
+      this.formInline.zhuangHao = "";
+      this.formInline.lon = "";
+      this.formInline.lat = "";
+      this.queryData = [];
+    },
+    setQuery() {
+      var coord = null;
+      if (this.formInline.type == '1') {
+        coord = this.getQueryItem(this.formInline.zhuangHao);
+      } else {
+        coord={
+          lon:this.formInline.lon,
+          lat:this.formInline.lat
+        }
+      }
+      if (!coord) return;
+      this.getQueryMessageInfo(coord)
+
+    },
+    async getQueryMessageInfo(coord) {
+      this.queryData = [];
+      const data = await kuanDeng_mp_getMpByLocation(coord)
+      if (data.status == 200 && data.data.result.length > 0) {
+        var val = data.data.result[0];
+        if (!val.LINK_CODE) return;
+
+        for (var key in val) {
+          var qval = null;
+          if (key === "UP_DOWN") {
+
+            if (val[key] == '1') {
+              qval = '涓婅'
+            } else if (val[key] == '2') {
+              qval = '涓嬭'
+            }
+          } else {
+            qval = val[key]
+          }
+          this.queryData.push({
+            name: key,
+            val: qval
+          })
+        }
+      }
+      if (this.queryData.length > 0 && this.formInline.type == '1') {
+        Viewer.camera.flyTo({
+          destination: Cesium.Cartesian3.fromDegrees(
+            coord.lon,
+            coord.lat,
+            300
+          ),
+          orientation: {
+            heading: 0,
+            pitch: Cesium.Math.toRadians(-80.0),
+            roll: 0,
+          },
+
+        });
+      }
+
+    },
+    getQueryItem(res) {
+
+      for (var i in this.restaurants) {
+
+        if (this.restaurants[i].value === res) {
+          var coord = this.restaurants[i];
+          return {
+            lon: coord.lon,
+            lat: coord.lat,
+            alt: coord.alt
+          };
+        }
+      }
+      return null;
+    },
+    setLayerStart() {
+      this.restaurants = zhData.data;
+    },
+    querySearch(queryString, cb) {
+      var restaurants = this.restaurants;
+      var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
+      // 璋冪敤 callback 杩斿洖寤鸿鍒楄〃鐨勬暟鎹�
+      cb(results);
+    },
+    handleSelect(item) {
+
+      this.queryItem = item;
+    },
+    createFilter(queryString) {
+      return (restaurant) => {
+
+        return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
+      };
+    },
+  }
+};
+</script>
+
+<style scoped lang="less">
+.modelBox {
+  width: 360px;
+  height: 60%;
+  border: 1px solid white;
+  top: 70px;
+  right: 20px;
+  background-color: rgba(0, 0, 0, 0.6); // #0048fd69 !important
+  z-index: 9999;
+  position: absolute;
+
+  .modleTitle {
+    height: 42px;
+    width: 90%;
+    background: #0048fd69 !important;
+    border-bottom: 1px solid white;
+    color: white;
+    font-weight: 700px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0% 5%;
+
+    .modelClose {
+      height: 16px;
+      width: 16px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(128, 128, 128, 0.6);
+      font-size: 14x;
+    }
+  }
+
+  .modelContent {
+
+    width: 90%;
+    height: calc(95% - 42px);
+    margin: 5%;
+
+    /deep/.el-form-item__label {
+      color: white;
+    }
+
+    .contentBox {
+      padding: 10px 0px;
+    }
+
+    .contentButton {
+      width: 325px;
+      display: flex;
+      justify-content: center;
+    }
+
+    .queryBox {
+      display: flex;
+      color: white;
+
+      div {
+        line-height: 40px;
+      }
+
+    }
+  }
+}
+</style>
diff --git a/src/components/left/layerTree/messageInfo.vue b/src/components/left/layerTree/messageInfo.vue
new file mode 100644
index 0000000..a733a99
--- /dev/null
+++ b/src/components/left/layerTree/messageInfo.vue
@@ -0,0 +1,129 @@
+<template>
+  <div id="mapInfo" class="modelBox" v-drag>
+    <div>
+      <div class="modleTitle ">
+        <div>灞炴�т俊鎭�</div>
+        <div class="modelClose" @click="$store.state.showMessageInfo = false"> X</div>
+      </div>
+    </div>
+    <div class="modelContent">
+      <div class="contentMessage" v-for="(item, index) in modelOption" :key="index">
+        <div>{{ item.name }}</div>
+        <div>{{ item.value }}</div>
+      </div>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+import model from '../../../assets/js/Layer/model';
+import mapInfo from '../../../assets/js/Layer/mapInfo';
+
+
+export default {
+  name: "modelEdit",
+  components: {
+
+  },
+
+  data() {
+    return {
+      modelOption: null
+
+    };
+  },
+  mounted() {
+    this.setLayerStart();
+  },
+  destroyed() {
+
+  },
+  methods: {
+
+    setLayerStart() {
+      this.modelOption = mapInfo.mssageInfo;
+    },
+
+  }
+};
+</script>
+
+<style scoped lang="less">
+.modelBox {
+  width: 370px;
+  height: 30%;
+  border: 1px solid white;
+  top: 30%;
+  left: calc(50% - 180px);
+
+  background-color: rgba(0, 0, 0, 0.6); // #0048fd69 !important
+  z-index: 9999;
+  position: absolute;
+
+
+  .modleTitle {
+    height: 42px;
+    width: 90%;
+    background: #0048fd69 !important;
+    border-bottom: 1px solid white;
+    color: white;
+    font-weight: 700px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0% 5%;
+
+    .modelClose {
+      height: 16px;
+      width: 16px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(128, 128, 128, 0.6);
+      font-size: 14x;
+
+    }
+  }
+
+  .modelContent {
+    width: 88%;
+    height: calc(95% - 62px);
+    margin: 5%;
+    // display: flex;
+    // justify-content: space-between;
+
+    overflow-y: auto;
+    overflow-x: hidden;
+    .contentMessage {
+      width: 100%;
+      color: white;
+      display: flex;
+      border: 1px solid white;
+      border-top: transparent;
+
+      div {
+        width: calc(50% - 2px);
+        text-align: center;
+        // margin-bottom: 5%;
+        line-height: 50px;
+        border-right: 1px solid white;
+      }
+
+      div:first-child {
+        border-right: 1px solid white;
+
+      }
+
+    }
+
+    .contentMessage:first-child {
+      border-top: 1px solid white;
+      ;
+    }
+  }
+
+
+}
+</style>
diff --git a/src/components/left/layerTree/modelEdit.vue b/src/components/left/layerTree/modelEdit.vue
index b284c10..dce0f94 100644
--- a/src/components/left/layerTree/modelEdit.vue
+++ b/src/components/left/layerTree/modelEdit.vue
@@ -13,11 +13,11 @@
         </el-form-item>
         <el-form-item label="缁忓害">
           <el-input-number style="width: 100%;" @change="setModelFormChange(2)" v-model="modelOption.style.longitude"
-            :step="0.001" />
+            :step="0.00001" />
         </el-form-item>
         <el-form-item label="缁村害">
           <el-input-number style="width: 100%;" @change="setModelFormChange(2)" v-model="modelOption.style.latitude"
-            :step="0.001" />
+            :step="0.00001" />
         </el-form-item>
         <el-form-item label="楂樺害">
           <el-input-number style="width: 100%;" @change="setModelFormChange(2)" :min="-100" :max="1000"
diff --git a/src/components/left/layerTree/zhaiHaiInfo.vue b/src/components/left/layerTree/zhaiHaiInfo.vue
new file mode 100644
index 0000000..70c7c40
--- /dev/null
+++ b/src/components/left/layerTree/zhaiHaiInfo.vue
@@ -0,0 +1,204 @@
+<template>
+  <div id="mapInfo" class="modelBox" v-drag>
+    <div>
+      <div class="modleTitle ">
+        <div>灞炴�т俊鎭�</div>
+        <div class="modelClose" @click="$store.state.isshowZhaiHai = false"> X</div>
+      </div>
+    </div>
+    <div class="modelContent ">
+      <div class="pdDialog" style="height: 100%;width: 100%; ">
+        <canvas id="pdCanvas">
+        </canvas>
+    </div>
+    </div>
+
+
+  </div>
+</template>
+
+<script>
+
+
+
+
+export default {
+  name: "zhaiHaiInfo",
+  components: {
+
+  },
+
+  data() {
+    return {
+      properties: null,
+
+    };
+  },
+  mounted() {
+    this.setLayerStart();
+  },
+  destroyed() {
+
+  },
+  methods: {
+
+    setLayerStart() {
+      this.properties = this.$store.state.showZhaiHaiImg;
+      this.renderCanvas(this.properties)
+    },
+    renderCanvas(properties) {
+      // 鍥剧墖鍔犺浇鎴愬姛鍚�
+      const imgs = new Image()
+      let imgSrc = "http://222.128.27.75:18010/thumb/production/road_detection_v4/"
+        + properties.projectId + "/distress_track_processor_v5/output/"
+        + properties.trackId + "/bev_video/"
+        + properties.trackId + ".mp4/thumb-"
+        + (properties.frameNo - 1) * 10 + ".jpg"
+      imgs.crossOrigin = 'Anonymous'
+      imgs.setAttribute('crossOrigin', 'Anonymous')
+      imgs.src = imgSrc;
+      imgs.onerror = () => {
+        console.error('鍥剧墖鍔犺浇澶辫触!');
+        return false
+      }
+      var that = this;
+      imgs.onload = () => {
+        let imgHeight = 0,
+          imgWidth = 0;
+
+        let gridSize = [
+          properties.G_WIDTH || 40, properties.G_WIDTH || 44
+        ]
+        const canvas = document.getElementById('pdCanvas');
+        if (!canvas) { return }
+        const ctx = canvas.getContext('2d');
+        const _frame = document.getElementsByClassName('pdDialog')[0];
+        const canvasWidth = _frame.offsetWidth;
+        const canvasHeight = _frame.offsetHeight;
+        // console.log(imgs)
+
+        // var originalHeight = imgs.HEIGHT||761 / 1;
+        // var originalWidth = imgs.WIDTH||1523 / 1;
+        var originalHeight = Number(properties.HEIGHT) || 800 / 1;
+        var originalWidth = Number(properties.WIDTH) || 1600 / 1;
+        // 鐢诲竷瀹介珮姣�
+        const canvasRatio = canvasWidth / canvasHeight;
+        // 鍥剧墖鐨勫楂樻瘮
+        var whRatio = originalWidth / originalHeight;
+        // 鍥剧墖鐩稿浜庣敾甯冪殑灏哄杩涜璋冩暣
+        // 濡傛灉鍥剧墖鐨勫楂樻瘮澶т簬鐢诲竷鐨勫楂樻瘮
+        if (whRatio > canvasRatio) {
+          imgWidth = canvasWidth;
+          imgHeight = imgWidth / whRatio;
+        } else {
+          imgHeight = canvasHeight;
+          imgWidth = imgHeight * whRatio;
+        }
+        whRatio = imgWidth / imgHeight;
+        canvas.height = imgHeight;
+        canvas.width = imgWidth;
+        //缁樺埗鑳屾櫙鍥�
+        ctx.drawImage(
+          imgs,
+          0,
+          0,
+          imgWidth,
+          imgHeight
+        )
+
+        var scaleGridSizeX = imgWidth / originalWidth * gridSize[0];
+        var scaleGridSizeY = imgHeight / originalHeight * gridSize[1];
+        var scaleGridSize = [
+          scaleGridSizeX, scaleGridSizeY
+        ];
+        that.drawMarker(ctx, scaleGridSize, properties);
+      }
+    },
+    drawMarker(ctx, scaleGridSize, properties) {
+      let width = scaleGridSize[0];
+      let height = scaleGridSize[0];
+      let _grids = [];
+  
+      var grid = properties.grids._value
+      if (!Array.isArray(grid)) {
+        _grids = JSON.parse(grid)
+      } else {
+        _grids =grid;
+      }
+      _grids.forEach(m => {
+        let x = m[0] * width;
+        let y = m[1] * height;
+        let markerImg = new Image();
+
+        let markerImgSrc = 'https://webapi.kuandeng.net/gs/pddemo/pdmarker/' + properties.type + '.png';
+        markerImg.crossOrigin = 'Anonymous'
+        markerImg.setAttribute('crossOrigin', 'Anonymous')
+        markerImg.src = markerImgSrc;
+
+        markerImg.onload = () => {
+          ctx.drawImage(markerImg,
+            x,
+            y,
+            width,
+            height)
+        }
+
+      })
+    }
+  }
+};
+</script>
+
+<style scoped lang="less">
+.modelBox {
+  width: 40%;
+  height: 50%;
+  border: 1px solid white;
+  top: 25%;
+  left: 30%;
+
+  background-color: rgba(0, 0, 0, 0.6); // #0048fd69 !important
+  z-index: 9999;
+  position: absolute;
+
+
+  .modleTitle {
+    height: 42px;
+    width: 90%;
+    background: #0048fd69 !important;
+    border-bottom: 1px solid white;
+    color: white;
+    font-weight: 700px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 0% 5%;
+
+    .modelClose {
+      height: 16px;
+      width: 16px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(128, 128, 128, 0.6);
+      font-size: 14x;
+
+    }
+  }
+
+  .modelContent {
+    width: 100%;
+    height: calc(100% - 42px);
+    // margin: 1%;
+    // display: flex;
+    // justify-content: space-between;
+
+ 
+
+ 
+   
+  }
+
+
+}
+</style>
diff --git a/src/components/left/leftmenu.vue b/src/components/left/leftmenu.vue
index d2536a3..2270aa1 100644
--- a/src/components/left/leftmenu.vue
+++ b/src/components/left/leftmenu.vue
@@ -1,15 +1,7 @@
 <template>
-  <div
-    @click="showLeftMenu"
-    :class="{ leftmenu: !isShowLeftPanel, leftmenu_active: isShowLeftPanel }"
-    class="leftmenustyle"
-  >
-    <span
-      class="closeLeftMenu"
-      v-if="isShowLeftPanel"
-      @click.stop="hideLeftMenu"
-      >脳</span
-    >
+  <div @click="showLeftMenu" :class="{ leftmenu: !isShowLeftPanel, leftmenu_active: isShowLeftPanel }"
+    class="leftmenustyle">
+    <span class="closeLeftMenu" v-if="isShowLeftPanel" @click.stop="hideLeftMenu">脳</span>
     <img class="openLeftMenu" v-else src="@/assets/img/left/souselist4.png" />
 
     <div class="layerTreeContainer" v-show="isShowLeftPanel">
@@ -18,7 +10,7 @@
           <el-radio :label="1">缁勭粐鏈烘瀯</el-radio>
           <el-radio :label="2">涓氬姟瑕佺礌</el-radio>
         </el-radio-group> -->
-        <span>鍥惧眰绠$悊</span> 
+        <span>鍥惧眰绠$悊</span>
         <!-- <div @click="setTreeDataChange(1)">涓氬姟</div>
         <div @click="setTreeDataChange(2)">涓氬姟</div> -->
       </div>
@@ -28,17 +20,8 @@
         <el-button size="small" @click="setTreeDataChange(2)">鍥惧眰2</el-button>
       </div> -->
       <div class="layerTree">
-        <el-tree
-          :data="treeData"
-          node-key="id"
-          ref="tree"
-          :default-checked-keys="arr"
-          style="min-width: 160px"
-          show-checkbox
-          :render-content="renderContent"
-          :default-expanded-keys="defaultExpanded"
-          @check="check"
-        ></el-tree>
+        <el-tree :data="treeData" node-key="id" ref="tree" :default-checked-keys="arr" style="min-width: 160px"
+          show-checkbox :render-content="renderContent" :default-expanded-keys="defaultExpanded" @check="check"></el-tree>
       </div>
     </div>
   </div>
@@ -57,6 +40,8 @@
 import { getmenu } from "../../api/api";
 import keys from "@/assets/poiKeys1";
 import store from "@/utils/store";
+import mapInfo from "../../assets/js/Layer/mapInfo";
+import mapGeo from "../../assets/js/Layer/mapGeo";
 
 let colorTool;
 let projectTreeData = [];
@@ -840,6 +825,7 @@
       // 鎵撳嬀閫変腑
       let isCheck = data.checkedKeys.indexOf(treeNode.id) > -1;
       this.setVisiable(treeNode, isCheck);
+      this.setGeoJSOnCheck(treeNode,isCheck);
       //閫変腑涔嬪悗浼犵粰vuex
       let selectedLayers = this.$refs.tree.getCheckedNodes();
       let filterSelectLayers = selectedLayers;
@@ -866,6 +852,11 @@
       // if (this.updateFlag) {
       return params;
       // }
+    },
+    setGeoJSOnCheck(treeNode, checked){
+      if(!checked){
+        mapGeo.delGeoSource(treeNode);
+      }
     },
     setVisiable(treeNode, checked) {
       if (treeNode.sourceType == "BJ2000") {
@@ -977,7 +968,7 @@
           height: 310,
           url: "./static/html/layerProp.html",
           fn: {
-            end: function () {},
+            end: function () { },
           },
         });
       } else if (data._children) {
@@ -1195,9 +1186,8 @@
               treeNode.name,
               {
                 id: treeNode.id,
-                url: `${treeNode.urls}/${treeNode.tile || "{z}/{x}/{y}"}.${
-                  treeNode.img || "png"
-                }`,
+                url: `${treeNode.urls}/${treeNode.tile || "{z}/{x}/{y}"}.${treeNode.img || "png"
+                  }`,
                 enablePickFeatures: false,
                 level: treeNode.Level,
                 minimumLevel: treeNode.minimumLevel,
@@ -1718,6 +1708,10 @@
             );
           }
           break;
+        case 'GEOJSON':
+          mapGeo.init(treeNode);
+      
+          break;
         case "wmse":
           // layer = sgworld.Creator.CreateWMSImageFeatureLayer(
           //   treeNode.name,
@@ -1736,6 +1730,12 @@
           //   true,
           //   function () {}
           // );
+          var that = this;
+          var getFeatureInfoFormat = new Cesium.GetFeatureInfoFormat("", null, function (html) {
+            // that.getFeatureInfo(html)
+            mapInfo.Init(html)
+          });
+
           layer = sgworld.Creator.createImageryProvider(
             treeNode.name,
             "wms",
@@ -1743,16 +1743,19 @@
               id: treeNode.id,
               url: treeNode.urls,
               level: treeNode.Level,
+              zIndex: 999,
               minimumLevel: treeNode.minimumLevel,
               maximumLevel: treeNode.maximumLevel,
-              enablePickFeatures: false,
-
               layers: treeNode.layer || "",
               alpha: treeNode.alpha,
               parameters: {
                 format: "image/png",
                 transparent: true,
+
               },
+              enablePickFeatures: true,
+              getFeatureInfoParameters: { info_format: 'text/html' },
+              getFeatureInfoFormats: [getFeatureInfoFormat],
             },
             "0",
             undefined,
@@ -1769,8 +1772,8 @@
           axios
             .get(
               treeNode.urls +
-                "?version=1.3.0&request=GetFeature&format=json&typename=" +
-                treeNode.layer
+              "?version=1.3.0&request=GetFeature&format=json&typename=" +
+              treeNode.layer
             )
             .then((data) => {
               let features = data.data.features;
@@ -2038,7 +2041,7 @@
               clampToGround: sgworld.Core.defaultValue(
                 treeNode.clampToGround,
                 treeNode.extrudedHeight === undefined &&
-                  treeNode.height === undefined
+                treeNode.height === undefined
               ),
               classificationType: treeNode.classificationType,
               near: sgworld.Core.defaultValue(treeNode.near, 0),
@@ -2169,7 +2172,7 @@
               de,
               "0",
               treeNode.checked,
-              function () {}
+              function () { }
             );
           } else if (treeNode.class === "polylineVolume") {
             de = {
@@ -2199,7 +2202,7 @@
               de,
               "0",
               treeNode.checked,
-              function () {}
+              function () { }
             );
           } else if (treeNode.class === "polyline") {
             de = {
@@ -2239,7 +2242,7 @@
                 de,
                 "0",
                 treeNode.checked,
-                function () {}
+                function () { }
               );
           } else if (treeNode.class === "polygon") {
             de = {
@@ -2272,7 +2275,7 @@
                 de,
                 "0",
                 treeNode.checked,
-                function () {}
+                function () { }
               );
           } else if (treeNode.class === "model") {
             de = {
@@ -2298,7 +2301,7 @@
               de,
               "0",
               treeNode.checked,
-              function () {}
+              function () { }
             );
           }
           layer && (treeNode.id = layer.treeobj.id);
@@ -2412,7 +2415,7 @@
           layer = sgworld.Creator.createS3MLayer(
             treeNode.urls,
             sgworld._Viewer.scene,
-            function () {}
+            function () { }
           );
           break;
         case "gltf":
@@ -2688,8 +2691,8 @@
       let imgUrl;
       new Cesium.GeoJsonDataSource.load(
         treeNode.urls +
-          "?version=1.3.0&request=GetFeature&format=json&typename=" +
-          treeNode.layer
+        "?version=1.3.0&request=GetFeature&format=json&typename=" +
+        treeNode.layer
       ).then((dataSource) => {
         // that.$set(treeNode, "disabled", false);
         Viewer.dataSources.add(dataSource);
@@ -3041,6 +3044,7 @@
   background-image: url("~@/assets/img/new/treeClose-y.png");
 
 }
+
 .leftmenu {
   background-image: url("~@/assets/img/new/treeClose.png");
   background-size: 100% 100%;
@@ -3100,7 +3104,7 @@
   background-color: rgba(255, 255, 255, 0.4) !important;
 }
 
-.el-tree /deep/ .is-current > .el-tree-node__content {
+.el-tree /deep/ .is-current>.el-tree-node__content {
   background-color: rgba(255, 255, 255, 0.4) !important;
   font-size: 14px;
 }
diff --git a/src/components/map/history.vue b/src/components/map/history.vue
index f5372ce..cbac062 100644
--- a/src/components/map/history.vue
+++ b/src/components/map/history.vue
@@ -34,12 +34,12 @@
     initMap() {
       var l1 = new Tile({
         source: new XYZ({
-          url: "http://t3.tianditu.com/DataServer?T=cta_w&x={x}&y={y}&l={z}&tk=94a34772eb88317fcbf8428e10448561"// 娉ㄨ
+          url: layerData.config.olTdtSl + layerData.config.tdtToken
         })
       });
       var l2 = new Tile({
         source: new XYZ({
-          url: "http://t3.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=94a34772eb88317fcbf8428e10448561"  // 琛屾斂鍖哄垝
+          url: layerData.config.olTdtBZ + layerData.config.tdtToken
         })
       });
       window.map = new Map({
diff --git a/src/components/map/viewer.vue b/src/components/map/viewer.vue
index b07f43c..b6ee453 100644
--- a/src/components/map/viewer.vue
+++ b/src/components/map/viewer.vue
@@ -44,6 +44,7 @@
 import Bus from "@tools/Bus";
 import mapViewer from "../../assets/js/Layer/mapViewer";
 
+
 let activeLi, nLayer, LWLayer;
 export default {
   name: "viewer",
@@ -59,7 +60,7 @@
       hb: "",
       jd: "",
       wd: "",
-      switchImage: sanwei,
+      switchImage: yingxiang,
       switchImagerLayer: false,
       size: "100%",
       scale: "1",
@@ -99,14 +100,17 @@
       window.sgworld = new SmartEarth.EarthCtrl(
         "sdkContainer",
         {
-          StaticFileBaseUrl: "../../../static/CimSDK/",
+         StaticFileBaseUrl: "../../../static/CimSDK/",
           // StaticFileBaseUrl: "../../../SW/static/CimSDK/",
-          // StaticFileBaseUrl: "../../../YZXNCS/static/CimSDK/",
+          // StaticFileBaseUrl: "../../../JSJKZHGS/static/CimSDK/",
         },
         {},
         {},
         () => {
+
+          this.TdtIMageLayer();
           this.ArcgisImageryLayer();
+
           //鍏堥鍒颁害搴勮鏀垮尯
           sgworld.Navigate.flyToPointsInterest({
             destination: {
@@ -132,6 +136,7 @@
       // Viewer.scene.screenSpaceCameraController.enableCollisionDetection = false;
       Viewer.scene.globe.translucency.frontFaceAlpha = 0.5;
       Viewer.scene.globe.undergroundColor = undefined;
+      // Viewer.scene.screenSpaceCameraController.minimumZoomDistance =200;
       //寮�鍚紪杈戝苟鍚敤灞炴�у脊绐�
       sgworld.Creator.SimpleGraphic.setEdit(false, {
         editProp: false,
@@ -199,6 +204,9 @@
       that.initLayerOpen();
       //娣诲姞榧犳爣鐐瑰嚮浜嬩欢
       mapViewer.addClick();
+
+
+    
     });
     let size = this.detectZoom();
     this.scale = (100 / size).toFixed(2);
@@ -374,17 +382,44 @@
       this.switchImagerLayer = !this.switchImagerLayer;
     },
     ArcgisImageryLayer() {
-      sgworld.Creator.createArcGisImageryLayer(
-        "ARCGIS",
-        {
-          url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
-          enablePickFeatures: false,
-        },
-        "0",
-        1,
-        true,
-        ""
-      );
+      // var layer= sgworld.Creator.createArcGisImageryLayer(
+      //   "ARCGIS",
+      //   {
+      //     url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
+      //     enablePickFeatures: false,
+      //   },
+      //   "0",
+      //   1,
+      //   true,
+      //   ""
+      // );
+      var layer = Viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
+        url: "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",
+       
+      }))
+      layer.name = "ARCGIS"
+    },
+    TdtIMageLayer() {
+      var layer = Viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
+        url: layerData.config.tdtSl + layerData.config.tdtToken,
+        layer: "tdtImgLayer",
+        style: "default",
+        format: "image/jpeg",
+        name: '澶╁湴鍥�',
+        tileMatrixSetID: "GoogleMapsCompatible",
+      }))
+      layer.name = "澶╁湴鍥�";
+      layer.show= false;
+      var layer1 = Viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
+        url: layerData.config.tdtZj + layerData.config.tdtToken,
+        layer: "tdtAnnoLayer",
+        style: "default",
+        format: "image/jpeg",
+        name: '澶╁湴鍥�',
+        tileMatrixSetID: "GoogleMapsCompatible",
+      }))
+      layer1.name = "澶╁湴鍥�"
+      layer1.show= false;
     },
     //鍒濆鍖栧脊绐椾簨浠�
 
diff --git a/src/components/menu/menulist.vue b/src/components/menu/menulist.vue
index dd349c2..cb0a19f 100644
--- a/src/components/menu/menulist.vue
+++ b/src/components/menu/menulist.vue
@@ -40,7 +40,14 @@
           />
           <span>妯″瀷</span>
         </div>  
-        
+        <div class="menubtn" @click="setGridQuery()">
+          <img class="bhImg" title="鏍肩綉" src="@/assets/img/right/cx-s.png" />
+          <span>鏍肩綉</span>
+        </div>
+        <div class="menubtn" @click="setMenuQuery()">
+          <img class="bhImg" title="鏌ヨ" src="@/assets/img/right/cx-s.png" />
+          <span>鏌ヨ</span>
+        </div>
         <div class="menubtn" @click="setMenuTool(5)">
           <img class="bhImg" title="鍒嗘瀽" src="@/assets/img/right/cx-s.png" />
           <span>鍒嗘瀽</span>
@@ -245,6 +252,7 @@
 import zt from "@/assets/img/left/specialanalyse4.png";
 import fx from "@/assets/img/right/cx-s.png";
 import tx from "@/assets/img/left/leftnav2.png";
+import menuGrid from '@/assets/js/Layer/menuGrid'
 export default {
   name: "menulist",
   components: {
@@ -298,6 +306,12 @@
     showSceneCard(){
       this.$store.commit("showSceneBox", "");
     },
+    setMenuQuery(){
+      this.$store.commit("setMenuQuery",true)
+    },
+    setGridQuery(){
+      menuGrid.init();
+    },
     closeAllHighLight(type) {
       // !(type == "plotting") && this.$refs.plotting.clearHighLight();
       // !(type == "roam") && this.$refs.roam.clearActive();
diff --git a/src/components/menu/tools/measure.vue b/src/components/menu/tools/measure.vue
index a10b5b2..68b1007 100644
--- a/src/components/menu/tools/measure.vue
+++ b/src/components/menu/tools/measure.vue
@@ -2,65 +2,31 @@
   <div class="measure" id="measure">
     <div class="measureTools">
       <div class="measureTool" @click="jl">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="璺濈"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="璺濈" placement="top-start" popper-class="item_tooltip">
           <el-button>
             <img src="@/assets/img/right/ls/jl1.png" />
           </el-button>
         </el-tooltip>
       </div>
       <div class="measureTool" @click="bmjl">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="琛ㄩ潰璺濈"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="琛ㄩ潰璺濈" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/bmjl1.png" /> </el-button
-        ></el-tooltip>
+            <img src="@/assets/img/right/ls/bmjl1.png" /> </el-button></el-tooltip>
       </div>
       <div class="measureTool" @click="mj">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="闈㈢Н"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="闈㈢Н" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/mj1.png" /> </el-button
-        ></el-tooltip>
+            <img src="@/assets/img/right/ls/mj1.png" /> </el-button></el-tooltip>
       </div>
       <div class="measureTool" @click="bmmj">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="琛ㄩ潰闈㈢Н"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="琛ㄩ潰闈㈢Н" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/bmmj1.png" /> </el-button
-        ></el-tooltip>
+            <img src="@/assets/img/right/ls/bmmj1.png" /> </el-button></el-tooltip>
       </div>
       <div class="measureTool" @click="height">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="鍨傜洿楂樺害"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="鍨傜洿楂樺害" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/gd1.png" /> </el-button
-        ></el-tooltip>
+            <img src="@/assets/img/right/ls/gd1.png" /> </el-button></el-tooltip>
       </div>
       <!-- <div
         :class="isOpen['tj'] ? 'measureTool active' : 'measureTool'"
@@ -71,29 +37,15 @@
           <label>浣撶Н</label>
         </el-button>
       </div> -->
-      <!-- <div class="measureTool" @click="jd">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="瑙掑害"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+      <div class="measureTool" @click="zb">
+        <el-tooltip class="item" effect="dark" content="鍧愭爣" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/jd1.png" /> </el-button
-        ></el-tooltip>
-      </div> -->
+            <img src="@/assets/img/right/ls/jd1.png" /> </el-button></el-tooltip>
+      </div>
       <div class="measureTool" @click="clearMeasure">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="娓呴櫎"
-          placement="top-start"
-          popper-class="item_tooltip"
-        >
+        <el-tooltip class="item" effect="dark" content="娓呴櫎" placement="top-start" popper-class="item_tooltip">
           <el-button>
-            <img src="@/assets/img/right/ls/qc-s.png" /> </el-button
-        ></el-tooltip>
+            <img src="@/assets/img/right/ls/qc-s.png" /> </el-button></el-tooltip>
       </div>
     </div>
   </div>
@@ -105,10 +57,12 @@
   width: 111%;
   margin-left: -15px;
 }
+
 .el-button:focus,
 .el-button:hover {
   background: transparent;
 }
+
 .measure {
   position: absolute;
   left: 65px;
@@ -117,12 +71,14 @@
   /* border-radius: 30px; */
   box-shadow: 0px 0px 10px rgba(101, 180, 253, 0.8) inset;
   background-color: rgba(5, 39, 126, 0.7);
-  width: 350px;
+  width: 410px;
 }
+
 .measureTools {
   margin-left: 20px;
   overflow: hidden;
 }
+
 .measureTool {
   border: 1px solid #999;
   border-radius: 5px;
@@ -131,9 +87,11 @@
   height: 40px;
   margin: 5px;
 }
-.measureTool img{
-    margin: 4px;
+
+.measureTool img {
+  margin: 4px;
 }
+
 .measureTools::-webkit-scrollbar {
   /*婊氬姩鏉℃暣浣撴牱寮�*/
   width: 5px;
@@ -158,6 +116,7 @@
   border-radius: 0;
   background: rgba(218, 218, 218, 0.1);
 }
+
 .measureTool:hover {
   background: rgba(0, 168, 255, 0.16);
 }
@@ -165,9 +124,11 @@
 .tool-title {
   margin: 1px 10px;
 }
+
 .tool-title label {
   vertical-align: top;
 }
+
 .measure label {
   margin-left: 10px;
   font-size: 17px;
@@ -176,6 +137,7 @@
   /* color: #3d3d3d; */
   color: white;
 }
+
 .el-button {
   padding: 0 !important;
   font-size: 24px;
@@ -184,14 +146,17 @@
   display: block;
   background: rgba(0, 0, 0, 0);
 }
+
 .el-button label {
   font-size: 14px;
 }
+
 .closeTool {
   position: absolute;
   bottom: 0;
   left: 0;
 }
+
 .active {
   background: rgba(0, 168, 255, 0.16);
 }
@@ -222,7 +187,7 @@
       }
     };
   },
-  mounted() {},
+  mounted() { },
   methods: {
     // 娓呴櫎楂樹寒
     clearActive() {
@@ -239,6 +204,11 @@
       this.$parent.isShowMeasure = false;
       this.$parent.isShow = false;
     },
+
+
+    zb(){
+      this.$store.state.isMeasureFlag= true;
+    },
     //娓呴櫎娴嬮噺
     clearMeasure() {
       // 鍏抽棴褰撳墠鐨勬搷浣滅晫闈�
@@ -247,7 +217,9 @@
         item.deleteObject();
       });
       measureData = [];
-
+      this.$store.state.isShowMeasureCoord = false
+      this.$store.state.isMeasureFlag = false
+      this.$store.state.measureCoordObj = false
       volumetricMeasurementTool && volumetricMeasurementTool.cleanUp();
     },
     // 璺濈閲忕畻
@@ -267,7 +239,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       // 鏍规嵁褰撳墠鐨勯珮浜姸鎬侊紝鍐冲畾褰撳墠鎿嶄綔鏄惁瑕佹樉绀洪珮浜�
       this.isOpen["jl"] = true;
@@ -279,7 +251,7 @@
       measureData.push(m);
     },
     // 琛ㄩ潰璺濈
-    bmjl: function() {
+    bmjl: function () {
       this.$parent.closeAllHighLight("measure");
       if (this.isOpen["bmjl"]) {
         this.isOpen["bmjl"] = false;
@@ -295,7 +267,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["bmjl"] = true;
 
@@ -307,7 +279,7 @@
       measureData.push(m);
     },
     // 琛ㄩ潰闈㈢Н
-    bmmj: function() {
+    bmmj: function () {
       this.$parent.closeAllHighLight("measure");
       if (this.isOpen["bmmj"]) {
         this.isOpen["bmmj"] = false;
@@ -323,7 +295,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["bmmj"] = true;
       let m = sgworld.Command.execute(0, 8, colorAll, () => {
@@ -334,7 +306,7 @@
       measureData.push(m);
     },
     // 闈㈢Н
-    mj: function() {
+    mj: function () {
       this.$parent.closeAllHighLight("measure");
       if (this.isOpen["mj"]) {
         this.isOpen["mj"] = false;
@@ -350,7 +322,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["mj"] = true;
 
@@ -378,7 +350,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["jd"] = true;
 
@@ -405,7 +377,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["czgd"] = true;
 
@@ -433,7 +405,7 @@
       layuiLayer.close(SmartEarthPopupData.layerProp);
       sgworld.drawObj &&
         (sgworld.drawObj.drawHandler && sgworld.drawObj.drawHandler.destroy(),
-        sgworld.drawObj.end && sgworld.drawObj.end());
+          sgworld.drawObj.end && sgworld.drawObj.end());
 
       this.isOpen["tj"] = true;
 
@@ -446,7 +418,7 @@
         sgworld.drawObj = volumetricMeasurementTool.startDrawing(
           null,
           spacing,
-          function(data) {
+          function (data) {
             callback &&
               typeof callback === "function" &&
               callback({ height: data.minHeight, spacing: data.spacing });
diff --git a/src/components/menu/tools/plotting.vue b/src/components/menu/tools/plotting.vue
index 5ef1a2d..9834e3d 100644
--- a/src/components/menu/tools/plotting.vue
+++ b/src/components/menu/tools/plotting.vue
@@ -86,7 +86,7 @@
           </el-button>
         </el-tooltip>
       </div>
-      <div
+      <!-- <div
         class="plottingTool"
         @click="plotting('circle')"
       >
@@ -101,7 +101,7 @@
             <img src="@/assets/img/right/bh/d1.png" />
           </el-button>
         </el-tooltip>
-      </div>
+      </div> -->
       <!-- <div class="plottingTool" @click="militaryPlotting('Sector', 'polygon')">
         <el-tooltip
           class="item"
@@ -116,7 +116,7 @@
         </el-tooltip>
       </div> -->
 
-      <div
+      <!-- <div
         class="plottingTool"
         @click="plotting('cylinder')"
       >
@@ -167,7 +167,7 @@
           popper-class="item_tooltip"
         >
           <el-button> <img src="@/assets/img/right/bh/dbt1.png" /> </el-button></el-tooltip>
-      </div>
+      </div> -->
     </div>
   </div>
 </template>
@@ -194,7 +194,7 @@
   /* border-radius: 30px; */
   box-shadow: 0px 0px 10px rgba(101, 180, 253, 0.8) inset;
   background-color: rgba(5, 39, 126, 0.7);
-  width: 560px;
+  width: 300px;
 }
 .plottingList {
   background: transparent;
diff --git a/src/components/menu/tools/roam.vue b/src/components/menu/tools/roam.vue
index 696cb47..bebf015 100644
--- a/src/components/menu/tools/roam.vue
+++ b/src/components/menu/tools/roam.vue
@@ -33,7 +33,7 @@
         >
           <el-button> <img src="@/assets/img/left/tx/kjbj.png" /> </el-button
         ></el-tooltip>
-      </div> -->
+      </div> 
       <div class="roamTool" @click="setRomanFly('鏍稿績鍖烘极娓�')">
         <el-tooltip
           class="item"
@@ -66,7 +66,7 @@
         >
           <el-button> <img src="@/assets/img/left/tx/ll.png" /> </el-button
         ></el-tooltip>
-      </div>
+      </div>-->
     </div>
   </div>
 </template>
@@ -84,7 +84,7 @@
   /* border-radius: 30px; */
   box-shadow: 0px 0px 10px rgba(101, 180, 253, 0.8) inset;
   background-color: rgba(5, 39, 126, 0.7);
-  width: 300px;
+  width: 150px;
 }
 .roamTools {
   margin-left: 20px;
diff --git a/src/components/menu/tools/special copy.vue b/src/components/menu/tools/special copy.vue
new file mode 100644
index 0000000..53e8e52
--- /dev/null
+++ b/src/components/menu/tools/special copy.vue
@@ -0,0 +1,1247 @@
+<template>
+  <div class="special" id="special">
+    <div class="specialTools">
+      <div class="specialTool" @click="tdglHandle">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="鍦熷湴绠$悊"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button>
+            <img src="@/assets/img/left/ztfx/tdgl.png" />
+          </el-button>
+        </el-tooltip>
+      </div>
+      <div class="specialTool" @click="stdsj">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="瑙嗗浘澶ф暟鎹钩鍙�"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button>
+            <img src="@/assets/img/left/ztfx/dashuju.png" />
+          </el-button>
+        </el-tooltip>
+      </div>
+      <div class="specialTool" @click="spjkHandle">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="瑙嗛鐩戞帶"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button>
+            <img src="@/assets/img/left/ztfx/spjk.png" />
+          </el-button>
+        </el-tooltip>
+      </div>
+      <div class="specialTool" @click="jjHandle">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="琛楁櫙"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button>
+            <img src="@/assets/img/left/ztfx/jiejing.png" />
+          </el-button>
+        </el-tooltip>
+      </div>
+
+      <div class="specialTool" @click="qytj">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="鏁版嵁姹囪仛"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button> <img src="@/assets/img/left/ztfx/yqfk.png" /> </el-button
+        ></el-tooltip>
+      </div>
+      <div class="specialTool" @click="rangeQuery()">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="鑼冨洿鏌ヨ"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button> <img src="@/assets/img/left/ztfx/sjxq.png" /> </el-button
+        ></el-tooltip>
+      </div>
+      <!-- <div class="specialTool" @click="guanxian(openGX)">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="鍦颁笅绠$嚎"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button> <img src="@/assets/img/left/ztfx/spl.png" /> </el-button
+        ></el-tooltip>
+      </div> -->
+      <!-- <div class="specialTool" @click="sceneRoaming">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="鍦烘櫙婕父"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button>
+            <img src="@/assets/img/left/ztfx/rkqxksh.png" /> </el-button
+        ></el-tooltip>
+      </div> -->
+
+      <!-- <div class="specialTool" @click="shipinronghe(videoList)">
+        <el-tooltip
+          class="item"
+          effect="dark"
+          content="瑙嗛铻嶅悎"
+          placement="top-start"
+          popper-class="item_tooltip"
+        >
+          <el-button> <img src="@/assets/img/left/ztfx/spl.png" /> </el-button
+        ></el-tooltip>
+      </div> -->
+    </div>
+  </div>
+</template>
+
+<style scoped>
+hr {
+  margin: 10px 0;
+  width: 111%;
+  margin-left: -15px;
+}
+
+.el-button:focus,
+.el-button:hover {
+  background: transparent;
+}
+
+.special {
+  position: absolute;
+  left: 65px;
+  bottom: 6px;
+  height: 50px;
+  /* border-radius: 30px; */
+  box-shadow: 0px 0px 7px rgba(76, 165, 248, 0.8) inset;
+  background-color: rgba(14, 50, 143, 0.5);
+  width: 350px;
+}
+
+.specialTools {
+  margin-left: 20px;
+}
+
+.specialTool {
+  border: 1px solid #999;
+  border-radius: 5px;
+  float: left;
+  width: 40px;
+  height: 40px;
+  margin: 5px;
+}
+
+.specialTool img {
+  margin: 4px;
+}
+
+.specialTools::-webkit-scrollbar {
+  /*婊氬姩鏉℃暣浣撴牱寮�*/
+  width: 5px;
+  /*楂樺鍒嗗埆瀵瑰簲妯珫婊氬姩鏉$殑灏哄*/
+  height: 8px;
+  scrollbar-arrow-color: red;
+}
+
+/* 婊氬姩鏉� */
+.specialTools::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
+  box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
+  background: rgba(218, 218, 218, 0.5);
+  scrollbar-arrow-color: red;
+}
+
+/* 婊氬姩妲� */
+.specialTools::-webkit-scrollbar-track {
+  -webkit-box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
+  box-shadow: inset 0 0 5px rgba(218, 218, 218, 0.2);
+  border-radius: 0;
+  background: rgba(218, 218, 218, 0.1);
+}
+
+.specialTool:hover {
+  background: rgba(0, 168, 255, 0.16);
+}
+
+.tool-title {
+  margin: 1px 10px;
+}
+
+.tool-title label {
+  vertical-align: top;
+}
+
+.special label {
+  margin-left: 10px;
+  font-size: 17px;
+  font-family: Microsoft YaHei;
+  font-weight: 400;
+  /* color: #3d3d3d; */
+  color: white;
+}
+
+.el-button {
+  padding: 0 !important;
+  font-size: 24px;
+  border: unset;
+  float: unset;
+  display: block;
+  background: rgba(0, 0, 0, 0);
+}
+
+.el-button label {
+  font-size: 14px;
+}
+
+.closeTool {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+}
+
+.active {
+  background: rgba(0, 168, 255, 0.16);
+}
+</style>
+<style>
+#pointInfoBox {
+  /* width: 350px; */
+  padding: 20px;
+  text-align: left;
+  background-image: url("~@/assets/img/new/listbg.png");
+  /* border: 5px #08235f solid; */
+  /* border-radius: 7px; */
+  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.5);
+  color: #fff;
+}
+</style>
+<script>
+import axios from "axios";
+import { mapState, mapMutations } from "vuex";
+import Bus from "../../tools/Bus";
+import { roman } from "../../../assets/json/index.js";
+import URLInCode from "@/assets/js/urlInCode";
+import keyName from "@/utils/poiKeys";
+import LayerField from "../../../../static/NameConf";
+let handler;
+let tooltipHTML;
+window.divPoint1 = null;
+window.pickFeature = null;
+window.imgUrl = null;
+window.scale = null;
+let buildingPolygon;
+let tooltip;
+let lineArr = [];
+let video;
+let promiseS3M;
+//浜ら�氬浘灞�
+let panoramaLayer;
+export default {
+  name: "special",
+  data() {
+    return {
+      openGX: "open",
+      showPointInfo: true,
+      romanOption: [
+        { name: "鏍稿績鍖�" },
+        { name: "鏅缁垮湴" },
+        { name: "鏀垮姟鏈嶅姟" },
+      ],
+      showFlag: false,
+      showQYTJ: false,
+      videoList: [
+        {
+          name: "video2",
+          lon: 116.51507,
+          lat: 39.79686,
+          height: 40,
+          // 鍥涘懆鏂瑰悜
+          heading: 305,
+          // 淇话瑙掑害
+          pitch: -41,
+          // 姘村钩瑙掑害
+          horizonAngle: 68,
+          // 鍨傜洿瑙掑害
+          verticalAngle: 103,
+          // 閫忔槑搴�
+          alpha: 1,
+          // 閫忔槑搴�
+          far: 3000,
+          cameraIndexCode: "2b046ef675704975a8d45f1b00cd946b",
+        },
+        // {
+        //   name: "video3",
+        //   lon: 116.5146339,
+        //   lat: 39.7967196,
+        //   height: 60,
+        //   // 鍥涘懆鏂瑰悜
+        //   heading: 62,
+        //   // 淇话瑙掑害
+        //   pitch: -43,
+        //   // 姘村钩瑙掑害
+        //   horizonAngle: 45,
+        //   // 鍨傜洿瑙掑害
+        //   verticalAngle: 64,
+        //   // 閫忔槑搴�
+        //   alpha: 1,
+        //   // 閫忔槑搴�
+        //   far: 166,
+        //   cameraIndexCode: "a0ffb1dedde7468187d0b0f91d431475",
+        // },
+        // {
+        //   name: "video4",
+        //   lon: 116.51496,
+        //   lat: 39.796854,
+        //   height: 60,
+        //   // 鍥涘懆鏂瑰悜
+        //   heading: 148,
+        //   // 淇话瑙掑害
+        //   pitch: -39,
+        //   // 姘村钩瑙掑害
+        //   horizonAngle: 40,
+        //   // 鍨傜洿瑙掑害
+        //   verticalAngle: 58,
+        //   // 閫忔槑搴�
+        //   alpha: 1,
+        //   // 閫忔槑搴�
+        //   far: 219,
+        //   cameraIndexCode: "e6ec9aaf9320455ab6c5ea224f3f5f38",
+        // },
+        // {
+        //   name: "video1",
+        //   lon: 116.51522,
+        //   lat: 39.79724,
+        //   height: 60,
+        //   // 鍥涘懆鏂瑰悜
+        //   heading: 64,
+        //   // 淇话瑙掑害
+        //   pitch: -47,
+        //   // 姘村钩瑙掑害
+        //   horizonAngle: 30,
+        //   // 鍨傜洿瑙掑害
+        //   verticalAngle: 60,
+        //   // 閫忔槑搴�
+        //   alpha: 1,
+        //   // 閫忔槑搴�
+        //   far: 166,
+        //   cameraIndexCode: "1523335e47a5476f9f65f90f9983e875",
+        // },
+      ],
+      // 鍥涘懆鏂瑰悜
+      heading: 64,
+      // 淇话瑙掑害
+      pitch: -47,
+      // 姘村钩瑙掑害
+      horizonAngle: 30,
+      // 鍨傜洿瑙掑害
+      verticalAngle: 60,
+      // 閫忔槑搴�
+      alpha: 1,
+      // 閫忔槑搴�
+      far: 166,
+      videoarrList: [],
+    };
+  },
+  computed: {
+    ...mapState(["viewer1Show", "yqfk", "cesiumInit"]),
+    ...mapState(["viewer1Show", "yqfk", "qyEchartsShow"]),
+  },
+  mounted() {},
+  watch: {
+    cesiumInit: {
+      handler(newVal, oldVal) {
+        if (newVal) {
+          if (
+            window._showPointInfo === undefined ||
+            window._showPointInfo === true
+          ) {
+            this.showPointInfo = true;
+            setTimeout(() => {
+              this.setCesuimHandle();
+            }, 1000);
+          } else if (window._showPointInfo === false) {
+            this.showPointInfo = false;
+          }
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    // ...mapMutations(["setViewer1Show", "setYqfk"]),
+    ...mapMutations(["setViewer1Show", "setqyEchartsShow"]),
+    spjkLoad() {
+      window.sxtkGeojson = new SmartEarth.ClusterLayer(sgworld.Viewer, {
+        pixelRange: 30,
+        gradient: {
+          0.0001: "rgb(0,191,255)",
+          0.001: "rgb(0,128,0)",
+          0.01: "rgb(255,165,0)",
+          0.1: "rgb(255,0,0)",
+        },
+        style: "clustering",
+      });
+
+      window.sxtkGeojson.dataSource.clustering.minimumClusterSize = 5;
+      // let url = window.sessionStorage.getItem("sxtGeojsonUrl");
+      let url;
+      axios
+        .get(url)
+        .then((data) => {
+          // console.log(data);
+          let features = data.data.features;
+          features.forEach((feature) => {
+            let geom = feature.geometry.coordinates;
+            let properties = feature.properties;
+            let point = new SmartEarth.Degrees(geom[0], geom[1]);
+            // let item = {
+            //   lon
+            // };
+
+            let entitie = window.sxtkGeojson.add(point, {
+              image: SmartEarthRootUrl + "Workers/image/sxt.png",
+            });
+            entitie.properties = properties;
+            entitie.tag = "sxt";
+          });
+
+          sgworld.Navigate.flyToObj(window.sxtkGeojson.dataSource);
+          window.sxthandler = new Cesium.ScreenSpaceEventHandler(
+            sgworld.Viewer.scene.canvas
+          );
+          window.sxthandler.setInputAction((event) => {
+            let pick = sgworld.Viewer.scene.pick(event.position);
+            if (pick && pick.id && pick.id.tag == "sxt") {
+              //鍏抽棴鍦板潡淇℃伅寮圭獥
+              Bus.$emit("closeLandInfoPop", true);
+              //缁撴潫涔嬪墠鎿嶄綔
+              layuiLayer.close(SmartEarthPopupData.layerProp);
+
+              sgworld.drawObj &&
+                (sgworld.drawObj.drawHandler &&
+                  sgworld.drawObj.drawHandler.destroy(),
+                sgworld.drawObj.end && sgworld.drawObj.end());
+
+              let props = pick.id.properties;
+              let screenHeight =
+                document.body.clientHeight ||
+                document.documentElement.clientHeigh;
+              let offsetTop = screenHeight - 385;
+              offsetTop = offsetTop < 0 ? 0 : offsetTop;
+
+              offsetTop = offsetTop > 100 ? offsetTop - 100 : offsetTop;
+              // console.log(props.installPla._value)
+              layerOpen(props.name._value, {
+                width: 470,
+                height: 385,
+                offset: [offsetTop + "px", "310px"],
+                url:
+                  "./static/html/video/video.html?code=" +
+                  props.cameraInde._value,
+                fn: {
+                  success: (layero, index) => {
+                    SmartEarthPopupData.layerContainer = layero;
+                  },
+                  end: () => {
+                    // this.isOpen.ymfx = false;
+                  },
+                  cancel: () => {
+                    sgworld.drawObj &&
+                      sgworld.drawObj.end &&
+                      sgworld.drawObj.end("cancel");
+                  },
+                },
+              });
+            }
+          }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+        })
+        .catch((err) => {
+          console.log(err);
+        });
+    },
+    spjkHandle() {
+      if (window.sxtkGeojson) {
+        window.sxtkGeojson.deleteObject();
+        window.sxtkGeojson = null;
+        window.sxthandler.destroy();
+        //鍏抽棴寮圭獥
+        Bus.$emit("closeRightPop", true);
+        layuiLayer.close(SmartEarthPopupData.layerProp);
+        return;
+      } else {
+        Bus.$emit("showSPJK");
+        // this.spjkLoad();
+      }
+    },
+    yqfkHandle() {
+      this.setYqfk(!this.yqfk);
+    },
+    rangeQuery() {
+      Bus.$emit("showRangeBox", true);
+    },
+    tdglHandle() {
+      this.setViewer1Show(!this.viewer1Show);
+    },
+    jjHandle() {
+      if (!window.panoramaHandler) {
+        //鍏抽棴鑿滃崟寮圭獥
+        Bus.$emit("closeMenuPop", true);
+        var urls = URLInCode.jjLWUrl;
+        // var urls = "http://10.10.4.121:8070/gisserver/wmsserver/YZ_LW";
+        window.panoramaLayer = sgworld.Creator.CreateWMSImageFeatureLayer(
+          "gisserver",
+          {
+            url: urls,
+            queryParameters: {
+              layers: "",
+            },
+          },
+          {},
+          "0",
+          true,
+          function () {}
+        );
+        window.panoramaHandler = new Cesium.ScreenSpaceEventHandler(
+          Viewer.scene.canvas
+        );
+        window.panoramaHandler.setInputAction((event) => {
+          let p;
+          p = sgworld.Navigate.getMouseDegrees(event);
+          let panorama = new yzPanorama();
+          panorama.open({
+            id: "qjMap",
+            closeId: "panoramaClose",
+            lon: p.lon,
+            lat: p.lat,
+          });
+
+          // let StreetUrl = "http://10.10.4.116:8085/yzAdapter/";
+          // let _StreetscapeYZ = new StreetscapeYZ(sgworld, {
+          //   StreetUrl: StreetUrl,
+          //   lon: p.lon,
+          //   lat: p.lat
+          // });
+        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+      } else {
+        try {
+          window.panoramaLayer.deleteObject();
+        } catch (e) {}
+        window.panoramaHandler.destroy();
+        window.panoramaHandler = undefined;
+      }
+    },
+    sjxqHandle() {
+      window._showPointInfo = this.showPointInfo;
+
+      switch (this.showPointInfo) {
+        case true:
+          this.setCesuimHandle();
+          break;
+        case false:
+          if (divPoint1) {
+            sgworld.Creator.DeleteObject(divPoint1);
+          }
+          if (handler) {
+            handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+          }
+          break;
+      }
+    },
+    clearSelectObject() {
+      if (window.pickFeature && window.pickFeature.primitive) {
+        window.pickFeature.primitive.image = imgUrl;
+        window.pickFeature.primitive.scale = scale;
+        window.pickFeature = null;
+      }
+    },
+    setCesuimHandle() {
+      var that = this;
+
+      Bus.$on("clearSelectObject", this.clearSelectObject);
+      handler && handler.destroy();
+      handler = new Cesium.ScreenSpaceEventHandler(Viewer.scene.canvas);
+      handler.setInputAction((event) => {
+        let nPickFeature = sgworld.Viewer.scene.pick(event.position);
+
+        if (Cesium.defined(nPickFeature)) {
+          this.resetImg();
+          if (buildingPolygon) {
+            sgworld.Creator.DeleteObject(buildingPolygon);
+            buildingPolygon = null;
+          }
+          if (nPickFeature.primitive instanceof Cesium.Billboard) {
+            if (nPickFeature.id.length > 0) {
+              return;
+            }
+            // this.resetBorder();
+            window.pickFeature = nPickFeature;
+            // console.log(nPickFeature);
+            imgUrl = nPickFeature.primitive.image;
+            scale = nPickFeature.primitive.scale;
+            nPickFeature.primitive.image =
+              window.SmartEarthRootUrl + "Workers/image/point.png";
+            nPickFeature.primitive.scale = 1;
+            //鐐瑰嚮寮规
+            let obj = {};
+            let lon;
+            let lat;
+            let isCamera = false;
+            if (nPickFeature.id.tag) {
+              let properties = nPickFeature.id.properties;
+              let propertyNames = nPickFeature.id.properties.propertyNames;
+              if (propertyNames.indexOf("鐩戞帶鍚�") !== -1) {
+                isCamera = true;
+                obj["JK鍚嶇О"] = properties["JK鍚嶇О"]._value;
+                // obj["JK绫诲瀷"] = properties["JK绫诲瀷"]._value;
+                // obj["鍔熻兘"] = properties["鍔熻兘"]._value;
+                // obj["鎵�鍦ㄥ尯"] = properties["鎵�鍦ㄥ尯"]._value;
+                // obj["JK缂栧彿"] = properties["JK缂栧彿"]._value;
+                obj["JK鍐呯爜"] = properties["JK鍐呯爜"]._value;
+              } else {
+                propertyNames.forEach((item) => {
+                  obj[item] = properties[item]._value;
+                });
+              }
+
+              let cartographic =
+                window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
+                  nPickFeature.id.position._value
+                );
+              lon = Cesium.Math.toDegrees(cartographic.longitude);
+              lat = Cesium.Math.toDegrees(cartographic.latitude);
+            } else {
+              obj = nPickFeature.id.attributes;
+              lon = nPickFeature.id.positions[0];
+              lat = nPickFeature.id.positions[1];
+            }
+            if (divPoint1) {
+              divPoint1.deleteObject();
+            }
+            if (!isCamera) {
+              tooltipHTML = "";
+              //閲嶇疆LayerField鏁版嵁
+              for (let item in LayerField) {
+                LayerField[item] = 0;
+              }
+              // 鍒犻櫎瀛楁
+              let { OBJECTID, ID, BZDZ, Latitude, Longtitude, ...userData } =
+                obj;
+
+              // 鍒ゆ柇灞曠ず鐨勭被鍨�
+              if (
+                userData.hasOwnProperty("閮ㄤ欢鍚嶇О") ||
+                userData.hasOwnProperty("浜曠紪鍙�")
+              ) {
+                //淇敼LayerField鏁版嵁
+                for (let itemName in userData) {
+                  let CnName = keyName[itemName] || itemName;
+                  if (LayerField.hasOwnProperty(CnName)) {
+                    LayerField[CnName] = userData[itemName];
+                    if (CnName == "缁忓害" || CnName == "绾害") {
+                      let str = Number(LayerField[CnName]);
+                      LayerField[CnName] = str.toFixed(6);
+                    }
+                  }
+                }
+                // 灞曠ずLayerField鏁版嵁
+                for (let item in LayerField) {
+                  let value = LayerField[item];
+                  value && (tooltipHTML += `<p>${item}锛�${value || "鏃�"}</p>`);
+                }
+              } else {
+                // 鐩存帴灞曠ず
+                for (let itemName in userData) {
+                  let value = userData[itemName];
+                  let CnName = keyName[itemName] || itemName;
+                  value &&
+                    (tooltipHTML += `<p>${CnName}锛�${value || "鏃�"}</p>`);
+                  console.log(tooltipHTML);
+                }
+              }
+
+              let description = `
+                   <div id="pointInfoBox" class="pointInfoBox" style="pointer-events:auto;">
+                    <span style="position: absolute; right: 12px; top: 6px;">脳</span>
+                    ${tooltipHTML}
+                  </div>
+                `;
+              divPoint1 = sgworld.Creator.createDivPoint(
+                "璇︾粏淇℃伅",
+                {
+                  lon: lon,
+                  lat: lat,
+                  height: 50,
+                },
+                {
+                  type: "custom",
+                  offset: ["c", 50],
+                  description,
+                  onclick(data) {
+                    // sgworld.Creator.DeleteObject(divPoint1);
+                    divPoint1 && divPoint1.deleteObject();
+                    if (window.pickFeature && window.pickFeature.primitive) {
+                      window.pickFeature.primitive.image = imgUrl;
+                      window.pickFeature.primitive.scale = scale;
+                      window.pickFeature = null;
+                    }
+                  },
+                }
+              );
+              // if (tooltip) {
+              //   tooltip.show(false);
+              //   tooltip = null;
+              // }
+              // tooltip = sgworld.Core.CreateResultTooltip(window.Viewer, {
+              //   color: "black",
+              //   addY: -40,
+              //   far: 200000,
+              //   closeBtn: true,
+              //   close: () => {
+              //     this.resetImg();
+              //   },
+              // });
+
+              // let description = `<div style='background:
+              //                         rgba(14, 50, 143, 0.6);
+              //                         border: 1px solid #205fbc;
+              //                          border-radius: 5px;
+              //                          color: #fff;
+              //                          padding: 15px;
+              //                          box-shadow: 0px 1px 10px 0px rgba(3, 10, 26, 0.38);
+              //                          '>${tooltipHTML}</div>`;
+
+              // tooltip.showAt(
+              //   Cesium.Cartesian3.fromDegrees(lon, lat, 0),
+              //   description
+              // );
+            }
+            //鍏抽棴鍦板潡淇℃伅寮圭獥
+            Bus.$emit("closeLandInfoPop", true);
+            layuiLayer.close(SmartEarthPopupData.layerProp);
+            this.$store.commit("description", obj);
+          } else if (nPickFeature.primitive instanceof Cesium.Cesium3DTileset) {
+            // let cartographic =
+            //   window.Viewer.scene.globe.ellipsoid.cartesianToCartographic(
+            //     nPickFeature.content.tile.boundingSphere.center
+            //   );
+            // let lon = Cesium.Math.toDegrees(cartographic.longitude);
+            // let lat = Cesium.Math.toDegrees(cartographic.latitude);
+            let p = sgworld.Navigate.getMouseDegrees(event);
+            let lon = p.lon;
+            let lat = p.lat;
+
+            axios
+              .get(
+                "http://10.10.4.121:8070/gisserver/wfsserver/yizhuang-building-wfs-1207",
+                {
+                  params: {
+                    version: "1.3.0",
+                    request: "GetFeature",
+                    typename: `浜﹀簞寤虹瓚澶栬疆寤�4326`,
+                    propertyname: "*",
+                    format: "json",
+                    filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:Intersects><ogc:PropertyName>SAHEP</ogc:PropertyName><gml:Point > <gml:pos>${lon} ${lat}</gml:pos></gml:Point></ogc:Intersects></ogc:Filter>`,
+                  },
+                }
+              )
+              .then((response) => {
+                if (response.data.features.length > 0) {
+                  var geometry = [];
+                  let POIs = response.data.features[0].geometry.coordinates[0];
+                  for (let i = 0; i < POIs.length; i++) {
+                    geometry.push({
+                      x: parseFloat(POIs[i][0]),
+                      y: parseFloat(POIs[i][1]),
+                      z: 0,
+                    });
+                  }
+                  buildingPolygon = sgworld.Creator.createPolygon(
+                    geometry,
+                    {
+                      fillColor: "#00ff0050",
+                      outlineColor: "#ff0000",
+                      outlineWidth: 2,
+                    },
+                    1,
+                    0,
+                    "闈�"
+                  );
+                }
+              });
+          }
+          // else if (nPickFeature.primitive instanceof Cesium.GroundPrimitive) {
+          //   let wmsLayer = this.$store.state.selectedLayers.filter((item) => {
+          //     return item.name == "琛屾斂鍖哄垝鍥�";
+          //   });
+          //   if (wmsLayer[0]) {
+          //     let p = sgworld.Navigate.getMouseDegrees(event);
+
+          //     axios
+          //       .get(
+          //         "http://10.10.4.116:8070/gisserver/rest/services/XingZhengQuHuaTu/MapServer/identify",
+          //         {
+          //           params: {
+          //             geometry: `${p.lon},${p.lat}`,
+          //             geometryType: "esriGeometryPoint",
+          //             layers: "all",
+          //             tolerance: 1,
+          //             mapExtent:
+          //               "116.389809720644,39.586819997000134,116.72107119373061,39.859910895000155",
+          //             imageDisplay: "600,550,96",
+          //             returnGeometry: true,
+          //           },
+          //         }
+          //       )
+          //       .then((res) => {
+          //         if (res.data.results.length != 0) {
+          //           this.resetImg();
+          //           this.resetBorder();
+          //           let area = res.data.results.filter(
+          //             (item) => item.geometry.rings != undefined
+          //           );
+          //           let poi = area[0].geometry.rings;
+          //           poi.forEach((ring) => {
+          //             ring.forEach((item, index, arr) => {
+          //               arr[index] = {
+          //                 x: parseFloat(item[0]),
+          //                 y: parseFloat(item[1]),
+          //                 z: 0,
+          //               };
+          //             });
+          //           });
+          //           poi.forEach((item, index) => {
+          //             lineArr[index] = sgworld.Creator.createWall(
+          //               `鏂板缓澧�${index}`,
+          //               item,
+          //               {
+          //                 minHeight: 0,
+          //                 maxHeight: 200,
+          //                 fill: true,
+          //                 material: Cesium.Color.YELLOW,
+          //                 outline: true,
+          //                 outlineColor: Cesium.Color.YELLOW,
+          //                 outlineWidth: 1.0,
+          //               }
+          //             );
+          //           });
+          //           tooltipHTML = "";
+          //           for (let i in area[0].attributes) {
+          //             let value = area[0].attributes[i];
+          //             value && (tooltipHTML += `<p>${i}锛�${value || "鏃�"}</p>`);
+          //           }
+
+          //           if (tooltip) {
+          //             tooltip.show(false);
+          //             tooltip = null;
+          //           }
+          //           tooltip = sgworld.Core.CreateResultTooltip(window.Viewer, {
+          //             color: "black",
+          //             addY: 0,
+          //             far: 200000,
+          //             closeBtn: true,
+          //             close: () => {
+          //               this.resetImg();
+          //               this.resetBorder();
+          //             },
+          //           });
+          //           let description = `<div style=' border: 1px solid #fff;border-radius: 5px;background: rgba(0, 0, 0, 0.8);color: #fff;padding: 15px;'>${tooltipHTML}</div>`;
+          //           tooltip.showAt(
+          //             Cesium.Cartesian3.fromDegrees(p.lon, p.lat, 0),
+          //             description
+          //           );
+          //         }
+          //       });
+          //   }
+          // }
+        }
+      }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
+    },
+    stdsj() {
+      window.open(
+        "http://10.9.2.29:8080/#/login?token=1ed14c5157acb8088efe65bc93a032c3"
+      );
+    },
+    closeJm() {
+      this.$parent.$parent.$parent.isShowSpeAnalyse = false;
+    },
+    resetImg() {
+      if (window.pickFeature && window.pickFeature.primitive) {
+        window.pickFeature.primitive.image = imgUrl;
+        window.pickFeature.primitive.scale = scale;
+        window.pickFeature = null;
+      }
+    },
+    // resetBorder() {
+    //   lineArr.forEach((item, index) => {
+    //     if (lineArr[index]) {
+    //       sgworld.Creator.DeleteObject(lineArr[index]);
+    //       lineArr[index] = null;
+    //     }
+    //   });
+    // },
+    stdsjHandle() {
+      window.open(
+        "http://10.9.2.29:8080/#/login?token=1ed14c5157acb8088efe65bc93a032c3"
+      );
+    },
+    tdglHandle() {
+      this.setViewer1Show(!this.viewer1Show);
+    },
+    qytj() {
+      this.setqyEchartsShow(!this.qyEchartsShow);
+    },
+    sceneRoaming() {
+      if (this.showFlag) {
+        document.getElementById("scroll").style.display = "none";
+      } else {
+        document.getElementById("scroll").style.display = "block";
+      }
+      this.showFlag = !this.showFlag;
+    },
+    setRomanFly(result) {
+      this.showFlag = false;
+      document.getElementById("scroll").style.display = "none";
+      var val = roman.filter((res) => {
+        if (res.name == result.name) {
+          return res;
+        }
+      });
+      var degreesArr = val[0].value;
+
+      sgworld.Creator.getFlyData(degreesArr, (data) => {
+        data.showPoint = false;
+        data.showLine = true;
+        data.mode = 1;
+        // 寮圭獥鏁版嵁
+        window.PathAnimationData = {
+          flyData: data,
+        };
+        window.PathAnimationData.winIndex = layer.open({
+          type: 2,
+          title: "璺緞鍔ㄧ敾",
+          shade: false,
+          area: ["352px", "690px"],
+          offset: "r",
+          skin: "other-class",
+          content: SmartEarthRootUrl + "Workers/path/Path.html",
+          end: function () {
+            PathAnimationData.fly && PathAnimationData.fly.exit();
+          },
+        });
+      });
+    },
+
+    handleCommand(command) {
+      switch (command) {
+        case "qytj":
+          this.qytj();
+          break;
+        case "spjkHandle":
+          this.spjkHandle();
+          break;
+        case "stdsjHandle":
+          this.stdsjHandle();
+          break;
+      }
+    },
+
+    // 瑙嗛铻嶅悎
+    async shipinronghe(item) {
+      var that = this;
+      if (that.videoarrList.length > 0) {
+        for (var i = 0; i < that.videoarrList.length; i++) {
+          that.videoarrList[i].destroy();
+          that.videoarrList[i] = undefined;
+        }
+        that.videoarrList = [];
+      } else {
+        for (var i = 0; i < item.length; i++) {
+          let position = new SmartEarth.Degrees(
+            item[i].lon,
+            item[i].lat,
+            item[i].height
+          );
+          await $.ajax({
+            url:
+              "http://10.10.4.116:8086/getCamerasInfoHls?cameraIndexCode=" +
+              item[i].cameraIndexCode,
+            // url: "http://10.10.4.116:8086/getCamerasInfoHls?cameraIndexCode=49ee9fed701444738112e80a4835122c",
+            success: function (result) {
+              video = sgworld.Creator.Video3D({
+                cameraPosition: position, //鐩告満瀹夎浣嶇疆
+                heading: item[i].heading, //64
+                pitch: item[i].pitch, //-47
+                url: JSON.parse(result).data.url, //瑙嗛
+                type: "hls",
+                horizonAngle: item[i].horizonAngle, //鐩告満姘村钩瑙嗚30
+                verticalAngle: item[i].verticalAngle, //鐩告満鍨傜洿瑙嗚60
+                offset: 0.1, //瑙嗛鍥涘懆缇藉寲姣斾緥
+                near: 1, //鏈�杩戞姇灏勯潰璺濈
+                far: item[i].far, //鏈�杩滄姇灏勯潰璺濈166
+                alpha: item[i].alpha, //閫忔槑搴�1
+                useLine: false, //鏄惁璇曠敤杈呭姪绾�
+                success() {
+                  sgworld.Navigate.flyToObj(video);
+                },
+              });
+              that.videoarrList.push(video);
+            },
+          });
+        }
+      }
+    },
+    updateVideo() {
+      video &&
+        video.updateVideo({
+          horizonAngle: this.horizonAngle, //鐩告満姘村钩瑙嗚
+          verticalAngle: this.verticalAngle, //鐩告満鍨傜洿瑙嗚
+          alpha: this.alpha, //閫忔槑搴�
+          far: this.far, //閫忔槑搴�
+          heading: this.heading, //閫忔槑搴�
+          pitch: this.pitch, //閫忔槑搴�
+        });
+    },
+    // 娓呴櫎
+    clear() {
+      video && video.destroy();
+      video = undefined;
+    },
+    guanxian(params) {
+      if (params == "open") {
+        promiseS3M = sgworld.coreMap.scene.open(
+          "http://192.162.2.2:8090/iserver/services/3D-GX/rest/realspace"
+        );
+        this.openGX = "close";
+      } else {
+        promiseS3M.then((res) => {
+          res.forEach((item) => {
+            item.visible = false;
+          });
+        });
+      }
+    },
+    read(wkt) {
+      var regExes = {
+        typeStr: /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
+        emptyTypeStr: /^\s*(\w+)\s*EMPTY\s*$/,
+        spaces: /\s+/,
+        parenComma: /\)\s*,\s*\(/,
+        doubleParenComma: /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
+        trimParens: /^\s*\(?(.*?)\)?\s*$/,
+      };
+      /**
+       * Object with properties corresponding to the geometry types. Property values
+       * are functions that do the actual parsing.
+       * @private
+       */
+      var parse$1 = {
+        /**
+         * Return point geometry given a point WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the point.
+         * @return {Point} A point geometry.
+         * @private
+         */
+        point: function point(str) {
+          if (str === undefined) {
+            return [];
+          }
+
+          var coords = str.trim().split(regExes.spaces);
+          return [Number.parseFloat(coords[0]), Number.parseFloat(coords[1])];
+        },
+
+        /**
+         * Return a multipoint geometry given a multipoint WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the multipoint.
+         * @return {Point} A multipoint feature.
+         * @private
+         */
+        multipoint: function multipoint(str) {
+          var this$1 = this;
+
+          if (str === undefined) {
+            return [];
+          }
+
+          var point;
+          var points = str.trim().split(",");
+          var components = [];
+          for (var i = 0, len = points.length; i < len; ++i) {
+            point = points[i].replace(regExes.trimParens, "$1");
+            components.push(parse$1.point(point));
+          }
+          return components;
+        },
+
+        /**
+         * Return a linestring geometry given a linestring WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the linestring.
+         * @return {LineString} A linestring geometry.
+         * @private
+         */
+        linestring: function linestring(str) {
+          if (str === undefined) {
+            return [];
+          }
+
+          var points = str.trim().split(",");
+          var components = [];
+          var coords;
+          for (var i = 0, len = points.length; i < len; ++i) {
+            coords = points[i].trim().split(regExes.spaces);
+            components.push([
+              Number.parseFloat(coords[0]),
+              Number.parseFloat(coords[1]),
+            ]);
+          }
+          return components;
+        },
+
+        /**
+         * Return a linearring geometry given a linearring WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the linearring.
+         * @return {LinearRing} A linearring geometry.
+         * @private
+         */
+        linearring: function linearring(str) {
+          if (str === undefined) {
+            return [];
+          }
+
+          var points = str.trim().split(",");
+          var components = [];
+          var coords;
+          for (var i = 0, len = points.length; i < len; ++i) {
+            coords = points[i].trim().split(regExes.spaces);
+            components.push([
+              Number.parseFloat(coords[0]),
+              Number.parseFloat(coords[1]),
+            ]);
+          }
+          return components;
+        },
+
+        /**
+         * Return a multilinestring geometry given a multilinestring WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the multilinestring.
+         * @return {MultiLineString} A multilinestring geometry.
+         * @private
+         */
+        multilinestring: function multilinestring(str) {
+          var this$1 = this;
+
+          if (str === undefined) {
+            return [];
+          }
+
+          var line;
+          var lines = str.trim().split(regExes.parenComma);
+          var components = [];
+          for (var i = 0, len = lines.length; i < len; ++i) {
+            line = lines[i].replace(regExes.trimParens, "$1");
+            components.push(parse$1.linestring(line));
+          }
+          return components;
+        },
+
+        /**
+         * Return a polygon geometry given a polygon WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the polygon.
+         * @return {Polygon} A polygon geometry.
+         * @private
+         */
+        polygon: function polygon(str) {
+          var this$1 = this;
+
+          if (str === undefined) {
+            return [];
+          }
+
+          var ring, linestring, linearring;
+          var rings = str.trim().split(regExes.parenComma);
+          var shell;
+          var holes = [];
+          //for (var i = 0, len = rings.length; i < len; ++i) {
+          ring = rings[0].replace(regExes.trimParens, "$1");
+          linestring = ring;
+          //}
+          return linestring;
+        },
+
+        /**
+         * Return a multipolygon geometry given a multipolygon WKT fragment.
+         *
+         * @param {String} str A WKT fragment representing the multipolygon.
+         * @return {MultiPolygon} A multipolygon geometry.
+         * @private
+         */
+        multipolygon: function multipolygon(str) {
+          var this$1 = this;
+
+          if (str === undefined) {
+            return [];
+          }
+
+          var polygon;
+          var polygons = str.trim().split(regExes.doubleParenComma);
+          var components = [];
+          for (var i = 0, len = polygons.length; i < len; ++i) {
+            polygon = polygons[i].replace(regExes.trimParens, "$1");
+            components.push(parse$1.polygon(polygon));
+          }
+          return components;
+        },
+      };
+
+      var geometry, type, str;
+      wkt = wkt.replace(/[\n\r]/g, " ");
+      var matches = regExes.typeStr.exec(wkt);
+      if (wkt.search("EMPTY") !== -1) {
+        matches = regExes.emptyTypeStr.exec(wkt);
+        matches[2] = undefined;
+      }
+      if (matches) {
+        type = matches[1].toLowerCase();
+        str = matches[2];
+        if (parse$1[type]) {
+          geometry = parse$1[type].apply(this, [str]);
+        }
+      }
+
+      if (geometry === undefined) {
+        throw new Error("Could not parse WKT " + wkt);
+      }
+
+      return geometry;
+    },
+  },
+};
+</script>
diff --git a/src/components/menu/tools/special.vue b/src/components/menu/tools/special.vue
index 53e8e52..59b92cf 100644
--- a/src/components/menu/tools/special.vue
+++ b/src/components/menu/tools/special.vue
@@ -433,48 +433,7 @@
           );
           window.sxthandler.setInputAction((event) => {
             let pick = sgworld.Viewer.scene.pick(event.position);
-            if (pick && pick.id && pick.id.tag == "sxt") {
-              //鍏抽棴鍦板潡淇℃伅寮圭獥
-              Bus.$emit("closeLandInfoPop", true);
-              //缁撴潫涔嬪墠鎿嶄綔
-              layuiLayer.close(SmartEarthPopupData.layerProp);
-
-              sgworld.drawObj &&
-                (sgworld.drawObj.drawHandler &&
-                  sgworld.drawObj.drawHandler.destroy(),
-                sgworld.drawObj.end && sgworld.drawObj.end());
-
-              let props = pick.id.properties;
-              let screenHeight =
-                document.body.clientHeight ||
-                document.documentElement.clientHeigh;
-              let offsetTop = screenHeight - 385;
-              offsetTop = offsetTop < 0 ? 0 : offsetTop;
-
-              offsetTop = offsetTop > 100 ? offsetTop - 100 : offsetTop;
-              // console.log(props.installPla._value)
-              layerOpen(props.name._value, {
-                width: 470,
-                height: 385,
-                offset: [offsetTop + "px", "310px"],
-                url:
-                  "./static/html/video/video.html?code=" +
-                  props.cameraInde._value,
-                fn: {
-                  success: (layero, index) => {
-                    SmartEarthPopupData.layerContainer = layero;
-                  },
-                  end: () => {
-                    // this.isOpen.ymfx = false;
-                  },
-                  cancel: () => {
-                    sgworld.drawObj &&
-                      sgworld.drawObj.end &&
-                      sgworld.drawObj.end("cancel");
-                  },
-                },
-              });
-            }
+            console.log(pick)
           }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
         })
         .catch((err) => {
@@ -752,44 +711,44 @@
             let lon = p.lon;
             let lat = p.lat;
 
-            axios
-              .get(
-                "http://10.10.4.121:8070/gisserver/wfsserver/yizhuang-building-wfs-1207",
-                {
-                  params: {
-                    version: "1.3.0",
-                    request: "GetFeature",
-                    typename: `浜﹀簞寤虹瓚澶栬疆寤�4326`,
-                    propertyname: "*",
-                    format: "json",
-                    filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:Intersects><ogc:PropertyName>SAHEP</ogc:PropertyName><gml:Point > <gml:pos>${lon} ${lat}</gml:pos></gml:Point></ogc:Intersects></ogc:Filter>`,
-                  },
-                }
-              )
-              .then((response) => {
-                if (response.data.features.length > 0) {
-                  var geometry = [];
-                  let POIs = response.data.features[0].geometry.coordinates[0];
-                  for (let i = 0; i < POIs.length; i++) {
-                    geometry.push({
-                      x: parseFloat(POIs[i][0]),
-                      y: parseFloat(POIs[i][1]),
-                      z: 0,
-                    });
-                  }
-                  buildingPolygon = sgworld.Creator.createPolygon(
-                    geometry,
-                    {
-                      fillColor: "#00ff0050",
-                      outlineColor: "#ff0000",
-                      outlineWidth: 2,
-                    },
-                    1,
-                    0,
-                    "闈�"
-                  );
-                }
-              });
+            // axios
+            //   .get(
+            //     "http://10.10.4.121:8070/gisserver/wfsserver/yizhuang-building-wfs-1207",
+            //     {
+            //       params: {
+            //         version: "1.3.0",
+            //         request: "GetFeature",
+            //         typename: `浜﹀簞寤虹瓚澶栬疆寤�4326`,
+            //         propertyname: "*",
+            //         format: "json",
+            //         filter: `<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:Intersects><ogc:PropertyName>SAHEP</ogc:PropertyName><gml:Point > <gml:pos>${lon} ${lat}</gml:pos></gml:Point></ogc:Intersects></ogc:Filter>`,
+            //       },
+            //     }
+            //   )
+            //   .then((response) => {
+            //     if (response.data.features.length > 0) {
+            //       var geometry = [];
+            //       let POIs = response.data.features[0].geometry.coordinates[0];
+            //       for (let i = 0; i < POIs.length; i++) {
+            //         geometry.push({
+            //           x: parseFloat(POIs[i][0]),
+            //           y: parseFloat(POIs[i][1]),
+            //           z: 0,
+            //         });
+            //       }
+            //       buildingPolygon = sgworld.Creator.createPolygon(
+            //         geometry,
+            //         {
+            //           fillColor: "#00ff0050",
+            //           outlineColor: "#ff0000",
+            //           outlineWidth: 2,
+            //         },
+            //         1,
+            //         0,
+            //         "闈�"
+            //       );
+            //     }
+            //   });
           }
           // else if (nPickFeature.primitive instanceof Cesium.GroundPrimitive) {
           //   let wmsLayer = this.$store.state.selectedLayers.filter((item) => {
diff --git a/src/components/right/@/assets/img/new/yingxiang.png b/src/components/right/@/assets/img/new/yingxiang.png
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/right/@/assets/img/new/yingxiang.png
diff --git a/src/components/right/right-bottom.vue b/src/components/right/right-bottom.vue
index a7f33c7..da4a65e 100644
--- a/src/components/right/right-bottom.vue
+++ b/src/components/right/right-bottom.vue
@@ -422,17 +422,27 @@
     },
     flyBack() {
       sgworld.Navigate.flyToPointsInterest({
-        destination: new Cesium.Cartesian3.fromDegrees(
-          this.camera.position[0],
-          this.camera.position[1],
-          this.camera.position[2]
-        ),
-        orientation: {
-          heading: Cesium.Math.toRadians(this.camera.orientation.heading),
-          pitch: Cesium.Math.toRadians(this.camera.orientation.pitch),
-          roll: Cesium.Math.toRadians(this.camera.orientation.roll),
-        },
-      });
+            destination: {
+              "x": -2739326.5749705257,
+              "y": 4699172.613682586,
+              "z": 3363231.4711036524
+            }, orientation: new Cesium.HeadingPitchRoll(0.20701194045518534, -1.2462306958113518, 0.00000112321019862804),
+            duration: 7, //椋炶鏃堕棿8s
+          });
+
+
+      // sgworld.Navigate.flyToPointsInterest({
+      //   destination: new Cesium.Cartesian3.fromDegrees(
+      //     this.camera.position[0],
+      //     this.camera.position[1],
+      //     this.camera.position[2]
+      //   ),
+      //   orientation: {
+      //     heading: Cesium.Math.toRadians(this.camera.orientation.heading),
+      //     pitch: Cesium.Math.toRadians(this.camera.orientation.pitch),
+      //     roll: Cesium.Math.toRadians(this.camera.orientation.roll),
+      //   },
+      // });
     },
     fullScreen() {
       this.isActive = !this.isActive;
diff --git a/src/components/right/right-top.vue b/src/components/right/right-top.vue
index cf8be6d..b235726 100644
--- a/src/components/right/right-top.vue
+++ b/src/components/right/right-top.vue
@@ -51,6 +51,7 @@
     </div>
     <model-layer v-show="$store.state.showModelFlag"></model-layer>
     <model-edit v-if="$store.state.isShowEditLayer"></model-edit>
+    <menu-query v-if="$store.state.isShowMenuQuery"></menu-query>
     <querydata ref="drawer" />
 
     <div class="resByMouseBox" v-if="showRangeBox">
@@ -759,7 +760,9 @@
 // import { queryBySquare } from "@/utils/request";
 import FCFH from "@/components/right/FCFH";
 import modelLayer from "@/components/left/layerTree/modelLayer.vue";
-import  modelEdit from '@/components/left/layerTree/modelEdit.vue';
+import modelEdit from '@/components/left/layerTree/modelEdit.vue';
+import menuQuery from "@/components/left/layerTree/menuQuery.vue";
+
 //浜ら�氬浘灞�
 let trafficLayer, panoramaLayer;
 let flyPoint;
@@ -777,7 +780,9 @@
     Layer,
     FCFH,
     modelLayer,
-    modelEdit
+    modelEdit,
+    menuQuery
+
   },
   name: "right-top",
   data() {
diff --git a/src/components/right/switchImagerLayer.vue b/src/components/right/switchImagerLayer.vue
index cdccb03..439f496 100644
--- a/src/components/right/switchImagerLayer.vue
+++ b/src/components/right/switchImagerLayer.vue
@@ -8,59 +8,62 @@
         />
       </li> -->
       <li>
-        <img
-          @click="switchImagerLayerClick('褰卞儚搴曞浘')"
-          src="@/assets/img/new/yingxiang.png"
-        />
+        <img @click="switchImagerLayerClick('褰卞儚搴曞浘')" src="@/assets/img/new/yingxiang.png" />
       </li>
       <li>
-        <div class="radiogroup" @change="switchImagerLayerClick('浜岀淮搴曞浘')">
-          <el-radio-group v-model="radio">
+        <div class="radiogroup" @click="switchImagerLayerClick('浜岀淮搴曞浘')">
+          <!-- <el-radio-group v-model="radio">
             <el-radio :label="2">鏍囧噯鐧�</el-radio>
             <el-radio :label="1">绉戞妧钃�</el-radio>
             <el-radio :label="0">鏆楀榛�</el-radio>
-          </el-radio-group>
+          </el-radio-group> -->
           <img src="@/assets/img/new/shiliang.png" />
         </div>
       </li>
-      <li>
+      <!-- <li>
         <img
           @click="switchImagerLayerClick('瀹炴櫙妯″瀷')"
           src="@/assets/img/new/sanwei.png"
         />
-      </li>
+      </li> -->
     </ul>
   </div>
 </template>
 
 <style  scoped>
 .switchImagerLayer {
-  width: 395px;
+  width: 260px;
   height: 88px;
   position: absolute;
-  right: 78px;
+  right: 10px;
   top: -90px;
 }
+
 .switchImagerLayer ul {
   width: 100%;
   list-style: none;
   display: flex;
   justify-content: space-between;
 }
+
 li {
   cursor: pointer;
   width: 124px;
   height: 89px;
 }
+
 li img {
   width: 100%;
 }
+
 li:hover {
   background-color: rgb(0, 136, 255, 0.4);
 }
+
 .switchImagerLayer li .radiogroup {
   position: absolute;
 }
+
 .switchImagerLayer li .el-radio-group {
   display: flex;
   flex-direction: column;
@@ -71,6 +74,7 @@
   top: 5px;
   z-index: 10;
 }
+
 .el-radio {
   color: #fff;
   text-shadow: 1px 1px 0 #000, 1px -1px 0 #000, -1px -1px 0 #000,
@@ -105,6 +109,7 @@
 <script>
 import Bus from "../tools/Bus";
 import baseVuex from "@mixin/baseVuex";
+
 export default {
   name: "switchImagerLayer",
   components: {},
@@ -121,31 +126,45 @@
       },
     };
   },
-  mounted() {},
+  mounted() { },
   mixins: [baseVuex],
   methods: {
-    clearLayer() {},
+    clearLayer() { },
+    removeLayer() {
+      var layer = Viewer.imageryLayers._layers[1];
+      if (layer) {
+        Viewer.imageryLayers.remove(layer)
+      }
+    },
     switchImagerLayerClick(type) {
       switch (type) {
         case "褰卞儚搴曞浘":
-          this.radio = null;
-          this.changeLayer("2d"); //娣诲姞鐩告満鑼冨洿闄愬埗
-          this.clearSwitchImagerLayerClick();
-          Bus.$emit("switchImage");
-          this.$parent.changeImage("1");
+          // this.radio = null;
+          // this.changeLayer("2d"); //娣诲姞鐩告満鑼冨洿闄愬埗
+          // this.clearSwitchImagerLayerClick();
+          // Bus.$emit("switchImage");
+          // this.$parent.changeImage("1");
+          // 
+          Viewer.imageryLayers._layers[1].show = false;
+          Viewer.imageryLayers._layers[2].show = false;
+          Viewer.imageryLayers._layers[3].show = true;
           break;
         case "浜岀淮搴曞浘":
-          this.changeLayer("2d"); //娣诲姞鐩告満鑼冨洿闄愬埗
-          this.clearSwitchImagerLayerClick();
-          if (this.radio == 0) {
-            Bus.$emit("heijin2D");
-          } else if (this.radio == 1) {
-            Bus.$emit("shenlan2D");
-          } else {
-            Bus.$emit("baise2D");
-          }
-          // Bus.$emit("switch2D");
-          this.$parent.changeImage("2");
+          Viewer.imageryLayers._layers[1].show = true;
+          Viewer.imageryLayers._layers[2].show = true;
+          Viewer.imageryLayers._layers[3].show = false;
+          // Viewer.imageryLayers.remove(Viewer.imageryLayers._layers[1])
+          // this.changeLayer("2d"); //娣诲姞鐩告満鑼冨洿闄愬埗
+          // this.clearSwitchImagerLayerClick();
+          // if (this.radio == 0) {
+          //   Bus.$emit("heijin2D");
+          // } else if (this.radio == 1) {
+          //   Bus.$emit("shenlan2D");
+          // } else {
+          //   Bus.$emit("baise2D");
+          // }
+          // // Bus.$emit("switch2D");
+          // this.$parent.changeImage("2");
           break;
         case "瀹炴櫙妯″瀷":
           this.radio = null;
@@ -223,7 +242,7 @@
 
       try {
         if (window.panoramaLayer) window.panoramaLayer.deleteObject();
-      } catch (e) {}
+      } catch (e) { }
       if (window.panoramaHandler) window.panoramaHandler.destroy();
       if (window.panoramaHandler) window.panoramaHandler = undefined;
     },
diff --git a/src/router/index.js b/src/router/index.js
index f5fc606..f4a5627 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -30,7 +30,7 @@
 ];
 const router = new Router({
   mode: "history",
-  // base: '/YZXNCS',//姝e紡鐗� 鎵撳寘鏃惰В寮�
+  // base: '/JSJKZHGS',//姝e紡鐗� 鎵撳寘鏃惰В寮�
   // base: '/SW',//娴嬭瘯鐗� 鎵撳寘鏃惰В寮�
   routes,
 });
diff --git a/src/store/index.js b/src/store/index.js
index 03671e0..a9bfbde 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -34,11 +34,20 @@
     selectedLayers: [],
     userId: "",
     userName: "",
-    showModelFlag:false,//妯″瀷娣诲姞缂栬緫
-    isShowLayer:false,
-    addModelFlag:false,
-    addModelLayer:null,
-    isShowEditLayer:false,
+    showModelFlag: false,//妯″瀷娣诲姞缂栬緫
+    isShowLayer: false,
+    addModelFlag: false,
+    addModelLayer: null,
+    isShowEditLayer: false,
+    showMessageInfo: false,
+    isMeasureFlag: false,
+    measureCoordObj: null,
+    isShowMeasureCoord: false,
+    isShowMenuQuery:false,
+    isQueryFalag:false,
+    isQyeryCoord:null,
+    showZhaiHaiImg:null,
+     isshowZhaiHai:false,
   },
   mutations: {
     selectedLayer(state, b) {
@@ -91,12 +100,15 @@
       state.showSetting = b;
       console.log(b)
     },
-    showModelBox(state,b){
+    showModelBox(state, b) {
       state.showModelFlag = b;
     },
-    showSceneBox(state,b){
+    showSceneBox(state, b) {
       state.isShowLayer = !state.isShowLayer;
     },
+    setMenuQuery(state, b) {
+      state.isShowMenuQuery = b;
+    },
     // 瀹氫箟宸ョ▼鏍戞暟鎹�
     setTreeData(state, data = []) {
       ergodicNode(data);
diff --git a/src/store/mapSplit.js b/src/store/mapSplit.js
index 9b4ebdd..f5204d9 100644
--- a/src/store/mapSplit.js
+++ b/src/store/mapSplit.js
@@ -23,7 +23,7 @@
         var lat = Cesium.Math.toDegrees(cartographic.latitude)
         var lng = Cesium.Math.toDegrees(cartographic.longitude)
         var level = this.getLevel(cartographic.height)
-        console.log(lng, lat, level)
+    
         window.map.getView().setCenter([parseFloat(lng), parseFloat(lat)])
         window.map.getView().setZoom(level)
     },
diff --git a/static/CimSDK/Workers/field/rendermapWorker.js b/static/CimSDK/Workers/field/rendermapWorker.js
index bd7ffcc..8de0fbb 100644
--- a/static/CimSDK/Workers/field/rendermapWorker.js
+++ b/static/CimSDK/Workers/field/rendermapWorker.js
@@ -53,7 +53,7 @@
     var colorBar = colorInfo;
     var valMax = byteArray[byteArray.length - 1];
     var valMin = byteArray[byteArray.length - 2];
-    debugger
+ 
     if (colorEqually) {
         var delta = valMax - valMin;
         delta = delta / (colorBar.length - 1);
diff --git a/static/SmartEarthSDK/Workers/field/rendermapWorker.js b/static/SmartEarthSDK/Workers/field/rendermapWorker.js
index bd7ffcc..8de0fbb 100644
--- a/static/SmartEarthSDK/Workers/field/rendermapWorker.js
+++ b/static/SmartEarthSDK/Workers/field/rendermapWorker.js
@@ -53,7 +53,7 @@
     var colorBar = colorInfo;
     var valMax = byteArray[byteArray.length - 1];
     var valMin = byteArray[byteArray.length - 2];
-    debugger
+ 
     if (colorEqually) {
         var delta = valMax - valMin;
         delta = delta / (colorBar.length - 1);
diff --git a/static/SmartEarthSDK/Workers/prop/property_prop.html b/static/SmartEarthSDK/Workers/prop/property_prop.html
index 9024f89..2f6ce73 100644
--- a/static/SmartEarthSDK/Workers/prop/property_prop.html
+++ b/static/SmartEarthSDK/Workers/prop/property_prop.html
@@ -534,7 +534,7 @@
                     $('.attribute3dtitles input[name="text17"]').val(editGraphic.getProperty(obj[16]));
                     break;
                 case 'attributepolygon':
-                    debugger
+          
                     $('.attributepolygon input[name="text1"]').val(editGraphic["Angle"].getValue());
                     $('.attributepolygon input[name="text2"]').val(editGraphic["BSM"].getValue());
                     $('.attributepolygon input[name="text3"]').val(editGraphic["BlkColor"].getValue());
diff --git a/static/data/layerData.js b/static/data/layerData.js
index 4d2e79e..4cb67db 100644
--- a/static/data/layerData.js
+++ b/static/data/layerData.js
@@ -8,6 +8,11 @@
         BASE_URL: "http://" + host + "/JiangSu",
         img_url: "http://" + host + "/static/image/",
         Model_URL: web_URL + "/JiangSu",
+        tdtSl:"http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=",
+        tdtZj:"http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=",
+        tdtToken:"94a34772eb88317fcbf8428e10448561",
+        olTdtSl:'http://t0.tianditu.com/DataServer?T=cta_w&x={x}&y={y}&l={z}&tk=',
+        olTdtBZ:'http://t0.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk='
     },
     modelData: [
         {
@@ -18,39 +23,29 @@
         },
         {
             id: 'md2',
-            name: '娴嬭瘯妯″瀷2',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
+            name: '宸ヤ汉',
+            url: '/Data/glb/宸ヤ汉.glb',
+            imgUrl: '宸ヤ汉.png'
         }, {
             id: 'md3',
-            name: '娴嬭瘯妯″瀷3',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
-        }, {
+            name: '璺殰',
+            url: '/Data/glb/璺殰.glb',
+            imgUrl: '璺殰.png'
+        },  {
             id: 'md4',
-            name: '娴嬭瘯妯″瀷4',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
+            name: '鏂藉伐杞﹁締',
+            url: '/Data/glb/sgcl.glb',
+            imgUrl: '鏂藉伐杞﹁締.png'
         }, {
             id: 'md5',
-            name: '娴嬭瘯妯″瀷5',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
+            name: '妗�',
+            url: '/Data/glb/妗�.glb',
+            imgUrl: '妗�.png'
         }, {
             id: 'md6',
-            name: '娴嬭瘯妯″瀷6',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
-        }, {
-            id: 'md7',
-            name: '娴嬭瘯妯″瀷7',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
-        }, {
-            id: 'md8',
-            name: '娴嬭瘯妯″瀷8',
-            url: '/Data/glb/Cesium_Air.glb',
-            imgUrl: '椋炴満.png'
-        },
+            name: '閿ユ《',
+            url: '/Data/glb/閿ユ《.glb',
+            imgUrl: '閿ユ《.png'
+        } 
     ]
 }
\ No newline at end of file
diff --git a/static/html/AnalysisResultEchartLine.html b/static/html/AnalysisResultEchartLine.html
index 62b55cc..66d2fc5 100644
--- a/static/html/AnalysisResultEchartLine.html
+++ b/static/html/AnalysisResultEchartLine.html
@@ -96,7 +96,7 @@
 
                 thisP.height += 360;
                 thisP = parent.Cesium.Cartographic.toCartesian(thisP);
-                debugger
+            
                 // parent._AnalysisDXPM.flyPoint
                 var options = {
                     maximumHeight: 30,
diff --git "a/static/image/\345\267\245\344\272\272.png" "b/static/image/\345\267\245\344\272\272.png"
new file mode 100644
index 0000000..d8ab16c
--- /dev/null
+++ "b/static/image/\345\267\245\344\272\272.png"
Binary files differ
diff --git "a/static/image/\346\226\275\345\267\245\350\275\246\350\276\206.png" "b/static/image/\346\226\275\345\267\245\350\275\246\350\276\206.png"
new file mode 100644
index 0000000..028002d
--- /dev/null
+++ "b/static/image/\346\226\275\345\267\245\350\275\246\350\276\206.png"
Binary files differ
diff --git "a/static/image/\346\241\266.png" "b/static/image/\346\241\266.png"
new file mode 100644
index 0000000..ed797a5
--- /dev/null
+++ "b/static/image/\346\241\266.png"
Binary files differ
diff --git "a/static/image/\350\267\257\351\232\234.png" "b/static/image/\350\267\257\351\232\234.png"
new file mode 100644
index 0000000..0ecc013
--- /dev/null
+++ "b/static/image/\350\267\257\351\232\234.png"
Binary files differ
diff --git "a/static/image/\351\224\245\346\241\266.png" "b/static/image/\351\224\245\346\241\266.png"
new file mode 100644
index 0000000..caef20c
--- /dev/null
+++ "b/static/image/\351\224\245\346\241\266.png"
Binary files differ
diff --git a/static/img/test03-01.png b/static/img/test03-01.png
new file mode 100644
index 0000000..c241360
--- /dev/null
+++ b/static/img/test03-01.png
Binary files differ
diff --git a/static/layers.json b/static/layers.json
index b208fb9..6f39692 100644
--- a/static/layers.json
+++ b/static/layers.json
@@ -7,7 +7,75 @@
             "id": "CE402B81",
             "name": "杈圭晫鑼冨洿",
             "children": [
-                
+                {
+                    "id": "A349C2B1",
+                    "sourceType": "GEOJSON",
+                    "type": "ZhuangHao",
+                    "name": "妗╁彿",
+                    "urls": "/Data/json/zhuanghao.geojson",
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                },
+                {
+                    "id": "A349C2B2",
+                    "sourceType": "GEOJSON",
+                    "type": "PingQuXian",
+                    "name": "骞虫洸绾�",
+                    "urls": "/Data/json/PingQuXian.geojson",
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                },
+                {
+                    "id": "A349C2B3",
+                    "sourceType": "GEOJSON",
+                    "type": "ZhongQuXian",
+                    "name": "绾垫洸绾�",
+                    "urls": "/Data/json/ZhongQuXian.geojson",
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                },
+                {
+                    "id": "A349C2B4",
+                    "sourceType": "GEOJSON",
+                    "type": "WangGe",
+                    "name": "缃戞牸",
+                    "urls": "/Data/json/wangGe.geojson",
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                },
+                {
+                    "id": "A349C2B5",
+                    "sourceType": "GEOJSON",
+                    "type": "zhaiHai",
+                    "name": "鐏惧",
+                    "urls": [
+                        "/Data/json/zhaiHai1.geojson",
+                        "/Data/json/zhaiHai2.geojson",
+                        "/Data/json/zhaiHai3.geojson"
+                    ],
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                },
+                {
+                    "id": "A349C2B6",
+                    "sourceType": "wmse",
+                    "name": "琛屾斂鍖哄垝",
+                    "urls": "http://192.168.20.83:8866/gisserver/wmsserver/xingZhengQuHua",
+                    "alpha": 1,
+                    "zIndex": 4,
+                    "checked": false,
+                    "rename": false
+                }
             ],
             "rename": false,
             "checked": false,
@@ -15,14 +83,32 @@
         },
         {
             "id": "482040AD",
-            "name": "鐥呭鏁版嵁",
+            "name": "妯″瀷",
             "children": [
-               
+                {
+                    "id": "482040AD1",
+                    "sourceType": "b3dm",
+                    "name": "鏈嶅姟鍖烘ā鍨�",
+                    "urls": "http://localhost/JiangSu/Data/3dtiles/fwq/tileset.json",
+                    "checked": true,
+                    "rename": false,
+                    "effectsMaxHeight": 0,
+                    "zIndex": 5
+                },
+                {
+                    "id": "482040AD2",
+                    "sourceType": "b3dm",
+                    "name": "鏀惰垂绔欐ā鍨�",
+                    "urls": "http://localhost/JiangSu/Data/3dtiles/sfz/tileset.json",
+                    "checked": true,
+                    "rename": false,
+                    "zIndex": 2,
+                    "effectsMaxHeight": 0
+                }
             ],
             "rename": false,
             "expanded": false
         }
-    
     ],
     "flyTo": [],
     "mapStatus": {
diff --git a/vue.config.js b/vue.config.js
index 23ee67b..720a4d2 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -21,12 +21,12 @@
       error: true
     },
     proxy: {
-      "/JiangSu": {
-        target: 'http:localhost/JiangSu',//浠g悊鍦板潃 鍑℃槸浣跨敤/api
+      "/aaaa": {
+        target: 'http:localhost/aaaa',//浠g悊鍦板潃 鍑℃槸浣跨敤/api
         changeOrigin: true,//鍏佽璺ㄥ煙璇锋眰
         secure: false,
         pathRewrite: { //閲嶅啓璺緞 鏇挎崲璇锋眰鍦板潃涓殑鎸囧畾璺緞
-          ['^/JiangSu']: '' //灏嗚姹傚湴鍧�涓殑api鏇挎崲涓虹┖
+          ['^/aaaa']: '' //灏嗚姹傚湴鍧�涓殑api鏇挎崲涓虹┖
         }
       }
     }

--
Gitblit v1.9.3