Forráskód Böngészése

Merge branch 'master' of http://47.103.92.60:3003/skyversation/xujingtown_irflcmp_ui into lmx

# Conflicts:
#	src/components/Map.vue
DESKTOP-6LTVLN7\Liumouren 9 hónapja
szülő
commit
374ebaac3d
7 módosított fájl, 953 hozzáadás és 235 törlés
  1. 1 0
      .gitignore
  2. 552 22
      package-lock.json
  3. 1 0
      package.json
  4. 86 65
      src/components/Edge.vue
  5. 38 43
      src/components/Layers.vue
  6. 63 105
      src/components/Map.vue
  7. 212 0
      src/components/Popup.vue

+ 1 - 0
.gitignore

@@ -1 +1,2 @@
 node_modules/
+dist/

+ 552 - 22
package-lock.json

@@ -9,6 +9,7 @@
       "version": "0.1.0",
       "dependencies": {
         "axios": "^1.7.7",
+        "cesium": "^1.121.1",
         "dayjs": "^1.11.6",
         "element-plus": "^2.8.2",
         "vue": "^3.2.13",
@@ -182,6 +183,49 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/@cesium/engine": {
+      "version": "11.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@cesium/engine/-/engine-11.0.0.tgz",
+      "integrity": "sha512-0z3mJNNly407h3/bAvGoGnjA0ygprkVz32z9x1VNmPXf9AuybKu7Q4wRrChUhC/qsNj3L45kP6KqyDuHSe2bhw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@tweenjs/tween.js": "^25.0.0",
+        "@zip.js/zip.js": "^2.7.34",
+        "autolinker": "^4.0.0",
+        "bitmap-sdf": "^1.0.3",
+        "dompurify": "^3.0.2",
+        "draco3d": "^1.5.1",
+        "earcut": "^3.0.0",
+        "grapheme-splitter": "^1.0.4",
+        "jsep": "^1.3.8",
+        "kdbush": "^4.0.1",
+        "ktx-parse": "^0.7.0",
+        "lerc": "^2.0.0",
+        "mersenne-twister": "^1.1.0",
+        "meshoptimizer": "^0.21.0",
+        "pako": "^2.0.4",
+        "protobufjs": "^7.1.0",
+        "rbush": "^4.0.0",
+        "topojson-client": "^3.1.0",
+        "urijs": "^1.19.7"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@cesium/widgets": {
+      "version": "8.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@cesium/widgets/-/widgets-8.0.0.tgz",
+      "integrity": "sha512-Rnid5BbLBZjwFdbr3lgOwK3fhql/BeEbf5l9ZZE+Zc7V8Fb6wgKM8QmrL+bbJ+BtuiELp+SkNxcF97Ktifxb4g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@cesium/engine": "^11.0.0",
+        "nosleep.js": "^0.12.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
     "node_modules/@ctrl/tinycolor": {
       "version": "3.6.1",
       "resolved": "https://mirrors.huaweicloud.com/repository/npm/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
@@ -376,6 +420,70 @@
         "url": "https://opencollective.com/popperjs"
       }
     },
+    "node_modules/@protobufjs/aspromise": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+      "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/base64": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/base64/-/base64-1.1.2.tgz",
+      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/codegen": {
+      "version": "2.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/eventemitter": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+      "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/fetch": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+      "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.1",
+        "@protobufjs/inquire": "^1.1.0"
+      }
+    },
+    "node_modules/@protobufjs/float": {
+      "version": "1.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/float/-/float-1.0.2.tgz",
+      "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/inquire": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+      "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/path": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/path/-/path-1.1.2.tgz",
+      "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/pool": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/pool/-/pool-1.1.0.tgz",
+      "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/utf8": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+      "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
+      "license": "BSD-3-Clause"
+    },
     "node_modules/@sideway/address": {
       "version": "4.1.5",
       "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",
@@ -430,6 +538,12 @@
         "node": ">=10.13.0"
       }
     },
+    "node_modules/@tweenjs/tween.js": {
+      "version": "25.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
+      "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==",
+      "license": "MIT"
+    },
     "node_modules/@types/body-parser": {
       "version": "1.19.5",
       "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz",
@@ -576,7 +690,6 @@
       "version": "20.14.10",
       "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.10.tgz",
       "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
-      "dev": true,
       "dependencies": {
         "undici-types": "~5.26.4"
       }
@@ -1324,6 +1437,17 @@
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
       "dev": true
     },
+    "node_modules/@zip.js/zip.js": {
+      "version": "2.7.52",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@zip.js/zip.js/-/zip.js-2.7.52.tgz",
+      "integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "bun": ">=0.7.0",
+        "deno": ">=1.0.0",
+        "node": ">=16.5.0"
+      }
+    },
     "node_modules/accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
@@ -1417,8 +1541,6 @@
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.16.0.tgz",
       "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
       "dev": true,
-      "optional": true,
-      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
         "json-schema-traverse": "^1.0.0",
@@ -1434,9 +1556,7 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+      "dev": true
     },
     "node_modules/ajv-keywords": {
       "version": "3.5.2",
@@ -1576,6 +1696,15 @@
         "node": ">= 4.0.0"
       }
     },
+    "node_modules/autolinker": {
+      "version": "4.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/autolinker/-/autolinker-4.0.0.tgz",
+      "integrity": "sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      }
+    },
     "node_modules/autoprefixer": {
       "version": "10.4.19",
       "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz",
@@ -1677,6 +1806,12 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/bitmap-sdf": {
+      "version": "1.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
+      "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==",
+      "license": "MIT"
+    },
     "node_modules/bl": {
       "version": "4.1.0",
       "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
@@ -1930,6 +2065,23 @@
         "node": ">=4"
       }
     },
+    "node_modules/cesium": {
+      "version": "1.121.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/cesium/-/cesium-1.121.1.tgz",
+      "integrity": "sha512-WpdaGFd8qCOHiE9khV0sWWjCMXAX1U9Aou8MzMC/F0Akp6YqcOk4HLk4LLhZKeOjO/Bh27iTIW2mxEZ5+dtCxg==",
+      "license": "Apache-2.0",
+      "workspaces": [
+        "packages/engine",
+        "packages/widgets"
+      ],
+      "dependencies": {
+        "@cesium/engine": "^11.0.0",
+        "@cesium/widgets": "^8.0.0"
+      },
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
     "node_modules/chalk": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz",
@@ -3045,6 +3197,12 @@
         "url": "https://github.com/fb55/domhandler?sponsor=1"
       }
     },
+    "node_modules/dompurify": {
+      "version": "3.1.6",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/dompurify/-/dompurify-3.1.6.tgz",
+      "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==",
+      "license": "(MPL-2.0 OR Apache-2.0)"
+    },
     "node_modules/domutils": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
@@ -3084,12 +3242,24 @@
       "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
       "dev": true
     },
+    "node_modules/draco3d": {
+      "version": "1.5.7",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/draco3d/-/draco3d-1.5.7.tgz",
+      "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==",
+      "license": "Apache-2.0"
+    },
     "node_modules/duplexer": {
       "version": "0.1.2",
       "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz",
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
+    "node_modules/earcut": {
+      "version": "3.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/earcut/-/earcut-3.0.0.tgz",
+      "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==",
+      "license": "ISC"
+    },
     "node_modules/easy-stack": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
@@ -3807,6 +3977,12 @@
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "dev": true
     },
+    "node_modules/grapheme-splitter": {
+      "version": "1.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+      "license": "MIT"
+    },
     "node_modules/gzip-size": {
       "version": "6.0.0",
       "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz",
@@ -4486,6 +4662,15 @@
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
       "dev": true
     },
+    "node_modules/jsep": {
+      "version": "1.3.9",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/jsep/-/jsep-1.3.9.tgz",
+      "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.16.0"
+      }
+    },
     "node_modules/json-parse-better-errors": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -4528,6 +4713,12 @@
         "graceful-fs": "^4.1.6"
       }
     },
+    "node_modules/kdbush": {
+      "version": "4.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/kdbush/-/kdbush-4.0.2.tgz",
+      "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==",
+      "license": "ISC"
+    },
     "node_modules/kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
@@ -4546,6 +4737,12 @@
         "node": ">= 8"
       }
     },
+    "node_modules/ktx-parse": {
+      "version": "0.7.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/ktx-parse/-/ktx-parse-0.7.1.tgz",
+      "integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==",
+      "license": "MIT"
+    },
     "node_modules/launch-editor": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.8.0.tgz",
@@ -4565,6 +4762,12 @@
         "launch-editor": "^2.8.0"
       }
     },
+    "node_modules/lerc": {
+      "version": "2.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/lerc/-/lerc-2.0.0.tgz",
+      "integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg==",
+      "license": "Apache-2.0"
+    },
     "node_modules/less": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/less/-/less-4.2.0.tgz",
@@ -4855,6 +5058,12 @@
         "node": ">=4"
       }
     },
+    "node_modules/long": {
+      "version": "5.2.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/long/-/long-5.2.3.tgz",
+      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
+      "license": "Apache-2.0"
+    },
     "node_modules/lower-case": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
@@ -4968,6 +5177,18 @@
         "node": ">= 8"
       }
     },
+    "node_modules/mersenne-twister": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/mersenne-twister/-/mersenne-twister-1.1.0.tgz",
+      "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==",
+      "license": "MIT"
+    },
+    "node_modules/meshoptimizer": {
+      "version": "0.21.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/meshoptimizer/-/meshoptimizer-0.21.0.tgz",
+      "integrity": "sha512-WabtlpnK/GgD0GMwYd1fBTfYHf4MIcQPEg6dt7y4GuDcY51RzLSkSNE8ZogD7U3Vs2/fIf4z89TOLpA80EOnhg==",
+      "license": "MIT"
+    },
     "node_modules/methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
@@ -5375,6 +5596,12 @@
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==",
       "license": "BSD-3-Clause"
     },
+    "node_modules/nosleep.js": {
+      "version": "0.12.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/nosleep.js/-/nosleep.js-0.12.0.tgz",
+      "integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA==",
+      "license": "MIT"
+    },
     "node_modules/npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -5594,6 +5821,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/pako": {
+      "version": "2.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/pako/-/pako-2.1.0.tgz",
+      "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==",
+      "license": "(MIT AND Zlib)"
+    },
     "node_modules/param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
@@ -6436,6 +6669,30 @@
         "node": ">=4"
       }
     },
+    "node_modules/protobufjs": {
+      "version": "7.4.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/protobufjs/-/protobufjs-7.4.0.tgz",
+      "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
+      "hasInstallScript": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/node": ">=13.7.0",
+        "long": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
     "node_modules/proxy-addr": {
       "version": "2.0.7",
       "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -6531,6 +6788,12 @@
         }
       ]
     },
+    "node_modules/quickselect": {
+      "version": "3.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/quickselect/-/quickselect-3.0.0.tgz",
+      "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==",
+      "license": "ISC"
+    },
     "node_modules/randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
@@ -6573,6 +6836,15 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/rbush": {
+      "version": "4.0.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/rbush/-/rbush-4.0.1.tgz",
+      "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==",
+      "license": "MIT",
+      "dependencies": {
+        "quickselect": "^3.0.0"
+      }
+    },
     "node_modules/read-pkg": {
       "version": "5.2.0",
       "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -7542,6 +7814,26 @@
         "node": ">=0.6"
       }
     },
+    "node_modules/topojson-client": {
+      "version": "3.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/topojson-client/-/topojson-client-3.1.0.tgz",
+      "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+      "license": "ISC",
+      "dependencies": {
+        "commander": "2"
+      },
+      "bin": {
+        "topo2geo": "bin/topo2geo",
+        "topomerge": "bin/topomerge",
+        "topoquantize": "bin/topoquantize"
+      }
+    },
+    "node_modules/topojson-client/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "license": "MIT"
+    },
     "node_modules/totalist": {
       "version": "3.0.1",
       "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
@@ -7560,8 +7852,7 @@
     "node_modules/tslib": {
       "version": "2.6.3",
       "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
-      "dev": true
+      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
     },
     "node_modules/type-fest": {
       "version": "0.6.0",
@@ -7588,8 +7879,7 @@
     "node_modules/undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
-      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
-      "dev": true
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
     },
     "node_modules/universalify": {
       "version": "2.0.1",
@@ -7648,6 +7938,12 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/urijs": {
+      "version": "1.19.11",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/urijs/-/urijs-1.19.11.tgz",
+      "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
+      "license": "MIT"
+    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -8466,6 +8762,41 @@
       "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.24.8.tgz",
       "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w=="
     },
+    "@cesium/engine": {
+      "version": "11.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@cesium/engine/-/engine-11.0.0.tgz",
+      "integrity": "sha512-0z3mJNNly407h3/bAvGoGnjA0ygprkVz32z9x1VNmPXf9AuybKu7Q4wRrChUhC/qsNj3L45kP6KqyDuHSe2bhw==",
+      "requires": {
+        "@tweenjs/tween.js": "^25.0.0",
+        "@zip.js/zip.js": "^2.7.34",
+        "autolinker": "^4.0.0",
+        "bitmap-sdf": "^1.0.3",
+        "dompurify": "^3.0.2",
+        "draco3d": "^1.5.1",
+        "earcut": "^3.0.0",
+        "grapheme-splitter": "^1.0.4",
+        "jsep": "^1.3.8",
+        "kdbush": "^4.0.1",
+        "ktx-parse": "^0.7.0",
+        "lerc": "^2.0.0",
+        "mersenne-twister": "^1.1.0",
+        "meshoptimizer": "^0.21.0",
+        "pako": "^2.0.4",
+        "protobufjs": "^7.1.0",
+        "rbush": "^4.0.0",
+        "topojson-client": "^3.1.0",
+        "urijs": "^1.19.7"
+      }
+    },
+    "@cesium/widgets": {
+      "version": "8.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@cesium/widgets/-/widgets-8.0.0.tgz",
+      "integrity": "sha512-Rnid5BbLBZjwFdbr3lgOwK3fhql/BeEbf5l9ZZE+Zc7V8Fb6wgKM8QmrL+bbJ+BtuiELp+SkNxcF97Ktifxb4g==",
+      "requires": {
+        "@cesium/engine": "^11.0.0",
+        "nosleep.js": "^0.12.0"
+      }
+    },
     "@ctrl/tinycolor": {
       "version": "3.6.1",
       "resolved": "https://mirrors.huaweicloud.com/repository/npm/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
@@ -8620,6 +8951,60 @@
       "resolved": "https://mirrors.huaweicloud.com/repository/npm/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
       "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
     },
+    "@protobufjs/aspromise": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+      "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
+    },
+    "@protobufjs/base64": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/base64/-/base64-1.1.2.tgz",
+      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+    },
+    "@protobufjs/codegen": {
+      "version": "2.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+    },
+    "@protobufjs/eventemitter": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+      "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
+    },
+    "@protobufjs/fetch": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+      "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+      "requires": {
+        "@protobufjs/aspromise": "^1.1.1",
+        "@protobufjs/inquire": "^1.1.0"
+      }
+    },
+    "@protobufjs/float": {
+      "version": "1.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/float/-/float-1.0.2.tgz",
+      "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
+    },
+    "@protobufjs/inquire": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+      "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
+    },
+    "@protobufjs/path": {
+      "version": "1.1.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/path/-/path-1.1.2.tgz",
+      "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
+    },
+    "@protobufjs/pool": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/pool/-/pool-1.1.0.tgz",
+      "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
+    },
+    "@protobufjs/utf8": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+      "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
+    },
     "@sideway/address": {
       "version": "4.1.5",
       "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz",
@@ -8665,6 +9050,11 @@
       "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
       "dev": true
     },
+    "@tweenjs/tween.js": {
+      "version": "25.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
+      "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A=="
+    },
     "@types/body-parser": {
       "version": "1.19.5",
       "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz",
@@ -8809,7 +9199,6 @@
       "version": "20.14.10",
       "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.10.tgz",
       "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
-      "dev": true,
       "requires": {
         "undici-types": "~5.26.4"
       }
@@ -9426,6 +9815,11 @@
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
       "dev": true
     },
+    "@zip.js/zip.js": {
+      "version": "2.7.52",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@zip.js/zip.js/-/zip.js-2.7.52.tgz",
+      "integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q=="
+    },
     "accepts": {
       "version": "1.3.8",
       "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz",
@@ -9481,14 +9875,15 @@
       "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz",
       "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
       "dev": true,
-      "requires": {},
+      "requires": {
+        "ajv": "^8.0.0"
+      },
       "dependencies": {
         "ajv": {
-          "version": "https://registry.npmmirror.com/ajv/-/ajv-8.16.0.tgz",
+          "version": "8.16.0",
+          "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.16.0.tgz",
           "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==",
           "dev": true,
-          "optional": true,
-          "peer": true,
           "requires": {
             "fast-deep-equal": "^3.1.3",
             "json-schema-traverse": "^1.0.0",
@@ -9500,9 +9895,7 @@
           "version": "1.0.0",
           "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
           "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-          "dev": true,
-          "optional": true,
-          "peer": true
+          "dev": true
         }
       }
     },
@@ -9599,6 +9992,14 @@
       "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
       "dev": true
     },
+    "autolinker": {
+      "version": "4.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/autolinker/-/autolinker-4.0.0.tgz",
+      "integrity": "sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==",
+      "requires": {
+        "tslib": "^2.3.0"
+      }
+    },
     "autoprefixer": {
       "version": "10.4.19",
       "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.19.tgz",
@@ -9653,6 +10054,11 @@
       "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
       "dev": true
     },
+    "bitmap-sdf": {
+      "version": "1.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
+      "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg=="
+    },
     "bl": {
       "version": "4.1.0",
       "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
@@ -9835,6 +10241,15 @@
       "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
       "dev": true
     },
+    "cesium": {
+      "version": "1.121.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/cesium/-/cesium-1.121.1.tgz",
+      "integrity": "sha512-WpdaGFd8qCOHiE9khV0sWWjCMXAX1U9Aou8MzMC/F0Akp6YqcOk4HLk4LLhZKeOjO/Bh27iTIW2mxEZ5+dtCxg==",
+      "requires": {
+        "@cesium/engine": "^11.0.0",
+        "@cesium/widgets": "^8.0.0"
+      }
+    },
     "chalk": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz",
@@ -10625,6 +11040,11 @@
         "domelementtype": "^2.2.0"
       }
     },
+    "dompurify": {
+      "version": "3.1.6",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/dompurify/-/dompurify-3.1.6.tgz",
+      "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ=="
+    },
     "domutils": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz",
@@ -10658,12 +11078,22 @@
       "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
       "dev": true
     },
+    "draco3d": {
+      "version": "1.5.7",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/draco3d/-/draco3d-1.5.7.tgz",
+      "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="
+    },
     "duplexer": {
       "version": "0.1.2",
       "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz",
       "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
       "dev": true
     },
+    "earcut": {
+      "version": "3.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/earcut/-/earcut-3.0.0.tgz",
+      "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg=="
+    },
     "easy-stack": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz",
@@ -11228,6 +11658,11 @@
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
       "dev": true
     },
+    "grapheme-splitter": {
+      "version": "1.0.4",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
+    },
     "gzip-size": {
       "version": "6.0.0",
       "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz",
@@ -11706,6 +12141,11 @@
       "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
       "dev": true
     },
+    "jsep": {
+      "version": "1.3.9",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/jsep/-/jsep-1.3.9.tgz",
+      "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw=="
+    },
     "json-parse-better-errors": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -11743,6 +12183,11 @@
         "universalify": "^2.0.0"
       }
     },
+    "kdbush": {
+      "version": "4.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/kdbush/-/kdbush-4.0.2.tgz",
+      "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="
+    },
     "kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz",
@@ -11755,6 +12200,11 @@
       "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
       "dev": true
     },
+    "ktx-parse": {
+      "version": "0.7.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/ktx-parse/-/ktx-parse-0.7.1.tgz",
+      "integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ=="
+    },
     "launch-editor": {
       "version": "2.8.0",
       "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.8.0.tgz",
@@ -11774,6 +12224,11 @@
         "launch-editor": "^2.8.0"
       }
     },
+    "lerc": {
+      "version": "2.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/lerc/-/lerc-2.0.0.tgz",
+      "integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg=="
+    },
     "less": {
       "version": "4.2.0",
       "resolved": "https://registry.npmmirror.com/less/-/less-4.2.0.tgz",
@@ -11989,6 +12444,11 @@
         }
       }
     },
+    "long": {
+      "version": "5.2.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/long/-/long-5.2.3.tgz",
+      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+    },
     "lower-case": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
@@ -12088,6 +12548,16 @@
       "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "dev": true
     },
+    "mersenne-twister": {
+      "version": "1.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/mersenne-twister/-/mersenne-twister-1.1.0.tgz",
+      "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA=="
+    },
+    "meshoptimizer": {
+      "version": "0.21.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/meshoptimizer/-/meshoptimizer-0.21.0.tgz",
+      "integrity": "sha512-WabtlpnK/GgD0GMwYd1fBTfYHf4MIcQPEg6dt7y4GuDcY51RzLSkSNE8ZogD7U3Vs2/fIf4z89TOLpA80EOnhg=="
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz",
@@ -12386,6 +12856,11 @@
       "resolved": "https://mirrors.huaweicloud.com/repository/npm/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
       "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
     },
+    "nosleep.js": {
+      "version": "0.12.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/nosleep.js/-/nosleep.js-0.12.0.tgz",
+      "integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA=="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -12541,6 +13016,11 @@
       "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true
     },
+    "pako": {
+      "version": "2.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/pako/-/pako-2.1.0.tgz",
+      "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
+    },
     "param-case": {
       "version": "3.0.4",
       "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz",
@@ -13111,6 +13591,25 @@
         }
       }
     },
+    "protobufjs": {
+      "version": "7.4.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/protobufjs/-/protobufjs-7.4.0.tgz",
+      "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
+      "requires": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/node": ">=13.7.0",
+        "long": "^5.0.0"
+      }
+    },
     "proxy-addr": {
       "version": "2.0.7",
       "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -13178,6 +13677,11 @@
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
       "dev": true
     },
+    "quickselect": {
+      "version": "3.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/quickselect/-/quickselect-3.0.0.tgz",
+      "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g=="
+    },
     "randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
@@ -13213,6 +13717,14 @@
         }
       }
     },
+    "rbush": {
+      "version": "4.0.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/rbush/-/rbush-4.0.1.tgz",
+      "integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==",
+      "requires": {
+        "quickselect": "^3.0.0"
+      }
+    },
     "read-pkg": {
       "version": "5.2.0",
       "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -13947,6 +14459,21 @@
       "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
       "dev": true
     },
+    "topojson-client": {
+      "version": "3.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/topojson-client/-/topojson-client-3.1.0.tgz",
+      "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+      "requires": {
+        "commander": "2"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/commander/-/commander-2.20.3.tgz",
+          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+        }
+      }
+    },
     "totalist": {
       "version": "3.0.1",
       "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz",
@@ -13962,8 +14489,7 @@
     "tslib": {
       "version": "2.6.3",
       "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
-      "dev": true
+      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
     },
     "type-fest": {
       "version": "0.6.0",
@@ -13984,8 +14510,7 @@
     "undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
-      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
-      "dev": true
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
     },
     "universalify": {
       "version": "2.0.1",
@@ -14018,6 +14543,11 @@
         "punycode": "^2.1.0"
       }
     },
+    "urijs": {
+      "version": "1.19.11",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/urijs/-/urijs-1.19.11.tgz",
+      "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
+    },
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",

+ 1 - 0
package.json

@@ -8,6 +8,7 @@
   },
   "dependencies": {
     "axios": "^1.7.7",
+    "cesium": "^1.121.1",
     "dayjs": "^1.11.6",
     "element-plus": "^2.8.2",
     "vue": "^3.2.13",

+ 86 - 65
src/components/Edge.vue

@@ -6,8 +6,7 @@
         :key="index"
         :value="'' + index + 1"
         @change="change(item)"
-        >{{ item.label }}</el-radio
-      >
+      >{{ item.label }}</el-radio>
     </el-radio-group>
     <el-switch
       v-model="elSwitchValue"
@@ -15,12 +14,7 @@
       style="--el-switch-on-color: #409eff; --el-switch-off-color: #ff4949"
       @change="elSwitchChange"
     />
-    <el-dialog
-      v-if="from != null"
-      v-model="dialogFormVisible"
-      title="详细信息"
-      width="500"
-    >
+    <el-dialog v-if="from != null" v-model="dialogFormVisible" title="详细信息" width="500">
       <div class="info_container">
         <el-form :model="form">
           <el-form-item
@@ -28,8 +22,7 @@
             :key="key"
             :label="key"
             :label-width="'120px'"
-            >{{ value }}</el-form-item
-          >
+          >{{ value }}</el-form-item>
         </el-form>
       </div>
 
@@ -40,8 +33,7 @@
               dialogFormVisible = false;
               from = null;
             "
-            >关闭</el-button
-          >
+          >关闭</el-button>
         </div>
       </template>
     </el-dialog>
@@ -62,9 +54,9 @@ export default {
               outerColor: "#ffee00",
               outerWidth: 5,
               innerColor: "#00c4ff",
-              alpha: 0.5,
-            },
-          },
+              alpha: 0.5
+            }
+          }
         },
         {
           label: "村居",
@@ -74,9 +66,9 @@ export default {
               outerColor: "#ffee00",
               outerWidth: 3,
               innerColor: "#00c4ff",
-              alpha: 0.5,
-            },
-          },
+              alpha: 0.5
+            }
+          }
         },
         {
           label: "责任网格",
@@ -86,9 +78,9 @@ export default {
               outerColor: "#ffee00",
               outerWidth: 3,
               innerColor: "#00c4ff",
-              alpha: 0.5,
-            },
-          },
+              alpha: 0.5
+            }
+          }
         },
         {
           label: "微网格",
@@ -98,21 +90,21 @@ export default {
               outerColor: "#ffee00",
               outerWidth: 3,
               innerColor: "#00c4ff",
-              alpha: 0.5,
-            },
-          },
-        },
+              alpha: 0.5
+            }
+          }
+        }
       ],
       elSwitchValue: false,
 
       from: null,
-      dialogFormVisible: false,
+      dialogFormVisible: false
     };
   },
   mounted() {
     window.edgeQJ = {
       geojsonDataSource: null,
-      edgeEntity: null,
+      edgeEntity: null
     };
   },
   methods: {
@@ -126,50 +118,71 @@ export default {
       this.radio == "0";
       if (status) {
         this.show();
-        this.openClick();
+        // this.openClick();
       } else {
         this.hide();
-        this.closeClick();
+        // this.closeClick();
       }
     },
 
     show() {
       if (edgeQJ.geojsonDataSource) edgeQJ.geojsonDataSource.show = true;
+      if (edgeQJ.lineEntityCollection) edgeQJ.lineEntityCollection.show = true;
       if (edgeQJ.edgeEntity) edgeQJ.edgeEntity.show = true;
     },
     hide() {
       if (edgeQJ.geojsonDataSource) edgeQJ.geojsonDataSource.show = false;
+      if (edgeQJ.lineEntityCollection) edgeQJ.lineEntityCollection.show = false;
       if (edgeQJ.edgeEntity) edgeQJ.edgeEntity.show = false;
     },
     remove() {
       if (edgeQJ.geojsonDataSource != null) {
+        viewer.dataSources.remove(edgeQJ.geojsonDataSource);
+        edgeQJ.geojsonDataSource = null;
+      }
+      if (edgeQJ.lineEntityCollection != null) {
+        // viewer.dataSources.remove(edgeQJ.geojsonDataSource);
+        edgeQJ.lineEntityCollection.values.map(function(item) {
+          viewer.entities.remove(viewer.entities.getById(item._id));
+        });
+        edgeQJ.lineEntityCollection.removeAll();
+        edgeQJ.lineEntityCollection = null;
       }
-      viewer.dataSources.remove(edgeQJ.geojsonDataSource);
-      edgeQJ.geojsonDataSource = null;
     },
     openClick() {
       let that = this;
       if (edgeQJ.handler) return;
       // 绑定点击事件
       edgeQJ.handler = new SkyScenery.ScreenSpaceEventHandler(viewer.canvas);
-      edgeQJ.handler.setInputAction(function (movement) {
+      edgeQJ.handler.setInputAction(function(movement) {
         var pick = viewer.scene.pick(movement.position); // 拾取鼠标所在的entity
         if (SkyScenery.defined(pick)) {
           let entity = pick.id;
           if (!entity) return;
           if (entity.type && entity.type == "edge") {
-            let properties = entity.properties.getValue();
-            console.log(properties);
-            that.from = properties;
-            that.dialogFormVisible = true;
-            // openEntityPropertiesDialog(properties, entity.layerId);
+            let cartesian = viewer.camera.pickEllipsoid(
+              movement.position,
+              viewer.scene.globe.ellipsoid
+            );
+            // 空间坐标转世界坐标(弧度)
+            if (!cartesian) return;
+            let cartographic = SkyScenery.Cartographic.fromCartesian(cartesian);
+            if (!cartographic) return;
+            // 弧度转为角度(经纬度)
+            let lon = SkyScenery.Math.toDegrees(cartographic.longitude); // 经度值
+            let lat = SkyScenery.Math.toDegrees(cartographic.latitude); // 纬度值
+            let showEntity = SkyScenery.Cartesian3.fromDegrees(lon, lat);
+            showEntity.data = entity.properties.getValue();
+            that.$store.state.showEntity = showEntity;
           }
         }
       }, SkyScenery.ScreenSpaceEventType.LEFT_CLICK);
     },
     closeClick() {
       if (edgeQJ.handler) {
-        edgeQJ.handler.removeInputAction(SkyScenery.ScreenSpaceEventType.LEFT_CLICK);
+        edgeQJ.handler.removeInputAction(
+          SkyScenery.ScreenSpaceEventType.LEFT_CLICK
+        );
         edgeQJ.handler = null;
       }
       this.dialogFormVisible = false;
@@ -194,8 +207,15 @@ export default {
       //     alpha: 0.7
       //   }
       // };
-      SkyScenery.GeoJsonDataSource.load(url).then(function (dataSource) {
+      SkyScenery.GeoJsonDataSource.load(url, {
+        clampToGround: true
+      }).then(function(dataSource) {
         var entities = dataSource.entities.values;
+        viewer.dataSources.add(dataSource);
+        edgeQJ.geojsonDataSource = dataSource;
+
+        let lineEntityCollection = new SkyScenery.EntityCollection();
+
         for (var i = 0; i < entities.length; i++) {
           var entity = entities[i];
           //   if (entity.billboard) {
@@ -215,14 +235,6 @@ export default {
           //     ).withAlpha(options.polyline.alpha); // 颜色
           //   }
           if (entity.polygon) {
-            // viewer.scene.globe.depthTestAgainstTerrain = true; //深度检测
-            entity.polygon.heightReference = SkyScenery.HeightReference.CLAMP_TO_GROUND;
-            // entity.polygon.extrudedHeightReference =
-            //     SkyScenery.HeightReference.CLAMP_TO_GROUND;
-            // SkyScenery.HeightReference.NONE;
-            entity.polygon.perPositionHeight = true;
-            // entity.polygon.zIndex = 2;
-
             // entity.polygon.height = 6;
             // entity.polygon.outline = true; // 边框是否显示
             // entity.polygon.outlineColor = SkyScenery.Color.fromCssColorString(
@@ -232,32 +244,41 @@ export default {
             // entity.polygon.material = SkyScenery.Color.fromCssColorString(
             //   options.polygon.innerColor
             // ).withAlpha(options.polygon.alpha); // 填充色
+            // entity.polygon.zIndex = 99;
+
+            let line = viewer.entities.add({
+              polyline: {
+                positions: entity.polygon.hierarchy._value.positions,
+                width: 2,
+                material: SkyScenery.Color.fromCssColorString("#fff200"),
+                clampToGround: true, // 这个是线覆盖模型的关键
+                zIndex: 1000, // 这个是层级,但是必须clampToGround: true
+                show: true
+              }
+            });
+            lineEntityCollection.add(line);
 
-            // entity.polygon.outline = true;
-            // entity.polygon.outlineWidth = 5; // 边框宽度
-            // entity.polygon.height = 5;
-            // entity.polygon.material = new SkyScenery.ImageMaterialProperty({
-            //   image: "/static/image/b2.png", // 图片路径
-            //   transparent: true // 是否透明
-            // });
+            entity.polygon.material = new SkyScenery.ImageMaterialProperty({
+              image: "/static/image/b2.png", // 图片路径
+              transparent: true // 是否透明
+            });
           }
           entity.type = "edge";
         }
-        viewer.dataSources.add(dataSource);
-        edgeQJ.geojsonDataSource = dataSource;
+        edgeQJ.lineEntityCollection = lineEntityCollection;
       });
     },
 
     addWall() {
       let that = this;
       fetch("./static/data/bianjie/西虹桥边界数据.geojson")
-        .then((resp) => resp.json())
-        .then((data) => {
+        .then(resp => resp.json())
+        .then(data => {
           let positions = data.features[0].geometry.coordinates[0];
           edgeQJ.edgeEntity = that.addDynamicWall(positions, {
             maxH: 150,
             color: "#0060fc",
-            duration: 3000,
+            duration: 3000
           });
         });
     },
@@ -274,7 +295,7 @@ export default {
       return viewer.entities.add({
         name: "立体墙效果",
         wall: {
-          positions: positions.map(function (item) {
+          positions: positions.map(function(item) {
             return SkyScenery.Cartesian3.fromDegrees(item[0], item[1]);
           }),
           // 设置高度
@@ -283,12 +304,12 @@ export default {
           material: new SkyScenery.DynamicWallMaterialProperty({
             color: SkyScenery.Color.fromCssColorString(options.color), // "#"
             trailImage: "/static/image/color.png",
-            duration: options.duration || 3000, // 3000
-          }),
-        },
+            duration: options.duration || 3000 // 3000
+          })
+        }
       });
-    },
-  },
+    }
+  }
 };
 </script>
 

+ 38 - 43
src/components/Layers.vue

@@ -3,11 +3,7 @@
     <div class="title">重点图层</div>
     <div>
       <el-row v-for="(item, index) in arr" :key="index">
-        <el-checkbox
-          v-model="item.added"
-          :label="item.label"
-          @change="addedChange(item)"
-        />
+        <el-checkbox v-model="item.added" :label="item.label" @change="addedChange(item)" />
         <el-switch
           v-model="item.show"
           class="ml-2"
@@ -31,8 +27,7 @@
             :key="key"
             :label="key"
             :label-width="'120px'"
-            >{{ value }}</el-form-item
-          >
+          >{{ value }}</el-form-item>
         </el-form>
       </div>
 
@@ -43,8 +38,7 @@
               dialogFormVisible = false;
               from = null;
             "
-            >关闭</el-button
-          >
+          >关闭</el-button>
         </div>
       </template>
     </el-dialog>
@@ -60,48 +54,48 @@ export default {
         url: "./static/data/西虹桥公立学校.geojson",
         style: {
           point: {
-            imgUrl: "/static/image/layer/point.png",
-          },
-        },
+            imgUrl: "/static/image/layer/point.png"
+          }
+        }
       },
       {
         label: "私立学校",
         url: "./static/data/西虹桥私立学校.geojson",
         style: {
           point: {
-            imgUrl: "/static/image/layer/point.png",
-          },
-        },
+            imgUrl: "/static/image/layer/point.png"
+          }
+        }
       },
       {
         label: "公立医院",
         url: "./static/data/西虹桥公立医疗.geojson",
         style: {
           point: {
-            imgUrl: "/static/image/layer/point.png",
-          },
-        },
+            imgUrl: "/static/image/layer/point.png"
+          }
+        }
       },
       {
         label: "私立医院",
         url: "./static/data/西虹区民营医疗.geojson",
         style: {
           point: {
-            imgUrl: "/static/image/layer/point.png",
-          },
-        },
+            imgUrl: "/static/image/layer/point.png"
+          }
+        }
       },
       {
         label: "养老机构",
         url: "./static/data/西虹桥养老机构.geojson",
         style: {
           point: {
-            imgUrl: "/static/image/layer/point.png",
-          },
-        },
-      },
+            imgUrl: "/static/image/layer/point.png"
+          }
+        }
+      }
     ];
-    arr = arr.map(function (item, index) {
+    arr = arr.map(function(item, index) {
       item.id = "layer" + index;
       item.added = false;
       item.show = true;
@@ -110,12 +104,12 @@ export default {
     return {
       arr: arr,
       from: null,
-      dialogFormVisible: false,
+      dialogFormVisible: false
     };
   },
   mounted() {
     window.layerQJ = {
-      geojsonDataSource: {},
+      geojsonDataSource: {}
     };
   },
   methods: {
@@ -150,16 +144,17 @@ export default {
       if (layerQJ.handler) return;
       // 绑定点击事件
       layerQJ.handler = new SkyScenery.ScreenSpaceEventHandler(viewer.canvas);
-      layerQJ.handler.setInputAction(function (movement) {
+      layerQJ.handler.setInputAction(function(movement) {
         var pick = viewer.scene.pick(movement.position); // 拾取鼠标所在的entity
         if (SkyScenery.defined(pick)) {
           let entity = pick.id;
           if (!entity) return;
           if (entity.type && entity.type == "layers") {
-            let properties = entity.properties.getValue();
-            console.log(properties);
-            that.from = properties;
-            that.dialogFormVisible = true;
+            // let properties = entity.properties.getValue();
+            that.$store.state.showEntity = entity;
+            // console.log(properties);
+            // that.from = properties;
+            // that.dialogFormVisible = true;
             // openEntityPropertiesDialog(properties, entity.layerId);
           }
         }
@@ -195,7 +190,7 @@ export default {
       //     alpha: 0.7
       //   }
       // };
-      SkyScenery.GeoJsonDataSource.load(url).then(function (dataSource) {
+      SkyScenery.GeoJsonDataSource.load(url).then(function(dataSource) {
         viewer.dataSources.add(dataSource);
         layerQJ.geojsonDataSource[id] = dataSource;
         var entities = dataSource.entities.values;
@@ -205,10 +200,10 @@ export default {
             entity.billboard = undefined;
             entity.billboard = new SkyScenery.BillboardGraphics({
               image: options.point.imgUrl,
-              width: 50,
-              height: 50,
+              width: 48,
+              height: 48,
               pixelOffset: new SkyScenery.Cartesian2(0, -25),
-              heightReference: SkyScenery.HeightReference.CLAMP_TO_GROUND,
+              heightReference: SkyScenery.HeightReference.CLAMP_TO_GROUND
             });
           }
           if (entity.polyline) {
@@ -232,24 +227,24 @@ export default {
             entity.polygon.height = 5;
             entity.polygon.material = new SkyScenery.ImageMaterialProperty({
               image: "/static/image/b2.png", // 图片路径
-              transparent: true, // 是否透明
+              transparent: true // 是否透明
             });
           }
           entity.type = "layers";
         }
       });
-    },
+    }
   },
   computed: {
     mapStatus() {
       return this.$store.state.initMap;
-    },
+    }
   },
   watch: {
     mapStatus(newVal, oldVal) {
-      if (newVal) this.openClick();
-    },
-  },
+      // if (newVal) this.openClick();
+    }
+  }
 };
 </script>
 

+ 63 - 105
src/components/Map.vue

@@ -1,10 +1,16 @@
 <template>
-  <div id="skysceneryContainer"></div>
+  <div id="skysceneryContainer">
+    <Popup />
+  </div>
 </template>
 
 <script>
+import Popup from "@/components/Popup.vue";
 export default {
   name: "Map",
+  components: {
+    Popup,
+  },
   data() {
     return {
       // viewer3DTiles实例《systemConfig.data3DTiles keys,tile》
@@ -106,6 +112,8 @@ export default {
               ctx.fillRect(0, 0, width, height);
               return canvas.toDataURL();
             })("#ffffff00"),
+            tileWidth: document.createElement("canvas").width,
+            tileHeight: document.createElement("canvas").height,
             rectangle: SkyScenery.Rectangle.fromDegrees(-180.0, -90.0, 180.0, 90.0),
           }),
           fullscreenButton: false, //是否显示全屏按钮
@@ -119,6 +127,9 @@ export default {
           scene3DOnly: true, //如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
           infoBox: false, //是否显示点击要素之后显示的信息
           shouldAnimate: false, //是否自动播放
+          // contextOptions: {
+          //   requestWebgl1: true
+          // }
         });
         setTimeout(() => {
           // 根据配置文件中的配置信息加载底图
@@ -143,104 +154,38 @@ export default {
           });
 
           this.$store.commit("createdMap", true);
+
+          // 绑定点击事件
+          let handler = new SkyScenery.ScreenSpaceEventHandler(viewer.canvas);
+          handler.setInputAction(function (movement) {
+            var pick = viewer.scene.pick(movement.position); // 拾取鼠标所在的entity
+            if (SkyScenery.defined(pick)) {
+              let entity = pick.id;
+              if (!entity) return;
+              if (entity.type && (entity.type == "layers" || entity.type == "edge")) {
+                let cartesian = viewer.camera.pickEllipsoid(
+                  movement.position,
+                  viewer.scene.globe.ellipsoid
+                );
+                // 空间坐标转世界坐标(弧度)
+                if (!cartesian) return;
+                let cartographic = SkyScenery.Cartographic.fromCartesian(cartesian);
+                if (!cartographic) return;
+                // 弧度转为角度(经纬度)
+                let lon = SkyScenery.Math.toDegrees(cartographic.longitude); // 经度值
+                let lat = SkyScenery.Math.toDegrees(cartographic.latitude); // 纬度值
+                let showEntity = SkyScenery.Cartesian3.fromDegrees(lon, lat);
+                showEntity.data = entity.properties.getValue();
+                that.$store.state.showEntity = showEntity;
+              } else {
+              }
+            } else {
+              that.$store.state.showEntity = null;
+            }
+          }, SkyScenery.ScreenSpaceEventType.LEFT_CLICK);
+
           return;
         }, 0);
-        // viewer.entities.add({
-        //   name: "点",
-        //   position: SkyScenery.Cartesian3.fromDegrees(121.1, 31), //经纬度转世界坐标
-        //   point: {
-        //     show: true,
-        //     color: SkyScenery.Color.GREEN,
-        //     pixelSize: 20,
-        //     outlineColor: SkyScenery.Color.YELLOW,
-        //     outlineWidth: 3,
-        //   },
-        //   label: {
-        //     text: "这里是标签", //设置文字内容
-        //     font: "normal 18px 楷体", //设置文字大小和字体
-        //     fillColor: SkyScenery.Color.fromCssColorString("#00ff00"), //设置文字填充的颜色
-        //     horizontalOrigin: SkyScenery.HorizontalOrigin.CENTER,
-        //     verticalOrigin: SkyScenery.VerticalOrigin.BOTTOM,
-        //     pixelOffset: new SkyScenery.Cartesian2(0, -20),
-        //   },
-        // });
-        // viewer.entities.add({
-        //   position: SkyScenery.Cartesian3.fromDegrees(121.2, 31),
-        //   billboard: {
-        //     image: "/static/image/point.png",
-        //     width: 48, // default: undefined
-        //     height: 48, // default: undefined
-        //     scale: 1.0, // default: 1.0
-        //     show: true, // default
-        //     horizontalOrigin: SkyScenery.HorizontalOrigin.CENTER, // default
-        //     verticalOrigin: SkyScenery.VerticalOrigin.BOTTOM, // default: CENTER
-        //   },
-        //   label: {
-        //     text: "这是自定义图片", // 设置文字内容
-        //     font: "normal 18px 楷体", // 设置文字大小和字体
-        //     fillColor: SkyScenery.Color.fromCssColorString("#00ff00"), //设置文字填充的颜色
-        //     horizontalOrigin: SkyScenery.HorizontalOrigin.CENTER,
-        //     verticalOrigin: SkyScenery.VerticalOrigin.BOTTOM,
-        //     pixelOffset: new SkyScenery.Cartesian2(0, -50),
-        //   },
-        // });
-        // let positions = [
-        //   [121.04829640102727, 31.12735759260756],
-        //   [121.05219953077487, 31.126058264888133],
-        //   [121.0556573133586, 31.125143117515066],
-        //   [121.0585577885634, 31.12489903339664],
-        //   [121.05855842602281, 31.117437091290032],
-        //   [121.05755469646111, 31.116865171387122],
-        //   [121.05855867110577, 31.114567660254956],
-        //   [121.05716503781966, 31.111412856109656],
-        //   [121.05169919616742, 31.109414349328368],
-        //   [121.04846566530048, 31.10731617798831],
-        //   [121.04523257218045, 31.105074455848328],
-        //   [121.04372646220537, 31.108713847196935],
-        //   [121.04238895034425, 31.11239990163383],
-        //   [121.04216536839769, 31.11503097997496],
-        //   [121.03965751482633, 31.117141773623022],
-        //   [121.0392664980893, 31.119247569299414],
-        //   [121.0401584271992, 31.124267692010815],
-        //   [121.04534263782213, 31.124207732078528],
-        //   [121.04813004860797, 31.124919266167907],
-        //   [121.04829640102727, 31.12735759260756],
-        // ];
-        // viewer.entities.add({
-        //   name: "立体墙效果",
-        //   wall: {
-        //     positions: positions.map(function (item) {
-        //       return SkyScenery.Cartesian3.fromDegrees(item[0], item[1]);
-        //     }),
-        //     // 设置高度
-        //     maximumHeights: new Array(positions.length).fill(100),
-        //     minimumHeights: new Array(positions.length).fill(0),
-        //     material: new SkyScenery.DynamicWallMaterialProperty({
-        //       color: SkyScenery.Color.fromCssColorString("#00c4ff80"),
-        //       trailImage: "/static/image/color.png",
-        //       duration: 3000,
-        //     }),
-        //   },
-        // });
-        // viewer.entities.add({
-        //   name: " 面",
-        //   polygon: {
-        //     hierarchy: {
-        //       positions: SkyScenery.Cartesian3.fromDegreesArray(
-        //         positions
-        //           .join(",")
-        //           .split(",")
-        //           .map(function (num) {
-        //             return Number(num);
-        //           })
-        //       ),
-        //     },
-        //     material: new SkyScenery.ImageMaterialProperty({
-        //       image: "/static/image/b2.png", // 图片路径
-        //       transparent: true, // 是否透明
-        //     }),
-        //   },
-        // });
       } catch (error) {
         console.log("createMap error:", error);
         window.location.reload();
@@ -252,7 +197,7 @@ export default {
      * @author LiuMengxiang
      * 加载影像底图和影像注记
      */
-    loadTheWorldMapImage(url) {
+    async loadTheWorldMapImage(url) {
       // if (url.indexOf("//t0.") != -1) {
       //   url = url.replace("//t0.", "//t{s}.");
       // }
@@ -272,12 +217,14 @@ export default {
       //     maximumLevel: 18
       //   })
       // );
-      viewer.imageryLayers.addImageryProvider(
-        new SkyScenery.ArcGisMapServerImageryProvider({
-          url:
-            "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
-        })
-      );
+      // let layer = await SkyScenery.ArcGisMapServerImageryProvider.fromUrl(
+      //   "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer"
+      // );
+      let layer = new SkyScenery.ArcGisMapServerImageryProvider({
+        url:
+          "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
+      });
+      viewer.imageryLayers.addImageryProvider(layer);
     },
 
     // 加载geojson数据
@@ -369,7 +316,7 @@ export default {
      * @param {*} url 3Dtiles的systemConfig.data3DTiles keys
      * @param {*} flyto 是否自动飞行到3Dtiles
      */
-    add3DTiles(keys, flyto) {
+    async add3DTiles(keys, flyto) {
       let that = this;
       if (this.viewer3DTiles[keys]) {
         this.viewer3DTiles[keys].show = true;
@@ -385,11 +332,22 @@ export default {
           maximumScreenSpaceError: 16,
           maximumNumberOfLoadedTiles: 2000,
         };
+
+        // Common settings for the dynamicScreenSpaceError optimization
+        // const tile = await SkyScenery.Cesium3DTileset.fromUrl(
+        //   this.keysByOptions[keys].url + "/tileset.json",
+        //   option
+        // );
         var tile = new SkyScenery.Cesium3DTileset(option);
         // 可以通过viewer.scene来访问场景对象进行进一步设置
         viewer.scene.postProcessStages.fxaa.enabled = true; // 启用FXAA(快速近似抗锯齿)
         viewer.scene.primitives.add(tile);
 
+        // // 设置相机视角
+        // if (flyto) {
+        //   viewer.zoomTo(tile);
+        // }
+
         tile.readyPromise.then(function () {
           // 设置相机视角
           if (flyto) {

+ 212 - 0
src/components/Popup.vue

@@ -0,0 +1,212 @@
+
+<template>
+  <div class="divlabel-container" id="stateShow" v-show="isShow">
+    <div class="animate-maker-border">
+      <div class="animate-marker__text" id="popup_content" v-html="desc"></div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      isShow: false,
+      desc: "",
+      first: true,
+      gisPosition: null
+    };
+  },
+  // props: {
+  //   // entity: {
+  //   //   type: Object
+  //   // },
+  //   // data: {
+  //   //   type: Object
+  //   // }
+  // },
+  methods: {
+    openPopup(entity, data) {
+      // console.log(new Date().getTime());
+
+      let that = this;
+      //经纬度转为世界坐标
+      this.gisPosition = entity;
+      // if (entity.position) {
+      //   // gisPosition = entity.position.getValue();
+      //   gisPosition = entity;
+      // } else {
+      //   // let point1 = d(entity.polyline.positions._value[0]);
+      //   // let point2 = d(entity.polyline.positions._value[1]);
+      //   // gisPosition = SkyScenery.Cartesian3.fromDegrees(
+      //   //   (point1.lng + point2.lng) / 2,
+      //   //   (point1.lat + point2.lat) / 2,
+      //   //   0
+      //   // );
+      //   function d(cartesian3) {
+      //     var cartographic =
+      //       viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3);
+      //     var lat = SkyScenery.Math.toDegrees(cartographic.latitude);
+      //     var lng = SkyScenery.Math.toDegrees(cartographic.longitude);
+      //     return {
+      //       lng: lng,
+      //       lat: lat,
+      //     };
+      //   }
+      // }
+      if (that.gisPosition == null) throw new Error("popup location is error");
+
+      //   document.getElementById("stateShow").style.display = "block"; //弹出信息框
+      // document.getElementById("popup_title").innerHTML = data.name;
+      //   document.getElementById("popup_content").innerHTML = data.html || "";
+      this.isShow = true;
+      let html = "";
+      let properties = entity.data
+      for (const key in properties) {
+        if (Object.prototype.hasOwnProperty.call(properties, key)) {
+          html += `<div>${key}: ${properties[key]}</div>`;
+        }
+      }
+      this.desc = html;
+
+      if (this.first) {
+        //实时更新位置
+        viewer.scene.postRender.addEventListener(() => {
+          if (!that.isShow) return;
+          // console.log(new Date().getTime());
+          //转化为屏幕坐标
+          var windowPosition = SkyScenery.SceneTransforms.wgs84ToWindowCoordinates(
+            viewer.scene,
+            that.gisPosition
+          );
+          if (windowPosition == undefined) {
+            document.getElementById("stateShow").style.display = "none";
+            return;
+          }
+          document.getElementById("stateShow").style.left =
+            windowPosition.x - 150 + "px";
+          document.getElementById("stateShow").style.top =
+            windowPosition.y - 260 + "px";
+          document.getElementById("stateShow").style.display = "block";
+          //解决滚动不隐藏问题
+          const camerPosition = viewer.camera.position;
+          let height = viewer.scene.globe.ellipsoid.cartesianToCartographic(
+            camerPosition
+          ).height;
+          height += viewer.scene.globe.ellipsoid.maximumRadius;
+          if (
+            !(
+              SkyScenery.Cartesian3.distance(camerPosition, that.gisPosition) >
+              height
+            ) &&
+            viewer.camera.positionCartographic.height < 50000000
+          ) {
+            // document.getElementById("stateShow").style.display = "block";
+            that.isShow = true;
+          } else {
+            // document.getElementById("stateShow").style.display = "none";
+            that.isShow = false;
+          }
+        });
+        this.first = false;
+      }
+    },
+    closePopup() {
+      this.isShow = false;
+      this.desc = "";
+      this.gisPosition = null;
+      this.$store.state.showEntity = null;
+      // document.getElementById("popup_content").innerHTML = "";
+    }
+  },
+  computed: {
+    entity() {
+      return this.$store.state.showEntity;
+    }
+  },
+  watch: {
+    entity(newVal, oldVal) {
+      if (newVal == null) {
+        this.closePopup();
+      } else {
+        this.openPopup(newVal);
+      }
+    }
+  }
+};
+</script>
+
+<style lang="less" scoped>
+#stateShow {
+  position: absolute;
+  z-index: 1;
+  background: #ffffff;
+  left: -1000px;
+  top: -1000px;
+  .animate-maker-border,
+  .animate-maker-border::before,
+  .animate-maker-border::after {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+  }
+  .animate-maker-border {
+    width: 300px;
+    height: 200px;
+
+    margin: 0;
+    color: #69ca62;
+    box-shadow: inset 0 0 0 1px rgba(105, 202, 98, 0.5);
+    padding: 5px;
+    box-sizing: border-box;
+    // background: rgba(0, 173, 181, 0.32);
+    background: #343c2fb3;
+  }
+  .animate-maker-border::before,
+  .animate-maker-border::after {
+    content: "";
+    z-index: 10;
+    margin: -5%;
+    box-shadow: inset 0 0 0 2px;
+    animation: clipMe 8s linear infinite;
+  }
+  .animate-maker-border::before {
+    animation-delay: -4s;
+  }
+  @keyframes clipMe {
+    0%,
+    100% {
+      clip-path: inset(0 0 98% 0);
+    }
+    25% {
+      clip-path: inset(0 98% 0 0);
+    }
+    50% {
+      clip-path: inset(98% 0 0 0);
+    }
+    75% {
+      clip-path: inset(0 0 0 98%);
+    }
+  }
+  .animate-marker__text {
+    color: #fff;
+    font-size: 14px;
+    // display: flex;
+    width: 100%;
+    height: 100%;
+    justify-content: center;
+    font-weight: bolder;
+    user-select: none;
+    cursor: pointer;
+    overflow: hidden;
+    overflow-y: auto;
+    padding: 0px 20px;
+    box-sizing: border-box;
+    :deep(div) {
+      line-height: 30px;
+    }
+  }
+}
+</style>