cxs 3 тижнів тому
батько
коміт
052a762bfa

+ 1 - 0
package.json

@@ -34,6 +34,7 @@
     "md5": "^2.3.0",
     "mitt": "^3.0.1",
     "nprogress": "^0.2.0",
+    "ol": "^10.2.1",
     "pinia": "^2.1.7",
     "pinia-plugin-persistedstate": "^3.2.1",
     "qs": "^6.12.1",

+ 140 - 0
pnpm-lock.yaml

@@ -47,6 +47,9 @@ importers:
       nprogress:
         specifier: ^0.2.0
         version: 0.2.0
+      ol:
+        specifier: ^10.2.1
+        version: 10.2.1
       pinia:
         specifier: ^2.1.7
         version: 2.1.7(typescript@5.5.2)(vue@3.4.31(typescript@5.5.2))
@@ -1352,6 +1355,9 @@ packages:
     resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
     engines: {node: '>= 8'}
 
+  '@petamoriken/float16@3.8.7':
+    resolution: {integrity: sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA==}
+
   '@pkgr/core@0.1.0':
     resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==}
     engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
@@ -1559,6 +1565,9 @@ packages:
   '@types/qs@6.9.15':
     resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==}
 
+  '@types/rbush@3.0.3':
+    resolution: {integrity: sha512-lX55lR0iYCgapxD3IrgujpQA1zDxwZI5qMRelKvmKAsSMplFVr7wmMpG7/6+Op2tjrgEex8o3vjg8CRDrRNYxg==}
+
   '@types/resolve@1.20.2':
     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
 
@@ -2213,6 +2222,19 @@ packages:
   color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
 
+  color-name@2.0.0:
+    resolution: {integrity: sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==}
+    engines: {node: '>=12.20'}
+
+  color-parse@2.0.2:
+    resolution: {integrity: sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==}
+
+  color-rgba@3.0.0:
+    resolution: {integrity: sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==}
+
+  color-space@2.0.1:
+    resolution: {integrity: sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==}
+
   color-support@1.1.3:
     resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
     hasBin: true
@@ -2639,6 +2661,9 @@ packages:
   driver.js@1.3.1:
     resolution: {integrity: sha512-MvUdXbqSgEsgS/H9KyWb5Rxy0aE6BhOVT4cssi2x2XjmXea6qQfgdx32XKVLLSqTaIw7q/uxU5Xl3NV7+cN6FQ==}
 
+  earcut@3.0.0:
+    resolution: {integrity: sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==}
+
   echarts-liquidfill@3.1.0:
     resolution: {integrity: sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==}
     peerDependencies:
@@ -2998,6 +3023,10 @@ packages:
     resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
     engines: {node: '>=6.9.0'}
 
+  geotiff@2.1.3:
+    resolution: {integrity: sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==}
+    engines: {node: '>=10.19'}
+
   get-caller-file@2.0.5:
     resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
     engines: {node: 6.* || 8.* || >= 10.*}
@@ -3601,6 +3630,9 @@ packages:
   kolorist@1.8.0:
     resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
 
+  lerc@3.0.0:
+    resolution: {integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==}
+
   leven@3.1.0:
     resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
     engines: {node: '>=6'}
@@ -4026,6 +4058,9 @@ packages:
     resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==}
     engines: {node: '>=0.10.0'}
 
+  ol@10.2.1:
+    resolution: {integrity: sha512-2bB/y2vEnmzjqynP0NA7Cp8k86No3Psn63Dueicep3E3i09axWRVIG5IS/bylEAGfWQx0QXD/uljkyFoY60Wig==}
+
   once@1.4.0:
     resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
 
@@ -4085,6 +4120,9 @@ packages:
     resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
     engines: {node: '>=6'}
 
+  pako@2.1.0:
+    resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
+
   param-case@3.0.4:
     resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
 
@@ -4092,6 +4130,9 @@ packages:
     resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
     engines: {node: '>=6'}
 
+  parse-headers@2.0.5:
+    resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==}
+
   parse-json@4.0.0:
     resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
     engines: {node: '>=4'}
@@ -4151,6 +4192,10 @@ packages:
   pathe@1.1.2:
     resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
 
+  pbf@4.0.1:
+    resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==}
+    hasBin: true
+
   pdfjs-dist@2.16.105:
     resolution: {integrity: sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==}
     peerDependencies:
@@ -4319,6 +4364,9 @@ packages:
   process-nextick-args@2.0.1:
     resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 
+  protocol-buffers-schema@3.6.0:
+    resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==}
+
   proxy-from-env@1.1.0:
     resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
 
@@ -4345,9 +4393,19 @@ packages:
     resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
     engines: {node: '>=8'}
 
+  quick-lru@6.1.2:
+    resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==}
+    engines: {node: '>=12'}
+
+  quickselect@3.0.0:
+    resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==}
+
   randombytes@2.1.0:
     resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
 
+  rbush@4.0.1:
+    resolution: {integrity: sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==}
+
   read-pkg-up@3.0.0:
     resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
     engines: {node: '>=4'}
@@ -4443,6 +4501,9 @@ packages:
     resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
     engines: {node: '>=8'}
 
+  resolve-protobuf-schema@2.1.0:
+    resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==}
+
   resolve-url@0.2.1:
     resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==}
     deprecated: https://github.com/lydell/resolve-url#deprecated
@@ -5332,6 +5393,9 @@ packages:
     resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
     engines: {node: '>= 8'}
 
+  web-worker@1.3.0:
+    resolution: {integrity: sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==}
+
   webidl-conversions@3.0.1:
     resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
 
@@ -5444,6 +5508,9 @@ packages:
     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
     engines: {node: '>=12'}
 
+  xml-utils@1.10.1:
+    resolution: {integrity: sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==}
+
   xtend@4.0.2:
     resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
     engines: {node: '>=0.4'}
@@ -5486,6 +5553,9 @@ packages:
   zrender@5.6.0:
     resolution: {integrity: sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==}
 
+  zstddec@0.1.0:
+    resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==}
+
 snapshots:
 
   '@aashutoshrathi/word-wrap@1.2.6': {}
@@ -6870,6 +6940,8 @@ snapshots:
       '@nodelib/fs.scandir': 2.1.5
       fastq: 1.15.0
 
+  '@petamoriken/float16@3.8.7': {}
+
   '@pkgr/core@0.1.0': {}
 
   '@polka/url@1.0.0-next.25': {}
@@ -7022,6 +7094,8 @@ snapshots:
 
   '@types/qs@6.9.15': {}
 
+  '@types/rbush@3.0.3': {}
+
   '@types/resolve@1.20.2': {}
 
   '@types/sortablejs@1.15.8': {}
@@ -7878,6 +7952,19 @@ snapshots:
 
   color-name@1.1.4: {}
 
+  color-name@2.0.0: {}
+
+  color-parse@2.0.2:
+    dependencies:
+      color-name: 2.0.0
+
+  color-rgba@3.0.0:
+    dependencies:
+      color-parse: 2.0.2
+      color-space: 2.0.1
+
+  color-space@2.0.1: {}
+
   color-support@1.1.3:
     optional: true
 
@@ -8311,6 +8398,8 @@ snapshots:
 
   driver.js@1.3.1: {}
 
+  earcut@3.0.0: {}
+
   echarts-liquidfill@3.1.0(echarts@5.5.1):
     dependencies:
       echarts: 5.5.1
@@ -8814,6 +8903,17 @@ snapshots:
 
   gensync@1.0.0-beta.2: {}
 
+  geotiff@2.1.3:
+    dependencies:
+      '@petamoriken/float16': 3.8.7
+      lerc: 3.0.0
+      pako: 2.1.0
+      parse-headers: 2.0.5
+      quick-lru: 6.1.2
+      web-worker: 1.3.0
+      xml-utils: 1.10.1
+      zstddec: 0.1.0
+
   get-caller-file@2.0.5: {}
 
   get-east-asian-width@1.2.0: {}
@@ -9352,6 +9452,8 @@ snapshots:
 
   kolorist@1.8.0: {}
 
+  lerc@3.0.0: {}
+
   leven@3.1.0: {}
 
   levn@0.4.1:
@@ -9784,6 +9886,16 @@ snapshots:
     dependencies:
       isobject: 3.0.1
 
+  ol@10.2.1:
+    dependencies:
+      '@types/rbush': 3.0.3
+      color-rgba: 3.0.0
+      color-space: 2.0.1
+      earcut: 3.0.0
+      geotiff: 2.1.3
+      pbf: 4.0.1
+      rbush: 4.0.1
+
   once@1.4.0:
     dependencies:
       wrappy: 1.0.2
@@ -9850,6 +9962,8 @@ snapshots:
 
   p-try@2.2.0: {}
 
+  pako@2.1.0: {}
+
   param-case@3.0.4:
     dependencies:
       dot-case: 3.0.4
@@ -9859,6 +9973,8 @@ snapshots:
     dependencies:
       callsites: 3.1.0
 
+  parse-headers@2.0.5: {}
+
   parse-json@4.0.0:
     dependencies:
       error-ex: 1.3.2
@@ -9905,6 +10021,10 @@ snapshots:
 
   pathe@1.1.2: {}
 
+  pbf@4.0.1:
+    dependencies:
+      resolve-protobuf-schema: 2.1.0
+
   pdfjs-dist@2.16.105:
     dependencies:
       dommatrix: 1.0.3
@@ -10048,6 +10168,8 @@ snapshots:
 
   process-nextick-args@2.0.1: {}
 
+  protocol-buffers-schema@3.6.0: {}
+
   proxy-from-env@1.1.0: {}
 
   punycode@2.3.0: {}
@@ -10067,10 +10189,18 @@ snapshots:
 
   quick-lru@4.0.1: {}
 
+  quick-lru@6.1.2: {}
+
+  quickselect@3.0.0: {}
+
   randombytes@2.1.0:
     dependencies:
       safe-buffer: 5.2.1
 
+  rbush@4.0.1:
+    dependencies:
+      quickselect: 3.0.0
+
   read-pkg-up@3.0.0:
     dependencies:
       find-up: 2.1.0
@@ -10176,6 +10306,10 @@ snapshots:
     dependencies:
       global-dirs: 0.1.1
 
+  resolve-protobuf-schema@2.1.0:
+    dependencies:
+      protocol-buffers-schema: 3.6.0
+
   resolve-url@0.2.1: {}
 
   resolve@1.22.4:
@@ -11183,6 +11317,8 @@ snapshots:
 
   web-streams-polyfill@3.3.3: {}
 
+  web-worker@1.3.0: {}
+
   webidl-conversions@3.0.1:
     optional: true
 
@@ -11371,6 +11507,8 @@ snapshots:
 
   xml-name-validator@4.0.0: {}
 
+  xml-utils@1.10.1: {}
+
   xtend@4.0.2: {}
 
   y18n@5.0.8: {}
@@ -11410,3 +11548,5 @@ snapshots:
   zrender@5.6.0:
     dependencies:
       tslib: 2.3.0
+
+  zstddec@0.1.0: {}

+ 1171 - 0
src/assets/map/OLMap copy.js

@@ -0,0 +1,1171 @@
+import 'ol/ol.css'
+import '@/assets/map/popup.css'
+import { Tile, Image } from 'ol/layer';
+import { XYZ, TileWMS, ImageWMS } from 'ol/source';
+import LayerVector from 'ol/layer/Vector';
+import SourceVector from 'ol/source/Vector';
+import { Map, View, Feature, Overlay } from 'ol';
+import { fromLonLat, transform } from 'ol/proj';
+import { defaults, FullScreen, ScaleLine, ZoomToExtent, ZoomSlider, MousePosition } from 'ol/control'
+import { Point } from 'ol/geom';
+import { Style, Icon, Text, Fill, Stroke, Circle } from 'ol/style';
+import { createStringXY, format } from 'ol/coordinate';
+import { getCenter } from 'ol/extent';
+import { METERS_PER_UNIT } from 'ol/proj/Units';
+import { labelZoomSize, colorRGBtoHex } from "@/assets/map/maptool";
+import { Draw } from 'ol/interaction';
+
+
+
+//使用export输出OLMap类
+export class OLMap {
+    /**构造函数,初始化地图对象 */
+    constructor(divId) {
+        this.mapId = divId;
+        this.map = new Map({
+            target: this.mapId,  // 地图目标容器
+            controls: defaults().extend([new ScaleLine()]), //添加默认控件,并拓展比例尺控件
+        });
+
+        //监听地图鼠标移动事件,改变鼠标指针样式
+        this.map.on('pointermove', function (evt) {
+            var pixel = this.getEventPixel(evt.originalEvent);
+            var hit = this.hasFeatureAtPixel(pixel);
+            var element = this.getTargetElement();
+            element.style.cursor = hit ? 'pointer' : 'move';
+        });
+        this.view = this.map.getView();
+        this.zoomMin = 4;
+        this.zoomMax = 20;
+    }
+    //静态变量,保存当前的地图和视图对象
+    static mapObj = this.map;
+    static viewObj = this.view;
+    //移除地图上的控制组件
+    removeControl(control) {
+        this.map.removeControl(control);
+    }
+    //设置地图缩放范围
+    setZoomRange(zoomMin, zoomMax) {
+        this.setMaxZoom(zoomMax);
+        this.setMinZoom(zoomMin);
+    }
+// 获取地图视图对象
+    getView() {
+        return this.map.getView();
+    }
+    // 获取地图对象
+    getMap() {
+        return this.map;
+    }
+
+// 1 添加卫星地图层
+    addMapWX(isVisible) {
+        var wxMap = new Tile({
+            id: 'map_wx',
+            name: "卫星地图",
+            source: new XYZ({
+                url: 'http://21.144.196.204/v1.0/gr?x={x}&y={y}&z={z}', //卫星地图
+                //url: 'http://t1.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=49ea1deec0ffd88ef13a3f69987e9a63',//天地图影像
+                wrapX: false
+            }),
+            type: 'wxmap'
+        });
+        wxMap.setVisible(isVisible);
+        this.map.addLayer(wxMap);
+    }
+
+// 2 添加带标注的卫星地图层
+    addMapWXTag(isVisible) {
+        var wxMap = new Tile({
+            id: 'map_wxtag',
+            name: "卫星地图标注",
+            source: new XYZ ({
+                url: 'http://21.144.196.204/v1.0/go?x={x}&y={y}&z={z}', //道路及兴趣点标注
+                //url: 'http://t1.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=49ea1deec0ffd88ef13a3f69987e9a63',//天地图注记
+                wrapX: false
+            }),
+            type: 'wxmap'
+        });
+        wxMap.setVisible(isVisible);
+        this.map.addLayer(wxMap);
+    }
+
+ // 添加ArcGIS地图层
+    addMapArcgis() {
+        var arcgisMap = new Tile({
+            id: 'map_arcgis',
+            name: "ArcGIS地图",
+            source: new XYZ({
+                url: "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}",
+                wrapX: false
+            }),
+            type: 'arcgismap'
+        });
+        this.map.addLayer(arcgisMap);
+    }
+// 添加WMS瓦片地图层
+    addMapTileWMS(layerId, url, params, minZoom = 0, maxZoom = 15) {
+        //采用瓦片地图WMS服务容易造成瓦片标注缺失或重叠问题
+        var tiled = new Tile({
+            id: layerId,
+            name: 'WMS瓦片地图',
+            visible: params.visible ? true : false,
+            source: new TileWMS({
+                url: url,
+                params: {
+                    'FORMAT': 'image/png',
+                    'VERSION': '1.1.1',
+                    tiled: true,
+                    "STYLES": !params.styles ? '' : params.styles,
+                    "LAYERS": !params.layers ? '' : params.layers,
+                    "exceptions": 'application/vnd.ogc.se_inimage',
+                }
+            }),
+            type: 'basemap'
+        });
+        this.map.addLayer(tiled);
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                tiled.setVisible(true);
+            } else {
+                tiled.setVisible(false);
+            }
+        });
+    }
+// 添加WMS图像地图层 注释无妨碍显示
+    addMapImageWMS(layerId, url, params, minZoom = 0, maxZoom = 15) {
+        //采用图像WMS服务以视图范围整体作为请求参数,避免瓦片标注缺失或重叠问题
+        var view = this.map.getView();
+        var region;
+        if (!params.bbox) {
+            var extent = view.calculateExtent(this.map.getSize());
+            var p1 = this.geoFromMrc([extent[0], extent[1]]);
+            var p2 = this.geoFromMrc([extent[2], extent[3]]);
+            var srs = view.getProjection().getCode();
+            region = [p1[0], p1[1], p2[0], p2[1]];
+        }
+        //console.log('extent: '+region);
+        //console.log('bbox: '+params.bbox);
+        var untiled = new Image({
+            id: layerId,
+            name: 'WMS图像地图',
+            visible: params.visible ? true : false,
+            source: new ImageWMS({
+                ratio: 1,
+                url: url,
+                params: {
+                    'FORMAT': 'image/png',
+                    'VERSION': '1.1.1',
+                    "STYLES": !params.styles ? '' : params.styles,
+                    "LAYERS": !params.layers ? '' : params.layers,
+                    'BBOX': !params.bbox ? region : params.bbox,
+                    "exceptions": 'application/vnd.ogc.se_inimage',
+                }
+            }),
+            type: 'basemap'
+        });
+        this.map.addLayer(untiled);
+        var wmsFlag = this.wmsFlag;
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                untiled.setVisible(true);
+            } else {
+                untiled.setVisible(false);
+            }
+        });
+    }
+    // 添加WMS图像地图层 注释无妨碍显示
+    rmBaseMapLayers() { //清除基础地图
+        var layers = this.map.getLayers().getArray().slice();
+        //此处必需使用 getArray()和 slice() (复制引用数组)来避免map.removeLayer()删除失败
+        //map.removeLayer()操作将更改map的layers
+        for (let i = 0; i < layers.length; i++) {
+            let layer = layers[i];
+            if (layer.get('type') == 'basemap') {
+                this.map.removeLayer(layer);
+            }
+        }
+    }
+    // 移除所有的标记和弹出窗口  rmOverlays rmOverlaysById移除地图上特定标记或弹出窗口 注释无妨碍显示
+    rmOverlays(types = ['marker', 'label', 'popup', 'pin', 'tag', '$marker', '$text']) {//清除所有Marker和Popup
+        var layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length before: '+layers.length);
+        var overlays = [];
+        for (let i = 0; i < layers.length; i++) {
+            const layer = layers[i];
+            let oid = layer.getId();
+            for (let i in types) {
+                if (oid.indexOf(types[i]) >= 0) {
+                    overlays.push(layer);
+                }
+            }
+        }
+        for (let i in overlays) {
+            this.map.removeOverlay(overlays[i]);
+        }
+        layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length after: '+layers.length);
+    }
+    // 根据ID移除特定的标记或弹出窗口
+    rmOverlaysById(types = ['marker', 'label', 'popup', 'pin', 'tag', '$marker', '$text'], id) {//清除所有Marker和Popup
+        var layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length before: '+layers.length);
+        var overlays = [];
+        for (let i = 0; i < layers.length; i++) {
+            const layer = layers[i];
+            let oid = layer.getId();
+            for (let i in types) {
+                //console.log(oid,types[i], id);
+                if (oid == (types[i] + '_' + id)) {
+                    overlays.push(layer);
+                }
+            }
+        }
+        for (let i in overlays) {
+            this.map.removeOverlay(overlays[i]);
+        }
+        layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length after: '+layers.length);
+    }
+
+    setViewXY([x, y], scale) {
+        //[x,y]为投影坐标系下视图的中心点坐标
+        var view = new View({
+            center: [x, y],
+            zoom: scale,
+            projection: 'EPSG:3857', //设置墨卡托投影坐标系
+            minZoom: this.zoomMin,
+            enableRotation: false, //禁止地图旋转
+        });
+        this.map.setView(view);
+    }
+
+    setView([lon, lat], scale) {
+        //[lon,lat]为地理坐标系下的中心点坐标
+        var cp = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        var view = new View({
+            center: cp,
+            zoom: scale,
+            projection: 'EPSG:3857', //设置墨卡托投影坐标系
+            minZoom: this.zoomMin,
+            enableRotation: false, //禁止地图旋转
+        });
+        this.map.setView(view);
+    }
+
+    setViewDefault() { //缺省条件显示南通地区范围
+        var cp = fromLonLat([121, 32]); //将地理坐标转为投影坐标
+        this.setViewXY(cp, 8);
+    }
+
+    setViewChina(zoomNow = 3.7) { //显示中国范围
+        var cp = fromLonLat([109, 32]); //将地理坐标转为投影坐标
+        this.setViewXY(cp, zoomNow);
+        this.setMinZoom(this.zoomMin); //3.7
+        this.setMaxZoom(this.zoomMax); //20
+        //this.addCapital(0,4);
+
+    }
+
+    addCapital(minZoom = 1, maxZoom = 4) {
+        var beijing = [116.395, 39.918];
+        let labelPoint = fromLonLat(beijing); //将地理坐标转为投影坐标
+        var labelFeature = new Feature({
+            geometry: new Point(labelPoint),
+            id: "cap_北京",
+            name: '北京',
+            type: 'label',
+        });
+        //矢量标注的数据源
+        var vectorSource = new SourceVector({
+            features: [labelFeature]
+        });
+        //矢量标注图层
+        var vectorLayer = new LayerVector({
+            id: 'capital',
+            source: vectorSource,
+            type: 'basemap'
+        });
+        this.map.addLayer(vectorLayer);
+        //设置标注的尺寸
+        var _style = new Style({
+            image: new Icon(
+                ({
+                    anchor: [25, 20],
+                    anchorOrigin: 'bottom-left',
+                    anchorXUnits: 'pixels',
+                    anchorYUnits: 'pixels',
+                    offsetOrigin: 'top-right',
+                    // offset:[0,10],
+                    scale: 0.75, //图标缩放比例
+                    opacity: 0.75, //透明度
+                    src: require('@/assets/map/img/star.png') //图标的url
+                })),
+            text: new Text({
+                textAlign: 'center', //位置
+                textBaseline: 'middle', //基准线
+                font: 'bolder 14px 微软雅黑', //文字样式
+                text: labelFeature.get('name'),  //文本内容
+                //文本填充样式(即文字颜色)
+                fill: new Fill({ color: '#000000' }),
+                stroke: new Stroke({ color: '#FFF', width: 1 }),
+            }),
+            zIndex: 9000,
+        });
+        labelFeature.setStyle(_style);
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                _style.getImage().setOpacity(0.75);
+                _style.getImage().setScale(0.75);
+                _style.getText().setFont('bolder 14px 微软雅黑');
+            } else {
+                _style.getImage().setOpacity(0);
+                _style.getImage().setScale(0);
+                _style.getText().setFont('bolder 0px 微软雅黑');
+            }
+            labelFeature.setStyle(_style);
+        });
+    }
+
+    showMousePos(mposId = '', placeholder = '') { //显示视图中鼠标的经纬度
+        //显示坐标
+        var mpos;
+        var mposObj = document.getElementById(mposId);
+        if (mposId != '') {
+            mpos = new MousePosition({
+                className: 'custom-mouse-position',
+                target: mposObj,
+                //coordinateFormat: createStringXY(4),
+                coordinateFormat: function (coordinate) {
+                    return format(coordinate, '经度: {x},纬度: {y}', 4);
+                },
+                placeholder: placeholder, //占位符
+            });
+        } else {
+            mpos = new MousePosition({ coordinateFormat: createStringXY(4) });
+        }
+        mpos.setProjection("EPSG:4326");
+
+        this.map.addControl(mpos);
+        return mpos;
+    }
+
+    showZoom(zoomId = '', map = this.map) { //显示视图中的缩放级别
+        var view = map.getView();
+        var zoomObj = document.getElementById(zoomId);
+        zoomObj.innerHTML = "缩放级别:" + view.getZoom().toFixed(1);
+        view.on('change:resolution', function (evt) {
+            //var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            //var resolution = view.getResolution();
+            var zoom = view.getZoom();
+            zoom = zoom.toFixed(1);
+            //console.log("当前缩放级别:"+zoom);
+            if (zoomId == "") {
+                if (document.getElementById('me_zoom')) {
+                    document.getElementById('me_zoom').innerHTML = "缩放级别:" + zoom;
+                } else {
+                    let divScale = document.createElement('div');
+                    divScale.setAttribute("id", "me_zoom");
+                    divScale.innerHTML = "缩放级别:" + zoom;
+                    document.body.appendChild(divScale);
+                }
+            } else {
+                zoomObj.innerHTML = "缩放级别:" + zoom;
+            }
+        });
+    }
+
+
+    setViewByExtent(extent) {
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var lb = fromLonLat(lb); //将地理坐标转为投影坐标
+        var ru = fromLonLat(ru); //将地理坐标转为投影坐标
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        //console.log(cds);
+        this.setViewByExtentXY(cds);
+    }
+
+    setViewByExtentXY(extent) {
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[13260344.548525335, 3654173.497931803, 13377876.802341036, 3770407.209894539], 左下点[13260344.548525335, 3654173.497931803], 右上点[13377876.802341036, 3770407.209894539]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        //console.log(cds);
+        //添加全局视图控件
+        var ctrl_extent = new ZoomToExtent({
+            extent: cds,
+            tipLabel: '显示初始范围',
+            label: 'E'
+        });
+        this.map.addControl(ctrl_extent);
+        //缩放地图到全局范围显示
+        var view = this.map.getView();
+        var r = view.getResolutionForExtent(cds, this.map.getSize());
+        view.setResolution(r);
+        view.setCenter(getCenter(cds));
+    }
+
+    getExtentCenterXY(extent) { //返回中心点XY坐标
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var lb = fromLonLat(lb); //将地理坐标转为投影坐标
+        var ru = fromLonLat(ru); //将地理坐标转为投影坐标
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        return getCenter(cds);
+    }
+
+    getExtentCenter(extent) { //返回中心点地理坐标
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        return getCenter(cds);
+    }
+
+    getExtent() {
+        var view = this.map.getView();
+        var extent = view.calculateExtent(this.map.getSize());
+        var p1 = this.geoFromMrc([extent[0], extent[1]]);
+        var p2 = this.geoFromMrc([extent[2], extent[3]]);
+        var region = [p1[0], p1[1], p2[0], p2[1]];
+        return region;
+    }
+
+    setMinZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setMinZoom(z);
+        this.zoomMin = z;
+    }
+
+    setMaxZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setMaxZoom(z);
+        this.zoomMax = z;
+    }
+
+    setZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setZoom(z);
+    }
+
+    geoToMrc([lon, lat]) {
+        //transform geographic coordinate system  to Mercator projection CS
+        //[lon,lat]->[x,y]
+        return transform([lon, lat], 'EPSG:4326', 'EPSG:3857');
+    }
+    geoFromMrc([x, y]) {
+        //transform Mercator projection coordinate system to geographic CS
+        //[x,y]->[lon,lat]
+        return transform([x, y], 'EPSG:3857', 'EPSG:4326');
+    }
+
+    degreeToMeter(deg) {
+        return transform([deg, deg], 'EPSG:4326', 'EPSG:3857')[0];
+    }
+
+    degreeFromMeter(met) {
+        return transform([met, met], 'EPSG:3857', 'EPSG:4326')[0];
+    }
+
+    zoomOut() {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        console.log("当前放大级别:" + zoom);
+        view.setZoom(zoom - 1);
+    }
+
+    zoomIn = function () {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        console.log("当前缩小级别:" + zoom);
+        view.setZoom(zoom + 1);
+    }
+
+    panTo([lon, lat]) {
+        //[lon,lat]:[121,32]
+        //获取地图视图
+        var view = this.map.getView();
+        var wh = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        //平移地图
+        view.setCenter(wh);
+        var zoom = view.getZoom();
+        view.setZoom(zoom);
+    }
+
+    panToXY([X, Y], z = 10) {
+        //[x,y]:[12100,3200]
+        //获取地图视图
+        var view = this.map.getView();
+        //平移地图
+        view.setCenter([X, Y]);
+        var zoom = view.getZoom();
+        zoom = z > zoom ? z : zoom;
+        view.setZoom(zoom);
+    }
+
+    getZoom() {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        return zoom;
+    }
+
+    showScale(scaleId = "") {
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            //var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var resolution = viewObj.getResolution();
+            var units = viewObj.getProjection().getUnits(); //default: m
+            //console.log('units: '+units);
+            var dpi = 25.4 / 0.28;
+            var mpu = METERS_PER_UNIT[units]; //获取以米为单位的半径(如degrees,radians,pixels),如果是m, mpu=1
+            //console.log('mpu: '+mpu);
+
+            const inchesPerMeter = 1000 / 25.4;  //每米多少英寸, 39.37
+            var scale = resolution * mpu * inchesPerMeter * dpi; //比例尺: 图上距离和实地距离之比
+
+            scale = Math.round(scale);
+            if (scaleId == "") {
+                if (document.getElementById('me_scale')) {
+                    document.getElementById('me_scale').innerHTML = "比例尺 = 1 : " + scale;
+                } else {
+                    let divScale = document.createElement('div');
+                    divScale.setAttribute("id", "me_scale");
+                    divScale.innerHTML = "比例尺 = 1 : " + scale;
+                    document.body.appendChild(divScale);
+                }
+            } else {
+                document.getElementById(scaleId).innerHTML = "比例尺 = 1 : " + scale;
+            }
+        });
+    }
+
+    markerIsExist([lon, lat], tol = 0.01) {//根据坐标判断是否存在重复点
+        var pt = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        //console.log(pt[0]);
+        var overlays = this.map.getOverlays().getArray();
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            let id = params.id;
+            let name = params.name;
+            if (oid.indexOf('marker') >= 0) {
+                //let pos = overlays[k].getPosition();
+                let pos = params.pos;
+                let dis = ((pt[0] - pos[0]) ** 2 + (pt[1] - pos[1]) ** 2) ** 0.5;
+                if (dis <= tol) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    markerIsExistById(id) {//根据id判断是否存在重复点
+        var overlays = this.map.getOverlays().getArray();
+        //console.log("markerIsExistById: "+id+", "+overlays.length);
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            //console.log("markerIsExistById: "+oid+","+id);
+            if (oid == ('marker_'+id)) {
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    addMarkerAndLabel([lon, lat], id, label, fcolor = '#F00', opacity = 1, markerParams = {}, markerStyle = { width: '8px', height: '8px' }, func) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增div元素
+        var elementDiv = document.createElement('div'); //Marker
+        elementDiv.className = "ol-marker";
+        elementDiv.style.setProperty('background-color', fcolor);
+        elementDiv.style.setProperty('opacity', opacity);
+        elementDiv.style.setProperty('border', '1px solid' + fcolor);
+        elementDiv.style.setProperty('width', markerStyle.width);
+        elementDiv.style.setProperty('height', markerStyle.height);
+        elementDiv.setAttribute('desc', JSON.stringify(markerParams));
+        elementDiv.onclick = function (e) {
+            //去除所有Popup
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) { //恢复原marker样式
+                let oid = overlays[k].getId();
+                if (oid.indexOf('marker') >= 0) {
+                    let e = overlays[k].get('element');
+                    let c = e.style['background-color'];
+                    //console.log('marker c0='+c);
+                    c = colorRGBtoHex(c);
+                    //console.log('marker c1='+c);
+                    e.style.setProperty('border', '1px solid' + c);
+                    //console.log('MarkerZ=' + overlays[k].get('element').style['z-index']);
+                }
+            }
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid.indexOf("popup") >= 0) {
+                    overlays[k].setPosition(undefined); //隐藏所有POPUP
+                }
+            }
+            //console.log(overlays.length);
+            for (var k in overlays) {
+                let a = overlays[k].getId();
+                let a0 = a.split('_')[0];
+                let a1 = a.split('_')[1];
+                if (a1 == id && a0 == "popup") {
+                    //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                    //overlays[k].get('element').style.setProperty('z-index', 9000);
+                    //console.log('POPUPZ=' + overlays[k].get('element').style['z-index']);
+                    func(id, overlays[k], cpoint);
+                    break;
+                }
+            }
+            //高亮显示当前元素
+            elementDiv.style.setProperty('border', '3px solid #FF0000');
+        }
+
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-marker-text";
+        elementA.style.setProperty('font-size', '0px');
+        elementA.innerHTML = label; //设置文本
+        elementA.setAttribute('desc', JSON.stringify(markerParams));
+        elementA.onclick = function (e) {
+            //去除所有Popup
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) { //恢复原marker样式
+                let oid = overlays[k].getId();
+                if (oid.indexOf('marker') >= 0) {
+                    let e = overlays[k].get('element');
+                    let c = e.style['background-color'];
+                    c = colorRGBtoHex(c);
+                    //console.log('c='+c);
+                    e.style.setProperty('border', '1px solid' + c);
+                    //e.style.setProperty('z-index', 1000);
+                }
+            }
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid.indexOf("popup") >= 0) {
+                    overlays[k].setPosition(undefined); //隐藏所有POPUP
+                }
+            }
+            for (var k in overlays) {
+                let a = overlays[k].getId();
+                let a0 = a.split('_')[0];
+                let a1 = a.split('_')[1];
+                if (a1 == id && a0 == "popup") {
+                    //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                    //overlays[k].get('element').style.setProperty('z-index', 9000);
+                    func(id, overlays[k], cpoint);
+                    break;
+                }
+            }
+            //高亮显示当前元素
+            elementDiv.style.setProperty('border', '3px solid #FF0000');
+        }
+        // 新建的div元素添加a子节点
+        elementDiv.appendChild(elementA);
+
+        //实例化图文标注(图形+文本),添加到地图容器中
+        var newMarker = new Overlay({
+            id: "$marker_" + id,  //图钉
+            name: label,
+            position: cpoint,
+            positioning: 'center-center',
+            element: elementDiv,
+            stopEvent: false //为了不遮盖popup,该处stopEvent必须设置为false
+        });
+        this.map.addOverlay(newMarker);
+
+        var newText = new Overlay({
+            id: "$text_" + id, //图钉文本
+            name: label,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-marker-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+    // 用于在地图上添加标记(marker) 可自定义图标 位置 大小等属性
+    addMarker([lon, lat], id, label, fcolor = '#F00', opacity = 1,
+        markerParams = {},
+        markerStyle = { width: '10px', height: '10px' },
+        func, funcJggChang) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增div元素
+        var elementDiv = document.createElement('div'); //Marker
+        elementDiv.className = "ol-marker";
+        elementDiv.style.setProperty('background-color', fcolor);
+        elementDiv.style.setProperty('opacity', opacity);
+        elementDiv.style.setProperty('border', '1px solid #FFF');
+        elementDiv.style.setProperty('width', markerStyle.width);
+        elementDiv.style.setProperty('height', markerStyle.height);
+        let prefix = 'marker_';
+        markerParams.prefix = prefix;
+        elementDiv.setAttribute('desc', JSON.stringify(markerParams));
+        var geoToMrc = this.geoToMrc;
+        elementDiv.onclick = function (e) { //点击当前Marker事件
+            var overlays = map.getOverlays().getArray();
+            let popup_display = [];//过滤已打开弹窗的站点
+            for (let k in overlays) {
+                let oid = overlays[k].getId();
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let fid = params.id;
+                if (oid.indexOf("popup") >= 0) {
+                    if (oid == ('popup_' + id)) { //当前站点
+                        //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                        //overlays[k].get('element').style.setProperty('z-index', 9000);
+                        //console.log('POPUPZ=' + overlays[k].get('element').style['z-index']);
+                        //func(id, overlays[k], cpoint);
+                        func(elementDiv, id, overlays[k]); //显示当前站点弹窗
+                    } else {
+                        if (params.display) { //记录其他打开弹窗的站点
+                            popup_display.push(fid);
+                        }
+                        //overlays[k].setPosition(undefined); //隐藏其他站点POPUP
+                    }
+                }
+            }
+            /////////////////////////////////////////////////////////////////
+            //隐藏当前的MarkerLabel
+            for (let k in overlays) {
+                let oid = overlays[k].getId();
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let fid = params.id;
+                if (oid.indexOf("label_") >= 0) { //关闭当前站点的label
+                    let ep = overlays[k].get('element');
+                    let params = JSON.parse(ep.getAttribute("desc"));
+                    let pos = geoToMrc(params.pos);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    if (oid == ("label_" + id)) { //关闭当前站点的label
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else if (popup_display.includes(fid)) { //关闭其他打开弹窗的label
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else {
+                        overlays[k].setPosition(pt); //显示其他站点的label
+                        params.display = true;
+                    }
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+            //打开九宫格切换按钮
+            funcJggChang('jggShow');
+            /////////////////////////////////////////////////////////////////
+        }
+        //实例化Marker并添加到地图容器中
+
+        var newMarker = new Overlay({
+            id: prefix + id,
+            name: label,
+            position: cpoint,
+            positioning: 'center-center',
+            element: elementDiv,
+            stopEvent: false //为了不遮盖popup,该处stopEvent必须设置为false
+        });
+        this.map.addOverlay(newMarker);
+    }
+
+    addMarkerLabel(pos, flag, id, label, labelParams = {}, labelStyle = { color: '#000' }) {
+        var cpoint = fromLonLat(pos);//将地理坐标转为投影坐标
+        cpoint = flag == 1 ? cpoint : undefined;
+        var map = this.map;
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-mlabel-text";
+        //elementA.style.setProperty('font-size', labelStyle.fontSize);
+        elementA.style.setProperty('color', labelStyle.color);
+        elementA.style.setProperty('text-shadow', '-1px -1px 0 #FFF, 1px -1px 0 #FFF, -1px 1px 0 #FFF, 1px 1px 0 #FFF');//字体描边
+        elementA.innerHTML = label; //设置文本
+        let prefix = 'label_';
+        labelParams.prefix = prefix;
+        elementA.setAttribute('desc', JSON.stringify(labelParams));
+        var newText = new Overlay({
+            id: prefix + id,
+            name: label,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-mlabel-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+
+    addTag([lon, lat], id, tag, labelParams = {}, labelStyle = { color: '#000', fontSize: '12px' }) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-label-text";
+        elementA.style.setProperty('font-size', labelStyle.fontSize);
+        elementA.style.setProperty('color', labelStyle.color);
+        elementA.style.setProperty('text-shadow', '-1px -1px 0 #FFF, 1px -1px 0 #FFF, -1px 1px 0 #FFF, 1px 1px 0 #FFF'); //字体描边
+        elementA.innerHTML = tag; //设置文本
+        let prefix = 'tag_';
+        labelParams.prefix = prefix;
+        elementA.setAttribute('desc', JSON.stringify(labelParams));
+        var newText = new Overlay({
+            id: prefix + id,
+            name: tag,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-label-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+
+    /*
+    addTag([lon, lat], label, minZoom = 6, maxZoom = 10, initZoom = 5) {
+        //E.g.: [lon,lat]=[121,32], labelName="Nantong"
+        //实例化Vector要素,通过矢量图层添加到地图容器中
+        var labelPoint = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        var labelFeature = new Feature({
+            geometry: new Point(labelPoint),
+            id: "label_" + label,
+            name: label,
+        });
+        //矢量标注的数据源
+        var vectorSource = new SourceVector({
+            features: [labelFeature]
+        });
+        //矢量标注图层
+        var vectorLayer = new LayerVector({
+            source: vectorSource
+        });
+        this.map.addLayer(vectorLayer);
+
+        //设置样式
+        var _style = new Style({
+            text: new Text({
+                //位置
+                textAlign: 'center',
+                //基准线
+                textBaseline: 'middle',
+                //文字样式
+                font: 'normal 0px 微软雅黑',
+                //文本内容
+                text: labelFeature.get('name'),
+                //文本填充样式(即文字颜色)
+                fill: new Fill({ color: '#000000' }),
+                stroke: new Stroke({ color: '#FFF', width: 1 }),
+            }),
+            zIndex: 1000,
+        });
+        labelFeature.setStyle(_style);
+        //添加滚轮事件
+        var view = this.map.getView();
+        view.on('change:resolution', function (feature) {
+            // 重新设置标注的尺寸
+            var z = viewObj.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                _style.getText().setFont('normal ' + labelZoomSize(initZoom, this.getZoom()) + 'px 微软雅黑');
+            } else {
+                _style.getText().setFont('normal 0px 微软雅黑');
+            }
+            labelFeature.setStyle(_style);
+        });
+        //console.log(labelFeature.getStyle());
+    }
+    */
+
+    updatePopupInfo(id, info) {
+        var overlays = this.map.getOverlays().getArray();
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid == "popup_" + id) {
+                let container = overlays[k].get('element'); //获取container
+                let content = container.getElementById('content_' + id);
+                content.innerHTML = info;
+                break;
+            }
+        }
+    }
+
+    getDisplayedPopupsId(map) {//获取当前处于弹窗显示状态的ID编号
+        let overlays = map.getOverlays().getArray();
+        let ids = [];
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            if (oid.indexOf("popup_") >= 0) {//过滤弹窗
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id=params.id;
+                if (params.display) {
+                    ids.push(id);
+                }
+            }
+        }
+        return ids;
+    }
+
+    addPopup(pos, flag, id, info, funcLeftClick, funcRightClick, funcJggChang, popupParams = {}) {
+        let pt = fromLonLat(pos);//将地理坐标转为投影坐标
+        //console.log("addPopup: "+info);
+        //创建Popup容器
+        var mapDiv = document.getElementById(this.mapId);
+        var container = document.createElement('div'); //popup
+        var content = document.createElement('div'); //popup-content
+        var closer = document.createElement('a'); //popup-closer
+
+        container.setAttribute('class', 'ol-popup');
+        container.setAttribute('id', 'container_' + id);
+        container.setAttribute('desc', JSON.stringify(popupParams));
+
+        content.setAttribute('class', 'popup-content');
+        content.setAttribute('id', 'content_' + id);
+        content.innerHTML = info;
+
+        closer.setAttribute('class', 'ol-popup-closer');
+        closer.setAttribute('href', '#');
+        closer.setAttribute('id', 'close_' + id);
+        closer.setAttribute('title', '关闭弹窗');
+        closer.innerHTML = '[x]';
+
+        container.appendChild(closer);
+        container.appendChild(content);
+        //container.appendChild(hidden);
+        //mapDiv.appendChild(container);
+
+        //在地图中创建一个Overlay
+        var cpoint = flag == 1 ? pt : undefined;
+        var popup = new Overlay({
+            position: cpoint,
+            id: 'popup_' + id,
+            //要转换成overlay的HTML元素
+            element: container,
+            //当前窗口可见
+            autoPan: false,
+            //Popup放置的位置
+            //positioning: 'bottom-center',
+            //是否应该停止事件传播到地图窗口
+            stopEvent: true, //在popup容器内部点击不触发地图事件,此处必需设置为true
+            autoPanAnimation: {
+                //当Popup超出地图边界时,为了Popup全部可见,地图移动的速度
+                duration: 500
+            },
+            className: 'ol-popup-container' //控制popup的图层堆叠索引z-index
+        });
+
+        container.addEventListener("click", function (evt) {
+            //console.log("容器事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            //alert("你点了左键");
+            funcLeftClick(id);       //左击事件回调函数
+        });
+
+        container.addEventListener("mousedown", function (evt) {
+            //console.log("容器事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            if (evt.button == 2) {
+                //alert("你点了右键");
+                funcRightClick(evt, id);  //右击事件回调函数
+            }
+        });
+        var map = this.map;
+        var geoToMrc = this.geoToMrc;
+        var getDisplayedPopupsId = this.getDisplayedPopupsId;
+        closer.addEventListener("click", function (evt) { //添加关闭按钮的单击事件(隐藏popup)
+            //console.log("关闭按钮事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            //未定义popup位置
+
+            popup.setPosition(undefined);
+            //失去焦点
+            closer.blur();
+            let params = JSON.parse(container.getAttribute('desc'));
+            params.display = false;
+            //alert("当前位置:"+params.pos+", 原先位置:"+pos);
+            container.setAttribute('desc', JSON.stringify(params));
+            //return false;
+            /////////////////////////////////////////////////////////////////
+            //打开当前的MarkerTag和MarkerLabel
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid == ("label_" + id)) {
+                    let ep = overlays[k].get('element');
+                    let params = JSON.parse(ep.getAttribute("desc"));
+                    let pos = geoToMrc(params.pos);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    //console.log('pos'+"_"+pt);
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+
+                    params.display = true;
+                    ep.setAttribute("desc", JSON.stringify(params));
+                    break;
+                }
+            }
+            let ids = getDisplayedPopupsId(map);
+            if (ids.length == 0) { //当显示的弹窗为0时,关闭九宫格切换按钮
+                funcJggChang('jggHidden'); //关闭九宫格切换按钮
+            }
+            /////////////////////////////////////////////////////////////////
+        });
+        this.map.addOverlay(popup);
+    }
+
+    showAllMarkerLabels(flag = 1) { //显示所有MarkerPin
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("label_") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (flag) {
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+                    params.display = true;
+                } else {
+                    overlays[k].setPosition(undefined);  //设置为当前站点位置
+                    params.display = false;
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+        }
+    }
+
+    showAllPopups(flag = 1) { //显示所有弹窗
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        var yichang_ids = [];
+        var markerHide_ids = [];
+        var markerHide_ids_normal = [];
+        for (var m in overlays) { //查询处于隐藏状态的站点编号
+            let oid = overlays[m].getId();
+            let pos = overlays[m].getPosition();
+            if (oid.indexOf("marker_") >= 0) {
+                let ep = overlays[m].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let zt = params.status;
+                if (typeof (pos) == 'undefined') { //如果当前marker处于隐藏状态,比如关闭固定站或便携站
+                    markerHide_ids.push(id);
+                    if (zt == "正常") {
+                        markerHide_ids_normal.push(id);
+                    }
+                }
+            }
+        }
+        for (var k in overlays) { //显示【设备正常站点】弹窗
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup_") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let zt = params.status;
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (flag && zt == "正常" && !markerHide_ids.includes(id)) {//当前站点的marker没有预先隐藏的话
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+                    params.display = true;
+                } else {
+                    overlays[k].setPosition(undefined);  //设置为当前站点位置
+                    params.display = false;
+                    if (zt != "正常") {
+                        yichang_ids.push(id);
+                    }
+                }
+                ep.setAttribute('desc', JSON.stringify(params)); //更新参数
+            }
+        }
+        //显示【非正常站点】的label
+        for (var i in overlays) {
+            let oid = overlays[i].getId();
+            if (oid.indexOf("label_") >= 0) {
+                let ep = overlays[i].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                if (!flag && !markerHide_ids.includes(id)) {//如果不显示弹窗,打开所有label
+                    overlays[i].setPosition(pt);
+                    params.display = true;
+                } else {//如果显示弹窗,打开异常站点label
+                    if (yichang_ids.includes(id) && !markerHide_ids.includes(id)) { //显示非正常站点的label
+                        overlays[i].setPosition(pt);
+                        params.display = true;
+                    } else {
+                        overlays[i].setPosition(undefined);
+                        params.display = false;
+                    }
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+        }
+        return markerHide_ids_normal;
+    }
+
+    showPopupsById(ids) { //显示指定id的站点弹窗
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        for (var k in overlays) { //查询处于隐藏状态的站点编号
+            let oid = overlays[k].getId();
+            //let pos = overlays[k].getPosition();
+            let ep = overlays[k].get('element');
+            let params = JSON.parse(ep.getAttribute("desc"));
+            let zt = params.status;
+            let pos = this.geoToMrc(params.pos);
+            let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+            for (var id in ids) {
+                if (oid == ("popup_" + ids[id])) {
+                    if (zt == "正常") {
+                        overlays[k].setPosition(pt);  //设置为当前站点位置
+                        params.display = true;
+                    } else {
+                        overlays[k].setPosition(undefined);  //设置为当前站点位置
+                        params.display = false;
+                    }
+                    ep.setAttribute('desc', JSON.stringify(params)); //更新参数
+                    break;
+                }
+                if (oid == ("label_" + ids[id])) {
+                    if (zt == "正常") {
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else {
+                        overlays[k].setPosition(pt);  //设置为当前站点位置
+                        params.display = true;
+                    }
+                    ep.setAttribute("desc", JSON.stringify(params));
+                    break;
+                }
+            }
+        }
+    }
+
+}

+ 1171 - 0
src/assets/map/OLMap.js

@@ -0,0 +1,1171 @@
+import 'ol/ol.css'
+import '@/assets/map/popup.css'
+import { Tile, Image } from 'ol/layer';
+import { XYZ, TileWMS, ImageWMS } from 'ol/source';
+import LayerVector from 'ol/layer/Vector';
+import SourceVector from 'ol/source/Vector';
+import { Map, View, Feature, Overlay } from 'ol';
+import { fromLonLat, transform } from 'ol/proj';
+import { defaults, FullScreen, ScaleLine, ZoomToExtent, ZoomSlider, MousePosition } from 'ol/control'
+import { Point } from 'ol/geom';
+import { Style, Icon, Text, Fill, Stroke, Circle } from 'ol/style';
+import { createStringXY, format } from 'ol/coordinate';
+import { getCenter } from 'ol/extent';
+import { METERS_PER_UNIT } from 'ol/proj/Units';
+import { labelZoomSize, colorRGBtoHex } from "@/assets/map/maptool";
+import { Draw } from 'ol/interaction';
+
+
+
+//使用export输出OLMap类
+export class OLMap {
+    /**构造函数,初始化地图对象 */
+    constructor(divId) {
+        this.mapId = divId;
+        this.map = new Map({
+            target: this.mapId,  // 地图目标容器
+            controls: defaults().extend([new ScaleLine()]), //添加默认控件,并拓展比例尺控件
+        });
+
+        //监听地图鼠标移动事件,改变鼠标指针样式
+        this.map.on('pointermove', function (evt) {
+            var pixel = this.getEventPixel(evt.originalEvent);
+            var hit = this.hasFeatureAtPixel(pixel);
+            var element = this.getTargetElement();
+            element.style.cursor = hit ? 'pointer' : 'move';
+        });
+        this.view = this.map.getView();
+        this.zoomMin = 4;
+        this.zoomMax = 20;
+    }
+    //静态变量,保存当前的地图和视图对象
+    static mapObj = this.map;
+    static viewObj = this.view;
+    //移除地图上的控制组件
+    removeControl(control) {
+        this.map.removeControl(control);
+    }
+    //设置地图缩放范围
+    setZoomRange(zoomMin, zoomMax) {
+        this.setMaxZoom(zoomMax);
+        this.setMinZoom(zoomMin);
+    }
+// 获取地图视图对象
+    getView() {
+        return this.map.getView();
+    }
+    // 获取地图对象
+    getMap() {
+        return this.map;
+    }
+
+// 1 添加卫星地图层
+    addMapWX(isVisible) {
+        var wxMap = new Tile({
+            id: 'map_wx',
+            name: "卫星地图",
+            source: new XYZ({
+                url: 'http://192.168.196.204/v1.0/gr?x={x}&y={y}&z={z}', //卫星地图
+                //url: 'http://t1.tianditu.com/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=49ea1deec0ffd88ef13a3f69987e9a63',//天地图影像
+                wrapX: false
+            }),
+            type: 'wxmap'
+        });
+        wxMap.setVisible(isVisible);
+        this.map.addLayer(wxMap);
+    }
+
+// 2 添加带标注的卫星地图层
+    addMapWXTag(isVisible) {
+        var wxMap = new Tile({
+            id: 'map_wxtag',
+            name: "卫星地图标注",
+            source: new XYZ ({
+                url: 'http://192.168.196.204/v1.0/go?x={x}&y={y}&z={z}', //道路及兴趣点标注
+                //url: 'http://t1.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=49ea1deec0ffd88ef13a3f69987e9a63',//天地图注记
+                wrapX: false
+            }),
+            type: 'wxmap'
+        });
+        wxMap.setVisible(isVisible);
+        this.map.addLayer(wxMap);
+    }
+
+ // 添加ArcGIS地图层
+    addMapArcgis() {
+        var arcgisMap = new Tile({
+            id: 'map_arcgis',
+            name: "ArcGIS地图",
+            source: new XYZ({
+                url: "https://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}",
+                wrapX: false
+            }),
+            type: 'arcgismap'
+        });
+        this.map.addLayer(arcgisMap);
+    }
+// 添加WMS瓦片地图层
+    addMapTileWMS(layerId, url, params, minZoom = 0, maxZoom = 15) {
+        //采用瓦片地图WMS服务容易造成瓦片标注缺失或重叠问题
+        var tiled = new Tile({
+            id: layerId,
+            name: 'WMS瓦片地图',
+            visible: params.visible ? true : false,
+            source: new TileWMS({
+                url: url,
+                params: {
+                    'FORMAT': 'image/png',
+                    'VERSION': '1.1.1',
+                    tiled: true,
+                    "STYLES": !params.styles ? '' : params.styles,
+                    "LAYERS": !params.layers ? '' : params.layers,
+                    "exceptions": 'application/vnd.ogc.se_inimage',
+                }
+            }),
+            type: 'basemap'
+        });
+        this.map.addLayer(tiled);
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                tiled.setVisible(true);
+            } else {
+                tiled.setVisible(false);
+            }
+        });
+    }
+// 添加WMS图像地图层 注释无妨碍显示
+    addMapImageWMS(layerId, url, params, minZoom = 0, maxZoom = 15) {
+        //采用图像WMS服务以视图范围整体作为请求参数,避免瓦片标注缺失或重叠问题
+        var view = this.map.getView();
+        var region;
+        if (!params.bbox) {
+            var extent = view.calculateExtent(this.map.getSize());
+            var p1 = this.geoFromMrc([extent[0], extent[1]]);
+            var p2 = this.geoFromMrc([extent[2], extent[3]]);
+            var srs = view.getProjection().getCode();
+            region = [p1[0], p1[1], p2[0], p2[1]];
+        }
+        //console.log('extent: '+region);
+        //console.log('bbox: '+params.bbox);
+        var untiled = new Image({
+            id: layerId,
+            name: 'WMS图像地图',
+            visible: params.visible ? true : false,
+            source: new ImageWMS({
+                ratio: 1,
+                url: url,
+                params: {
+                    'FORMAT': 'image/png',
+                    'VERSION': '1.1.1',
+                    "STYLES": !params.styles ? '' : params.styles,
+                    "LAYERS": !params.layers ? '' : params.layers,
+                    'BBOX': !params.bbox ? region : params.bbox,
+                    "exceptions": 'application/vnd.ogc.se_inimage',
+                }
+            }),
+            type: 'basemap'
+        });
+        this.map.addLayer(untiled);
+        var wmsFlag = this.wmsFlag;
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                untiled.setVisible(true);
+            } else {
+                untiled.setVisible(false);
+            }
+        });
+    }
+    // 添加WMS图像地图层 注释无妨碍显示
+    rmBaseMapLayers() { //清除基础地图
+        var layers = this.map.getLayers().getArray().slice();
+        //此处必需使用 getArray()和 slice() (复制引用数组)来避免map.removeLayer()删除失败
+        //map.removeLayer()操作将更改map的layers
+        for (let i = 0; i < layers.length; i++) {
+            let layer = layers[i];
+            if (layer.get('type') == 'basemap') {
+                this.map.removeLayer(layer);
+            }
+        }
+    }
+    // 移除所有的标记和弹出窗口  rmOverlays rmOverlaysById移除地图上特定标记或弹出窗口 注释无妨碍显示
+    rmOverlays(types = ['marker', 'label', 'popup', 'pin', 'tag', '$marker', '$text']) {//清除所有Marker和Popup
+        var layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length before: '+layers.length);
+        var overlays = [];
+        for (let i = 0; i < layers.length; i++) {
+            const layer = layers[i];
+            let oid = layer.getId();
+            for (let i in types) {
+                if (oid.indexOf(types[i]) >= 0) {
+                    overlays.push(layer);
+                }
+            }
+        }
+        for (let i in overlays) {
+            this.map.removeOverlay(overlays[i]);
+        }
+        layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length after: '+layers.length);
+    }
+    // 根据ID移除特定的标记或弹出窗口
+    rmOverlaysById(types = ['marker', 'label', 'popup', 'pin', 'tag', '$marker', '$text'], id) {//清除所有Marker和Popup
+        var layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length before: '+layers.length);
+        var overlays = [];
+        for (let i = 0; i < layers.length; i++) {
+            const layer = layers[i];
+            let oid = layer.getId();
+            for (let i in types) {
+                //console.log(oid,types[i], id);
+                if (oid == (types[i] + '_' + id)) {
+                    overlays.push(layer);
+                }
+            }
+        }
+        for (let i in overlays) {
+            this.map.removeOverlay(overlays[i]);
+        }
+        layers = this.map.getOverlays().getArray().slice();
+        //console.log('overlays length after: '+layers.length);
+    }
+
+    setViewXY([x, y], scale) {
+        //[x,y]为投影坐标系下视图的中心点坐标
+        var view = new View({
+            center: [x, y],
+            zoom: scale,
+            projection: 'EPSG:3857', //设置墨卡托投影坐标系
+            minZoom: this.zoomMin,
+            enableRotation: false, //禁止地图旋转
+        });
+        this.map.setView(view);
+    }
+
+    setView([lon, lat], scale) {
+        //[lon,lat]为地理坐标系下的中心点坐标
+        var cp = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        var view = new View({
+            center: cp,
+            zoom: scale,
+            projection: 'EPSG:3857', //设置墨卡托投影坐标系
+            minZoom: this.zoomMin,
+            enableRotation: false, //禁止地图旋转
+        });
+        this.map.setView(view);
+    }
+
+    setViewDefault() { //缺省条件显示南通地区范围
+        var cp = fromLonLat([121, 32]); //将地理坐标转为投影坐标
+        this.setViewXY(cp, 8);
+    }
+
+    setViewChina(zoomNow = 3.7) { //显示中国范围
+        var cp = fromLonLat([109, 32]); //将地理坐标转为投影坐标
+        this.setViewXY(cp, zoomNow);
+        this.setMinZoom(this.zoomMin); //3.7
+        this.setMaxZoom(this.zoomMax); //20
+        //this.addCapital(0,4);
+
+    }
+
+    addCapital(minZoom = 1, maxZoom = 4) {
+        var beijing = [116.395, 39.918];
+        let labelPoint = fromLonLat(beijing); //将地理坐标转为投影坐标
+        var labelFeature = new Feature({
+            geometry: new Point(labelPoint),
+            id: "cap_北京",
+            name: '北京',
+            type: 'label',
+        });
+        //矢量标注的数据源
+        var vectorSource = new SourceVector({
+            features: [labelFeature]
+        });
+        //矢量标注图层
+        var vectorLayer = new LayerVector({
+            id: 'capital',
+            source: vectorSource,
+            type: 'basemap'
+        });
+        this.map.addLayer(vectorLayer);
+        //设置标注的尺寸
+        var _style = new Style({
+            image: new Icon(
+                ({
+                    anchor: [25, 20],
+                    anchorOrigin: 'bottom-left',
+                    anchorXUnits: 'pixels',
+                    anchorYUnits: 'pixels',
+                    offsetOrigin: 'top-right',
+                    // offset:[0,10],
+                    scale: 0.75, //图标缩放比例
+                    opacity: 0.75, //透明度
+                    src: require('@/assets/map/img/star.png') //图标的url
+                })),
+            text: new Text({
+                textAlign: 'center', //位置
+                textBaseline: 'middle', //基准线
+                font: 'bolder 14px 微软雅黑', //文字样式
+                text: labelFeature.get('name'),  //文本内容
+                //文本填充样式(即文字颜色)
+                fill: new Fill({ color: '#000000' }),
+                stroke: new Stroke({ color: '#FFF', width: 1 }),
+            }),
+            zIndex: 9000,
+        });
+        labelFeature.setStyle(_style);
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var z = view.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                _style.getImage().setOpacity(0.75);
+                _style.getImage().setScale(0.75);
+                _style.getText().setFont('bolder 14px 微软雅黑');
+            } else {
+                _style.getImage().setOpacity(0);
+                _style.getImage().setScale(0);
+                _style.getText().setFont('bolder 0px 微软雅黑');
+            }
+            labelFeature.setStyle(_style);
+        });
+    }
+
+    showMousePos(mposId = '', placeholder = '') { //显示视图中鼠标的经纬度
+        //显示坐标
+        var mpos;
+        var mposObj = document.getElementById(mposId);
+        if (mposId != '') {
+            mpos = new MousePosition({
+                className: 'custom-mouse-position',
+                target: mposObj,
+                //coordinateFormat: createStringXY(4),
+                coordinateFormat: function (coordinate) {
+                    return format(coordinate, '经度: {x},纬度: {y}', 4);
+                },
+                placeholder: placeholder, //占位符
+            });
+        } else {
+            mpos = new MousePosition({ coordinateFormat: createStringXY(4) });
+        }
+        mpos.setProjection("EPSG:4326");
+
+        this.map.addControl(mpos);
+        return mpos;
+    }
+
+    showZoom(zoomId = '', map = this.map) { //显示视图中的缩放级别
+        var view = map.getView();
+        var zoomObj = document.getElementById(zoomId);
+        zoomObj.innerHTML = "缩放级别:" + view.getZoom().toFixed(1);
+        view.on('change:resolution', function (evt) {
+            //var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            //var resolution = view.getResolution();
+            var zoom = view.getZoom();
+            zoom = zoom.toFixed(1);
+            //console.log("当前缩放级别:"+zoom);
+            if (zoomId == "") {
+                if (document.getElementById('me_zoom')) {
+                    document.getElementById('me_zoom').innerHTML = "缩放级别:" + zoom;
+                } else {
+                    let divScale = document.createElement('div');
+                    divScale.setAttribute("id", "me_zoom");
+                    divScale.innerHTML = "缩放级别:" + zoom;
+                    document.body.appendChild(divScale);
+                }
+            } else {
+                zoomObj.innerHTML = "缩放级别:" + zoom;
+            }
+        });
+    }
+
+
+    setViewByExtent(extent) {
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var lb = fromLonLat(lb); //将地理坐标转为投影坐标
+        var ru = fromLonLat(ru); //将地理坐标转为投影坐标
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        //console.log(cds);
+        this.setViewByExtentXY(cds);
+    }
+
+    setViewByExtentXY(extent) {
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[13260344.548525335, 3654173.497931803, 13377876.802341036, 3770407.209894539], 左下点[13260344.548525335, 3654173.497931803], 右上点[13377876.802341036, 3770407.209894539]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        //console.log(cds);
+        //添加全局视图控件
+        var ctrl_extent = new ZoomToExtent({
+            extent: cds,
+            tipLabel: '显示初始范围',
+            label: 'E'
+        });
+        this.map.addControl(ctrl_extent);
+        //缩放地图到全局范围显示
+        var view = this.map.getView();
+        var r = view.getResolutionForExtent(cds, this.map.getSize());
+        view.setResolution(r);
+        view.setCenter(getCenter(cds));
+    }
+
+    getExtentCenterXY(extent) { //返回中心点XY坐标
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var lb = fromLonLat(lb); //将地理坐标转为投影坐标
+        var ru = fromLonLat(ru); //将地理坐标转为投影坐标
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        return getCenter(cds);
+    }
+
+    getExtentCenter(extent) { //返回中心点地理坐标
+        //extent: [minx, miny, maxx, maxy]
+        //extent:[115, 30, 120, 32], 左下点[115,30], 右上点[120,32]
+        var lb = [extent[0], extent[1]];
+        var ru = [extent[2], extent[3]];
+        var cds = [lb[0], lb[1], ru[0], ru[1]];
+        return getCenter(cds);
+    }
+
+    getExtent() {
+        var view = this.map.getView();
+        var extent = view.calculateExtent(this.map.getSize());
+        var p1 = this.geoFromMrc([extent[0], extent[1]]);
+        var p2 = this.geoFromMrc([extent[2], extent[3]]);
+        var region = [p1[0], p1[1], p2[0], p2[1]];
+        return region;
+    }
+
+    setMinZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setMinZoom(z);
+        this.zoomMin = z;
+    }
+
+    setMaxZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setMaxZoom(z);
+        this.zoomMax = z;
+    }
+
+    setZoom(z) {
+        //z=5
+        var view = this.map.getView()
+        view.setZoom(z);
+    }
+
+    geoToMrc([lon, lat]) {
+        //transform geographic coordinate system  to Mercator projection CS
+        //[lon,lat]->[x,y]
+        return transform([lon, lat], 'EPSG:4326', 'EPSG:3857');
+    }
+    geoFromMrc([x, y]) {
+        //transform Mercator projection coordinate system to geographic CS
+        //[x,y]->[lon,lat]
+        return transform([x, y], 'EPSG:3857', 'EPSG:4326');
+    }
+
+    degreeToMeter(deg) {
+        return transform([deg, deg], 'EPSG:4326', 'EPSG:3857')[0];
+    }
+
+    degreeFromMeter(met) {
+        return transform([met, met], 'EPSG:3857', 'EPSG:4326')[0];
+    }
+
+    zoomOut() {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        console.log("当前放大级别:" + zoom);
+        view.setZoom(zoom - 1);
+    }
+
+    zoomIn = function () {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        console.log("当前缩小级别:" + zoom);
+        view.setZoom(zoom + 1);
+    }
+
+    panTo([lon, lat]) {
+        //[lon,lat]:[121,32]
+        //获取地图视图
+        var view = this.map.getView();
+        var wh = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        //平移地图
+        view.setCenter(wh);
+        var zoom = view.getZoom();
+        view.setZoom(zoom);
+    }
+
+    panToXY([X, Y], z = 10) {
+        //[x,y]:[12100,3200]
+        //获取地图视图
+        var view = this.map.getView();
+        //平移地图
+        view.setCenter([X, Y]);
+        var zoom = view.getZoom();
+        zoom = z > zoom ? z : zoom;
+        view.setZoom(zoom);
+    }
+
+    getZoom() {
+        var view = this.map.getView();
+        var zoom = view.getZoom();
+        return zoom;
+    }
+
+    showScale(scaleId = "") {
+        var view = this.map.getView();
+        view.on('change:resolution', function (evt) {
+            //var resolution = evt.target.get('resolution'); //分辨率: 每个象元代表的实地距离
+            var resolution = viewObj.getResolution();
+            var units = viewObj.getProjection().getUnits(); //default: m
+            //console.log('units: '+units);
+            var dpi = 25.4 / 0.28;
+            var mpu = METERS_PER_UNIT[units]; //获取以米为单位的半径(如degrees,radians,pixels),如果是m, mpu=1
+            //console.log('mpu: '+mpu);
+
+            const inchesPerMeter = 1000 / 25.4;  //每米多少英寸, 39.37
+            var scale = resolution * mpu * inchesPerMeter * dpi; //比例尺: 图上距离和实地距离之比
+
+            scale = Math.round(scale);
+            if (scaleId == "") {
+                if (document.getElementById('me_scale')) {
+                    document.getElementById('me_scale').innerHTML = "比例尺 = 1 : " + scale;
+                } else {
+                    let divScale = document.createElement('div');
+                    divScale.setAttribute("id", "me_scale");
+                    divScale.innerHTML = "比例尺 = 1 : " + scale;
+                    document.body.appendChild(divScale);
+                }
+            } else {
+                document.getElementById(scaleId).innerHTML = "比例尺 = 1 : " + scale;
+            }
+        });
+    }
+
+    markerIsExist([lon, lat], tol = 0.01) {//根据坐标判断是否存在重复点
+        var pt = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        //console.log(pt[0]);
+        var overlays = this.map.getOverlays().getArray();
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            let id = params.id;
+            let name = params.name;
+            if (oid.indexOf('marker') >= 0) {
+                //let pos = overlays[k].getPosition();
+                let pos = params.pos;
+                let dis = ((pt[0] - pos[0]) ** 2 + (pt[1] - pos[1]) ** 2) ** 0.5;
+                if (dis <= tol) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    markerIsExistById(id) {//根据id判断是否存在重复点
+        var overlays = this.map.getOverlays().getArray();
+        //console.log("markerIsExistById: "+id+", "+overlays.length);
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            //console.log("markerIsExistById: "+oid+","+id);
+            if (oid == ('marker_'+id)) {
+                    return true;
+            }
+        }
+        return false;
+    }
+
+    addMarkerAndLabel([lon, lat], id, label, fcolor = '#F00', opacity = 1, markerParams = {}, markerStyle = { width: '8px', height: '8px' }, func) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增div元素
+        var elementDiv = document.createElement('div'); //Marker
+        elementDiv.className = "ol-marker";
+        elementDiv.style.setProperty('background-color', fcolor);
+        elementDiv.style.setProperty('opacity', opacity);
+        elementDiv.style.setProperty('border', '1px solid' + fcolor);
+        elementDiv.style.setProperty('width', markerStyle.width);
+        elementDiv.style.setProperty('height', markerStyle.height);
+        elementDiv.setAttribute('desc', JSON.stringify(markerParams));
+        elementDiv.onclick = function (e) {
+            //去除所有Popup
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) { //恢复原marker样式
+                let oid = overlays[k].getId();
+                if (oid.indexOf('marker') >= 0) {
+                    let e = overlays[k].get('element');
+                    let c = e.style['background-color'];
+                    //console.log('marker c0='+c);
+                    c = colorRGBtoHex(c);
+                    //console.log('marker c1='+c);
+                    e.style.setProperty('border', '1px solid' + c);
+                    //console.log('MarkerZ=' + overlays[k].get('element').style['z-index']);
+                }
+            }
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid.indexOf("popup") >= 0) {
+                    overlays[k].setPosition(undefined); //隐藏所有POPUP
+                }
+            }
+            //console.log(overlays.length);
+            for (var k in overlays) {
+                let a = overlays[k].getId();
+                let a0 = a.split('_')[0];
+                let a1 = a.split('_')[1];
+                if (a1 == id && a0 == "popup") {
+                    //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                    //overlays[k].get('element').style.setProperty('z-index', 9000);
+                    //console.log('POPUPZ=' + overlays[k].get('element').style['z-index']);
+                    func(id, overlays[k], cpoint);
+                    break;
+                }
+            }
+            //高亮显示当前元素
+            elementDiv.style.setProperty('border', '3px solid #FF0000');
+        }
+
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-marker-text";
+        elementA.style.setProperty('font-size', '0px');
+        elementA.innerHTML = label; //设置文本
+        elementA.setAttribute('desc', JSON.stringify(markerParams));
+        elementA.onclick = function (e) {
+            //去除所有Popup
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) { //恢复原marker样式
+                let oid = overlays[k].getId();
+                if (oid.indexOf('marker') >= 0) {
+                    let e = overlays[k].get('element');
+                    let c = e.style['background-color'];
+                    c = colorRGBtoHex(c);
+                    //console.log('c='+c);
+                    e.style.setProperty('border', '1px solid' + c);
+                    //e.style.setProperty('z-index', 1000);
+                }
+            }
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid.indexOf("popup") >= 0) {
+                    overlays[k].setPosition(undefined); //隐藏所有POPUP
+                }
+            }
+            for (var k in overlays) {
+                let a = overlays[k].getId();
+                let a0 = a.split('_')[0];
+                let a1 = a.split('_')[1];
+                if (a1 == id && a0 == "popup") {
+                    //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                    //overlays[k].get('element').style.setProperty('z-index', 9000);
+                    func(id, overlays[k], cpoint);
+                    break;
+                }
+            }
+            //高亮显示当前元素
+            elementDiv.style.setProperty('border', '3px solid #FF0000');
+        }
+        // 新建的div元素添加a子节点
+        elementDiv.appendChild(elementA);
+
+        //实例化图文标注(图形+文本),添加到地图容器中
+        var newMarker = new Overlay({
+            id: "$marker_" + id,  //图钉
+            name: label,
+            position: cpoint,
+            positioning: 'center-center',
+            element: elementDiv,
+            stopEvent: false //为了不遮盖popup,该处stopEvent必须设置为false
+        });
+        this.map.addOverlay(newMarker);
+
+        var newText = new Overlay({
+            id: "$text_" + id, //图钉文本
+            name: label,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-marker-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+    // 用于在地图上添加标记(marker) 可自定义图标 位置 大小等属性
+    addMarker([lon, lat], id, label, fcolor = '#F00', opacity = 1,
+        markerParams = {},
+        markerStyle = { width: '10px', height: '10px' },
+        func, funcJggChang) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增div元素
+        var elementDiv = document.createElement('div'); //Marker
+        elementDiv.className = "ol-marker";
+        elementDiv.style.setProperty('background-color', fcolor);
+        elementDiv.style.setProperty('opacity', opacity);
+        elementDiv.style.setProperty('border', '1px solid #FFF');
+        elementDiv.style.setProperty('width', markerStyle.width);
+        elementDiv.style.setProperty('height', markerStyle.height);
+        let prefix = 'marker_';
+        markerParams.prefix = prefix;
+        elementDiv.setAttribute('desc', JSON.stringify(markerParams));
+        var geoToMrc = this.geoToMrc;
+        elementDiv.onclick = function (e) { //点击当前Marker事件
+            var overlays = map.getOverlays().getArray();
+            let popup_display = [];//过滤已打开弹窗的站点
+            for (let k in overlays) {
+                let oid = overlays[k].getId();
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let fid = params.id;
+                if (oid.indexOf("popup") >= 0) {
+                    if (oid == ('popup_' + id)) { //当前站点
+                        //overlays[k].setPosition(cpoint);  //设置为当前站点位置
+                        //overlays[k].get('element').style.setProperty('z-index', 9000);
+                        //console.log('POPUPZ=' + overlays[k].get('element').style['z-index']);
+                        //func(id, overlays[k], cpoint);
+                        func(elementDiv, id, overlays[k]); //显示当前站点弹窗
+                    } else {
+                        if (params.display) { //记录其他打开弹窗的站点
+                            popup_display.push(fid);
+                        }
+                        //overlays[k].setPosition(undefined); //隐藏其他站点POPUP
+                    }
+                }
+            }
+            /////////////////////////////////////////////////////////////////
+            //隐藏当前的MarkerLabel
+            for (let k in overlays) {
+                let oid = overlays[k].getId();
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let fid = params.id;
+                if (oid.indexOf("label_") >= 0) { //关闭当前站点的label
+                    let ep = overlays[k].get('element');
+                    let params = JSON.parse(ep.getAttribute("desc"));
+                    let pos = geoToMrc(params.pos);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    if (oid == ("label_" + id)) { //关闭当前站点的label
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else if (popup_display.includes(fid)) { //关闭其他打开弹窗的label
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else {
+                        overlays[k].setPosition(pt); //显示其他站点的label
+                        params.display = true;
+                    }
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+            //打开九宫格切换按钮
+            funcJggChang('jggShow');
+            /////////////////////////////////////////////////////////////////
+        }
+        //实例化Marker并添加到地图容器中
+
+        var newMarker = new Overlay({
+            id: prefix + id,
+            name: label,
+            position: cpoint,
+            positioning: 'center-center',
+            element: elementDiv,
+            stopEvent: false //为了不遮盖popup,该处stopEvent必须设置为false
+        });
+        this.map.addOverlay(newMarker);
+    }
+
+    addMarkerLabel(pos, flag, id, label, labelParams = {}, labelStyle = { color: '#000' }) {
+        var cpoint = fromLonLat(pos);//将地理坐标转为投影坐标
+        cpoint = flag == 1 ? cpoint : undefined;
+        var map = this.map;
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-mlabel-text";
+        //elementA.style.setProperty('font-size', labelStyle.fontSize);
+        elementA.style.setProperty('color', labelStyle.color);
+        elementA.style.setProperty('text-shadow', '-1px -1px 0 #FFF, 1px -1px 0 #FFF, -1px 1px 0 #FFF, 1px 1px 0 #FFF');//字体描边
+        elementA.innerHTML = label; //设置文本
+        let prefix = 'label_';
+        labelParams.prefix = prefix;
+        elementA.setAttribute('desc', JSON.stringify(labelParams));
+        var newText = new Overlay({
+            id: prefix + id,
+            name: label,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-mlabel-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+
+    addTag([lon, lat], id, tag, labelParams = {}, labelStyle = { color: '#000', fontSize: '12px' }) {
+        var cpoint = fromLonLat([lon, lat]);//将地理坐标转为投影坐标
+        var map = this.map;
+        //新增a元素
+        var elementA = document.createElement("div"); //Label
+        elementA.className = "ol-label-text";
+        elementA.style.setProperty('font-size', labelStyle.fontSize);
+        elementA.style.setProperty('color', labelStyle.color);
+        elementA.style.setProperty('text-shadow', '-1px -1px 0 #FFF, 1px -1px 0 #FFF, -1px 1px 0 #FFF, 1px 1px 0 #FFF'); //字体描边
+        elementA.innerHTML = tag; //设置文本
+        let prefix = 'tag_';
+        labelParams.prefix = prefix;
+        elementA.setAttribute('desc', JSON.stringify(labelParams));
+        var newText = new Overlay({
+            id: prefix + id,
+            name: tag,
+            position: cpoint,
+            element: elementA,
+            stopEvent: false, //为了不遮盖popup,该处stopEvent必须设置为false
+            className: 'ol-label-text-container'
+        });
+        this.map.addOverlay(newText);
+    }
+
+    /*
+    addTag([lon, lat], label, minZoom = 6, maxZoom = 10, initZoom = 5) {
+        //E.g.: [lon,lat]=[121,32], labelName="Nantong"
+        //实例化Vector要素,通过矢量图层添加到地图容器中
+        var labelPoint = fromLonLat([lon, lat]); //将地理坐标转为投影坐标
+        var labelFeature = new Feature({
+            geometry: new Point(labelPoint),
+            id: "label_" + label,
+            name: label,
+        });
+        //矢量标注的数据源
+        var vectorSource = new SourceVector({
+            features: [labelFeature]
+        });
+        //矢量标注图层
+        var vectorLayer = new LayerVector({
+            source: vectorSource
+        });
+        this.map.addLayer(vectorLayer);
+
+        //设置样式
+        var _style = new Style({
+            text: new Text({
+                //位置
+                textAlign: 'center',
+                //基准线
+                textBaseline: 'middle',
+                //文字样式
+                font: 'normal 0px 微软雅黑',
+                //文本内容
+                text: labelFeature.get('name'),
+                //文本填充样式(即文字颜色)
+                fill: new Fill({ color: '#000000' }),
+                stroke: new Stroke({ color: '#FFF', width: 1 }),
+            }),
+            zIndex: 1000,
+        });
+        labelFeature.setStyle(_style);
+        //添加滚轮事件
+        var view = this.map.getView();
+        view.on('change:resolution', function (feature) {
+            // 重新设置标注的尺寸
+            var z = viewObj.getZoom();
+            if (z >= minZoom && z <= maxZoom) {
+                _style.getText().setFont('normal ' + labelZoomSize(initZoom, this.getZoom()) + 'px 微软雅黑');
+            } else {
+                _style.getText().setFont('normal 0px 微软雅黑');
+            }
+            labelFeature.setStyle(_style);
+        });
+        //console.log(labelFeature.getStyle());
+    }
+    */
+
+    updatePopupInfo(id, info) {
+        var overlays = this.map.getOverlays().getArray();
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid == "popup_" + id) {
+                let container = overlays[k].get('element'); //获取container
+                let content = container.getElementById('content_' + id);
+                content.innerHTML = info;
+                break;
+            }
+        }
+    }
+
+    getDisplayedPopupsId(map) {//获取当前处于弹窗显示状态的ID编号
+        let overlays = map.getOverlays().getArray();
+        let ids = [];
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            if (oid.indexOf("popup_") >= 0) {//过滤弹窗
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id=params.id;
+                if (params.display) {
+                    ids.push(id);
+                }
+            }
+        }
+        return ids;
+    }
+
+    addPopup(pos, flag, id, info, funcLeftClick, funcRightClick, funcJggChang, popupParams = {}) {
+        let pt = fromLonLat(pos);//将地理坐标转为投影坐标
+        //console.log("addPopup: "+info);
+        //创建Popup容器
+        var mapDiv = document.getElementById(this.mapId);
+        var container = document.createElement('div'); //popup
+        var content = document.createElement('div'); //popup-content
+        var closer = document.createElement('a'); //popup-closer
+
+        container.setAttribute('class', 'ol-popup');
+        container.setAttribute('id', 'container_' + id);
+        container.setAttribute('desc', JSON.stringify(popupParams));
+
+        content.setAttribute('class', 'popup-content');
+        content.setAttribute('id', 'content_' + id);
+        content.innerHTML = info;
+
+        closer.setAttribute('class', 'ol-popup-closer');
+        closer.setAttribute('href', '#');
+        closer.setAttribute('id', 'close_' + id);
+        closer.setAttribute('title', '关闭弹窗');
+        closer.innerHTML = '[x]';
+
+        container.appendChild(closer);
+        container.appendChild(content);
+        //container.appendChild(hidden);
+        //mapDiv.appendChild(container);
+
+        //在地图中创建一个Overlay
+        var cpoint = flag == 1 ? pt : undefined;
+        var popup = new Overlay({
+            position: cpoint,
+            id: 'popup_' + id,
+            //要转换成overlay的HTML元素
+            element: container,
+            //当前窗口可见
+            autoPan: false,
+            //Popup放置的位置
+            //positioning: 'bottom-center',
+            //是否应该停止事件传播到地图窗口
+            stopEvent: true, //在popup容器内部点击不触发地图事件,此处必需设置为true
+            autoPanAnimation: {
+                //当Popup超出地图边界时,为了Popup全部可见,地图移动的速度
+                duration: 500
+            },
+            className: 'ol-popup-container' //控制popup的图层堆叠索引z-index
+        });
+
+        container.addEventListener("click", function (evt) {
+            //console.log("容器事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            //alert("你点了左键");
+            funcLeftClick(id);       //左击事件回调函数
+        });
+
+        container.addEventListener("mousedown", function (evt) {
+            //console.log("容器事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            if (evt.button == 2) {
+                //alert("你点了右键");
+                funcRightClick(evt, id);  //右击事件回调函数
+            }
+        });
+        var map = this.map;
+        var geoToMrc = this.geoToMrc;
+        var getDisplayedPopupsId = this.getDisplayedPopupsId;
+        closer.addEventListener("click", function (evt) { //添加关闭按钮的单击事件(隐藏popup)
+            //console.log("关闭按钮事件源:"+evt.target.id+", 类型:"+evt.type);
+            evt.stopPropagation();   //阻止向父元素冒泡
+            evt.preventDefault();    //阻止元素默认行为
+            //未定义popup位置
+
+            popup.setPosition(undefined);
+            //失去焦点
+            closer.blur();
+            let params = JSON.parse(container.getAttribute('desc'));
+            params.display = false;
+            //alert("当前位置:"+params.pos+", 原先位置:"+pos);
+            container.setAttribute('desc', JSON.stringify(params));
+            //return false;
+            /////////////////////////////////////////////////////////////////
+            //打开当前的MarkerTag和MarkerLabel
+            var overlays = map.getOverlays().getArray();
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                if (oid == ("label_" + id)) {
+                    let ep = overlays[k].get('element');
+                    let params = JSON.parse(ep.getAttribute("desc"));
+                    let pos = geoToMrc(params.pos);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    //console.log('pos'+"_"+pt);
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+
+                    params.display = true;
+                    ep.setAttribute("desc", JSON.stringify(params));
+                    break;
+                }
+            }
+            let ids = getDisplayedPopupsId(map);
+            if (ids.length == 0) { //当显示的弹窗为0时,关闭九宫格切换按钮
+                funcJggChang('jggHidden'); //关闭九宫格切换按钮
+            }
+            /////////////////////////////////////////////////////////////////
+        });
+        this.map.addOverlay(popup);
+    }
+
+    showAllMarkerLabels(flag = 1) { //显示所有MarkerPin
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("label_") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (flag) {
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+                    params.display = true;
+                } else {
+                    overlays[k].setPosition(undefined);  //设置为当前站点位置
+                    params.display = false;
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+        }
+    }
+
+    showAllPopups(flag = 1) { //显示所有弹窗
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        var yichang_ids = [];
+        var markerHide_ids = [];
+        var markerHide_ids_normal = [];
+        for (var m in overlays) { //查询处于隐藏状态的站点编号
+            let oid = overlays[m].getId();
+            let pos = overlays[m].getPosition();
+            if (oid.indexOf("marker_") >= 0) {
+                let ep = overlays[m].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let zt = params.status;
+                if (typeof (pos) == 'undefined') { //如果当前marker处于隐藏状态,比如关闭固定站或便携站
+                    markerHide_ids.push(id);
+                    if (zt == "正常") {
+                        markerHide_ids_normal.push(id);
+                    }
+                }
+            }
+        }
+        for (var k in overlays) { //显示【设备正常站点】弹窗
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup_") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let zt = params.status;
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (flag && zt == "正常" && !markerHide_ids.includes(id)) {//当前站点的marker没有预先隐藏的话
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+                    params.display = true;
+                } else {
+                    overlays[k].setPosition(undefined);  //设置为当前站点位置
+                    params.display = false;
+                    if (zt != "正常") {
+                        yichang_ids.push(id);
+                    }
+                }
+                ep.setAttribute('desc', JSON.stringify(params)); //更新参数
+            }
+        }
+        //显示【非正常站点】的label
+        for (var i in overlays) {
+            let oid = overlays[i].getId();
+            if (oid.indexOf("label_") >= 0) {
+                let ep = overlays[i].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let id = params.id;
+                let pos = this.geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                if (!flag && !markerHide_ids.includes(id)) {//如果不显示弹窗,打开所有label
+                    overlays[i].setPosition(pt);
+                    params.display = true;
+                } else {//如果显示弹窗,打开异常站点label
+                    if (yichang_ids.includes(id) && !markerHide_ids.includes(id)) { //显示非正常站点的label
+                        overlays[i].setPosition(pt);
+                        params.display = true;
+                    } else {
+                        overlays[i].setPosition(undefined);
+                        params.display = false;
+                    }
+                }
+                ep.setAttribute("desc", JSON.stringify(params));
+            }
+        }
+        return markerHide_ids_normal;
+    }
+
+    showPopupsById(ids) { //显示指定id的站点弹窗
+        var overlays = this.map.getOverlays().getArray(); //获取Overlay要素
+        for (var k in overlays) { //查询处于隐藏状态的站点编号
+            let oid = overlays[k].getId();
+            //let pos = overlays[k].getPosition();
+            let ep = overlays[k].get('element');
+            let params = JSON.parse(ep.getAttribute("desc"));
+            let zt = params.status;
+            let pos = this.geoToMrc(params.pos);
+            let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+            for (var id in ids) {
+                if (oid == ("popup_" + ids[id])) {
+                    if (zt == "正常") {
+                        overlays[k].setPosition(pt);  //设置为当前站点位置
+                        params.display = true;
+                    } else {
+                        overlays[k].setPosition(undefined);  //设置为当前站点位置
+                        params.display = false;
+                    }
+                    ep.setAttribute('desc', JSON.stringify(params)); //更新参数
+                    break;
+                }
+                if (oid == ("label_" + ids[id])) {
+                    if (zt == "正常") {
+                        overlays[k].setPosition(undefined);
+                        params.display = false;
+                    } else {
+                        overlays[k].setPosition(pt);  //设置为当前站点位置
+                        params.display = true;
+                    }
+                    ep.setAttribute("desc", JSON.stringify(params));
+                    break;
+                }
+            }
+        }
+    }
+
+}

+ 256 - 0
src/assets/map/basemap.js

@@ -0,0 +1,256 @@
+/*
+* 加载自定义地图主函数,参数说明:
+* url:WMS网址
+* mapDiv: 实例化的OL对象
+* map: 由mapDiv返回的地图对象
+* view: 由mapDiv返回的视图对象
+*/
+import {OLMap} from "@/assets/map/OLMap.js";
+
+export function load_wxmap(mapDiv, isVisible) {
+  // 加载自定义的卫星地图,并根据isVisible参数决定是否显示
+  // mapDiv: 地图的容器,负责承载地图和地图操作
+  // isVisible: 是否显示微信地图
+
+  // 将卫星地图添加到地图容器中
+  mapDiv.addMapWX(isVisible);
+
+  // 将卫星地图的标记添加到地图容器中
+  mapDiv.addMapWXTag(isVisible);
+}
+
+export function load_basemap(url, mapDiv, map, view) {
+  // 加载基础地图,并根据缩放级别调整地图层的可见性
+  // url: WMS服务的基础URL
+  // mapDiv: 地图的容器
+  // map: 地图对象,用于控制地图的显示和交互
+  // view: 视图对象,用于控制地图的视角(缩放级别、中心点等)
+
+  // 如果未传入URL 则使用默认的本地服务
+  // url = url != '' ? url : 'http://localhost:8080';   /***url = if url ≠ 空 返回url ;否则 返回 http://localhost:8080*/
+  if(url == " "){
+    url = "http://localhost:8080";
+  }
+  //拼接得到完整的WMS服务URL,用于加载基础地图
+  var wmsUrl = url + '/geoserver/basemap/wms';
+
+  //缩放级别和地理边界
+  var ze = 8;
+  var _bbox = [73, 3, 135, 60];
+  //获取当前地图的缩放级别
+  var z = view.getZoom();
+  //定义各地图层的出事可见性(即在当前缩放级别下收否显示)
+  var v_boundary = true;
+  var v_nanhai   = false;
+  var v_nanhaidaoyu = false;
+  var v_capital    = false;
+  var v_province = true;
+  var v_provinceName = false;
+  var v_city = false;
+  var v_cityName = false;
+  var v_county = false;
+  var v_countyName = false;
+  var v_town = false;
+  var v_tielu = false;
+  var v_gaosu = false;
+  var v_guodao = false;
+  var v_shengdao = false;
+  // 动态设置地图层的可见性,基于当前的缩放级别z
+  if (z <= 5.7) {
+       v_province = true;
+  }
+  if (z >= 4.3 && z <= 4.6) {
+       v_provinceName = true;
+  }
+  if (z >= 5.6 && z <= 7.7) {
+       v_city = true;
+  }
+  if (z >= 5.6 && z <= 7.7) {
+       v_cityName = true;
+  }
+  if (z >= 7.6 && z <= 10.7) {
+       v_county = true;
+  }
+  if (z >= 7.6) {
+       v_countyName = true;
+  }
+  if (z >= 10.6) {
+       v_town = true;
+  }
+  if (z >= 5.6) {
+       v_gaosu = true;
+  }
+  if (z >= 6.6) {
+       v_tielu = true;
+  }
+  if (z >= 7.6) {
+       v_guodao = true;
+  }
+  if (z >= 8.6) {
+       v_shengdao = true;
+  }
+  if (z >= 4.6 && z <= 10) {
+       v_capital = true;
+  }
+  if (z >= 5.1) {
+       v_nanhai = true;
+  }
+  if (z >= 5.4) {
+       v_nanhaidaoyu = true;
+  }
+  var boundary = { layers: 'basemap:boundary', visible: v_boundary };
+  var nanhai = { layers: 'basemap:nanhai', visible: v_nanhai };
+  var nanhaidaoyu = { layers: 'basemap:nanhaidaoyu', visible: v_nanhaidaoyu };
+  var capital = { layers: 'basemap:capital', bbox: _bbox, visible: v_capital };
+  var province = {
+       layers: 'basemap:province, basemap:River1_4l, basemap:River1_4p',
+       visible: v_province
+  };
+  var provinceName = { layers: 'basemap:provinceName', bbox: _bbox, visible: v_provinceName };
+  var city = {
+       layers: 'basemap:city, basemap:River2_4l, basemap:River2_4p', bbox: _bbox,
+       visible: v_city
+  };
+  var cityName = { layers: 'basemap:cityName', bbox: _bbox, visible: v_cityName };
+  var county = {
+       layers: 'basemap:county, basemap:River2_4l, basemap:River2_4p, basemap:River4_4l',
+       styles: ',me_river2l_label,me_river2p_label,', visible: v_county
+  };
+  var countyName = { layers: 'basemap:countyName', bbox: _bbox, visible: v_countyName };
+  var town = {
+       layers: 'basemap:county, basemap:River2_4l, basemap:River2_4p, basemap:River4_4l, basemap:River5_4l',
+       styles: ',me_river2l_label,me_river2p_label,,', visible: v_town
+  };
+  //
+  var tielu = { layers: 'basemap:tielu', bbox: _bbox, visible: v_tielu };
+  var gaosu = { layers: 'basemap:gaosu', bbox: _bbox, visible: v_gaosu };
+  var guodao = { layers: 'basemap:guodao', bbox: _bbox, visible: v_guodao };
+  var shengdao = { layers: 'basemap:shengdao', bbox: _bbox, visible: v_shengdao };
+
+  //
+  mapDiv.addMapTileWMS('province', wmsUrl, province, 0, 5.7); //采用瓦片WMS,提升访问速度
+  mapDiv.addMapImageWMS('provinceName', wmsUrl, provinceName, 4.3, 4.6);//采用图片WMS,防止标注遗缺或重叠
+  mapDiv.addMapTileWMS('city', wmsUrl, city, 5.6, 7.7);
+  mapDiv.addMapImageWMS('cityName', wmsUrl, cityName, 5.6, 7.7);
+  mapDiv.addMapTileWMS('county', wmsUrl, county, 7.6, 10.7);
+  mapDiv.addMapImageWMS('countyName', wmsUrl, countyName, 7.6, ze);
+  mapDiv.addMapTileWMS('town', wmsUrl, town, 10.6, ze);
+
+
+  //
+  //mapDiv.addMapTileWMS('gaosu', wmsUrl, gaosu, 5.6, ze); //关闭高速
+  //mapDiv.addMapTileWMS('tielu', wmsUrl, tielu, 6.6, ze); //关闭铁路
+  //mapDiv.addMapTileWMS('guodao', wmsUrl, guodao, 7.6, ze); //关闭道路
+  //mapDiv.addMapTileWMS('shengdao', wmsUrl, shengdao, 8.6, ze); //关闭道路
+  //
+  mapDiv.addMapImageWMS('capital', wmsUrl, capital, 4.6, 10);
+  mapDiv.addMapTileWMS('boundary', wmsUrl, boundary, 0, ze);
+  mapDiv.addMapTileWMS('nanhan', wmsUrl, nanhai, 5.1, ze);
+  mapDiv.addMapImageWMS('nanhandaoyu', wmsUrl, nanhaidaoyu, 5.4, ze);
+  mapDiv.addCapital(0, 4.5); //添加首都4.5
+  view.on('change:resolution', function (evt) {
+       var z = view.getZoom();
+       map.getLayers().forEach(function (lyr) {
+            console.log();
+            if (lyr.get('id') == 'gaosu') {
+                 if (z < 8.1) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_road_gaosu_label" });
+                 }
+            }
+            if (lyr.get('id') == 'tielu') {
+                 if (z < 8.4) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_tielu_label" });
+                 }
+            }
+            if (lyr.get('id') == 'guodao') {
+                 if (z < 9.4) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_road_guodao_label" });
+                 }
+            }
+       });
+  });
+}
+
+
+export function load_basemap_ori(url = '', mapDiv, map, view) {
+  //
+  url = url != '' ? url : 'http://localhost:8080';
+  var wmsUrl = url + '/geoserver/basemap/wms';
+  var ze = 20;
+  var _bbox = [73.50, 3.83, 135.10, 53.57];
+  var boundary = { layers: 'basemap:boundary', visible: true };
+  var nanhai = { layers: 'basemap:nanhai', visible: false };
+  var nanhaidaoyu = { layers: 'basemap:nanhaidaoyu', visible: false };
+  var capital = { layers: 'basemap:capital', bbox: _bbox, visible: false };
+  var province = { layers: 'basemap:province, basemap:River1_4l, basemap:River1_4p', visible: true };
+  var provinceName = { layers: 'basemap:provinceName', bbox: _bbox, visible: false };
+  var city = { layers: 'basemap:city, basemap:River2_4l, basemap:River2_4p', bbox: _bbox, visible: false };
+  var cityName = { layers: 'basemap:cityName', bbox: _bbox, visible: false };
+  var county = {
+       layers: 'basemap:county, basemap:River2_4l, basemap:River2_4p, basemap:River4_4l',
+       styles: ',me_river2l_label,me_river2p_label,', visible: false
+  };
+  var countyName = { layers: 'basemap:countyName', bbox: _bbox, visible: false };
+  var town = {
+       layers: 'basemap:county, basemap:River2_4l, basemap:River2_4p, basemap:River4_4l, basemap:River5_4l',
+       styles: ',me_river2l_label,me_river2p_label,,', visible: false
+  };
+  //
+  var tielu = { layers: 'basemap:tielu', bbox: _bbox, visible: false };
+  var gaosu = { layers: 'basemap:gaosu', bbox: _bbox, visible: false };
+  var guodao = { layers: 'basemap:guodao', bbox: _bbox, visible: false };
+  var shengdao = { layers: 'basemap:shengdao', bbox: _bbox, visible: false };
+  //
+  mapDiv.addMapTileWMS('province', wmsUrl, province, 0, 5.7); //采用瓦片WMS,提升访问速度
+  mapDiv.addMapImageWMS('provinceName', wmsUrl, provinceName, 4.3, 4.6);//采用图片WMS,防止标注遗缺或重叠
+  mapDiv.addMapTileWMS('city', wmsUrl, city, 5.6, 7.7);
+  mapDiv.addMapImageWMS('cityName', wmsUrl, cityName, 5.6, 7.7);
+  mapDiv.addMapTileWMS('county', wmsUrl, county, 7.6, 10.7);
+  mapDiv.addMapImageWMS('countyName', wmsUrl, countyName, 7.6, ze);
+  mapDiv.addMapTileWMS('town', wmsUrl, town, 10.6, ze);
+  //
+  //mapDiv.addMapTileWMS('gaosu', wmsUrl, gaosu, 5.6, ze); //关闭高速
+  //mapDiv.addMapTileWMS('tielu', wmsUrl, tielu, 6.6, ze); //关闭铁路
+  //mapDiv.addMapTileWMS('guodao', wmsUrl, guodao, 7.6, ze); //关闭道路
+  //mapDiv.addMapTileWMS('shengdao', wmsUrl, shengdao, 8.6, ze); //关闭道路
+  //
+  mapDiv.addMapImageWMS('capital', wmsUrl, capital, 4.6, 10);
+  //
+  mapDiv.addMapTileWMS('boundary', wmsUrl, boundary, 0, ze);
+  mapDiv.addMapTileWMS('nanhan', wmsUrl, nanhai, 5.1, ze);
+  mapDiv.addMapImageWMS('nanhandaoyu', wmsUrl, nanhaidaoyu, 5.4, ze);
+  mapDiv.addCapital(0, 4.5); //添加首都
+  view.on('change:resolution', function (evt) {
+       var z = view.getZoom();
+       map.getLayers().forEach(function (lyr) {
+            if (lyr.get('id') == 'gaosu') {
+                 if (z < 8.1) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_road_gaosu_label" });
+                 }
+            }
+            if (lyr.get('id') == 'tielu') {
+                 if (z < 8.4) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_tielu_label" });
+                 }
+            }
+            if (lyr.get('id') == 'guodao') {
+                 if (z < 9.4) { //恢复默认,隐藏标注
+                      lyr.getSource().updateParams({ 'STYLES': '' });
+                 } else { //设置省文件样式为me_city,显示标注
+                      lyr.getSource().updateParams({ 'STYLES': "me_road_guodao_label" });
+                 }
+            }
+       });
+  });
+}
+

+ 8056 - 0
src/assets/map/demo.json.js

@@ -0,0 +1,8056 @@
+export let data={
+  "displayFieldName" : "",
+  "fieldAliases" : {
+    "FID" : "FID",
+    "PINYIN" : "PINYIN",
+    "wd" : "wd",
+    "zgwd" : "zgwd",
+    "zdwd" : "zdwd",
+    "qy" : "qy",
+    "sd" : "sd",
+    "fs" : "fs",
+    "fx" : "fx",
+    "yl" : "yl",
+    "yunl" : "yunl",
+    "njd" : "njd",
+    "tqxx" : "tqxx",
+    "lat" : "lat",
+    "lon" : "lon",
+    "zt" : "zt"
+  },
+  "geometryType" : "esriGeometryPoint",
+  "spatialReference" : {
+    "wkid" : null
+  },
+  "fields" : [
+    {
+      "name" : "FID",
+      "type" : "esriFieldTypeOID",
+      "alias" : "FID"
+    },
+    {
+      "name" : "PINYIN",
+      "type" : "esriFieldTypeString",
+      "alias" : "PINYIN",
+      "length" : 50
+    },
+    {
+      "name" : "wd",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "wd"
+    },
+    {
+      "name" : "zgwd",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "zgwd"
+    },
+    {
+      "name" : "zdwd",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "zdwd"
+    },
+    {
+      "name" : "qy",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "qy"
+    },
+    {
+      "name" : "sd",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "sd"
+    },
+    {
+      "name" : "fs",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "fs"
+    },
+    {
+      "name" : "fx",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "fx"
+    },
+    {
+      "name" : "yl",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "yl"
+    },
+    {
+      "name" : "yunl",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "yunl"
+    },
+    {
+      "name" : "njd",
+      "type" : "esriFieldTypeSmallInteger",
+      "alias" : "njd"
+    },
+    {
+      "name" : "tqxx",
+      "type" : "esriFieldTypeString",
+      "alias" : "tqxx",
+      "length" : 50
+    },
+    {
+      "name" : "lat",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "lat"
+    },
+    {
+      "name" : "lon",
+      "type" : "esriFieldTypeSingle",
+      "alias" : "lon"
+    },
+    {
+      "name" : "zt",
+      "type" : "esriFieldTypeString",
+      "alias" : "zt",
+      "length" : 50
+    }
+  ],
+  "features" : [
+    {
+      "attributes" : {
+        "FID" : 0,
+        "PINYIN" : "Jingdezhen",
+        "wd" : 35.8048,
+        "zgwd" : 46.7535,
+        "zdwd" : 25.4277,
+        "qy" : 1016.43,
+        "sd" : 81.8273,
+        "fs" : 3.36135,
+        "fx" : 9.31475,
+        "yl" : 7.78357,
+        "yunl" : 86.1079,
+        "njd" : 23,
+        "tqxx" : "小雨",
+        "lat" : 29.1952,
+        "lon" : 117.118,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 117.11794281005859,
+        "y" : 29.195167541503906
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 1,
+        "PINYIN" : "Baiyin",
+        "wd" : 28.4606,
+        "zgwd" : 39.1602,
+        "zdwd" : 17.8215,
+        "qy" : 1028.3,
+        "sd" : 7.43952,
+        "fs" : 6.78697,
+        "fx" : 235.083,
+        "yl" : 59.2877,
+        "yunl" : 30.4663,
+        "njd" : 40,
+        "tqxx" : "多云",
+        "lat" : 36.5394,
+        "lon" : 104.184,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.18377685546875,
+        "y" : 36.539417266845703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 2,
+        "PINYIN" : "Beijing",
+        "wd" : 25.0764,
+        "zgwd" : 35.1266,
+        "zdwd" : 14.9802,
+        "qy" : 1024.71,
+        "sd" : 44.925,
+        "fs" : 3.70087,
+        "fx" : 52.449,
+        "yl" : 40.4198,
+        "yunl" : 85.0082,
+        "njd" : 16,
+        "tqxx" : "晴天",
+        "lat" : 39.9236,
+        "lon" : 116.381,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.38094329833984,
+        "y" : 39.923614501953125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 3,
+        "PINYIN" : "Tianjin",
+        "wd" : 25.8689,
+        "zgwd" : 36.1879,
+        "zdwd" : 15.0855,
+        "qy" : 1038.97,
+        "sd" : 73.4323,
+        "fs" : 6.67939,
+        "fx" : 45.2519,
+        "yl" : 24.9363,
+        "yunl" : 59.4658,
+        "njd" : 59,
+        "tqxx" : "晴天",
+        "lat" : 39.1311,
+        "lon" : 117.203,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.20349884033203,
+        "y" : 39.131118774414062
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 4,
+        "PINYIN" : "Tangshan",
+        "wd" : 25.3747,
+        "zgwd" : 36.3645,
+        "zdwd" : 14.5275,
+        "qy" : 1055.75,
+        "sd" : 90.5542,
+        "fs" : 5.94703,
+        "fx" : 96.6894,
+        "yl" : 92.3411,
+        "yunl" : 94.8042,
+        "njd" : 17,
+        "tqxx" : "中雨",
+        "lat" : 39.6253,
+        "lon" : 118.202,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.20172882080078,
+        "y" : 39.625339508056641
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 5,
+        "PINYIN" : "Qinhuangdao",
+        "wd" : 25.0757,
+        "zgwd" : 35.0832,
+        "zdwd" : 14.4187,
+        "qy" : 1045.03,
+        "sd" : 85.3239,
+        "fs" : 4.53122,
+        "fx" : 228.646,
+        "yl" : 66.7674,
+        "yunl" : 38.8289,
+        "njd" : 74,
+        "tqxx" : "多云",
+        "lat" : 39.9243,
+        "lon" : 119.598,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.59829711914062,
+        "y" : 39.924308776855469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 6,
+        "PINYIN" : "Zhangjiakou",
+        "wd" : 24.1826,
+        "zgwd" : 34.7911,
+        "zdwd" : 13.6519,
+        "qy" : 1014.32,
+        "sd" : 73.9106,
+        "fs" : 3.22916,
+        "fx" : 171.34,
+        "yl" : 7.93803,
+        "yunl" : 47.8709,
+        "njd" : 45,
+        "tqxx" : "多云",
+        "lat" : 40.8174,
+        "lon" : 114.879,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.87877655029297,
+        "y" : 40.817440032958984
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 7,
+        "PINYIN" : "Chengde",
+        "wd" : 24.0324,
+        "zgwd" : 34.7954,
+        "zdwd" : 13.2292,
+        "qy" : 1028.36,
+        "sd" : 70.5166,
+        "fs" : 4.61745,
+        "fx" : 81.5027,
+        "yl" : 25.8396,
+        "yunl" : 51.2599,
+        "njd" : 10,
+        "tqxx" : "多云",
+        "lat" : 40.9676,
+        "lon" : 117.922,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.92234039306641,
+        "y" : 40.967601776123047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 8,
+        "PINYIN" : "Langfang",
+        "wd" : 25.4849,
+        "zgwd" : 36.2028,
+        "zdwd" : 15.0551,
+        "qy" : 1051.38,
+        "sd" : 22.1163,
+        "fs" : 6.46291,
+        "fx" : 325.145,
+        "yl" : 41.1422,
+        "yunl" : 31.8419,
+        "njd" : 97,
+        "tqxx" : "多云",
+        "lat" : 39.5151,
+        "lon" : 116.69,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.68985748291016,
+        "y" : 39.515110015869141
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 9,
+        "PINYIN" : "Shijiazhuang",
+        "wd" : 26.9549,
+        "zgwd" : 37.2576,
+        "zdwd" : 16.9182,
+        "qy" : 1047.93,
+        "sd" : 45.2425,
+        "fs" : 6.66985,
+        "fx" : 74.6796,
+        "yl" : 66.4803,
+        "yunl" : 46.9943,
+        "njd" : 82,
+        "tqxx" : "阴天",
+        "lat" : 38.0451,
+        "lon" : 114.49,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 114.48977661132812,
+        "y" : 38.045127868652344
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 10,
+        "PINYIN" : "Handan",
+        "wd" : 28.3985,
+        "zgwd" : 38.5345,
+        "zdwd" : 18.3282,
+        "qy" : 1044.9,
+        "sd" : 20.6806,
+        "fs" : 6.20511,
+        "fx" : 213.196,
+        "yl" : 63.2594,
+        "yunl" : 91.7637,
+        "njd" : 75,
+        "tqxx" : "阴天",
+        "lat" : 36.6015,
+        "lon" : 114.473,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.47295379638672,
+        "y" : 36.601516723632812
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 11,
+        "PINYIN" : "Xingtai",
+        "wd" : 27.9344,
+        "zgwd" : 38.4638,
+        "zdwd" : 17.8144,
+        "qy" : 1013.9,
+        "sd" : 44.8875,
+        "fs" : 10.8946,
+        "fx" : 169.952,
+        "yl" : 90.4794,
+        "yunl" : 1.31084,
+        "njd" : 36,
+        "tqxx" : "阴天",
+        "lat" : 37.0656,
+        "lon" : 114.495,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.49508666992187,
+        "y" : 37.065589904785156
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 12,
+        "PINYIN" : "Baoding",
+        "wd" : 26.1429,
+        "zgwd" : 36.9417,
+        "zdwd" : 15.5329,
+        "qy" : 1047.74,
+        "sd" : 94.4637,
+        "fs" : 4.73576,
+        "fx" : 313.439,
+        "yl" : 91.3428,
+        "yunl" : 24.9207,
+        "njd" : 15,
+        "tqxx" : "晴天",
+        "lat" : 38.8571,
+        "lon" : 115.5,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 115.50018310546875,
+        "y" : 38.857070922851563
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 13,
+        "PINYIN" : "Cangzhou",
+        "wd" : 26.6912,
+        "zgwd" : 36.6976,
+        "zdwd" : 16.1529,
+        "qy" : 1035.62,
+        "sd" : 66.1588,
+        "fs" : 3.12769,
+        "fx" : 87.0093,
+        "yl" : 32.6816,
+        "yunl" : 80.2365,
+        "njd" : 62,
+        "tqxx" : "阴天",
+        "lat" : 38.3088,
+        "lon" : 116.861,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.86077117919922,
+        "y" : 38.308841705322266
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 14,
+        "PINYIN" : "Hengshui",
+        "wd" : 27.2722,
+        "zgwd" : 37.7112,
+        "zdwd" : 16.7311,
+        "qy" : 1023.57,
+        "sd" : 25.93,
+        "fs" : 11.0047,
+        "fx" : 332.16,
+        "yl" : 26.9293,
+        "yunl" : 94.866,
+        "njd" : 37,
+        "tqxx" : "阴天",
+        "lat" : 37.7278,
+        "lon" : 115.708,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.70819091796875,
+        "y" : 37.727821350097656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 15,
+        "PINYIN" : "Taiyuan",
+        "wd" : 27.1289,
+        "zgwd" : 37.2633,
+        "zdwd" : 17.1182,
+        "qy" : 1025.48,
+        "sd" : 1.81649,
+        "fs" : 6.64052,
+        "fx" : 113.737,
+        "yl" : 14.4871,
+        "yunl" : 65.4305,
+        "njd" : 85,
+        "tqxx" : "阴天",
+        "lat" : 37.8711,
+        "lon" : 112.569,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.56935119628906,
+        "y" : 37.871112823486328
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 16,
+        "PINYIN" : "Datong",
+        "wd" : 24.9029,
+        "zgwd" : 34.9138,
+        "zdwd" : 14.8168,
+        "qy" : 1030.6,
+        "sd" : 81.2726,
+        "fs" : 11.2916,
+        "fx" : 352.388,
+        "yl" : 88.8408,
+        "yunl" : 73.6258,
+        "njd" : 38,
+        "tqxx" : "阴天",
+        "lat" : 40.0971,
+        "lon" : 113.296,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.29633331298828,
+        "y" : 40.097148895263672
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 17,
+        "PINYIN" : "Yangquan",
+        "wd" : 27.1393,
+        "zgwd" : 37.9119,
+        "zdwd" : 16.6443,
+        "qy" : 1020.86,
+        "sd" : 73.5617,
+        "fs" : 10.3932,
+        "fx" : 96.8245,
+        "yl" : 28.489,
+        "yunl" : 13.6066,
+        "njd" : 9,
+        "tqxx" : "多云",
+        "lat" : 37.8607,
+        "lon" : 113.574,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.57425689697266,
+        "y" : 37.86065673828125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 18,
+        "PINYIN" : "Jincheng",
+        "wd" : 29.4935,
+        "zgwd" : 39.6897,
+        "zdwd" : 18.8056,
+        "qy" : 1043.15,
+        "sd" : 72.1486,
+        "fs" : 7.80993,
+        "fx" : 354.548,
+        "yl" : 16.4401,
+        "yunl" : 32.609,
+        "njd" : 34,
+        "tqxx" : "晴天",
+        "lat" : 35.5065,
+        "lon" : 112.843,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 112.84272003173828,
+        "y" : 35.506511688232422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 19,
+        "PINYIN" : "Shuozhou",
+        "wd" : 25.6869,
+        "zgwd" : 35.8225,
+        "zdwd" : 15.1618,
+        "qy" : 1040.44,
+        "sd" : 32.3605,
+        "fs" : 4.53677,
+        "fx" : 14.7175,
+        "yl" : 1.36595,
+        "yunl" : 48.4352,
+        "njd" : 70,
+        "tqxx" : "阴天",
+        "lat" : 39.3131,
+        "lon" : 112.423,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.42327117919922,
+        "y" : 39.313133239746094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 20,
+        "PINYIN" : "Xinzhou",
+        "wd" : 26.6008,
+        "zgwd" : 37.0583,
+        "zdwd" : 16.5829,
+        "qy" : 1061.21,
+        "sd" : 54.1256,
+        "fs" : 7.82562,
+        "fx" : 246.416,
+        "yl" : 20.6572,
+        "yunl" : 38.9203,
+        "njd" : 48,
+        "tqxx" : "多云",
+        "lat" : 38.3992,
+        "lon" : 112.732,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.73155212402344,
+        "y" : 38.399208068847656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 21,
+        "PINYIN" : "Lishi",
+        "wd" : 27.488,
+        "zgwd" : 38.1636,
+        "zdwd" : 16.9727,
+        "qy" : 1046.31,
+        "sd" : 56.862,
+        "fs" : 5.23152,
+        "fx" : 273.623,
+        "yl" : 16.9023,
+        "yunl" : 13.05,
+        "njd" : 36,
+        "tqxx" : "中雨",
+        "lat" : 37.512,
+        "lon" : 111.135,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.13481140136719,
+        "y" : 37.512042999267578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 22,
+        "PINYIN" : "Yuci",
+        "wd" : 27.3239,
+        "zgwd" : 38.1375,
+        "zdwd" : 16.7205,
+        "qy" : 1044.18,
+        "sd" : 86.7186,
+        "fs" : 11.8101,
+        "fx" : 293.234,
+        "yl" : 5.90582,
+        "yunl" : 43.4438,
+        "njd" : 52,
+        "tqxx" : "多云",
+        "lat" : 37.6761,
+        "lon" : 112.745,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.745361328125,
+        "y" : 37.676139831542969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 23,
+        "PINYIN" : "Linfen",
+        "wd" : 28.9172,
+        "zgwd" : 39.7168,
+        "zdwd" : 18.1625,
+        "qy" : 1036.04,
+        "sd" : 32.8481,
+        "fs" : 10.6364,
+        "fx" : 225.791,
+        "yl" : 88.6807,
+        "yunl" : 97.2946,
+        "njd" : 4,
+        "tqxx" : "阴天",
+        "lat" : 36.0828,
+        "lon" : 111.514,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.51416778564453,
+        "y" : 36.08282470703125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 24,
+        "PINYIN" : "Yuncheng",
+        "wd" : 29.9861,
+        "zgwd" : 40.5049,
+        "zdwd" : 19.8055,
+        "qy" : 1046.77,
+        "sd" : 6.25453,
+        "fs" : 11.9973,
+        "fx" : 307.178,
+        "yl" : 23.0932,
+        "yunl" : 48.7058,
+        "njd" : 19,
+        "tqxx" : "多云",
+        "lat" : 35.0139,
+        "lon" : 110.991,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 110.99114990234375,
+        "y" : 35.013916015625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 25,
+        "PINYIN" : "Changzhi",
+        "wd" : 28.8181,
+        "zgwd" : 39.3264,
+        "zdwd" : 18.5938,
+        "qy" : 1020.35,
+        "sd" : 61.2463,
+        "fs" : 12.4797,
+        "fx" : 321.89,
+        "yl" : 56.0953,
+        "yunl" : 26.6868,
+        "njd" : 67,
+        "tqxx" : "阴天",
+        "lat" : 36.1819,
+        "lon" : 113.106,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.10556793212891,
+        "y" : 36.181911468505859
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 26,
+        "PINYIN" : "Huhehaote",
+        "wd" : 24.1791,
+        "zgwd" : 34.4748,
+        "zdwd" : 13.653,
+        "qy" : 1019.55,
+        "sd" : 36.3785,
+        "fs" : 7.81033,
+        "fx" : 119.992,
+        "yl" : 85.4597,
+        "yunl" : 85.8827,
+        "njd" : 37,
+        "tqxx" : "阴天",
+        "lat" : 40.8209,
+        "lon" : 111.663,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.66329956054687,
+        "y" : 40.820941925048828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 27,
+        "PINYIN" : "Baotou",
+        "wd" : 24.3336,
+        "zgwd" : 34.8747,
+        "zdwd" : 13.4638,
+        "qy" : 1039.99,
+        "sd" : 42.8473,
+        "fs" : 12.2092,
+        "fx" : 324.728,
+        "yl" : 27.3802,
+        "yunl" : 83.1695,
+        "njd" : 22,
+        "tqxx" : "多云",
+        "lat" : 40.6664,
+        "lon" : 109.852,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 109.85170745849609,
+        "y" : 40.666423797607422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 28,
+        "PINYIN" : "Wuhai",
+        "wd" : 25.3258,
+        "zgwd" : 35.5156,
+        "zdwd" : 14.6109,
+        "qy" : 1061.47,
+        "sd" : 79.8178,
+        "fs" : 7.32661,
+        "fx" : 54.8197,
+        "yl" : 72.4643,
+        "yunl" : 57.958,
+        "njd" : 8,
+        "tqxx" : "中雨",
+        "lat" : 39.6742,
+        "lon" : 106.815,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.81487274169922,
+        "y" : 39.674201965332031
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 29,
+        "PINYIN" : "Jining",
+        "wd" : 23.9688,
+        "zgwd" : 34.5948,
+        "zdwd" : 12.9954,
+        "qy" : 1056.49,
+        "sd" : 83.0872,
+        "fs" : 5.57672,
+        "fx" : 233.873,
+        "yl" : 18.7657,
+        "yunl" : 22.4449,
+        "njd" : 54,
+        "tqxx" : "晴天",
+        "lat" : 41.0312,
+        "lon" : 113.099,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.09851837158203,
+        "y" : 41.031166076660156
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 30,
+        "PINYIN" : "Dongsheng",
+        "wd" : 25.1816,
+        "zgwd" : 35.189,
+        "zdwd" : 15.0098,
+        "qy" : 1053.97,
+        "sd" : 96.2888,
+        "fs" : 5.19809,
+        "fx" : 94.3469,
+        "yl" : 41.0881,
+        "yunl" : 81.8392,
+        "njd" : 98,
+        "tqxx" : "晴天",
+        "lat" : 39.8184,
+        "lon" : 109.998,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 109.99758148193359,
+        "y" : 39.818428039550781
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 31,
+        "PINYIN" : "Linhe",
+        "wd" : 24.2377,
+        "zgwd" : 34.3929,
+        "zdwd" : 13.7732,
+        "qy" : 1027.79,
+        "sd" : 79.8437,
+        "fs" : 6.5807,
+        "fx" : 294.351,
+        "yl" : 66.6992,
+        "yunl" : 81.9257,
+        "njd" : 16,
+        "tqxx" : "多云",
+        "lat" : 40.7623,
+        "lon" : 107.395,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 107.39456939697266,
+        "y" : 40.762340545654297
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 32,
+        "PINYIN" : "Alxa Zuoqi",
+        "wd" : 26.1598,
+        "zgwd" : 36.5292,
+        "zdwd" : 15.4477,
+        "qy" : 1046.43,
+        "sd" : 18.359,
+        "fs" : 9.19212,
+        "fx" : 30.0498,
+        "yl" : 86.7123,
+        "yunl" : 18.6378,
+        "njd" : 21,
+        "tqxx" : "多云",
+        "lat" : 38.8402,
+        "lon" : 105.665,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.66545867919922,
+        "y" : 38.840240478515625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 33,
+        "PINYIN" : "Chifeng",
+        "wd" : 22.732,
+        "zgwd" : 33.1101,
+        "zdwd" : 12.2024,
+        "qy" : 1062.69,
+        "sd" : 68.8765,
+        "fs" : 11.8786,
+        "fx" : 290.941,
+        "yl" : 93.4655,
+        "yunl" : 17.6699,
+        "njd" : 50,
+        "tqxx" : "晴天",
+        "lat" : 42.268,
+        "lon" : 118.95,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.94982147216797,
+        "y" : 42.267982482910156
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 34,
+        "PINYIN" : "Tongliao",
+        "wd" : 21.3884,
+        "zgwd" : 31.9743,
+        "zdwd" : 11.292,
+        "qy" : 1054.19,
+        "sd" : 47.7563,
+        "fs" : 7.08332,
+        "fx" : 158.318,
+        "yl" : 56.2322,
+        "yunl" : 13.3838,
+        "njd" : 23,
+        "tqxx" : "多云",
+        "lat" : 43.6116,
+        "lon" : 122.26,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.26033020019531,
+        "y" : 43.611560821533203
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 35,
+        "PINYIN" : "Xilinhot",
+        "wd" : 21.0557,
+        "zgwd" : 31.724,
+        "zdwd" : 10.2387,
+        "qy" : 1045.95,
+        "sd" : 75.0195,
+        "fs" : 9.84661,
+        "fx" : 285.624,
+        "yl" : 4.6663,
+        "yunl" : 56.0981,
+        "njd" : 63,
+        "tqxx" : "小雨",
+        "lat" : 43.9443,
+        "lon" : 116.066,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.06626892089844,
+        "y" : 43.944290161132813
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 36,
+        "PINYIN" : "Hailar",
+        "wd" : 15.7885,
+        "zgwd" : 26.3493,
+        "zdwd" : 5.57957,
+        "qy" : 1019.34,
+        "sd" : 1.22902,
+        "fs" : 7.03068,
+        "fx" : 144.194,
+        "yl" : 24.3166,
+        "yunl" : 87.6847,
+        "njd" : 41,
+        "tqxx" : "阴天",
+        "lat" : 49.2115,
+        "lon" : 119.731,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 119.73056030273437,
+        "y" : 49.211528778076172
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 37,
+        "PINYIN" : "Wulanhaote",
+        "wd" : 18.9318,
+        "zgwd" : 29.3099,
+        "zdwd" : 7.9516,
+        "qy" : 1026.85,
+        "sd" : 56.9837,
+        "fs" : 3.06489,
+        "fx" : 74.7067,
+        "yl" : 79.468,
+        "yunl" : 82.7482,
+        "njd" : 33,
+        "tqxx" : "阴天",
+        "lat" : 46.0682,
+        "lon" : 122.068,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.06845855712891,
+        "y" : 46.068225860595703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 38,
+        "PINYIN" : "Jiagedaqi",
+        "wd" : 14.573,
+        "zgwd" : 25.0061,
+        "zdwd" : 4.52722,
+        "qy" : 1026.1,
+        "sd" : 81.7792,
+        "fs" : 11.8918,
+        "fx" : 218.495,
+        "yl" : 53.0751,
+        "yunl" : 25.2733,
+        "njd" : 28,
+        "tqxx" : "多云",
+        "lat" : 50.427,
+        "lon" : 124.132,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 124.13156127929687,
+        "y" : 50.426963806152344
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 39,
+        "PINYIN" : "Shenyang",
+        "wd" : 23.2034,
+        "zgwd" : 33.5943,
+        "zdwd" : 12.9354,
+        "qy" : 1063.03,
+        "sd" : 58.5071,
+        "fs" : 4.75881,
+        "fx" : 183.98,
+        "yl" : 99.289,
+        "yunl" : 84.2204,
+        "njd" : 59,
+        "tqxx" : "多云",
+        "lat" : 41.7966,
+        "lon" : 123.412,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 123.41168212890625,
+        "y" : 41.796615600585938
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 40,
+        "PINYIN" : "Dalian",
+        "wd" : 26.0822,
+        "zgwd" : 36.6385,
+        "zdwd" : 15.3997,
+        "qy" : 1022.13,
+        "sd" : 90.7634,
+        "fs" : 10.3755,
+        "fx" : 284,
+        "yl" : 12.3666,
+        "yunl" : 45.9093,
+        "njd" : 17,
+        "tqxx" : "多云",
+        "lat" : 38.9178,
+        "lon" : 121.601,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.60083770751953,
+        "y" : 38.917804718017578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 41,
+        "PINYIN" : "Anshan",
+        "wd" : 23.8847,
+        "zgwd" : 34.2064,
+        "zdwd" : 13.5535,
+        "qy" : 1024.85,
+        "sd" : 51.8064,
+        "fs" : 12.5927,
+        "fx" : 233.705,
+        "yl" : 99.1291,
+        "yunl" : 87.8249,
+        "njd" : 60,
+        "tqxx" : "中雨",
+        "lat" : 41.1153,
+        "lon" : 122.984,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.98438262939453,
+        "y" : 41.115257263183594
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 42,
+        "PINYIN" : "Fushun",
+        "wd" : 23.1521,
+        "zgwd" : 33.2958,
+        "zdwd" : 12.5988,
+        "qy" : 1038.96,
+        "sd" : 2.34601,
+        "fs" : 12.2902,
+        "fx" : 178.797,
+        "yl" : 43.03,
+        "yunl" : 42.0387,
+        "njd" : 27,
+        "tqxx" : "中雨",
+        "lat" : 41.8479,
+        "lon" : 123.93,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 123.92955780029297,
+        "y" : 41.847866058349609
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 43,
+        "PINYIN" : "Benxi",
+        "wd" : 23.7124,
+        "zgwd" : 34.3636,
+        "zdwd" : 12.8107,
+        "qy" : 1042.6,
+        "sd" : 65.635,
+        "fs" : 8.06438,
+        "fx" : 196.357,
+        "yl" : 33.7439,
+        "yunl" : 34.8821,
+        "njd" : 43,
+        "tqxx" : "中雨",
+        "lat" : 41.2876,
+        "lon" : 123.765,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 123.76450347900391,
+        "y" : 41.287586212158203
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 44,
+        "PINYIN" : "Jinzhou",
+        "wd" : 23.8889,
+        "zgwd" : 34.6382,
+        "zdwd" : 13.4345,
+        "qy" : 1036.89,
+        "sd" : 19.0837,
+        "fs" : 3.32896,
+        "fx" : 82.1908,
+        "yl" : 14.355,
+        "yunl" : 19.4255,
+        "njd" : 96,
+        "tqxx" : "阴天",
+        "lat" : 41.1111,
+        "lon" : 121.133,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.13336944580078,
+        "y" : 41.111125946044922
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 45,
+        "PINYIN" : "Yingkou",
+        "wd" : 24.3316,
+        "zgwd" : 34.6507,
+        "zdwd" : 13.4303,
+        "qy" : 1023.94,
+        "sd" : 54.8036,
+        "fs" : 12.3053,
+        "fx" : 357.506,
+        "yl" : 5.7668,
+        "yunl" : 70.3556,
+        "njd" : 84,
+        "tqxx" : "中雨",
+        "lat" : 40.6684,
+        "lon" : 122.224,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 122.22415161132812,
+        "y" : 40.668350219726562
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 46,
+        "PINYIN" : "Fuxin",
+        "wd" : 22.992,
+        "zgwd" : 33.1233,
+        "zdwd" : 12.714,
+        "qy" : 1042.93,
+        "sd" : 14.4146,
+        "fs" : 6.85964,
+        "fx" : 186.655,
+        "yl" : 14.99,
+        "yunl" : 7.05683,
+        "njd" : 22,
+        "tqxx" : "中雨",
+        "lat" : 42.008,
+        "lon" : 121.649,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.6488037109375,
+        "y" : 42.007953643798828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 47,
+        "PINYIN" : "Panjin",
+        "wd" : 23.8115,
+        "zgwd" : 34.3569,
+        "zdwd" : 13.5535,
+        "qy" : 1027.33,
+        "sd" : 6.24168,
+        "fs" : 4.67309,
+        "fx" : 125.031,
+        "yl" : 9.86079,
+        "yunl" : 41.4143,
+        "njd" : 91,
+        "tqxx" : "多云",
+        "lat" : 41.1885,
+        "lon" : 122.048,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.04763031005859,
+        "y" : 41.1884765625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 48,
+        "PINYIN" : "Tieling",
+        "wd" : 22.7044,
+        "zgwd" : 32.9698,
+        "zdwd" : 11.8057,
+        "qy" : 1014.07,
+        "sd" : 37.0738,
+        "fs" : 10.1478,
+        "fx" : 310.305,
+        "yl" : 59.7032,
+        "yunl" : 24.9946,
+        "njd" : 88,
+        "tqxx" : "多云",
+        "lat" : 42.2956,
+        "lon" : 123.844,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 123.84442901611328,
+        "y" : 42.295581817626953
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 49,
+        "PINYIN" : "Chaoyang",
+        "wd" : 23.4221,
+        "zgwd" : 33.6263,
+        "zdwd" : 12.5996,
+        "qy" : 1029.32,
+        "sd" : 18.3782,
+        "fs" : 8.9375,
+        "fx" : 245.267,
+        "yl" : 15.2053,
+        "yunl" : 38.2776,
+        "njd" : 89,
+        "tqxx" : "阴天",
+        "lat" : 41.5779,
+        "lon" : 120.451,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.45146942138672,
+        "y" : 41.577857971191406
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 50,
+        "PINYIN" : "Jinxi",
+        "wd" : 24.2467,
+        "zgwd" : 34.8543,
+        "zdwd" : 14.0142,
+        "qy" : 1033.81,
+        "sd" : 83.1336,
+        "fs" : 10.8234,
+        "fx" : 98.0576,
+        "yl" : 49.7523,
+        "yunl" : 64.2402,
+        "njd" : 99,
+        "tqxx" : "阴天",
+        "lat" : 40.7533,
+        "lon" : 120.847,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.84748077392578,
+        "y" : 40.753341674804688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 51,
+        "PINYIN" : "Dandong",
+        "wd" : 24.8648,
+        "zgwd" : 35.1766,
+        "zdwd" : 14.6585,
+        "qy" : 1028.9,
+        "sd" : 29.8094,
+        "fs" : 9.60642,
+        "fx" : 106.11,
+        "yl" : 19.5052,
+        "yunl" : 86.3803,
+        "njd" : 29,
+        "tqxx" : "晴天",
+        "lat" : 40.1352,
+        "lon" : 124.381,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 124.38146209716797,
+        "y" : 40.135181427001953
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 52,
+        "PINYIN" : "Changchun",
+        "wd" : 21.1074,
+        "zgwd" : 31.6195,
+        "zdwd" : 10.4384,
+        "qy" : 1037.2,
+        "sd" : 86.376,
+        "fs" : 4.25701,
+        "fx" : 245.173,
+        "yl" : 24.945,
+        "yunl" : 79.7979,
+        "njd" : 78,
+        "tqxx" : "多云",
+        "lat" : 43.8926,
+        "lon" : 125.315,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 125.3154296875,
+        "y" : 43.892562866210938
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 53,
+        "PINYIN" : "Jilin",
+        "wd" : 21.1133,
+        "zgwd" : 31.9561,
+        "zdwd" : 11.0117,
+        "qy" : 1036.64,
+        "sd" : 73.3211,
+        "fs" : 10.7718,
+        "fx" : 165.837,
+        "yl" : 70.0088,
+        "yunl" : 48.2905,
+        "njd" : 42,
+        "tqxx" : "阴天",
+        "lat" : 43.8867,
+        "lon" : 126.567,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 126.56681823730469,
+        "y" : 43.886676788330078
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 54,
+        "PINYIN" : "Siping",
+        "wd" : 21.8344,
+        "zgwd" : 32.1564,
+        "zdwd" : 11.794,
+        "qy" : 1062.76,
+        "sd" : 32.0682,
+        "fs" : 10.6306,
+        "fx" : 354.678,
+        "yl" : 73.9324,
+        "yunl" : 22.8748,
+        "njd" : 94,
+        "tqxx" : "多云",
+        "lat" : 43.1656,
+        "lon" : 124.377,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 124.37744903564453,
+        "y" : 43.165607452392578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 55,
+        "PINYIN" : "Liaoyuan",
+        "wd" : 22.0914,
+        "zgwd" : 32.798,
+        "zdwd" : 12.0904,
+        "qy" : 1059.39,
+        "sd" : 72.0447,
+        "fs" : 8.81261,
+        "fx" : 208.452,
+        "yl" : 89.5315,
+        "yunl" : 35.5361,
+        "njd" : 26,
+        "tqxx" : "多云",
+        "lat" : 42.9086,
+        "lon" : 125.137,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 125.13728332519531,
+        "y" : 42.908592224121094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 56,
+        "PINYIN" : "Hunjiang",
+        "wd" : 23.0697,
+        "zgwd" : 33.7951,
+        "zdwd" : 12.5077,
+        "qy" : 1054.05,
+        "sd" : 63.1666,
+        "fs" : 10.9325,
+        "fx" : 213.586,
+        "yl" : 1.72445,
+        "yunl" : 10.8034,
+        "njd" : 7,
+        "tqxx" : "中雨",
+        "lat" : 41.9303,
+        "lon" : 126.422,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 126.42160797119141,
+        "y" : 41.930332183837891
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 57,
+        "PINYIN" : "Baicheng",
+        "wd" : 19.3836,
+        "zgwd" : 29.9535,
+        "zdwd" : 9.01794,
+        "qy" : 1031.55,
+        "sd" : 39.3203,
+        "fs" : 7.03075,
+        "fx" : 332.224,
+        "yl" : 37.8097,
+        "yunl" : 5.82559,
+        "njd" : 92,
+        "tqxx" : "中雨",
+        "lat" : 45.6164,
+        "lon" : 122.84,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.83957672119141,
+        "y" : 45.616416931152344
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 58,
+        "PINYIN" : "Yanji",
+        "wd" : 22.0928,
+        "zgwd" : 32.8174,
+        "zdwd" : 11.7236,
+        "qy" : 1036.2,
+        "sd" : 77.7885,
+        "fs" : 11.9925,
+        "fx" : 341.772,
+        "yl" : 11.001,
+        "yunl" : 32.7565,
+        "njd" : 26,
+        "tqxx" : "阴天",
+        "lat" : 42.9072,
+        "lon" : 129.509,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 129.50942993164062,
+        "y" : 42.907230377197266
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 59,
+        "PINYIN" : "Tonghua",
+        "wd" : 23.2767,
+        "zgwd" : 34.139,
+        "zdwd" : 12.8564,
+        "qy" : 1027.34,
+        "sd" : 66.157,
+        "fs" : 9.31845,
+        "fx" : 235.394,
+        "yl" : 23.5593,
+        "yunl" : 50.9508,
+        "njd" : 21,
+        "tqxx" : "多云",
+        "lat" : 41.7233,
+        "lon" : 125.923,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 125.92312622070312,
+        "y" : 41.723293304443359
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 60,
+        "PINYIN" : "Haerbin",
+        "wd" : 19.2585,
+        "zgwd" : 29.7799,
+        "zdwd" : 9.01497,
+        "qy" : 1056.6,
+        "sd" : 55.8855,
+        "fs" : 9.3163,
+        "fx" : 164.836,
+        "yl" : 98.9728,
+        "yunl" : 51.3602,
+        "njd" : 40,
+        "tqxx" : "多云",
+        "lat" : 45.7415,
+        "lon" : 126.643,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 126.64334106445313,
+        "y" : 45.741493225097656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 61,
+        "PINYIN" : "Jixi",
+        "wd" : 19.703,
+        "zgwd" : 30.011,
+        "zdwd" : 9.07853,
+        "qy" : 1051.1,
+        "sd" : 77.9204,
+        "fs" : 12.7063,
+        "fx" : 329.196,
+        "yl" : 14.0546,
+        "yunl" : 6.19895,
+        "njd" : 99,
+        "tqxx" : "阴天",
+        "lat" : 45.297,
+        "lon" : 130.948,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 130.94775390625,
+        "y" : 45.297004699707031
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 62,
+        "PINYIN" : "Hegang",
+        "wd" : 17.6627,
+        "zgwd" : 28.063,
+        "zdwd" : 6.73157,
+        "qy" : 1047.22,
+        "sd" : 78.2359,
+        "fs" : 7.08089,
+        "fx" : 235.108,
+        "yl" : 19.2696,
+        "yunl" : 5.60924,
+        "njd" : 24,
+        "tqxx" : "晴天",
+        "lat" : 47.3373,
+        "lon" : 130.276,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 130.27619934082031,
+        "y" : 47.337284088134766
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 63,
+        "PINYIN" : "Shuangyashan",
+        "wd" : 18.3623,
+        "zgwd" : 29.1948,
+        "zdwd" : 7.8725,
+        "qy" : 1050.57,
+        "sd" : 89.8801,
+        "fs" : 12.6693,
+        "fx" : 277.044,
+        "yl" : 6.49261,
+        "yunl" : 4.16254,
+        "njd" : 86,
+        "tqxx" : "小雨",
+        "lat" : 46.6377,
+        "lon" : 131.152,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 131.15216064453125,
+        "y" : 46.637691497802734
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 64,
+        "PINYIN" : "Yichun",
+        "wd" : 17.2764,
+        "zgwd" : 27.7005,
+        "zdwd" : 7.01488,
+        "qy" : 1049.17,
+        "sd" : 88.4856,
+        "fs" : 11.5318,
+        "fx" : 23.584,
+        "yl" : 8.74496,
+        "yunl" : 15.0103,
+        "njd" : 42,
+        "tqxx" : "晴天",
+        "lat" : 47.7236,
+        "lon" : 128.904,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 128.90431213378906,
+        "y" : 47.723644256591797
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 65,
+        "PINYIN" : "Jiamusi",
+        "wd" : 18.1863,
+        "zgwd" : 28.8038,
+        "zdwd" : 7.55409,
+        "qy" : 1028.36,
+        "sd" : 75.9243,
+        "fs" : 8.77985,
+        "fx" : 312.869,
+        "yl" : 37.4221,
+        "yunl" : 60.3189,
+        "njd" : 86,
+        "tqxx" : "阴天",
+        "lat" : 46.8137,
+        "lon" : 130.362,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 130.36231994628906,
+        "y" : 46.813663482666016
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 66,
+        "PINYIN" : "Qitaihe",
+        "wd" : 19.1907,
+        "zgwd" : 29.5125,
+        "zdwd" : 9.05886,
+        "qy" : 1043.47,
+        "sd" : 2.4855,
+        "fs" : 10.3044,
+        "fx" : 208.978,
+        "yl" : 96.6965,
+        "yunl" : 84.4568,
+        "njd" : 61,
+        "tqxx" : "晴天",
+        "lat" : 45.8093,
+        "lon" : 130.875,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 130.87539672851562,
+        "y" : 45.809272766113281
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 67,
+        "PINYIN" : "Mudanjiang",
+        "wd" : 20.4161,
+        "zgwd" : 30.608,
+        "zdwd" : 9.56636,
+        "qy" : 1035.44,
+        "sd" : 47.0924,
+        "fs" : 9.55709,
+        "fx" : 223.122,
+        "yl" : 31.9781,
+        "yunl" : 10.687,
+        "njd" : 60,
+        "tqxx" : "中雨",
+        "lat" : 44.5839,
+        "lon" : 129.598,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 129.59849548339844,
+        "y" : 44.58392333984375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 68,
+        "PINYIN" : "Suihua",
+        "wd" : 18.363,
+        "zgwd" : 28.8262,
+        "zdwd" : 8.33618,
+        "qy" : 1020.87,
+        "sd" : 28.9212,
+        "fs" : 11.8202,
+        "fx" : 345.915,
+        "yl" : 8.60926,
+        "yunl" : 35.1514,
+        "njd" : 5,
+        "tqxx" : "中雨",
+        "lat" : 46.637,
+        "lon" : 126.983,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 126.98348999023437,
+        "y" : 46.637012481689453
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 69,
+        "PINYIN" : "Qiqiha'er",
+        "wd" : 17.6586,
+        "zgwd" : 28.3357,
+        "zdwd" : 7.36422,
+        "qy" : 1025.74,
+        "sd" : 27.2846,
+        "fs" : 5.94418,
+        "fx" : 283.432,
+        "yl" : 78.7857,
+        "yunl" : 94.2385,
+        "njd" : 17,
+        "tqxx" : "晴天",
+        "lat" : 47.3414,
+        "lon" : 123.959,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 123.95926666259766,
+        "y" : 47.34136962890625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 70,
+        "PINYIN" : "Daqing",
+        "wd" : 18.4045,
+        "zgwd" : 29.286,
+        "zdwd" : 8.35377,
+        "qy" : 1034.15,
+        "sd" : 50.295,
+        "fs" : 3.64723,
+        "fx" : 244.356,
+        "yl" : 67.4781,
+        "yunl" : 86.314,
+        "njd" : 98,
+        "tqxx" : "阴天",
+        "lat" : 46.5955,
+        "lon" : 125.025,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 125.02485656738281,
+        "y" : 46.595451354980469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 71,
+        "PINYIN" : "Heihe",
+        "wd" : 14.7555,
+        "zgwd" : 25.1721,
+        "zdwd" : 3.95731,
+        "qy" : 1051.96,
+        "sd" : 50.7828,
+        "fs" : 8.08605,
+        "fx" : 353.739,
+        "yl" : 83.7909,
+        "yunl" : 8.12651,
+        "njd" : 80,
+        "tqxx" : "多云",
+        "lat" : 50.2445,
+        "lon" : 127.487,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 127.4869384765625,
+        "y" : 50.244487762451172
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 72,
+        "PINYIN" : "Shanghai",
+        "wd" : 33.7618,
+        "zgwd" : 43.8589,
+        "zdwd" : 23.3385,
+        "qy" : 1019.47,
+        "sd" : 60.1289,
+        "fs" : 10.3972,
+        "fx" : 252.612,
+        "yl" : 43.7852,
+        "yunl" : 97.7775,
+        "njd" : 29,
+        "tqxx" : "多云",
+        "lat" : 31.2382,
+        "lon" : 121.469,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 121.46926879882812,
+        "y" : 31.238176345825195
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 73,
+        "PINYIN" : "Nanjing",
+        "wd" : 32.9524,
+        "zgwd" : 43.6909,
+        "zdwd" : 22.0191,
+        "qy" : 1061.19,
+        "sd" : 56.3281,
+        "fs" : 4.84548,
+        "fx" : 101.614,
+        "yl" : 69.1986,
+        "yunl" : 59.1332,
+        "njd" : 42,
+        "tqxx" : "中雨",
+        "lat" : 32.0476,
+        "lon" : 118.773,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.77278137207031,
+        "y" : 32.047615051269531
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 74,
+        "PINYIN" : "Wuxi",
+        "wd" : 33.4228,
+        "zgwd" : 43.6738,
+        "zdwd" : 22.8967,
+        "qy" : 1028.86,
+        "sd" : 6.38647,
+        "fs" : 3.25222,
+        "fx" : 59.0413,
+        "yl" : 3.00938,
+        "yunl" : 54.235,
+        "njd" : 61,
+        "tqxx" : "阴天",
+        "lat" : 31.5772,
+        "lon" : 120.299,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.29913330078125,
+        "y" : 31.577230453491211
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 75,
+        "PINYIN" : "Xuzhou",
+        "wd" : 30.7325,
+        "zgwd" : 41.4739,
+        "zdwd" : 20.2699,
+        "qy" : 1062.7,
+        "sd" : 41.0005,
+        "fs" : 6.2987,
+        "fx" : 330.015,
+        "yl" : 43.5151,
+        "yunl" : 82.2532,
+        "njd" : 15,
+        "tqxx" : "晴天",
+        "lat" : 34.2675,
+        "lon" : 117.186,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.18560791015625,
+        "y" : 34.267528533935547
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 76,
+        "PINYIN" : "Changzhou",
+        "wd" : 33.2161,
+        "zgwd" : 43.374,
+        "zdwd" : 23.0662,
+        "qy" : 1050.14,
+        "sd" : 75.449,
+        "fs" : 9.30392,
+        "fx" : 75.3818,
+        "yl" : 78.4486,
+        "yunl" : 22.6647,
+        "njd" : 58,
+        "tqxx" : "晴天",
+        "lat" : 31.7839,
+        "lon" : 119.95,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.95028686523437,
+        "y" : 31.783933639526367
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 77,
+        "PINYIN" : "Suzhou",
+        "wd" : 33.6835,
+        "zgwd" : 44.3828,
+        "zdwd" : 22.9953,
+        "qy" : 1038.85,
+        "sd" : 36.4376,
+        "fs" : 4.55725,
+        "fx" : 50.0247,
+        "yl" : 51.3431,
+        "yunl" : 96.9481,
+        "njd" : 46,
+        "tqxx" : "小雨",
+        "lat" : 31.3165,
+        "lon" : 120.619,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.61872863769531,
+        "y" : 31.316452026367188
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 78,
+        "PINYIN" : "Nantong",
+        "wd" : 32.9849,
+        "zgwd" : 43.8439,
+        "zdwd" : 22.029,
+        "qy" : 1053.63,
+        "sd" : 33.5052,
+        "fs" : 5.26421,
+        "fx" : 91.2681,
+        "yl" : 75.539,
+        "yunl" : 96.1255,
+        "njd" : 52,
+        "tqxx" : "多云",
+        "lat" : 32.0151,
+        "lon" : 120.856,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 120.85556793212891,
+        "y" : 32.015068054199219
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 79,
+        "PINYIN" : "Lianyungang",
+        "wd" : 30.3948,
+        "zgwd" : 40.6138,
+        "zdwd" : 19.6616,
+        "qy" : 1042.66,
+        "sd" : 29.1208,
+        "fs" : 4.91401,
+        "fx" : 173.681,
+        "yl" : 32.9812,
+        "yunl" : 73.177,
+        "njd" : 35,
+        "tqxx" : "中雨",
+        "lat" : 34.6052,
+        "lon" : 119.167,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.16680145263672,
+        "y" : 34.605178833007812
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 80,
+        "PINYIN" : "Huaiyin",
+        "wd" : 31.4127,
+        "zgwd" : 41.5103,
+        "zdwd" : 20.9555,
+        "qy" : 1018.39,
+        "sd" : 38.0175,
+        "fs" : 9.46237,
+        "fx" : 143.252,
+        "yl" : 21.231,
+        "yunl" : 3.8569,
+        "njd" : 21,
+        "tqxx" : "小雨",
+        "lat" : 33.5873,
+        "lon" : 119.014,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.0140380859375,
+        "y" : 33.587284088134766
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 81,
+        "PINYIN" : "Yancheng",
+        "wd" : 31.6102,
+        "zgwd" : 41.8799,
+        "zdwd" : 21.4512,
+        "qy" : 1023.12,
+        "sd" : 17.7416,
+        "fs" : 11.7514,
+        "fx" : 229.148,
+        "yl" : 59.0149,
+        "yunl" : 69.8085,
+        "njd" : 94,
+        "tqxx" : "多云",
+        "lat" : 33.3898,
+        "lon" : 120.135,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 120.13517761230469,
+        "y" : 33.389827728271484
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 82,
+        "PINYIN" : "Yangzhou",
+        "wd" : 32.6081,
+        "zgwd" : 42.6138,
+        "zdwd" : 21.9105,
+        "qy" : 1023.1,
+        "sd" : 48.7114,
+        "fs" : 12.8258,
+        "fx" : 19.7822,
+        "yl" : 34.7737,
+        "yunl" : 52.0312,
+        "njd" : 60,
+        "tqxx" : "阴天",
+        "lat" : 32.3919,
+        "lon" : 119.437,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.43683624267578,
+        "y" : 32.391887664794922
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 83,
+        "PINYIN" : "Zhenjiang",
+        "wd" : 32.7941,
+        "zgwd" : 43.3583,
+        "zdwd" : 22.7476,
+        "qy" : 1059.44,
+        "sd" : 35.2066,
+        "fs" : 3.64137,
+        "fx" : 129.556,
+        "yl" : 89.1526,
+        "yunl" : 3.71289,
+        "njd" : 23,
+        "tqxx" : "多云",
+        "lat" : 32.2059,
+        "lon" : 119.444,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.44429779052734,
+        "y" : 32.205898284912109
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 84,
+        "PINYIN" : "Hangzhou",
+        "wd" : 34.734,
+        "zgwd" : 45.4882,
+        "zdwd" : 23.8462,
+        "qy" : 1049.98,
+        "sd" : 25.1074,
+        "fs" : 7.16553,
+        "fx" : 195.357,
+        "yl" : 18.2546,
+        "yunl" : 92.9202,
+        "njd" : 0,
+        "tqxx" : "中雨",
+        "lat" : 30.266,
+        "lon" : 120.159,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 120.15924835205078,
+        "y" : 30.265995025634766
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 85,
+        "PINYIN" : "Ningbo",
+        "wd" : 35.1293,
+        "zgwd" : 45.3856,
+        "zdwd" : 24.432,
+        "qy" : 1023.91,
+        "sd" : 1.92755,
+        "fs" : 10.9542,
+        "fx" : 154.697,
+        "yl" : 9.70449,
+        "yunl" : 97.8989,
+        "njd" : 2,
+        "tqxx" : "晴天",
+        "lat" : 29.8707,
+        "lon" : 121.541,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.54128265380859,
+        "y" : 29.870668411254883
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 86,
+        "PINYIN" : "Wenzhou",
+        "wd" : 36.9835,
+        "zgwd" : 47.8367,
+        "zdwd" : 26.3101,
+        "qy" : 1029.75,
+        "sd" : 86.2719,
+        "fs" : 5.82904,
+        "fx" : 4.59708,
+        "yl" : 50.8236,
+        "yunl" : 88.7493,
+        "njd" : 38,
+        "tqxx" : "晴天",
+        "lat" : 28.0165,
+        "lon" : 120.65,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.65029144287109,
+        "y" : 28.016475677490234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 87,
+        "PINYIN" : "Jiaxing",
+        "wd" : 34.2289,
+        "zgwd" : 45.0553,
+        "zdwd" : 23.7987,
+        "qy" : 1038.32,
+        "sd" : 6.74192,
+        "fs" : 7.99346,
+        "fx" : 30.1101,
+        "yl" : 30.9588,
+        "yunl" : 39.5285,
+        "njd" : 25,
+        "tqxx" : "阴天",
+        "lat" : 30.7711,
+        "lon" : 120.754,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.75363159179687,
+        "y" : 30.771114349365234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 88,
+        "PINYIN" : "Huzhou",
+        "wd" : 34.134,
+        "zgwd" : 44.2665,
+        "zdwd" : 23.7613,
+        "qy" : 1013.53,
+        "sd" : 98.2153,
+        "fs" : 4.76666,
+        "fx" : 84.1332,
+        "yl" : 79.9548,
+        "yunl" : 17.4988,
+        "njd" : 98,
+        "tqxx" : "晴天",
+        "lat" : 30.866,
+        "lon" : 120.097,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.09712982177734,
+        "y" : 30.866039276123047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 89,
+        "PINYIN" : "Shaoxing",
+        "wd" : 34.9891,
+        "zgwd" : 45.649,
+        "zdwd" : 24.3424,
+        "qy" : 1019.72,
+        "sd" : 23.6122,
+        "fs" : 11.204,
+        "fx" : 4.47308,
+        "yl" : 46.2604,
+        "yunl" : 72.8493,
+        "njd" : 95,
+        "tqxx" : "阴天",
+        "lat" : 30.0109,
+        "lon" : 120.574,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.57392883300781,
+        "y" : 30.010931015014648
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 90,
+        "PINYIN" : "Jinhua",
+        "wd" : 35.8892,
+        "zgwd" : 45.9378,
+        "zdwd" : 25.1389,
+        "qy" : 1028.26,
+        "sd" : 64.9236,
+        "fs" : 3.58413,
+        "fx" : 160.261,
+        "yl" : 3.17641,
+        "yunl" : 69.8208,
+        "njd" : 23,
+        "tqxx" : "中雨",
+        "lat" : 29.1108,
+        "lon" : 119.652,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 119.65220642089844,
+        "y" : 29.110816955566406
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 91,
+        "PINYIN" : "Quzhou",
+        "wd" : 36.0416,
+        "zgwd" : 46.0731,
+        "zdwd" : 25.4165,
+        "qy" : 1041.13,
+        "sd" : 1.1714,
+        "fs" : 4.02744,
+        "fx" : 73.5423,
+        "yl" : 65.4006,
+        "yunl" : 52.2949,
+        "njd" : 78,
+        "tqxx" : "多云",
+        "lat" : 28.9584,
+        "lon" : 118.869,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.86917877197266,
+        "y" : 28.958444595336914
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 92,
+        "PINYIN" : "Zhoushan",
+        "wd" : 34.98,
+        "zgwd" : 45.8856,
+        "zdwd" : 24.9512,
+        "qy" : 1039.98,
+        "sd" : 39.9722,
+        "fs" : 8.93359,
+        "fx" : 193.924,
+        "yl" : 46.1799,
+        "yunl" : 57.1824,
+        "njd" : 29,
+        "tqxx" : "多云",
+        "lat" : 30.02,
+        "lon" : 122.102,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.10160827636719,
+        "y" : 30.020042419433594
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 93,
+        "PINYIN" : "Lishui",
+        "wd" : 36.5512,
+        "zgwd" : 47.5072,
+        "zdwd" : 25.8304,
+        "qy" : 1052.65,
+        "sd" : 76.6642,
+        "fs" : 8.92796,
+        "fx" : 347.645,
+        "yl" : 5.58349,
+        "yunl" : 62.2982,
+        "njd" : 39,
+        "tqxx" : "中雨",
+        "lat" : 28.4488,
+        "lon" : 119.917,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.91655731201172,
+        "y" : 28.448837280273438
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 94,
+        "PINYIN" : "Linhai",
+        "wd" : 36.1511,
+        "zgwd" : 46.3606,
+        "zdwd" : 25.5155,
+        "qy" : 1053.72,
+        "sd" : 25.7719,
+        "fs" : 6.65609,
+        "fx" : 291.117,
+        "yl" : 24.1273,
+        "yunl" : 53.495,
+        "njd" : 77,
+        "tqxx" : "阴天",
+        "lat" : 28.8489,
+        "lon" : 121.118,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.11844635009766,
+        "y" : 28.848892211914062
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 95,
+        "PINYIN" : "Hefei",
+        "wd" : 33.1367,
+        "zgwd" : 43.8116,
+        "zdwd" : 22.3376,
+        "qy" : 1059.09,
+        "sd" : 20.3444,
+        "fs" : 7.71468,
+        "fx" : 92.2522,
+        "yl" : 51.5443,
+        "yunl" : 46.3913,
+        "njd" : 76,
+        "tqxx" : "中雨",
+        "lat" : 31.8633,
+        "lon" : 117.276,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.27570343017578,
+        "y" : 31.863254547119141
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 96,
+        "PINYIN" : "Wuhu",
+        "wd" : 33.6655,
+        "zgwd" : 44.5947,
+        "zdwd" : 22.984,
+        "qy" : 1058.24,
+        "sd" : 91.5517,
+        "fs" : 10.2778,
+        "fx" : 18.2751,
+        "yl" : 38.6053,
+        "yunl" : 57.1471,
+        "njd" : 31,
+        "tqxx" : "阴天",
+        "lat" : 31.3345,
+        "lon" : 118.36,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 118.35983276367187,
+        "y" : 31.334495544433594
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 97,
+        "PINYIN" : "Bangbu",
+        "wd" : 32.0608,
+        "zgwd" : 42.8931,
+        "zdwd" : 21.5279,
+        "qy" : 1036.08,
+        "sd" : 46.5864,
+        "fs" : 9.55824,
+        "fx" : 12.4079,
+        "yl" : 67.2836,
+        "yunl" : 73.8409,
+        "njd" : 95,
+        "tqxx" : "阴天",
+        "lat" : 32.9392,
+        "lon" : 117.361,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.36138153076172,
+        "y" : 32.939243316650391
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 98,
+        "PINYIN" : "Huainan",
+        "wd" : 32.3833,
+        "zgwd" : 42.8967,
+        "zdwd" : 22.1855,
+        "qy" : 1045.03,
+        "sd" : 52.8634,
+        "fs" : 7.19335,
+        "fx" : 164.179,
+        "yl" : 26.467,
+        "yunl" : 45.5386,
+        "njd" : 20,
+        "tqxx" : "阴天",
+        "lat" : 32.6167,
+        "lon" : 117.021,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.02072906494141,
+        "y" : 32.616695404052734
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 99,
+        "PINYIN" : "Ma'anshan",
+        "wd" : 33.2751,
+        "zgwd" : 43.9999,
+        "zdwd" : 23.1236,
+        "qy" : 1060.24,
+        "sd" : 13.0814,
+        "fs" : 11.195,
+        "fx" : 280.24,
+        "yl" : 27.6123,
+        "yunl" : 41.8735,
+        "njd" : 16,
+        "tqxx" : "中雨",
+        "lat" : 31.7249,
+        "lon" : 118.481,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 118.480712890625,
+        "y" : 31.724924087524414
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 100,
+        "PINYIN" : "Huaibei",
+        "wd" : 31.0295,
+        "zgwd" : 41.1648,
+        "zdwd" : 20.4597,
+        "qy" : 1051.83,
+        "sd" : 23.3988,
+        "fs" : 8.03394,
+        "fx" : 211.605,
+        "yl" : 82.1953,
+        "yunl" : 55.2109,
+        "njd" : 54,
+        "tqxx" : "小雨",
+        "lat" : 33.9705,
+        "lon" : 116.787,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.78749847412109,
+        "y" : 33.970489501953125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 101,
+        "PINYIN" : "Tongling",
+        "wd" : 34.0748,
+        "zgwd" : 44.455,
+        "zdwd" : 23.1992,
+        "qy" : 1021,
+        "sd" : 66.139,
+        "fs" : 5.23387,
+        "fx" : 190.163,
+        "yl" : 48.8993,
+        "yunl" : 73.6495,
+        "njd" : 98,
+        "tqxx" : "多云",
+        "lat" : 30.9252,
+        "lon" : 117.813,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.81317901611328,
+        "y" : 30.925247192382813
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 102,
+        "PINYIN" : "Anqing",
+        "wd" : 34.4874,
+        "zgwd" : 45.1773,
+        "zdwd" : 23.9306,
+        "qy" : 1026.4,
+        "sd" : 64.9168,
+        "fs" : 9.00101,
+        "fx" : 315.3,
+        "yl" : 24.8704,
+        "yunl" : 89.4847,
+        "njd" : 37,
+        "tqxx" : "多云",
+        "lat" : 30.5126,
+        "lon" : 117.034,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 117.03443145751953,
+        "y" : 30.512645721435547
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 103,
+        "PINYIN" : "Huangshan",
+        "wd" : 35.2792,
+        "zgwd" : 45.4515,
+        "zdwd" : 25.2381,
+        "qy" : 1020.93,
+        "sd" : 42.3524,
+        "fs" : 8.8605,
+        "fx" : 1.61157,
+        "yl" : 24.3527,
+        "yunl" : 4.77955,
+        "njd" : 35,
+        "tqxx" : "阴天",
+        "lat" : 29.7208,
+        "lon" : 118.309,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.30906677246094,
+        "y" : 29.720844268798828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 104,
+        "PINYIN" : "Fuyang",
+        "wd" : 32.0978,
+        "zgwd" : 42.7304,
+        "zdwd" : 22.0379,
+        "qy" : 1038.36,
+        "sd" : 42.6029,
+        "fs" : 11.0785,
+        "fx" : 209.032,
+        "yl" : 5.63812,
+        "yunl" : 58.3808,
+        "njd" : 51,
+        "tqxx" : "中雨",
+        "lat" : 32.9022,
+        "lon" : 115.81,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.80973052978516,
+        "y" : 32.902206420898437
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 105,
+        "PINYIN" : "Suzhou",
+        "wd" : 31.3599,
+        "zgwd" : 44.3828,
+        "zdwd" : 22.9953,
+        "qy" : 1038.85,
+        "sd" : 36.4376,
+        "fs" : 4.55725,
+        "fx" : 50.0247,
+        "yl" : 51.3431,
+        "yunl" : 96.9481,
+        "njd" : 46,
+        "tqxx" : "小雨",
+        "lat" : 33.6401,
+        "lon" : 116.97,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.97015380859375,
+        "y" : 33.640132904052734
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 106,
+        "PINYIN" : "Chuzhou",
+        "wd" : 32.6835,
+        "zgwd" : 43.628,
+        "zdwd" : 22.0891,
+        "qy" : 1017.33,
+        "sd" : 90.7939,
+        "fs" : 4.84337,
+        "fx" : 116.292,
+        "yl" : 23.3827,
+        "yunl" : 7.46252,
+        "njd" : 92,
+        "tqxx" : "阴天",
+        "lat" : 32.3165,
+        "lon" : 118.301,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.30116271972656,
+        "y" : 32.316532135009766
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 107,
+        "PINYIN" : "Lu'an",
+        "wd" : 33.2465,
+        "zgwd" : 44.1454,
+        "zdwd" : 22.8445,
+        "qy" : 1023.46,
+        "sd" : 80.3735,
+        "fs" : 9.31495,
+        "fx" : 133.194,
+        "yl" : 48.2869,
+        "yunl" : 46.356,
+        "njd" : 8,
+        "tqxx" : "晴天",
+        "lat" : 31.7535,
+        "lon" : 116.493,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.49279022216797,
+        "y" : 31.753522872924805
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 108,
+        "PINYIN" : "Xuanzhou",
+        "wd" : 34.0491,
+        "zgwd" : 44.5113,
+        "zdwd" : 23.188,
+        "qy" : 1022.67,
+        "sd" : 58.4268,
+        "fs" : 10.4614,
+        "fx" : 10.9311,
+        "yl" : 53.3525,
+        "yunl" : 70.5936,
+        "njd" : 7,
+        "tqxx" : "多云",
+        "lat" : 30.9509,
+        "lon" : 118.741,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 118.74149322509766,
+        "y" : 30.950859069824219
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 109,
+        "PINYIN" : "Chaohu",
+        "wd" : 33.3961,
+        "zgwd" : 44.0595,
+        "zdwd" : 23.132,
+        "qy" : 1060.12,
+        "sd" : 88.8137,
+        "fs" : 6.7343,
+        "fx" : 155.286,
+        "yl" : 47.569,
+        "yunl" : 34.0986,
+        "njd" : 98,
+        "tqxx" : "阴天",
+        "lat" : 31.6039,
+        "lon" : 117.864,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.86415100097656,
+        "y" : 31.603876113891602
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 110,
+        "PINYIN" : "Guichi",
+        "wd" : 34.3431,
+        "zgwd" : 45.2414,
+        "zdwd" : 24.2981,
+        "qy" : 1037.84,
+        "sd" : 4.33985,
+        "fs" : 11.6375,
+        "fx" : 6.50752,
+        "yl" : 25.0524,
+        "yunl" : 30.9782,
+        "njd" : 55,
+        "tqxx" : "多云",
+        "lat" : 30.6569,
+        "lon" : 117.477,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.47733306884766,
+        "y" : 30.656866073608398
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 111,
+        "PINYIN" : "Fuzhou",
+        "wd" : 38.9214,
+        "zgwd" : 49.247,
+        "zdwd" : 28.4258,
+        "qy" : 1015.6,
+        "sd" : 82.0462,
+        "fs" : 8.36638,
+        "fx" : 246.119,
+        "yl" : 27.8003,
+        "yunl" : 4.37093,
+        "njd" : 30,
+        "tqxx" : "小雨",
+        "lat" : 26.0786,
+        "lon" : 119.298,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.29781341552734,
+        "y" : 26.078590393066406
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 112,
+        "PINYIN" : "Xiamen",
+        "wd" : 40.5426,
+        "zgwd" : 50.6968,
+        "zdwd" : 29.6903,
+        "qy" : 1017.7,
+        "sd" : 5.10685,
+        "fs" : 8.46744,
+        "fx" : 18.2044,
+        "yl" : 20.8728,
+        "yunl" : 0.361151,
+        "njd" : 88,
+        "tqxx" : "阴天",
+        "lat" : 24.4574,
+        "lon" : 118.088,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.08751678466797,
+        "y" : 24.457435607910156
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 113,
+        "PINYIN" : "Putian",
+        "wd" : 39.5619,
+        "zgwd" : 50.034,
+        "zdwd" : 28.7283,
+        "qy" : 1045.01,
+        "sd" : 19.5438,
+        "fs" : 5.85324,
+        "fx" : 355.571,
+        "yl" : 60.7452,
+        "yunl" : 47.551,
+        "njd" : 78,
+        "tqxx" : "阴天",
+        "lat" : 25.4381,
+        "lon" : 119.01,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.01032257080078,
+        "y" : 25.438137054443359
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 114,
+        "PINYIN" : "Sanming",
+        "wd" : 38.777,
+        "zgwd" : 49.0112,
+        "zdwd" : 28.4569,
+        "qy" : 1030.24,
+        "sd" : 62.0197,
+        "fs" : 3.99388,
+        "fx" : 163.59,
+        "yl" : 61.0438,
+        "yunl" : 1.05692,
+        "njd" : 88,
+        "tqxx" : "多云",
+        "lat" : 26.223,
+        "lon" : 117.601,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 117.60122680664062,
+        "y" : 26.223012924194336
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 115,
+        "PINYIN" : "Quanzhou",
+        "wd" : 40.0841,
+        "zgwd" : 50.2718,
+        "zdwd" : 29.7015,
+        "qy" : 1062.72,
+        "sd" : 51.5234,
+        "fs" : 3.08337,
+        "fx" : 258.988,
+        "yl" : 2.59235,
+        "yunl" : 82.3374,
+        "njd" : 93,
+        "tqxx" : "阴天",
+        "lat" : 24.9159,
+        "lon" : 118.59,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.58963775634766,
+        "y" : 24.915918350219727
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 116,
+        "PINYIN" : "Zhangzhou Zhi",
+        "wd" : 40.4818,
+        "zgwd" : 51.247,
+        "zdwd" : 30.3395,
+        "qy" : 1050.24,
+        "sd" : 43.3425,
+        "fs" : 5.74402,
+        "fx" : 220.872,
+        "yl" : 19.008,
+        "yunl" : 54.3264,
+        "njd" : 25,
+        "tqxx" : "晴天",
+        "lat" : 24.5182,
+        "lon" : 117.653,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.65309143066406,
+        "y" : 24.518163681030273
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 117,
+        "PINYIN" : "Nanping",
+        "wd" : 38.3552,
+        "zgwd" : 48.4197,
+        "zdwd" : 27.9868,
+        "qy" : 1026.44,
+        "sd" : 22.5501,
+        "fs" : 11.6728,
+        "fx" : 165.078,
+        "yl" : 23.2792,
+        "yunl" : 54.3349,
+        "njd" : 58,
+        "tqxx" : "阴天",
+        "lat" : 26.6448,
+        "lon" : 118.169,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 118.16912078857422,
+        "y" : 26.644842147827148
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 118,
+        "PINYIN" : "Ningde",
+        "wd" : 38.3335,
+        "zgwd" : 49.1905,
+        "zdwd" : 27.3747,
+        "qy" : 1020.87,
+        "sd" : 75.3742,
+        "fs" : 12.2616,
+        "fx" : 339.245,
+        "yl" : 67.8692,
+        "yunl" : 27.5949,
+        "njd" : 98,
+        "tqxx" : "中雨",
+        "lat" : 26.6665,
+        "lon" : 119.518,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.51831817626953,
+        "y" : 26.666477203369141
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 119,
+        "PINYIN" : "Longyan",
+        "wd" : 39.8903,
+        "zgwd" : 50.8033,
+        "zdwd" : 28.965,
+        "qy" : 1054.93,
+        "sd" : 70.8226,
+        "fs" : 11.8154,
+        "fx" : 237.348,
+        "yl" : 79.0943,
+        "yunl" : 60.223,
+        "njd" : 11,
+        "tqxx" : "多云",
+        "lat" : 25.1097,
+        "lon" : 117.03,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.03038787841797,
+        "y" : 25.109703063964844
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 120,
+        "PINYIN" : "Ganzhou",
+        "wd" : 39.1471,
+        "zgwd" : 49.3273,
+        "zdwd" : 28.2397,
+        "qy" : 1042.74,
+        "sd" : 94.3884,
+        "fs" : 6.98237,
+        "fx" : 269.088,
+        "yl" : 87.2715,
+        "yunl" : 87.4445,
+        "njd" : 90,
+        "tqxx" : "阴天",
+        "lat" : 25.8529,
+        "lon" : 114.934,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.93367767333984,
+        "y" : 25.852882385253906
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 121,
+        "PINYIN" : "Nanchang",
+        "wd" : 36.324,
+        "zgwd" : 46.8367,
+        "zdwd" : 25.9663,
+        "qy" : 1040.69,
+        "sd" : 15.9868,
+        "fs" : 10.0759,
+        "fx" : 177.608,
+        "yl" : 42.8903,
+        "yunl" : 13.0779,
+        "njd" : 8,
+        "tqxx" : "晴天",
+        "lat" : 28.676,
+        "lon" : 115.9,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.89991760253906,
+        "y" : 28.675991058349609
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 122,
+        "PINYIN" : "Pingxiang",
+        "wd" : 37.367,
+        "zgwd" : 47.5625,
+        "zdwd" : 26.9828,
+        "qy" : 1049.82,
+        "sd" : 61.8132,
+        "fs" : 3.39521,
+        "fx" : 270.036,
+        "yl" : 72.7872,
+        "yunl" : 52.8289,
+        "njd" : 28,
+        "tqxx" : "阴天",
+        "lat" : 27.633,
+        "lon" : 113.841,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.84142303466797,
+        "y" : 27.632989883422852
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 123,
+        "PINYIN" : "Jiujiang",
+        "wd" : 35.2768,
+        "zgwd" : 45.5795,
+        "zdwd" : 24.8311,
+        "qy" : 1038.62,
+        "sd" : 72.7469,
+        "fs" : 12.6923,
+        "fx" : 142.768,
+        "yl" : 78.2616,
+        "yunl" : 76.6101,
+        "njd" : 52,
+        "tqxx" : "晴天",
+        "lat" : 29.7232,
+        "lon" : 115.985,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.98458099365234,
+        "y" : 29.723211288452148
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 124,
+        "PINYIN" : "Xinyu",
+        "wd" : 37.1935,
+        "zgwd" : 47.2694,
+        "zdwd" : 26.8641,
+        "qy" : 1013.37,
+        "sd" : 44.9636,
+        "fs" : 3.36968,
+        "fx" : 246.019,
+        "yl" : 43.1084,
+        "yunl" : 77.8324,
+        "njd" : 3,
+        "tqxx" : "多云",
+        "lat" : 27.8065,
+        "lon" : 114.929,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.92938232421875,
+        "y" : 27.806547164916992
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 125,
+        "PINYIN" : "Yingtan",
+        "wd" : 36.7544,
+        "zgwd" : 47.2788,
+        "zdwd" : 25.8016,
+        "qy" : 1061.81,
+        "sd" : 48.4201,
+        "fs" : 3.66016,
+        "fx" : 44.1801,
+        "yl" : 61.0348,
+        "yunl" : 29.7925,
+        "njd" : 59,
+        "tqxx" : "多云",
+        "lat" : 28.2456,
+        "lon" : 117.03,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.03028106689453,
+        "y" : 28.245586395263672
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 126,
+        "PINYIN" : "Yichun",
+        "wd" : 37.2044,
+        "zgwd" : 27.7005,
+        "zdwd" : 7.01488,
+        "qy" : 1049.17,
+        "sd" : 88.4856,
+        "fs" : 11.5318,
+        "fx" : 23.584,
+        "yl" : 8.74496,
+        "yunl" : 15.0103,
+        "njd" : 42,
+        "tqxx" : "晴天",
+        "lat" : 27.7956,
+        "lon" : 114.375,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.37461090087891,
+        "y" : 27.795574188232422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 127,
+        "PINYIN" : "Shangrao",
+        "wd" : 36.5467,
+        "zgwd" : 46.9381,
+        "zdwd" : 25.595,
+        "qy" : 1044.23,
+        "sd" : 84.2802,
+        "fs" : 10.7574,
+        "fx" : 334.579,
+        "yl" : 13.2121,
+        "yunl" : 44.8093,
+        "njd" : 48,
+        "tqxx" : "多云",
+        "lat" : 28.4533,
+        "lon" : 117.963,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.96340179443359,
+        "y" : 28.453266143798828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 128,
+        "PINYIN" : "Ji'an",
+        "wd" : 37.8938,
+        "zgwd" : 47.957,
+        "zdwd" : 26.9321,
+        "qy" : 1051.23,
+        "sd" : 55.8929,
+        "fs" : 6.72475,
+        "fx" : 10.0605,
+        "yl" : 79.0653,
+        "yunl" : 40.7171,
+        "njd" : 31,
+        "tqxx" : "中雨",
+        "lat" : 27.1062,
+        "lon" : 114.97,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.97042846679687,
+        "y" : 27.106208801269531
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 129,
+        "PINYIN" : "Linchuan",
+        "wd" : 37.0652,
+        "zgwd" : 47.9688,
+        "zdwd" : 26.8223,
+        "qy" : 1032.54,
+        "sd" : 18.7967,
+        "fs" : 4.64873,
+        "fx" : 296.634,
+        "yl" : 61.9197,
+        "yunl" : 16.1548,
+        "njd" : 64,
+        "tqxx" : "多云",
+        "lat" : 27.9348,
+        "lon" : 116.301,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.30104827880859,
+        "y" : 27.934831619262695
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 130,
+        "PINYIN" : "Jinan",
+        "wd" : 28.3329,
+        "zgwd" : 38.4358,
+        "zdwd" : 17.9106,
+        "qy" : 1038.99,
+        "sd" : 24.3315,
+        "fs" : 5.42149,
+        "fx" : 49.7756,
+        "yl" : 65.7837,
+        "yunl" : 54.1802,
+        "njd" : 98,
+        "tqxx" : "阴天",
+        "lat" : 36.6671,
+        "lon" : 117.006,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.00559997558594,
+        "y" : 36.667072296142578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 131,
+        "PINYIN" : "Qingdao",
+        "wd" : 28.8661,
+        "zgwd" : 38.8849,
+        "zdwd" : 18.5467,
+        "qy" : 1047.01,
+        "sd" : 63.8233,
+        "fs" : 11.5204,
+        "fx" : 278.288,
+        "yl" : 22.4462,
+        "yunl" : 51.0079,
+        "njd" : 69,
+        "tqxx" : "晴天",
+        "lat" : 36.1339,
+        "lon" : 120.358,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.35816955566406,
+        "y" : 36.133861541748047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 132,
+        "PINYIN" : "Zibo",
+        "wd" : 28.2064,
+        "zgwd" : 38.5263,
+        "zdwd" : 18.1738,
+        "qy" : 1062.81,
+        "sd" : 90.6983,
+        "fs" : 10.4327,
+        "fx" : 72.5727,
+        "yl" : 1.77133,
+        "yunl" : 38.6272,
+        "njd" : 51,
+        "tqxx" : "中雨",
+        "lat" : 36.7936,
+        "lon" : 118.056,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 118.05605316162109,
+        "y" : 36.7935791015625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 133,
+        "PINYIN" : "Zaozhuang",
+        "wd" : 30.1274,
+        "zgwd" : 40.6146,
+        "zdwd" : 19.5808,
+        "qy" : 1019.02,
+        "sd" : 72.1187,
+        "fs" : 11.0399,
+        "fx" : 22.8953,
+        "yl" : 79.199,
+        "yunl" : 55.0576,
+        "njd" : 34,
+        "tqxx" : "阴天",
+        "lat" : 34.8726,
+        "lon" : 117.556,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 117.55628204345703,
+        "y" : 34.872646331787109
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 134,
+        "PINYIN" : "Dongying",
+        "wd" : 27.5381,
+        "zgwd" : 37.7881,
+        "zdwd" : 16.6223,
+        "qy" : 1055.63,
+        "sd" : 89.7467,
+        "fs" : 3.88649,
+        "fx" : 228.475,
+        "yl" : 15.5937,
+        "yunl" : 72.7241,
+        "njd" : 63,
+        "tqxx" : "阴天",
+        "lat" : 37.4619,
+        "lon" : 118.496,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.49595642089844,
+        "y" : 37.4619140625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 135,
+        "PINYIN" : "Yantai",
+        "wd" : 27.4644,
+        "zgwd" : 38.448,
+        "zdwd" : 16.6512,
+        "qy" : 1062.99,
+        "sd" : 9.46588,
+        "fs" : 3.11412,
+        "fx" : 269.884,
+        "yl" : 34.2269,
+        "yunl" : 46.136,
+        "njd" : 52,
+        "tqxx" : "小雨",
+        "lat" : 37.5356,
+        "lon" : 121.38,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 121.37993621826172,
+        "y" : 37.535614013671875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 136,
+        "PINYIN" : "Weifang",
+        "wd" : 28.2959,
+        "zgwd" : 39.1846,
+        "zdwd" : 17.7948,
+        "qy" : 1030.32,
+        "sd" : 99.6451,
+        "fs" : 8.4605,
+        "fx" : 340.688,
+        "yl" : 62.629,
+        "yunl" : 12.8982,
+        "njd" : 39,
+        "tqxx" : "晴天",
+        "lat" : 36.7041,
+        "lon" : 119.107,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.10684967041016,
+        "y" : 36.704086303710937
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 137,
+        "PINYIN" : "Jining",
+        "wd" : 29.5908,
+        "zgwd" : 34.5948,
+        "zdwd" : 12.9954,
+        "qy" : 1056.49,
+        "sd" : 83.0872,
+        "fs" : 5.57672,
+        "fx" : 233.873,
+        "yl" : 18.7657,
+        "yunl" : 22.4449,
+        "njd" : 54,
+        "tqxx" : "晴天",
+        "lat" : 35.4092,
+        "lon" : 116.577,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.57656097412109,
+        "y" : 35.40924072265625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 138,
+        "PINYIN" : "Tai'an",
+        "wd" : 28.8129,
+        "zgwd" : 39.1655,
+        "zdwd" : 18.6043,
+        "qy" : 1038.71,
+        "sd" : 39.3958,
+        "fs" : 12.5127,
+        "fx" : 130.079,
+        "yl" : 89.9071,
+        "yunl" : 1.90377,
+        "njd" : 98,
+        "tqxx" : "晴天",
+        "lat" : 36.1871,
+        "lon" : 117.124,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 117.12410736083984,
+        "y" : 36.187110900878906
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 139,
+        "PINYIN" : "Weihai",
+        "wd" : 27.4992,
+        "zgwd" : 37.8214,
+        "zdwd" : 17.421,
+        "qy" : 1063.22,
+        "sd" : 95.6748,
+        "fs" : 3.06465,
+        "fx" : 151.945,
+        "yl" : 93.4255,
+        "yunl" : 21.9829,
+        "njd" : 95,
+        "tqxx" : "中雨",
+        "lat" : 37.5008,
+        "lon" : 122.112,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 122.11168670654297,
+        "y" : 37.500762939453125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 140,
+        "PINYIN" : "Rizhao",
+        "wd" : 29.5724,
+        "zgwd" : 39.9158,
+        "zdwd" : 19.5394,
+        "qy" : 1026.33,
+        "sd" : 6.30847,
+        "fs" : 12.6354,
+        "fx" : 271.114,
+        "yl" : 48.5215,
+        "yunl" : 7.91257,
+        "njd" : 52,
+        "tqxx" : "晴天",
+        "lat" : 35.4276,
+        "lon" : 119.452,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 119.45155334472656,
+        "y" : 35.427562713623047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 141,
+        "PINYIN" : "Binzhou",
+        "wd" : 27.6322,
+        "zgwd" : 37.7484,
+        "zdwd" : 16.9947,
+        "qy" : 1020.32,
+        "sd" : 45.5241,
+        "fs" : 12.9712,
+        "fx" : 302.341,
+        "yl" : 38.7144,
+        "yunl" : 3.49907,
+        "njd" : 51,
+        "tqxx" : "多云",
+        "lat" : 37.3678,
+        "lon" : 118.022,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 118.02176666259766,
+        "y" : 37.367813110351563
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 142,
+        "PINYIN" : "Dezhou",
+        "wd" : 27.5463,
+        "zgwd" : 38.2152,
+        "zdwd" : 17.1803,
+        "qy" : 1033.02,
+        "sd" : 0.0694792,
+        "fs" : 12.4146,
+        "fx" : 174.895,
+        "yl" : 85.821,
+        "yunl" : 35.3932,
+        "njd" : 53,
+        "tqxx" : "阴天",
+        "lat" : 37.4537,
+        "lon" : 116.288,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.28787231445312,
+        "y" : 37.453693389892578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 143,
+        "PINYIN" : "Liaocheng",
+        "wd" : 28.5506,
+        "zgwd" : 38.7441,
+        "zdwd" : 18.224,
+        "qy" : 1023.17,
+        "sd" : 89.2603,
+        "fs" : 8.88253,
+        "fx" : 119.576,
+        "yl" : 13.9594,
+        "yunl" : 24.2144,
+        "njd" : 90,
+        "tqxx" : "中雨",
+        "lat" : 36.4494,
+        "lon" : 115.988,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.98842620849609,
+        "y" : 36.449432373046875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 144,
+        "PINYIN" : "Linyi",
+        "wd" : 29.9305,
+        "zgwd" : 40.0018,
+        "zdwd" : 19.0053,
+        "qy" : 1028.26,
+        "sd" : 23.8038,
+        "fs" : 6.63163,
+        "fx" : 54.8224,
+        "yl" : 43.4169,
+        "yunl" : 88.4996,
+        "njd" : 54,
+        "tqxx" : "阴天",
+        "lat" : 35.0695,
+        "lon" : 118.338,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 118.33795928955078,
+        "y" : 35.069450378417969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 145,
+        "PINYIN" : "Heze",
+        "wd" : 29.7515,
+        "zgwd" : 40.4557,
+        "zdwd" : 19.1715,
+        "qy" : 1052.25,
+        "sd" : 74.3433,
+        "fs" : 8.08901,
+        "fx" : 138.944,
+        "yl" : 29.5461,
+        "yunl" : 61.6959,
+        "njd" : 95,
+        "tqxx" : "多云",
+        "lat" : 35.2485,
+        "lon" : 115.446,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.44576263427734,
+        "y" : 35.248538970947266
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 146,
+        "PINYIN" : "Zhengzhou",
+        "wd" : 30.243,
+        "zgwd" : 40.411,
+        "zdwd" : 20.0296,
+        "qy" : 1019.98,
+        "sd" : 27.3441,
+        "fs" : 6.2787,
+        "fx" : 175.798,
+        "yl" : 58.7018,
+        "yunl" : 6.12866,
+        "njd" : 19,
+        "tqxx" : "阴天",
+        "lat" : 34.757,
+        "lon" : 113.65,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.65004730224609,
+        "y" : 34.757034301757813
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 147,
+        "PINYIN" : "Kaifeng",
+        "wd" : 30.2148,
+        "zgwd" : 41.1811,
+        "zdwd" : 19.4336,
+        "qy" : 1036.39,
+        "sd" : 93.6217,
+        "fs" : 3.55595,
+        "fx" : 235.114,
+        "yl" : 30.6392,
+        "yunl" : 81.5645,
+        "njd" : 35,
+        "tqxx" : "晴天",
+        "lat" : 34.7852,
+        "lon" : 114.346,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.34616851806641,
+        "y" : 34.785194396972656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 148,
+        "PINYIN" : "Luoyang",
+        "wd" : 30.332,
+        "zgwd" : 40.718,
+        "zdwd" : 19.7302,
+        "qy" : 1014.08,
+        "sd" : 24.2103,
+        "fs" : 9.01859,
+        "fx" : 311.701,
+        "yl" : 94.9183,
+        "yunl" : 27.5724,
+        "njd" : 79,
+        "tqxx" : "多云",
+        "lat" : 34.668,
+        "lon" : 112.425,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.42479705810547,
+        "y" : 34.668041229248047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 149,
+        "PINYIN" : "Pingdingshan",
+        "wd" : 31.2564,
+        "zgwd" : 42.2191,
+        "zdwd" : 21.0236,
+        "qy" : 1038.47,
+        "sd" : 50.7068,
+        "fs" : 8.68451,
+        "fx" : 95.983,
+        "yl" : 88.6718,
+        "yunl" : 32.104,
+        "njd" : 38,
+        "tqxx" : "阴天",
+        "lat" : 33.7436,
+        "lon" : 113.3,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.30019378662109,
+        "y" : 33.743629455566406
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 150,
+        "PINYIN" : "Anyang",
+        "wd" : 28.9031,
+        "zgwd" : 39.1052,
+        "zdwd" : 18.5479,
+        "qy" : 1042.11,
+        "sd" : 51.5734,
+        "fs" : 11.5754,
+        "fx" : 250.743,
+        "yl" : 50.7628,
+        "yunl" : 94.3452,
+        "njd" : 54,
+        "tqxx" : "中雨",
+        "lat" : 36.0969,
+        "lon" : 114.35,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.35005187988281,
+        "y" : 36.096851348876953
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 151,
+        "PINYIN" : "Hebi",
+        "wd" : 29.0599,
+        "zgwd" : 39.6178,
+        "zdwd" : 18.9632,
+        "qy" : 1061.21,
+        "sd" : 61.4097,
+        "fs" : 10.798,
+        "fx" : 66.8599,
+        "yl" : 75.4899,
+        "yunl" : 24.6275,
+        "njd" : 89,
+        "tqxx" : "阴天",
+        "lat" : 35.9401,
+        "lon" : 114.155,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.15467071533203,
+        "y" : 35.940082550048828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 152,
+        "PINYIN" : "Xinxiang",
+        "wd" : 29.6925,
+        "zgwd" : 40.3868,
+        "zdwd" : 19.6818,
+        "qy" : 1040.88,
+        "sd" : 62.9186,
+        "fs" : 10.7817,
+        "fx" : 31.6389,
+        "yl" : 39.8513,
+        "yunl" : 80.8243,
+        "njd" : 38,
+        "tqxx" : "多云",
+        "lat" : 35.3075,
+        "lon" : 113.869,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.86855316162109,
+        "y" : 35.307468414306641
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 153,
+        "PINYIN" : "Jiaozuo",
+        "wd" : 29.7526,
+        "zgwd" : 40.0502,
+        "zdwd" : 19.7174,
+        "qy" : 1045.34,
+        "sd" : 60.3837,
+        "fs" : 5.7804,
+        "fx" : 18.9756,
+        "yl" : 63.5944,
+        "yunl" : 96.1541,
+        "njd" : 1,
+        "tqxx" : "晴天",
+        "lat" : 35.2474,
+        "lon" : 113.222,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 113.22178649902344,
+        "y" : 35.247356414794922
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 154,
+        "PINYIN" : "Puyang",
+        "wd" : 29.2981,
+        "zgwd" : 39.7019,
+        "zdwd" : 18.9194,
+        "qy" : 1028.84,
+        "sd" : 56.2582,
+        "fs" : 11.3321,
+        "fx" : 56.2289,
+        "yl" : 73.6341,
+        "yunl" : 51.6091,
+        "njd" : 52,
+        "tqxx" : "阴天",
+        "lat" : 35.7019,
+        "lon" : 115.015,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.01495361328125,
+        "y" : 35.701896667480469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 155,
+        "PINYIN" : "Xuchang",
+        "wd" : 30.9731,
+        "zgwd" : 41.6602,
+        "zdwd" : 20.3407,
+        "qy" : 1053.43,
+        "sd" : 92.7349,
+        "fs" : 5.00362,
+        "fx" : 0.100286,
+        "yl" : 64.2467,
+        "yunl" : 3.94075,
+        "njd" : 85,
+        "tqxx" : "中雨",
+        "lat" : 34.0269,
+        "lon" : 113.822,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.82158660888672,
+        "y" : 34.026859283447266
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 156,
+        "PINYIN" : "Luohe",
+        "wd" : 31.4275,
+        "zgwd" : 41.5512,
+        "zdwd" : 21.1948,
+        "qy" : 1040.28,
+        "sd" : 72.6478,
+        "fs" : 3.49797,
+        "fx" : 253.978,
+        "yl" : 82.7222,
+        "yunl" : 51.3071,
+        "njd" : 53,
+        "tqxx" : "中雨",
+        "lat" : 33.5725,
+        "lon" : 114.041,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.04109191894531,
+        "y" : 33.572509765625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 157,
+        "PINYIN" : "Sanmenxia",
+        "wd" : 30.2192,
+        "zgwd" : 40.7952,
+        "zdwd" : 19.5804,
+        "qy" : 1038.13,
+        "sd" : 9.49929,
+        "fs" : 11.1064,
+        "fx" : 74.9049,
+        "yl" : 17.618,
+        "yunl" : 59.643,
+        "njd" : 63,
+        "tqxx" : "多云",
+        "lat" : 34.7808,
+        "lon" : 111.195,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.19525909423828,
+        "y" : 34.780769348144531
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 158,
+        "PINYIN" : "Shangqiu",
+        "wd" : 30.5564,
+        "zgwd" : 41.3816,
+        "zdwd" : 20.3822,
+        "qy" : 1052.49,
+        "sd" : 52.2887,
+        "fs" : 6.76704,
+        "fx" : 37.6265,
+        "yl" : 74.3166,
+        "yunl" : 71.3802,
+        "njd" : 93,
+        "tqxx" : "中雨",
+        "lat" : 34.4436,
+        "lon" : 115.647,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.64718627929687,
+        "y" : 34.443584442138672
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 159,
+        "PINYIN" : "Zhoukou",
+        "wd" : 31.372,
+        "zgwd" : 41.5771,
+        "zdwd" : 21.3099,
+        "qy" : 1033.42,
+        "sd" : 34.9525,
+        "fs" : 6.51924,
+        "fx" : 69.5042,
+        "yl" : 49.5762,
+        "yunl" : 32.0488,
+        "njd" : 46,
+        "tqxx" : "多云",
+        "lat" : 33.628,
+        "lon" : 114.637,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.63725280761719,
+        "y" : 33.628040313720703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 160,
+        "PINYIN" : "Zhumadian",
+        "wd" : 32.021,
+        "zgwd" : 42.8704,
+        "zdwd" : 21.0315,
+        "qy" : 1027.62,
+        "sd" : 77.6404,
+        "fs" : 3.22637,
+        "fx" : 331.44,
+        "yl" : 58.8294,
+        "yunl" : 66.8322,
+        "njd" : 30,
+        "tqxx" : "晴天",
+        "lat" : 32.979,
+        "lon" : 114.036,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.03569030761719,
+        "y" : 32.979042053222656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 161,
+        "PINYIN" : "Nanyang",
+        "wd" : 32.001,
+        "zgwd" : 42.3634,
+        "zdwd" : 21.9064,
+        "qy" : 1038.77,
+        "sd" : 81.3849,
+        "fs" : 6.96077,
+        "fx" : 263.673,
+        "yl" : 77.3101,
+        "yunl" : 40.8186,
+        "njd" : 57,
+        "tqxx" : "多云",
+        "lat" : 32.999,
+        "lon" : 112.538,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.53751373291016,
+        "y" : 32.999019622802734
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 162,
+        "PINYIN" : "Xinyang",
+        "wd" : 32.8694,
+        "zgwd" : 42.9924,
+        "zdwd" : 22.1945,
+        "qy" : 1032.96,
+        "sd" : 75.6398,
+        "fs" : 7.30198,
+        "fx" : 205.263,
+        "yl" : 51.1014,
+        "yunl" : 32.6861,
+        "njd" : 95,
+        "tqxx" : "晴天",
+        "lat" : 32.1306,
+        "lon" : 114.068,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.06771850585937,
+        "y" : 32.130630493164062
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 163,
+        "PINYIN" : "Wuhan",
+        "wd" : 34.4325,
+        "zgwd" : 45.0233,
+        "zdwd" : 23.8082,
+        "qy" : 1058.96,
+        "sd" : 75.9367,
+        "fs" : 7.21765,
+        "fx" : 24.2906,
+        "yl" : 45.7185,
+        "yunl" : 45.7855,
+        "njd" : 67,
+        "tqxx" : "阴天",
+        "lat" : 30.5675,
+        "lon" : 114.292,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.29193878173828,
+        "y" : 30.567514419555664
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 164,
+        "PINYIN" : "Huangshi",
+        "wd" : 34.7862,
+        "zgwd" : 45.187,
+        "zdwd" : 24.2753,
+        "qy" : 1024.47,
+        "sd" : 47.363,
+        "fs" : 5.58442,
+        "fx" : 37.9599,
+        "yl" : 56.8695,
+        "yunl" : 6.9876,
+        "njd" : 90,
+        "tqxx" : "阴天",
+        "lat" : 30.2138,
+        "lon" : 115.075,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.07498931884766,
+        "y" : 30.213798522949219
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 165,
+        "PINYIN" : "Shiyan",
+        "wd" : 32.3479,
+        "zgwd" : 42.7131,
+        "zdwd" : 21.873,
+        "qy" : 1027.66,
+        "sd" : 25.928,
+        "fs" : 6.78131,
+        "fx" : 37.1836,
+        "yl" : 88.1779,
+        "yunl" : 39.0943,
+        "njd" : 13,
+        "tqxx" : "多云",
+        "lat" : 32.6521,
+        "lon" : 110.783,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 110.78279876708984,
+        "y" : 32.652130126953125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 166,
+        "PINYIN" : "Shashi",
+        "wd" : 34.6827,
+        "zgwd" : 45.2729,
+        "zdwd" : 24.4284,
+        "qy" : 1054.84,
+        "sd" : 63.9546,
+        "fs" : 11.1607,
+        "fx" : 74.1985,
+        "yl" : 16.0156,
+        "yunl" : 96.9802,
+        "njd" : 72,
+        "tqxx" : "晴天",
+        "lat" : 30.3173,
+        "lon" : 112.248,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.24778747558594,
+        "y" : 30.31733512878418
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 167,
+        "PINYIN" : "Yichang",
+        "wd" : 34.296,
+        "zgwd" : 44.5402,
+        "zdwd" : 23.5696,
+        "qy" : 1042.32,
+        "sd" : 42.9757,
+        "fs" : 4.04709,
+        "fx" : 242.303,
+        "yl" : 55.689,
+        "yunl" : 85.3017,
+        "njd" : 60,
+        "tqxx" : "多云",
+        "lat" : 30.704,
+        "lon" : 111.285,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.28527069091797,
+        "y" : 30.703952789306641
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 168,
+        "PINYIN" : "Xiangfan",
+        "wd" : 32.9546,
+        "zgwd" : 43.921,
+        "zdwd" : 22.5356,
+        "qy" : 1015.9,
+        "sd" : 85.1853,
+        "fs" : 11.6174,
+        "fx" : 219.119,
+        "yl" : 16.1474,
+        "yunl" : 75.1842,
+        "njd" : 97,
+        "tqxx" : "阴天",
+        "lat" : 32.0454,
+        "lon" : 112.141,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 112.14111328125,
+        "y" : 32.045398712158203
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 169,
+        "PINYIN" : "Ezhou",
+        "wd" : 34.5972,
+        "zgwd" : 45.1264,
+        "zdwd" : 24.4211,
+        "qy" : 1055.97,
+        "sd" : 72.0722,
+        "fs" : 8.77681,
+        "fx" : 271.771,
+        "yl" : 83.4099,
+        "yunl" : 61.2853,
+        "njd" : 34,
+        "tqxx" : "多云",
+        "lat" : 30.4028,
+        "lon" : 114.881,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.88118743896484,
+        "y" : 30.402767181396484
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 170,
+        "PINYIN" : "Jingmen",
+        "wd" : 33.9698,
+        "zgwd" : 44.9265,
+        "zdwd" : 23.7852,
+        "qy" : 1052.45,
+        "sd" : 86.7553,
+        "fs" : 7.13618,
+        "fx" : 129.733,
+        "yl" : 62.274,
+        "yunl" : 45.0647,
+        "njd" : 55,
+        "tqxx" : "阴天",
+        "lat" : 31.0302,
+        "lon" : 112.2,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.20021057128906,
+        "y" : 31.030216217041016
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 171,
+        "PINYIN" : "Huangzhou",
+        "wd" : 34.551,
+        "zgwd" : 45.2534,
+        "zdwd" : 24.0884,
+        "qy" : 1022.62,
+        "sd" : 20.7635,
+        "fs" : 12.2815,
+        "fx" : 273.425,
+        "yl" : 46.5522,
+        "yunl" : 75.3788,
+        "njd" : 51,
+        "tqxx" : "多云",
+        "lat" : 30.449,
+        "lon" : 114.865,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 114.86492919921875,
+        "y" : 30.449018478393555
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 172,
+        "PINYIN" : "Xiaogan",
+        "wd" : 34.0715,
+        "zgwd" : 44.8338,
+        "zdwd" : 23.83,
+        "qy" : 1053.62,
+        "sd" : 61.4472,
+        "fs" : 9.70009,
+        "fx" : 153.789,
+        "yl" : 22.2658,
+        "yunl" : 20.8642,
+        "njd" : 91,
+        "tqxx" : "多云",
+        "lat" : 30.9285,
+        "lon" : 113.911,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.91133117675781,
+        "y" : 30.928455352783203
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 173,
+        "PINYIN" : "Xianning",
+        "wd" : 35.1057,
+        "zgwd" : 45.6954,
+        "zdwd" : 24.4671,
+        "qy" : 1034.42,
+        "sd" : 23.9714,
+        "fs" : 6.22391,
+        "fx" : 85.7245,
+        "yl" : 55.6208,
+        "yunl" : 93.8993,
+        "njd" : 72,
+        "tqxx" : "多云",
+        "lat" : 29.8943,
+        "lon" : 114.269,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.26873779296875,
+        "y" : 29.894327163696289
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 174,
+        "PINYIN" : "Jiangling",
+        "wd" : 34.6472,
+        "zgwd" : 45.4411,
+        "zdwd" : 23.9119,
+        "qy" : 1029.87,
+        "sd" : 68.2622,
+        "fs" : 4.12805,
+        "fx" : 91.8134,
+        "yl" : 69.6037,
+        "yunl" : 68.7234,
+        "njd" : 99,
+        "tqxx" : "中雨",
+        "lat" : 30.3528,
+        "lon" : 112.191,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 112.19096374511719,
+        "y" : 30.352811813354492
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 175,
+        "PINYIN" : "Enshi",
+        "wd" : 34.7278,
+        "zgwd" : 45.5718,
+        "zdwd" : 24.3254,
+        "qy" : 1022.16,
+        "sd" : 93.8046,
+        "fs" : 12.5824,
+        "fx" : 237.009,
+        "yl" : 61.3221,
+        "yunl" : 71.7952,
+        "njd" : 9,
+        "tqxx" : "多云",
+        "lat" : 30.2722,
+        "lon" : 109.477,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.47662353515625,
+        "y" : 30.272174835205078
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 176,
+        "PINYIN" : "Hengyang",
+        "wd" : 38.0994,
+        "zgwd" : 48.8796,
+        "zdwd" : 28.0333,
+        "qy" : 1027.66,
+        "sd" : 59.7113,
+        "fs" : 9.19353,
+        "fx" : 32.3568,
+        "yl" : 98.1145,
+        "yunl" : 22.9286,
+        "njd" : 48,
+        "tqxx" : "多云",
+        "lat" : 26.9006,
+        "lon" : 112.599,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.59935760498047,
+        "y" : 26.900554656982422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 177,
+        "PINYIN" : "Shaoyang",
+        "wd" : 37.7498,
+        "zgwd" : 47.9746,
+        "zdwd" : 26.9986,
+        "qy" : 1029.86,
+        "sd" : 97.7209,
+        "fs" : 9.53266,
+        "fx" : 59.046,
+        "yl" : 36.7157,
+        "yunl" : 90.5888,
+        "njd" : 38,
+        "tqxx" : "阴天",
+        "lat" : 27.2502,
+        "lon" : 111.477,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.47737884521484,
+        "y" : 27.250236511230469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 178,
+        "PINYIN" : "Chenzhou",
+        "wd" : 39.1977,
+        "zgwd" : 49.355,
+        "zdwd" : 29.1622,
+        "qy" : 1026.84,
+        "sd" : 5.46347,
+        "fs" : 11.4088,
+        "fx" : 342.597,
+        "yl" : 29.2961,
+        "yunl" : 97.2767,
+        "njd" : 35,
+        "tqxx" : "阴天",
+        "lat" : 25.8023,
+        "lon" : 113.029,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.02864837646484,
+        "y" : 25.802291870117188
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 179,
+        "PINYIN" : "Yongzhou",
+        "wd" : 38.7887,
+        "zgwd" : 49.232,
+        "zdwd" : 28.7136,
+        "qy" : 1028.76,
+        "sd" : 84.7139,
+        "fs" : 10.5782,
+        "fx" : 304.595,
+        "yl" : 34.2065,
+        "yunl" : 20.9545,
+        "njd" : 1,
+        "tqxx" : "晴天",
+        "lat" : 26.2113,
+        "lon" : 111.612,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.61219787597656,
+        "y" : 26.211299896240234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 180,
+        "PINYIN" : "Dayong",
+        "wd" : 35.8681,
+        "zgwd" : 46.0347,
+        "zdwd" : 25.6878,
+        "qy" : 1050.91,
+        "sd" : 58.0061,
+        "fs" : 10.5264,
+        "fx" : 332.181,
+        "yl" : 56.8608,
+        "yunl" : 5.98169,
+        "njd" : 51,
+        "tqxx" : "多云",
+        "lat" : 29.1319,
+        "lon" : 110.481,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 110.48148345947266,
+        "y" : 29.131879806518555
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 181,
+        "PINYIN" : "Huaihua",
+        "wd" : 37.4526,
+        "zgwd" : 47.8964,
+        "zdwd" : 26.7575,
+        "qy" : 1030.79,
+        "sd" : 67.3112,
+        "fs" : 12.0448,
+        "fx" : 311.292,
+        "yl" : 62.1515,
+        "yunl" : 50.1382,
+        "njd" : 25,
+        "tqxx" : "多云",
+        "lat" : 27.5474,
+        "lon" : 109.954,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.95423126220703,
+        "y" : 27.547407150268555
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 182,
+        "PINYIN" : "Jishou",
+        "wd" : 36.6919,
+        "zgwd" : 47.5536,
+        "zdwd" : 26.2785,
+        "qy" : 1026.58,
+        "sd" : 62.4375,
+        "fs" : 12.3122,
+        "fx" : 181.867,
+        "yl" : 47.1108,
+        "yunl" : 87.3024,
+        "njd" : 17,
+        "tqxx" : "晴天",
+        "lat" : 28.3081,
+        "lon" : 109.734,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.73384094238281,
+        "y" : 28.30810546875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 183,
+        "PINYIN" : "Changsha",
+        "wd" : 36.7992,
+        "zgwd" : 46.8171,
+        "zdwd" : 26.3996,
+        "qy" : 1035.29,
+        "sd" : 50.7959,
+        "fs" : 5.87682,
+        "fx" : 132.825,
+        "yl" : 13.598,
+        "yunl" : 48.1725,
+        "njd" : 39,
+        "tqxx" : "阴天",
+        "lat" : 28.2008,
+        "lon" : 112.981,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.98126983642578,
+        "y" : 28.200824737548828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 184,
+        "PINYIN" : "Zhuzhou",
+        "wd" : 37.1458,
+        "zgwd" : 48.0121,
+        "zdwd" : 26.4947,
+        "qy" : 1027.41,
+        "sd" : 51.8468,
+        "fs" : 12.7749,
+        "fx" : 272.853,
+        "yl" : 2.72356,
+        "yunl" : 54.6388,
+        "njd" : 61,
+        "tqxx" : "阴天",
+        "lat" : 27.8542,
+        "lon" : 113.152,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.15206146240234,
+        "y" : 27.854223251342773
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 185,
+        "PINYIN" : "Xiangtan",
+        "wd" : 37.1266,
+        "zgwd" : 47.7453,
+        "zdwd" : 27.1059,
+        "qy" : 1059.09,
+        "sd" : 71.001,
+        "fs" : 12.4745,
+        "fx" : 126.155,
+        "yl" : 91.5555,
+        "yunl" : 59.1521,
+        "njd" : 80,
+        "tqxx" : "中雨",
+        "lat" : 27.8734,
+        "lon" : 112.915,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.91502380371094,
+        "y" : 27.873350143432617
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 186,
+        "PINYIN" : "Yueyang",
+        "wd" : 35.6254,
+        "zgwd" : 45.9708,
+        "zdwd" : 25.2696,
+        "qy" : 1023.64,
+        "sd" : 7.54575,
+        "fs" : 7.32867,
+        "fx" : 237.609,
+        "yl" : 15.9549,
+        "yunl" : 60.765,
+        "njd" : 94,
+        "tqxx" : "中雨",
+        "lat" : 29.3746,
+        "lon" : 113.098,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 113.09806823730469,
+        "y" : 29.374618530273438
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 187,
+        "PINYIN" : "Changde",
+        "wd" : 35.9618,
+        "zgwd" : 46.5646,
+        "zdwd" : 25.1494,
+        "qy" : 1059.56,
+        "sd" : 84.3346,
+        "fs" : 7.2256,
+        "fx" : 144.62,
+        "yl" : 32.4823,
+        "yunl" : 0.662096,
+        "njd" : 37,
+        "tqxx" : "晴天",
+        "lat" : 29.0382,
+        "lon" : 111.688,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.68762969970703,
+        "y" : 29.038209915161133
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 188,
+        "PINYIN" : "Yiyang",
+        "wd" : 36.398,
+        "zgwd" : 46.4541,
+        "zdwd" : 26.3502,
+        "qy" : 1015.61,
+        "sd" : 82.7597,
+        "fs" : 12.0958,
+        "fx" : 240.837,
+        "yl" : 34.9647,
+        "yunl" : 82.349,
+        "njd" : 79,
+        "tqxx" : "中雨",
+        "lat" : 28.602,
+        "lon" : 112.334,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.33406829833984,
+        "y" : 28.601970672607422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 189,
+        "PINYIN" : "Loudi",
+        "wd" : 37.2587,
+        "zgwd" : 47.8549,
+        "zdwd" : 26.6522,
+        "qy" : 1059.04,
+        "sd" : 30.928,
+        "fs" : 9.26544,
+        "fx" : 155.748,
+        "yl" : 70.7624,
+        "yunl" : 90.6254,
+        "njd" : 75,
+        "tqxx" : "阴天",
+        "lat" : 27.7413,
+        "lon" : 111.994,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 111.993896484375,
+        "y" : 27.741334915161133
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 190,
+        "PINYIN" : "Shanwei",
+        "wd" : 42.2213,
+        "zgwd" : 52.8516,
+        "zdwd" : 31.616,
+        "qy" : 1050.08,
+        "sd" : 43.6849,
+        "fs" : 6.03533,
+        "fx" : 144.254,
+        "yl" : 71.1775,
+        "yunl" : 57.695,
+        "njd" : 41,
+        "tqxx" : "阴天",
+        "lat" : 22.7787,
+        "lon" : 115.364,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 115.364013671875,
+        "y" : 22.7786865234375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 191,
+        "PINYIN" : "Huizhou",
+        "wd" : 41.912,
+        "zgwd" : 52.572,
+        "zdwd" : 31.0865,
+        "qy" : 1038.46,
+        "sd" : 3.7623,
+        "fs" : 5.61714,
+        "fx" : 58.2558,
+        "yl" : 48.141,
+        "yunl" : 87.0259,
+        "njd" : 52,
+        "tqxx" : "晴天",
+        "lat" : 23.088,
+        "lon" : 114.392,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.39240264892578,
+        "y" : 23.087957382202148
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 192,
+        "PINYIN" : "Shenzhen",
+        "wd" : 42.4436,
+        "zgwd" : 53.3227,
+        "zdwd" : 32.1927,
+        "qy" : 1058.08,
+        "sd" : 51.2561,
+        "fs" : 4.96991,
+        "fx" : 282.792,
+        "yl" : 34.6938,
+        "yunl" : 46.7533,
+        "njd" : 11,
+        "tqxx" : "阴天",
+        "lat" : 22.5564,
+        "lon" : 114.111,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.11067199707031,
+        "y" : 22.556396484375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 193,
+        "PINYIN" : "Heyuan",
+        "wd" : 41.2652,
+        "zgwd" : 51.3609,
+        "zdwd" : 30.9137,
+        "qy" : 1043.99,
+        "sd" : 52.4069,
+        "fs" : 8.52774,
+        "fx" : 137.657,
+        "yl" : 73.1557,
+        "yunl" : 59.2448,
+        "njd" : 72,
+        "tqxx" : "多云",
+        "lat" : 23.7348,
+        "lon" : 114.694,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 114.69381713867187,
+        "y" : 23.734840393066406
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 194,
+        "PINYIN" : "Guangzhou",
+        "wd" : 41.8811,
+        "zgwd" : 52.4546,
+        "zdwd" : 31.0103,
+        "qy" : 1050.95,
+        "sd" : 76.5088,
+        "fs" : 5.51384,
+        "fx" : 115.607,
+        "yl" : 52.8332,
+        "yunl" : 61.6053,
+        "njd" : 10,
+        "tqxx" : "晴天",
+        "lat" : 23.1189,
+        "lon" : 113.261,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.26142883300781,
+        "y" : 23.118911743164063
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 195,
+        "PINYIN" : "Foshan",
+        "wd" : 41.9651,
+        "zgwd" : 52.471,
+        "zdwd" : 31.3274,
+        "qy" : 1060.71,
+        "sd" : 4.05413,
+        "fs" : 12.6731,
+        "fx" : 182.51,
+        "yl" : 72.3495,
+        "yunl" : 86.6303,
+        "njd" : 60,
+        "tqxx" : "多云",
+        "lat" : 23.0349,
+        "lon" : 113.115,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.11451721191406,
+        "y" : 23.034877777099609
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 196,
+        "PINYIN" : "Qingyuan",
+        "wd" : 41.2804,
+        "zgwd" : 51.837,
+        "zdwd" : 30.3241,
+        "qy" : 1023.53,
+        "sd" : 27.3706,
+        "fs" : 10.9126,
+        "fx" : 205.084,
+        "yl" : 90.7473,
+        "yunl" : 81.0327,
+        "njd" : 55,
+        "tqxx" : "阴天",
+        "lat" : 23.7196,
+        "lon" : 113.021,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.02126312255859,
+        "y" : 23.719596862792969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 197,
+        "PINYIN" : "Dongwan",
+        "wd" : 41.9515,
+        "zgwd" : 52.7047,
+        "zdwd" : 31.3868,
+        "qy" : 1057.99,
+        "sd" : 96.0294,
+        "fs" : 4.37128,
+        "fx" : 224.681,
+        "yl" : 5.06307,
+        "yunl" : 70.6438,
+        "njd" : 27,
+        "tqxx" : "晴天",
+        "lat" : 23.0485,
+        "lon" : 113.749,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.74877166748047,
+        "y" : 23.04853630065918
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 198,
+        "PINYIN" : "Zhuhai",
+        "wd" : 42.7274,
+        "zgwd" : 52.7528,
+        "zdwd" : 32.1632,
+        "qy" : 1061.48,
+        "sd" : 55.2472,
+        "fs" : 5.80417,
+        "fx" : 340.241,
+        "yl" : 75.9121,
+        "yunl" : 83.6469,
+        "njd" : 38,
+        "tqxx" : "阴天",
+        "lat" : 22.2726,
+        "lon" : 113.568,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 113.56826019287109,
+        "y" : 22.272588729858398
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 199,
+        "PINYIN" : "Jiangmen",
+        "wd" : 42.4088,
+        "zgwd" : 52.5156,
+        "zdwd" : 31.7463,
+        "qy" : 1030.5,
+        "sd" : 14.9147,
+        "fs" : 3.37353,
+        "fx" : 191.304,
+        "yl" : 9.12701,
+        "yunl" : 67.1752,
+        "njd" : 6,
+        "tqxx" : "晴天",
+        "lat" : 22.5912,
+        "lon" : 113.085,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.08474731445312,
+        "y" : 22.591190338134766
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 200,
+        "PINYIN" : "Zhaoqing",
+        "wd" : 41.9421,
+        "zgwd" : 52.371,
+        "zdwd" : 31.89,
+        "qy" : 1047.83,
+        "sd" : 90.2411,
+        "fs" : 6.42305,
+        "fx" : 84.0958,
+        "yl" : 41.6167,
+        "yunl" : 37.3546,
+        "njd" : 95,
+        "tqxx" : "阴天",
+        "lat" : 23.0579,
+        "lon" : 112.451,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 112.45140838623047,
+        "y" : 23.057882308959961
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 201,
+        "PINYIN" : "Zhongshan",
+        "wd" : 42.4731,
+        "zgwd" : 52.7981,
+        "zdwd" : 31.8908,
+        "qy" : 1054.56,
+        "sd" : 31.0133,
+        "fs" : 9.04437,
+        "fx" : 58.7663,
+        "yl" : 49.1741,
+        "yunl" : 95.2813,
+        "njd" : 47,
+        "tqxx" : "多云",
+        "lat" : 22.5269,
+        "lon" : 113.371,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.37145233154297,
+        "y" : 22.526853561401367
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 202,
+        "PINYIN" : "Zhanjiang",
+        "wd" : 43.805,
+        "zgwd" : 53.8552,
+        "zdwd" : 33.6862,
+        "qy" : 1052.53,
+        "sd" : 52.5401,
+        "fs" : 3.44218,
+        "fx" : 310.435,
+        "yl" : 68.9556,
+        "yunl" : 30.166,
+        "njd" : 32,
+        "tqxx" : "晴天",
+        "lat" : 21.195,
+        "lon" : 110.399,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 110.39922332763672,
+        "y" : 21.194997787475586
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 203,
+        "PINYIN" : "Maoming",
+        "wd" : 43.3293,
+        "zgwd" : 54.1372,
+        "zdwd" : 33.2496,
+        "qy" : 1045.85,
+        "sd" : 8.45062E-03,
+        "fs" : 9.85383,
+        "fx" : 268.91,
+        "yl" : 98.2317,
+        "yunl" : 70.2427,
+        "njd" : 54,
+        "tqxx" : "阴天",
+        "lat" : 21.6707,
+        "lon" : 110.889,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 110.88884735107422,
+        "y" : 21.670717239379883
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 204,
+        "PINYIN" : "Shaoguan",
+        "wd" : 40.1912,
+        "zgwd" : 50.5164,
+        "zdwd" : 29.96,
+        "qy" : 1015.83,
+        "sd" : 12.3124,
+        "fs" : 7.83082,
+        "fx" : 15.9814,
+        "yl" : 45.8634,
+        "yunl" : 23.8639,
+        "njd" : 32,
+        "tqxx" : "多云",
+        "lat" : 24.8088,
+        "lon" : 113.605,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 113.60539245605469,
+        "y" : 24.80877685546875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 205,
+        "PINYIN" : "Shantou",
+        "wd" : 41.6373,
+        "zgwd" : 52.0183,
+        "zdwd" : 31.6314,
+        "qy" : 1036.17,
+        "sd" : 3.65206,
+        "fs" : 8.96002,
+        "fx" : 304.196,
+        "yl" : 27.1144,
+        "yunl" : 88.6785,
+        "njd" : 34,
+        "tqxx" : "晴天",
+        "lat" : 23.3627,
+        "lon" : 116.684,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.68379974365234,
+        "y" : 23.362691879272461
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 206,
+        "PINYIN" : "Meizhou",
+        "wd" : 40.6855,
+        "zgwd" : 51.2197,
+        "zdwd" : 29.7329,
+        "qy" : 1060.17,
+        "sd" : 0.502888,
+        "fs" : 4.52593,
+        "fx" : 324.554,
+        "yl" : 80.9473,
+        "yunl" : 40.1011,
+        "njd" : 45,
+        "tqxx" : "晴天",
+        "lat" : 24.3145,
+        "lon" : 116.108,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 116.10794067382813,
+        "y" : 24.31450080871582
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 207,
+        "PINYIN" : "Yangjiang",
+        "wd" : 43.1548,
+        "zgwd" : 53.659,
+        "zdwd" : 32.5023,
+        "qy" : 1019.68,
+        "sd" : 22.0572,
+        "fs" : 10.7489,
+        "fx" : 71.9028,
+        "yl" : 49.2957,
+        "yunl" : 15.2968,
+        "njd" : 32,
+        "tqxx" : "阴天",
+        "lat" : 21.8452,
+        "lon" : 111.958,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 111.95789337158203,
+        "y" : 21.845233917236328
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 208,
+        "PINYIN" : "Wuzhou",
+        "wd" : 41.5134,
+        "zgwd" : 52.0902,
+        "zdwd" : 31.1086,
+        "qy" : 1016.63,
+        "sd" : 11.4164,
+        "fs" : 10.6817,
+        "fx" : 285.329,
+        "yl" : 82.4248,
+        "yunl" : 0.385053,
+        "njd" : 65,
+        "tqxx" : "多云",
+        "lat" : 23.4866,
+        "lon" : 111.306,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 111.30594635009766,
+        "y" : 23.48661994934082
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 209,
+        "PINYIN" : "Yulin",
+        "wd" : 42.3681,
+        "zgwd" : 53.354,
+        "zdwd" : 31.4736,
+        "qy" : 1018.82,
+        "sd" : 17.8416,
+        "fs" : 8.58856,
+        "fx" : 123.802,
+        "yl" : 8.27284,
+        "yunl" : 57.5285,
+        "njd" : 72,
+        "tqxx" : "阴天",
+        "lat" : 22.6319,
+        "lon" : 110.141,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 110.14147186279297,
+        "y" : 22.63189697265625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 210,
+        "PINYIN" : "Guilin",
+        "wd" : 39.7181,
+        "zgwd" : 49.915,
+        "zdwd" : 29.6348,
+        "qy" : 1025.25,
+        "sd" : 78.6714,
+        "fs" : 7.98308,
+        "fx" : 9.90078,
+        "yl" : 59.8594,
+        "yunl" : 20.8836,
+        "njd" : 37,
+        "tqxx" : "多云",
+        "lat" : 25.2819,
+        "lon" : 110.287,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 110.28668212890625,
+        "y" : 25.281883239746094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 211,
+        "PINYIN" : "Nanning",
+        "wd" : 42.1935,
+        "zgwd" : 52.4733,
+        "zdwd" : 32.0266,
+        "qy" : 1025.28,
+        "sd" : 59.3569,
+        "fs" : 4.69355,
+        "fx" : 115.707,
+        "yl" : 41.296,
+        "yunl" : 24.1878,
+        "njd" : 59,
+        "tqxx" : "晴天",
+        "lat" : 22.8065,
+        "lon" : 108.312,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.311767578125,
+        "y" : 22.806543350219727
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 212,
+        "PINYIN" : "Bose",
+        "wd" : 41.0984,
+        "zgwd" : 51.7109,
+        "zdwd" : 30.6976,
+        "qy" : 1034.97,
+        "sd" : 78.7521,
+        "fs" : 11.7376,
+        "fx" : 320.523,
+        "yl" : 38.7256,
+        "yunl" : 76.5806,
+        "njd" : 99,
+        "tqxx" : "晴天",
+        "lat" : 23.9016,
+        "lon" : 106.612,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.61210632324219,
+        "y" : 23.901582717895508
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 213,
+        "PINYIN" : "Hechi",
+        "wd" : 40.3031,
+        "zgwd" : 50.6238,
+        "zdwd" : 29.5214,
+        "qy" : 1024.65,
+        "sd" : 59.8048,
+        "fs" : 8.88007,
+        "fx" : 199.331,
+        "yl" : 83.9865,
+        "yunl" : 14.1467,
+        "njd" : 22,
+        "tqxx" : "多云",
+        "lat" : 24.6969,
+        "lon" : 108.052,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.05162811279297,
+        "y" : 24.696891784667969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 214,
+        "PINYIN" : "Qinzhou",
+        "wd" : 43.0501,
+        "zgwd" : 53.5437,
+        "zdwd" : 32.1315,
+        "qy" : 1032.95,
+        "sd" : 13.5963,
+        "fs" : 5.43749,
+        "fx" : 105.201,
+        "yl" : 76.374,
+        "yunl" : 55.8921,
+        "njd" : 66,
+        "tqxx" : "阴天",
+        "lat" : 21.9499,
+        "lon" : 108.615,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.61470031738281,
+        "y" : 21.949869155883789
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 215,
+        "PINYIN" : "Liuzhou",
+        "wd" : 40.6896,
+        "zgwd" : 50.9837,
+        "zdwd" : 30.4613,
+        "qy" : 1055.03,
+        "sd" : 38.5096,
+        "fs" : 6.27992,
+        "fx" : 173.187,
+        "yl" : 34.6535,
+        "yunl" : 19.5843,
+        "njd" : 80,
+        "tqxx" : "晴天",
+        "lat" : 24.3104,
+        "lon" : 109.403,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.40280914306641,
+        "y" : 24.310405731201172
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 216,
+        "PINYIN" : "Beihai",
+        "wd" : 43.5202,
+        "zgwd" : 53.7888,
+        "zdwd" : 33.4043,
+        "qy" : 1021.91,
+        "sd" : 38.538,
+        "fs" : 9.68712,
+        "fx" : 48.4373,
+        "yl" : 76.4957,
+        "yunl" : 38.2992,
+        "njd" : 47,
+        "tqxx" : "中雨",
+        "lat" : 21.4798,
+        "lon" : 109.119,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 109.11917114257812,
+        "y" : 21.47979736328125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 217,
+        "PINYIN" : "Sanya",
+        "wd" : 46.766,
+        "zgwd" : 57.4468,
+        "zdwd" : 36.3563,
+        "qy" : 1039.86,
+        "sd" : 74.5758,
+        "fs" : 6.10135,
+        "fx" : 228.228,
+        "yl" : 75.2321,
+        "yunl" : 70.6002,
+        "njd" : 69,
+        "tqxx" : "阴天",
+        "lat" : 18.234,
+        "lon" : 109.508,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.50782012939453,
+        "y" : 18.234043121337891
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 218,
+        "PINYIN" : "Haikou",
+        "wd" : 44.9682,
+        "zgwd" : 55.1988,
+        "zdwd" : 34.8634,
+        "qy" : 1043.69,
+        "sd" : 96.1176,
+        "fs" : 12.1103,
+        "fx" : 71.0315,
+        "yl" : 10.1082,
+        "yunl" : 14.2646,
+        "njd" : 82,
+        "tqxx" : "小雨",
+        "lat" : 20.0318,
+        "lon" : 110.347,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 110.34651184082031,
+        "y" : 20.031793594360352
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 219,
+        "PINYIN" : "Kangding(Dardo)",
+        "wd" : 34.9473,
+        "zgwd" : 45.205,
+        "zdwd" : 24.2767,
+        "qy" : 1060.73,
+        "sd" : 70.2251,
+        "fs" : 4.58224,
+        "fx" : 101.152,
+        "yl" : 28.0009,
+        "yunl" : 15.128,
+        "njd" : 96,
+        "tqxx" : "多云",
+        "lat" : 30.0527,
+        "lon" : 101.958,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 101.95762634277344,
+        "y" : 30.052732467651367
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 220,
+        "PINYIN" : "Ya'an",
+        "wd" : 35.0177,
+        "zgwd" : 45.842,
+        "zdwd" : 24.3134,
+        "qy" : 1041.11,
+        "sd" : 33.9722,
+        "fs" : 5.45352,
+        "fx" : 272.674,
+        "yl" : 70.7595,
+        "yunl" : 7.79665,
+        "njd" : 37,
+        "tqxx" : "晴天",
+        "lat" : 29.9823,
+        "lon" : 102.983,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.98269653320312,
+        "y" : 29.982294082641602
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 221,
+        "PINYIN" : "Barkam",
+        "wd" : 33.0917,
+        "zgwd" : 44.0291,
+        "zdwd" : 22.9985,
+        "qy" : 1025.85,
+        "sd" : 11.7573,
+        "fs" : 3.46076,
+        "fx" : 322.91,
+        "yl" : 9.46661,
+        "yunl" : 56.7292,
+        "njd" : 77,
+        "tqxx" : "阴天",
+        "lat" : 31.9083,
+        "lon" : 102.232,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.23246002197266,
+        "y" : 31.908346176147461
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 222,
+        "PINYIN" : "Chengdu",
+        "wd" : 34.3389,
+        "zgwd" : 44.3642,
+        "zdwd" : 23.8214,
+        "qy" : 1038.1,
+        "sd" : 34.0939,
+        "fs" : 6.57257,
+        "fx" : 313.035,
+        "yl" : 11.7631,
+        "yunl" : 77.0331,
+        "njd" : 82,
+        "tqxx" : "晴天",
+        "lat" : 30.6611,
+        "lon" : 104.082,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 104.08175659179687,
+        "y" : 30.661056518554688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 223,
+        "PINYIN" : "Zigong",
+        "wd" : 35.6323,
+        "zgwd" : 46.4942,
+        "zdwd" : 25.3835,
+        "qy" : 1032.56,
+        "sd" : 37.5463,
+        "fs" : 12.1651,
+        "fx" : 67.0151,
+        "yl" : 59.3543,
+        "yunl" : 91.267,
+        "njd" : 72,
+        "tqxx" : "阴天",
+        "lat" : 29.3677,
+        "lon" : 104.776,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.77635192871094,
+        "y" : 29.367721557617188
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 224,
+        "PINYIN" : "Chongqing",
+        "wd" : 35.4418,
+        "zgwd" : 45.5588,
+        "zdwd" : 24.5851,
+        "qy" : 1058.61,
+        "sd" : 75.7137,
+        "fs" : 11.6813,
+        "fx" : 233.392,
+        "yl" : 73.6755,
+        "yunl" : 45.8402,
+        "njd" : 95,
+        "tqxx" : "阴天",
+        "lat" : 29.5582,
+        "lon" : 106.51,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.51033782958984,
+        "y" : 29.558176040649414
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 225,
+        "PINYIN" : "Nanchong",
+        "wd" : 34.2042,
+        "zgwd" : 45.0426,
+        "zdwd" : 23.8912,
+        "qy" : 1045.58,
+        "sd" : 2.00447,
+        "fs" : 3.06062,
+        "fx" : 313.214,
+        "yl" : 96.9756,
+        "yunl" : 24.7597,
+        "njd" : 14,
+        "tqxx" : "多云",
+        "lat" : 30.7958,
+        "lon" : 106.082,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 106.08162689208984,
+        "y" : 30.795822143554687
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 226,
+        "PINYIN" : "Luzhou",
+        "wd" : 36.118,
+        "zgwd" : 46.3933,
+        "zdwd" : 25.1529,
+        "qy" : 1029,
+        "sd" : 79.0047,
+        "fs" : 7.88857,
+        "fx" : 49.9772,
+        "yl" : 12.9834,
+        "yunl" : 65.1601,
+        "njd" : 9,
+        "tqxx" : "多云",
+        "lat" : 28.882,
+        "lon" : 105.438,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.43784332275391,
+        "y" : 28.881994247436523
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 227,
+        "PINYIN" : "Deyang",
+        "wd" : 33.8696,
+        "zgwd" : 44.368,
+        "zdwd" : 23.5826,
+        "qy" : 1025.57,
+        "sd" : 25.6828,
+        "fs" : 3.09165,
+        "fx" : 176.232,
+        "yl" : 1.65351,
+        "yunl" : 22.7317,
+        "njd" : 40,
+        "tqxx" : "晴天",
+        "lat" : 31.1304,
+        "lon" : 104.392,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.39154815673828,
+        "y" : 31.13044548034668
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 228,
+        "PINYIN" : "Mianyang",
+        "wd" : 33.5437,
+        "zgwd" : 44.2749,
+        "zdwd" : 22.6923,
+        "qy" : 1057.53,
+        "sd" : 93.3975,
+        "fs" : 8.91346,
+        "fx" : 193.123,
+        "yl" : 41.1516,
+        "yunl" : 94.8481,
+        "njd" : 22,
+        "tqxx" : "晴天",
+        "lat" : 31.4563,
+        "lon" : 104.749,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 104.74855041503906,
+        "y" : 31.456348419189453
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 229,
+        "PINYIN" : "Suining",
+        "wd" : 34.4966,
+        "zgwd" : 44.9974,
+        "zdwd" : 24.1979,
+        "qy" : 1036.94,
+        "sd" : 54.984,
+        "fs" : 5.43982,
+        "fx" : 166.17,
+        "yl" : 20.9986,
+        "yunl" : 65.8093,
+        "njd" : 59,
+        "tqxx" : "多云",
+        "lat" : 30.5034,
+        "lon" : 105.57,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.56970977783203,
+        "y" : 30.503393173217773
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 230,
+        "PINYIN" : "Neijiang",
+        "wd" : 35.4224,
+        "zgwd" : 45.8802,
+        "zdwd" : 24.7586,
+        "qy" : 1061.57,
+        "sd" : 75.2614,
+        "fs" : 4.73816,
+        "fx" : 319.375,
+        "yl" : 71.2938,
+        "yunl" : 46.7269,
+        "njd" : 26,
+        "tqxx" : "阴天",
+        "lat" : 29.5776,
+        "lon" : 105.053,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.05343627929687,
+        "y" : 29.577568054199219
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 231,
+        "PINYIN" : "Leshan",
+        "wd" : 35.4318,
+        "zgwd" : 46.2389,
+        "zdwd" : 25.3183,
+        "qy" : 1032.98,
+        "sd" : 48.8293,
+        "fs" : 3.80518,
+        "fx" : 186.952,
+        "yl" : 36.6005,
+        "yunl" : 26.1196,
+        "njd" : 14,
+        "tqxx" : "晴天",
+        "lat" : 29.5682,
+        "lon" : 103.751,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.75140380859375,
+        "y" : 29.56822395324707
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 232,
+        "PINYIN" : "Yibin",
+        "wd" : 36.2297,
+        "zgwd" : 47.1195,
+        "zdwd" : 25.6193,
+        "qy" : 1037.95,
+        "sd" : 43.9218,
+        "fs" : 7.7223,
+        "fx" : 185.179,
+        "yl" : 88.5524,
+        "yunl" : 88.2343,
+        "njd" : 18,
+        "tqxx" : "阴天",
+        "lat" : 28.7703,
+        "lon" : 104.617,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.61686706542969,
+        "y" : 28.770256042480469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 233,
+        "PINYIN" : "Guangyuan",
+        "wd" : 32.556,
+        "zgwd" : 42.9463,
+        "zdwd" : 21.6762,
+        "qy" : 1023.44,
+        "sd" : 40.5491,
+        "fs" : 12.958,
+        "fx" : 287.745,
+        "yl" : 84.1315,
+        "yunl" : 99.6442,
+        "njd" : 33,
+        "tqxx" : "晴天",
+        "lat" : 32.444,
+        "lon" : 105.832,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.83170318603516,
+        "y" : 32.4439697265625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 234,
+        "PINYIN" : "Daxian",
+        "wd" : 33.7753,
+        "zgwd" : 43.8788,
+        "zdwd" : 22.7843,
+        "qy" : 1027.84,
+        "sd" : 35.8023,
+        "fs" : 9.72098,
+        "fx" : 35.974,
+        "yl" : 78.6395,
+        "yunl" : 62.2932,
+        "njd" : 1,
+        "tqxx" : "阴天",
+        "lat" : 31.2247,
+        "lon" : 107.5,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 107.50034332275391,
+        "y" : 31.224697113037109
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 235,
+        "PINYIN" : "Xichang",
+        "wd" : 37.1028,
+        "zgwd" : 47.2618,
+        "zdwd" : 26.705,
+        "qy" : 1033.95,
+        "sd" : 26.0866,
+        "fs" : 9.06886,
+        "fx" : 356.449,
+        "yl" : 79.2541,
+        "yunl" : 31.5003,
+        "njd" : 99,
+        "tqxx" : "多云",
+        "lat" : 27.8972,
+        "lon" : 102.265,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.26526641845703,
+        "y" : 27.897245407104492
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 236,
+        "PINYIN" : "Panzhihua",
+        "wd" : 38.4452,
+        "zgwd" : 48.8191,
+        "zdwd" : 27.9541,
+        "qy" : 1053.26,
+        "sd" : 11.7064,
+        "fs" : 4.50975,
+        "fx" : 190.971,
+        "yl" : 29.0847,
+        "yunl" : 73.0705,
+        "njd" : 39,
+        "tqxx" : "阴天",
+        "lat" : 26.5548,
+        "lon" : 101.698,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 101.69841766357422,
+        "y" : 26.554798126220703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 237,
+        "PINYIN" : "Qianjiang Tujiazu Miaozu Zizhixian",
+        "wd" : 35.4728,
+        "zgwd" : 45.4825,
+        "zdwd" : 24.7627,
+        "qy" : 1057,
+        "sd" : 77.9409,
+        "fs" : 10.7237,
+        "fx" : 27.241,
+        "yl" : 70.977,
+        "yunl" : 90.7615,
+        "njd" : 56,
+        "tqxx" : "阴天",
+        "lat" : 29.5272,
+        "lon" : 108.781,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.78147125244141,
+        "y" : 29.527179718017578
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 238,
+        "PINYIN" : "Lupanshui",
+        "wd" : 38.4232,
+        "zgwd" : 49.3209,
+        "zdwd" : 28.1747,
+        "qy" : 1017.15,
+        "sd" : 10.7773,
+        "fs" : 5.84145,
+        "fx" : 231.984,
+        "yl" : 29.3452,
+        "yunl" : 16.0902,
+        "njd" : 65,
+        "tqxx" : "晴天",
+        "lat" : 26.5768,
+        "lon" : 104.873,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.87325286865234,
+        "y" : 26.576774597167969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 239,
+        "PINYIN" : "Tongren",
+        "wd" : 37.2778,
+        "zgwd" : 48.1498,
+        "zdwd" : 27.2756,
+        "qy" : 1060.95,
+        "sd" : 62.6311,
+        "fs" : 12.2089,
+        "fx" : 233.59,
+        "yl" : 5.48102,
+        "yunl" : 99.1534,
+        "njd" : 16,
+        "tqxx" : "中雨",
+        "lat" : 27.7222,
+        "lon" : 109.193,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.19268035888672,
+        "y" : 27.722166061401367
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 240,
+        "PINYIN" : "Anshun",
+        "wd" : 38.7557,
+        "zgwd" : 48.9808,
+        "zdwd" : 28.4613,
+        "qy" : 1051.14,
+        "sd" : 92.4013,
+        "fs" : 12.9253,
+        "fx" : 97.009,
+        "yl" : 59.3947,
+        "yunl" : 72.7696,
+        "njd" : 46,
+        "tqxx" : "阴天",
+        "lat" : 26.2443,
+        "lon" : 105.926,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 105.92607116699219,
+        "y" : 26.244258880615234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 241,
+        "PINYIN" : "Kaili",
+        "wd" : 38.4111,
+        "zgwd" : 48.7007,
+        "zdwd" : 27.942,
+        "qy" : 1029.34,
+        "sd" : 99.6213,
+        "fs" : 12.4798,
+        "fx" : 199.246,
+        "yl" : 39.9335,
+        "yunl" : 86.681,
+        "njd" : 13,
+        "tqxx" : "晴天",
+        "lat" : 26.5889,
+        "lon" : 107.977,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 107.97711181640625,
+        "y" : 26.588884353637695
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 242,
+        "PINYIN" : "Duyun",
+        "wd" : 38.7367,
+        "zgwd" : 48.8975,
+        "zdwd" : 28.6817,
+        "qy" : 1059.12,
+        "sd" : 41.5633,
+        "fs" : 4.88581,
+        "fx" : 176.697,
+        "yl" : 97.4072,
+        "yunl" : 68.3548,
+        "njd" : 35,
+        "tqxx" : "阴天",
+        "lat" : 26.2633,
+        "lon" : 107.518,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 107.51804351806641,
+        "y" : 26.263320922851563
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 243,
+        "PINYIN" : "Xingyi",
+        "wd" : 39.9132,
+        "zgwd" : 50.0823,
+        "zdwd" : 29.3006,
+        "qy" : 1018.26,
+        "sd" : 65.1961,
+        "fs" : 4.82008,
+        "fx" : 324.219,
+        "yl" : 84.4473,
+        "yunl" : 56.4517,
+        "njd" : 11,
+        "tqxx" : "中雨",
+        "lat" : 25.0868,
+        "lon" : 104.896,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 104.89589691162109,
+        "y" : 25.086828231811523
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 244,
+        "PINYIN" : "Bijie",
+        "wd" : 37.6937,
+        "zgwd" : 48.4587,
+        "zdwd" : 26.6966,
+        "qy" : 1036.97,
+        "sd" : 85.7856,
+        "fs" : 11.7664,
+        "fx" : 247.351,
+        "yl" : 30.0258,
+        "yunl" : 27.2804,
+        "njd" : 55,
+        "tqxx" : "中雨",
+        "lat" : 27.3063,
+        "lon" : 105.282,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.28241729736328,
+        "y" : 27.306295394897461
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 245,
+        "PINYIN" : "Guiyang",
+        "wd" : 38.4231,
+        "zgwd" : 48.5763,
+        "zdwd" : 28.0632,
+        "qy" : 1019.46,
+        "sd" : 68.5343,
+        "fs" : 3.7646,
+        "fx" : 148.207,
+        "yl" : 50.6041,
+        "yunl" : 21.8885,
+        "njd" : 88,
+        "tqxx" : "晴天",
+        "lat" : 26.5769,
+        "lon" : 106.711,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.71137237548828,
+        "y" : 26.576873779296875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 246,
+        "PINYIN" : "Zunyi",
+        "wd" : 37.3046,
+        "zgwd" : 47.7143,
+        "zdwd" : 26.8699,
+        "qy" : 1042.27,
+        "sd" : 16.8327,
+        "fs" : 12.7615,
+        "fx" : 55.0576,
+        "yl" : 92.0002,
+        "yunl" : 91.4605,
+        "njd" : 87,
+        "tqxx" : "晴天",
+        "lat" : 27.6954,
+        "lon" : 106.929,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 106.92939758300781,
+        "y" : 27.69538688659668
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 247,
+        "PINYIN" : "Kunming",
+        "wd" : 39.9562,
+        "zgwd" : 50.3214,
+        "zdwd" : 29.5304,
+        "qy" : 1038.15,
+        "sd" : 25.3273,
+        "fs" : 8.20975,
+        "fx" : 200.344,
+        "yl" : 51.1471,
+        "yunl" : 14.7961,
+        "njd" : 61,
+        "tqxx" : "多云",
+        "lat" : 25.0438,
+        "lon" : 102.705,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.70456695556641,
+        "y" : 25.043844223022461
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 248,
+        "PINYIN" : "Dongchuan",
+        "wd" : 38.9073,
+        "zgwd" : 49.7983,
+        "zdwd" : 28.3084,
+        "qy" : 1038.3,
+        "sd" : 86.9731,
+        "fs" : 3.53717,
+        "fx" : 218.125,
+        "yl" : 65.6884,
+        "yunl" : 53.6234,
+        "njd" : 68,
+        "tqxx" : "中雨",
+        "lat" : 26.0927,
+        "lon" : 103.181,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.18122100830078,
+        "y" : 26.09266471862793
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 249,
+        "PINYIN" : "Qujing",
+        "wd" : 39.5038,
+        "zgwd" : 49.9719,
+        "zdwd" : 29.0938,
+        "qy" : 1045.79,
+        "sd" : 16.1402,
+        "fs" : 6.02464,
+        "fx" : 83.9761,
+        "yl" : 74.4219,
+        "yunl" : 26.8748,
+        "njd" : 34,
+        "tqxx" : "晴天",
+        "lat" : 25.4962,
+        "lon" : 103.795,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.79470062255859,
+        "y" : 25.496166229248047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 250,
+        "PINYIN" : "Chuxiong",
+        "wd" : 39.9669,
+        "zgwd" : 50.0854,
+        "zdwd" : 29.1285,
+        "qy" : 1061.89,
+        "sd" : 22.6659,
+        "fs" : 10.1806,
+        "fx" : 317.16,
+        "yl" : 78.4292,
+        "yunl" : 77.4975,
+        "njd" : 54,
+        "tqxx" : "晴天",
+        "lat" : 25.0331,
+        "lon" : 101.544,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 101.54376983642578,
+        "y" : 25.033052444458008
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 251,
+        "PINYIN" : "Yuxi",
+        "wd" : 40.645,
+        "zgwd" : 51.0313,
+        "zdwd" : 29.6894,
+        "qy" : 1033.52,
+        "sd" : 68.4007,
+        "fs" : 7.04316,
+        "fx" : 334.838,
+        "yl" : 77.3504,
+        "yunl" : 26.3519,
+        "njd" : 10,
+        "tqxx" : "多云",
+        "lat" : 24.355,
+        "lon" : 102.533,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.53323364257812,
+        "y" : 24.354972839355469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 252,
+        "PINYIN" : "Gejiu",
+        "wd" : 41.647,
+        "zgwd" : 52.188,
+        "zdwd" : 31.1356,
+        "qy" : 1033.57,
+        "sd" : 26.1079,
+        "fs" : 7.07769,
+        "fx" : 157.877,
+        "yl" : 92.773,
+        "yunl" : 39.6146,
+        "njd" : 35,
+        "tqxx" : "多云",
+        "lat" : 23.353,
+        "lon" : 103.159,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 103.15920257568359,
+        "y" : 23.352962493896484
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 253,
+        "PINYIN" : "Wenshan",
+        "wd" : 41.6251,
+        "zgwd" : 52.6155,
+        "zdwd" : 30.8322,
+        "qy" : 1059.58,
+        "sd" : 2.01549,
+        "fs" : 12.6373,
+        "fx" : 158.791,
+        "yl" : 11.4872,
+        "yunl" : 34.0494,
+        "njd" : 67,
+        "tqxx" : "多云",
+        "lat" : 23.3749,
+        "lon" : 104.239,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.23912048339844,
+        "y" : 23.374917984008789
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 254,
+        "PINYIN" : "Simao",
+        "wd" : 42.2045,
+        "zgwd" : 52.3013,
+        "zdwd" : 31.2342,
+        "qy" : 1027.64,
+        "sd" : 21.1029,
+        "fs" : 3.76971,
+        "fx" : 307.78,
+        "yl" : 68.348,
+        "yunl" : 30.639,
+        "njd" : 33,
+        "tqxx" : "多云",
+        "lat" : 22.7955,
+        "lon" : 100.975,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.97521209716797,
+        "y" : 22.795480728149414
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 255,
+        "PINYIN" : "Zhaotong",
+        "wd" : 37.6577,
+        "zgwd" : 48.3637,
+        "zdwd" : 27.6378,
+        "qy" : 1053.76,
+        "sd" : 34.8737,
+        "fs" : 12.8102,
+        "fx" : 146.345,
+        "yl" : 52.5338,
+        "yunl" : 69.3864,
+        "njd" : 77,
+        "tqxx" : "晴天",
+        "lat" : 27.3423,
+        "lon" : 103.715,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.71492767333984,
+        "y" : 27.342279434204102
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 256,
+        "PINYIN" : "Jinghong",
+        "wd" : 42.9873,
+        "zgwd" : 53.3389,
+        "zdwd" : 32.3192,
+        "qy" : 1041.69,
+        "sd" : 33.6079,
+        "fs" : 11.6179,
+        "fx" : 293.446,
+        "yl" : 27.6154,
+        "yunl" : 0.0145596,
+        "njd" : 78,
+        "tqxx" : "多云",
+        "lat" : 22.0127,
+        "lon" : 100.794,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.79355621337891,
+        "y" : 22.01268196105957
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 257,
+        "PINYIN" : "Dali",
+        "wd" : 39.4105,
+        "zgwd" : 49.6527,
+        "zdwd" : 29.2482,
+        "qy" : 1020.62,
+        "sd" : 32.8204,
+        "fs" : 7.6761,
+        "fx" : 325.578,
+        "yl" : 22.9083,
+        "yunl" : 81.077,
+        "njd" : 71,
+        "tqxx" : "多云",
+        "lat" : 25.5895,
+        "lon" : 100.226,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.22635650634766,
+        "y" : 25.589534759521484
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 258,
+        "PINYIN" : "Baoshan",
+        "wd" : 39.8832,
+        "zgwd" : 50.6025,
+        "zdwd" : 29.1081,
+        "qy" : 1014.95,
+        "sd" : 81.0641,
+        "fs" : 11.2393,
+        "fx" : 56.0873,
+        "yl" : 30.315,
+        "yunl" : 25.1447,
+        "njd" : 18,
+        "tqxx" : "晴天",
+        "lat" : 25.1168,
+        "lon" : 99.1687,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 99.168724060058594,
+        "y" : 25.116802215576172
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 259,
+        "PINYIN" : "Luxi",
+        "wd" : 40.5576,
+        "zgwd" : 51.3229,
+        "zdwd" : 30.468,
+        "qy" : 1040.52,
+        "sd" : 92.5425,
+        "fs" : 11.6762,
+        "fx" : 281.953,
+        "yl" : 11.7259,
+        "yunl" : 74.842,
+        "njd" : 21,
+        "tqxx" : "中雨",
+        "lat" : 24.4424,
+        "lon" : 98.59,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 98.589988708496094,
+        "y" : 24.442420959472656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 260,
+        "PINYIN" : "Lijiang Naxizu Zizhixian",
+        "wd" : 38.1233,
+        "zgwd" : 49.0208,
+        "zdwd" : 27.4274,
+        "qy" : 1047.19,
+        "sd" : 13.9977,
+        "fs" : 8.07908,
+        "fx" : 107.791,
+        "yl" : 15.3127,
+        "yunl" : 19.7793,
+        "njd" : 58,
+        "tqxx" : "中雨",
+        "lat" : 26.8767,
+        "lon" : 100.234,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.2342529296875,
+        "y" : 26.876665115356445
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 261,
+        "PINYIN" : "Lushui",
+        "wd" : 39.012,
+        "zgwd" : 49.8496,
+        "zdwd" : 28.1197,
+        "qy" : 1049.2,
+        "sd" : 81.3907,
+        "fs" : 3.60256,
+        "fx" : 347.49,
+        "yl" : 25.6514,
+        "yunl" : 47.3242,
+        "njd" : 21,
+        "tqxx" : "多云",
+        "lat" : 25.988,
+        "lon" : 98.8237,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 98.82373046875,
+        "y" : 25.988048553466797
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 262,
+        "PINYIN" : "Zhongdian",
+        "wd" : 37.1795,
+        "zgwd" : 47.1824,
+        "zdwd" : 26.423,
+        "qy" : 1030.6,
+        "sd" : 5.51163,
+        "fs" : 7.11529,
+        "fx" : 156.537,
+        "yl" : 25.8822,
+        "yunl" : 28.2858,
+        "njd" : 13,
+        "tqxx" : "阴天",
+        "lat" : 27.8205,
+        "lon" : 99.7074,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 99.7073974609375,
+        "y" : 27.820480346679688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 263,
+        "PINYIN" : "Lincang",
+        "wd" : 41.1201,
+        "zgwd" : 51.205,
+        "zdwd" : 30.7822,
+        "qy" : 1054.13,
+        "sd" : 62.8853,
+        "fs" : 7.36083,
+        "fx" : 316.533,
+        "yl" : 96.1911,
+        "yunl" : 98.8289,
+        "njd" : 68,
+        "tqxx" : "小雨",
+        "lat" : 23.8799,
+        "lon" : 100.088,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.08780670166016,
+        "y" : 23.87993049621582
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 264,
+        "PINYIN" : "Lhasa",
+        "wd" : 35.3424,
+        "zgwd" : 45.9324,
+        "zdwd" : 25.0848,
+        "qy" : 1019.58,
+        "sd" : 9.8788,
+        "fs" : 7.39296,
+        "fx" : 0.235832,
+        "yl" : 20.4684,
+        "yunl" : 22.2219,
+        "njd" : 94,
+        "tqxx" : "阴天",
+        "lat" : 29.6576,
+        "lon" : 91.132,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 91.132049560546875,
+        "y" : 29.657588958740234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 265,
+        "PINYIN" : "Qamdo",
+        "wd" : 33.8578,
+        "zgwd" : 44.8121,
+        "zdwd" : 23.5382,
+        "qy" : 1043.92,
+        "sd" : 3.00009,
+        "fs" : 9.25325,
+        "fx" : 87.7769,
+        "yl" : 66.3674,
+        "yunl" : 70.6559,
+        "njd" : 17,
+        "tqxx" : "多云",
+        "lat" : 31.1422,
+        "lon" : 97.1675,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 97.16754150390625,
+        "y" : 31.142181396484375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 266,
+        "PINYIN" : "N\u02F6mdong",
+        "wd" : 35.7726,
+        "zgwd" : 40,
+        "zdwd" : 8,
+        "qy" : 1013.25,
+        "sd" : 19.2274,
+        "fs" : 3,
+        "fx" : 0,
+        "yl" : 0,
+        "yunl" : 0,
+        "njd" : 0,
+        "tqxx" : " ",
+        "lat" : 29.2274,
+        "lon" : 91.7766,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 91.776596069335938,
+        "y" : 29.227380752563477
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 267,
+        "PINYIN" : "Rikaze",
+        "wd" : 35.7256,
+        "zgwd" : 46.2183,
+        "zdwd" : 25.253,
+        "qy" : 1023.31,
+        "sd" : 44.428,
+        "fs" : 12.4802,
+        "fx" : 322.847,
+        "yl" : 96.847,
+        "yunl" : 84.3176,
+        "njd" : 24,
+        "tqxx" : "阴天",
+        "lat" : 29.2744,
+        "lon" : 88.8792,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 88.879226684570313,
+        "y" : 29.274421691894531
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 268,
+        "PINYIN" : "Nagqu",
+        "wd" : 33.5194,
+        "zgwd" : 44.3368,
+        "zdwd" : 22.5964,
+        "qy" : 1055.96,
+        "sd" : 89.421,
+        "fs" : 10.5352,
+        "fx" : 358.924,
+        "yl" : 53.019,
+        "yunl" : 38.3966,
+        "njd" : 12,
+        "tqxx" : "晴天",
+        "lat" : 31.4806,
+        "lon" : 92.0546,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 92.054603576660156,
+        "y" : 31.480579376220703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 269,
+        "PINYIN" : "Ga'er",
+        "wd" : 32.4947,
+        "zgwd" : 43.3869,
+        "zdwd" : 21.5726,
+        "qy" : 1034.88,
+        "sd" : 24.7432,
+        "fs" : 9.86597,
+        "fx" : 155.622,
+        "yl" : 35.0358,
+        "yunl" : 20.7147,
+        "njd" : 82,
+        "tqxx" : "多云",
+        "lat" : 32.5053,
+        "lon" : 80.0966,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 80.0965576171875,
+        "y" : 32.505340576171875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 270,
+        "PINYIN" : "Nyingchi",
+        "wd" : 35.4159,
+        "zgwd" : 45.7796,
+        "zdwd" : 24.6289,
+        "qy" : 1061.04,
+        "sd" : 69.0887,
+        "fs" : 10.5675,
+        "fx" : 108.973,
+        "yl" : 7.12096,
+        "yunl" : 56.0521,
+        "njd" : 6,
+        "tqxx" : "阴天",
+        "lat" : 29.5841,
+        "lon" : 94.4843,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 94.484260559082031,
+        "y" : 29.584074020385742
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 271,
+        "PINYIN" : "Xi'an",
+        "wd" : 30.7383,
+        "zgwd" : 40.955,
+        "zdwd" : 20.3291,
+        "qy" : 1042.65,
+        "sd" : 34.3347,
+        "fs" : 4.64795,
+        "fx" : 100.701,
+        "yl" : 19.017,
+        "yunl" : 12.4457,
+        "njd" : 11,
+        "tqxx" : "小雨",
+        "lat" : 34.2617,
+        "lon" : 108.949,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.94902801513672,
+        "y" : 34.261684417724609
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 272,
+        "PINYIN" : "Tongchuan",
+        "wd" : 29.9245,
+        "zgwd" : 40.5933,
+        "zdwd" : 19.567,
+        "qy" : 1046.21,
+        "sd" : 87.9398,
+        "fs" : 4.77795,
+        "fx" : 31.1335,
+        "yl" : 9.97244,
+        "yunl" : 33.0498,
+        "njd" : 16,
+        "tqxx" : "晴天",
+        "lat" : 35.0755,
+        "lon" : 109.057,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.05728149414062,
+        "y" : 35.075458526611328
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 273,
+        "PINYIN" : "Baoji",
+        "wd" : 30.6177,
+        "zgwd" : 41.4739,
+        "zdwd" : 20.0501,
+        "qy" : 1030.54,
+        "sd" : 7.869,
+        "fs" : 12.1423,
+        "fx" : 290.396,
+        "yl" : 36.5948,
+        "yunl" : 1.35694,
+        "njd" : 11,
+        "tqxx" : "阴天",
+        "lat" : 34.3823,
+        "lon" : 107.138,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 107.13835906982422,
+        "y" : 34.382286071777344
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 274,
+        "PINYIN" : "Xianyang",
+        "wd" : 30.6628,
+        "zgwd" : 41.5852,
+        "zdwd" : 20.352,
+        "qy" : 1041.03,
+        "sd" : 56.8606,
+        "fs" : 10.6415,
+        "fx" : 81.2657,
+        "yl" : 68.6685,
+        "yunl" : 79.0579,
+        "njd" : 72,
+        "tqxx" : "晴天",
+        "lat" : 34.3372,
+        "lon" : 108.71,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 108.71012878417969,
+        "y" : 34.337215423583984
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 275,
+        "PINYIN" : "Weinan",
+        "wd" : 30.4985,
+        "zgwd" : 40.6393,
+        "zdwd" : 19.7355,
+        "qy" : 1043.34,
+        "sd" : 82.7187,
+        "fs" : 11.8583,
+        "fx" : 273.768,
+        "yl" : 19.3125,
+        "yunl" : 62.7241,
+        "njd" : 80,
+        "tqxx" : "多云",
+        "lat" : 34.5015,
+        "lon" : 109.501,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.50083923339844,
+        "y" : 34.50152587890625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 276,
+        "PINYIN" : "Hanzhong",
+        "wd" : 31.9219,
+        "zgwd" : 42.8771,
+        "zdwd" : 21.0926,
+        "qy" : 1048.65,
+        "sd" : 51.2001,
+        "fs" : 10.3004,
+        "fx" : 159.282,
+        "yl" : 42.8398,
+        "yunl" : 48.2783,
+        "njd" : 59,
+        "tqxx" : "晴天",
+        "lat" : 33.0781,
+        "lon" : 107.034,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 107.03439331054687,
+        "y" : 33.078147888183594
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 277,
+        "PINYIN" : "Ankang",
+        "wd" : 32.3101,
+        "zgwd" : 42.949,
+        "zdwd" : 22.2864,
+        "qy" : 1056.1,
+        "sd" : 38.8326,
+        "fs" : 5.30933,
+        "fx" : 164.598,
+        "yl" : 74.6498,
+        "yunl" : 49.2247,
+        "njd" : 35,
+        "tqxx" : "多云",
+        "lat" : 32.6899,
+        "lon" : 109.026,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.02578735351562,
+        "y" : 32.689865112304687
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 278,
+        "PINYIN" : "Shangzhou",
+        "wd" : 31.1281,
+        "zgwd" : 41.7107,
+        "zdwd" : 20.8341,
+        "qy" : 1044.18,
+        "sd" : 67.3928,
+        "fs" : 6.21041,
+        "fx" : 11.1116,
+        "yl" : 72.6757,
+        "yunl" : 7.07755,
+        "njd" : 47,
+        "tqxx" : "多云",
+        "lat" : 33.8719,
+        "lon" : 109.93,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.93023681640625,
+        "y" : 33.871925354003906
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 279,
+        "PINYIN" : "Yan'an",
+        "wd" : 28.4061,
+        "zgwd" : 39.2203,
+        "zdwd" : 18.2884,
+        "qy" : 1025.59,
+        "sd" : 13.4247,
+        "fs" : 8.86822,
+        "fx" : 239.567,
+        "yl" : 68.8049,
+        "yunl" : 83.9303,
+        "njd" : 97,
+        "tqxx" : "多云",
+        "lat" : 36.5939,
+        "lon" : 109.471,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 109.47128295898437,
+        "y" : 36.5938720703125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 280,
+        "PINYIN" : "Yulin",
+        "wd" : 26.7027,
+        "zgwd" : 53.354,
+        "zdwd" : 31.4736,
+        "qy" : 1018.82,
+        "sd" : 17.8416,
+        "fs" : 8.58856,
+        "fx" : 123.802,
+        "yl" : 8.27284,
+        "yunl" : 57.5285,
+        "njd" : 72,
+        "tqxx" : "阴天",
+        "lat" : 38.2973,
+        "lon" : 109.757,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 109.7574462890625,
+        "y" : 38.297275543212891
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 281,
+        "PINYIN" : "Lanzhou",
+        "wd" : 28.932,
+        "zgwd" : 39.4114,
+        "zdwd" : 18.2377,
+        "qy" : 1035.11,
+        "sd" : 30.3695,
+        "fs" : 4.58527,
+        "fx" : 28.8646,
+        "yl" : 68.3682,
+        "yunl" : 29.3785,
+        "njd" : 98,
+        "tqxx" : "小雨",
+        "lat" : 36.068,
+        "lon" : 103.75,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.75005340576172,
+        "y" : 36.068038940429688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 282,
+        "PINYIN" : "Jinchang",
+        "wd" : 26.5048,
+        "zgwd" : 36.5986,
+        "zdwd" : 15.6283,
+        "qy" : 1062.24,
+        "sd" : 83.9432,
+        "fs" : 7.8228,
+        "fx" : 80.7862,
+        "yl" : 29.8624,
+        "yunl" : 90.6825,
+        "njd" : 45,
+        "tqxx" : "中雨",
+        "lat" : 38.4952,
+        "lon" : 102.166,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 102.16574859619141,
+        "y" : 38.495193481445313
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 283,
+        "PINYIN" : "Tianshui",
+        "wd" : 30.4157,
+        "zgwd" : 40.5057,
+        "zdwd" : 19.8574,
+        "qy" : 1061.56,
+        "sd" : 79.6214,
+        "fs" : 5.17918,
+        "fx" : 93.1524,
+        "yl" : 61.1114,
+        "yunl" : 56.6301,
+        "njd" : 54,
+        "tqxx" : "中雨",
+        "lat" : 34.5843,
+        "lon" : 105.715,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.71524047851563,
+        "y" : 34.584266662597656
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 284,
+        "PINYIN" : "Zhangye",
+        "wd" : 26.0649,
+        "zgwd" : 36.2387,
+        "zdwd" : 15.3279,
+        "qy" : 1051.93,
+        "sd" : 12.7911,
+        "fs" : 6.10459,
+        "fx" : 186.528,
+        "yl" : 51.132,
+        "yunl" : 95.6622,
+        "njd" : 10,
+        "tqxx" : "中雨",
+        "lat" : 38.9351,
+        "lon" : 100.45,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.45028686523437,
+        "y" : 38.93505859375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 285,
+        "PINYIN" : "Wuwei",
+        "wd" : 27.0731,
+        "zgwd" : 37.5072,
+        "zdwd" : 16.335,
+        "qy" : 1031.47,
+        "sd" : 57.6831,
+        "fs" : 7.11512,
+        "fx" : 143.582,
+        "yl" : 8.11446,
+        "yunl" : 39.0531,
+        "njd" : 64,
+        "tqxx" : "小雨",
+        "lat" : 37.9269,
+        "lon" : 102.633,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.63346099853516,
+        "y" : 37.926910400390625
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 286,
+        "PINYIN" : "Dingxi",
+        "wd" : 29.4248,
+        "zgwd" : 39.9522,
+        "zdwd" : 18.6864,
+        "qy" : 1025.04,
+        "sd" : 30.9686,
+        "fs" : 5.15212,
+        "fx" : 8.1735,
+        "yl" : 23.0557,
+        "yunl" : 10.2162,
+        "njd" : 4,
+        "tqxx" : "中雨",
+        "lat" : 35.5752,
+        "lon" : 104.619,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 104.61856842041016,
+        "y" : 35.575237274169922
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 287,
+        "PINYIN" : "Cheng Xian",
+        "wd" : 31.2548,
+        "zgwd" : 41.8227,
+        "zdwd" : 20.8693,
+        "qy" : 1014.49,
+        "sd" : 65.1186,
+        "fs" : 11.4962,
+        "fx" : 68.8822,
+        "yl" : 83.9154,
+        "yunl" : 7.56348,
+        "njd" : 42,
+        "tqxx" : "晴天",
+        "lat" : 33.7452,
+        "lon" : 105.73,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 105.72971343994141,
+        "y" : 33.745166778564453
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 288,
+        "PINYIN" : "Pingliang",
+        "wd" : 29.4645,
+        "zgwd" : 40.1152,
+        "zdwd" : 18.6267,
+        "qy" : 1022.62,
+        "sd" : 78.7828,
+        "fs" : 10.9641,
+        "fx" : 340.336,
+        "yl" : 5.88693,
+        "yunl" : 13.8953,
+        "njd" : 99,
+        "tqxx" : "中雨",
+        "lat" : 35.5355,
+        "lon" : 106.683,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 106.68306732177734,
+        "y" : 35.535518646240234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 289,
+        "PINYIN" : "Xifeng",
+        "wd" : 29.2614,
+        "zgwd" : 40.2611,
+        "zdwd" : 18.8019,
+        "qy" : 1043.27,
+        "sd" : 88.2837,
+        "fs" : 4.43798,
+        "fx" : 196.644,
+        "yl" : 49.0039,
+        "yunl" : 97.2911,
+        "njd" : 96,
+        "tqxx" : "晴天",
+        "lat" : 35.7386,
+        "lon" : 107.636,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 107.63623046875,
+        "y" : 35.738559722900391
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 290,
+        "PINYIN" : "Linxia",
+        "wd" : 29.3933,
+        "zgwd" : 39.8083,
+        "zdwd" : 18.8604,
+        "qy" : 1027.17,
+        "sd" : 13.7621,
+        "fs" : 5.17089,
+        "fx" : 83.8635,
+        "yl" : 91.4616,
+        "yunl" : 54.8916,
+        "njd" : 6,
+        "tqxx" : "多云",
+        "lat" : 35.6067,
+        "lon" : 103.214,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 103.21408081054687,
+        "y" : 35.606712341308594
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 291,
+        "PINYIN" : "Xiahe xian",
+        "wd" : 29.7977,
+        "zgwd" : 40.3641,
+        "zdwd" : 19.5384,
+        "qy" : 1050.87,
+        "sd" : 94.0795,
+        "fs" : 7.51084,
+        "fx" : 211.866,
+        "yl" : 45.9001,
+        "yunl" : 61.5674,
+        "njd" : 44,
+        "tqxx" : "阴天",
+        "lat" : 35.2023,
+        "lon" : 102.506,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.50617980957031,
+        "y" : 35.202293395996094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 292,
+        "PINYIN" : "Jiayuguan",
+        "wd" : 25.1973,
+        "zgwd" : 35.8893,
+        "zdwd" : 14.7815,
+        "qy" : 1052.11,
+        "sd" : 27.7213,
+        "fs" : 3.72537,
+        "fx" : 173.542,
+        "yl" : 61.7269,
+        "yunl" : 38.475,
+        "njd" : 2,
+        "tqxx" : "多云",
+        "lat" : 39.8027,
+        "lon" : 98.2747,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 98.274711608886719,
+        "y" : 39.802654266357422
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 293,
+        "PINYIN" : "Jiuquan",
+        "wd" : 25.255,
+        "zgwd" : 36.1726,
+        "zdwd" : 14.8189,
+        "qy" : 1054.14,
+        "sd" : 43.4249,
+        "fs" : 3.6674,
+        "fx" : 171.271,
+        "yl" : 91.947,
+        "yunl" : 30.0144,
+        "njd" : 32,
+        "tqxx" : "中雨",
+        "lat" : 39.745,
+        "lon" : 98.5111,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 98.511116027832031,
+        "y" : 39.744968414306641
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 294,
+        "PINYIN" : "Xining",
+        "wd" : 28.3906,
+        "zgwd" : 38.7192,
+        "zdwd" : 17.9961,
+        "qy" : 1039.04,
+        "sd" : 96.5189,
+        "fs" : 12.0521,
+        "fx" : 114.609,
+        "yl" : 77.7272,
+        "yunl" : 38.377,
+        "njd" : 53,
+        "tqxx" : "多云",
+        "lat" : 36.6094,
+        "lon" : 101.787,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 101.78745269775391,
+        "y" : 36.609447479248047
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 295,
+        "PINYIN" : "Ping'an",
+        "wd" : 28.498,
+        "zgwd" : 38.564,
+        "zdwd" : 18.063,
+        "qy" : 1041.29,
+        "sd" : 35.426,
+        "fs" : 7.01485,
+        "fx" : 223.411,
+        "yl" : 58.5166,
+        "yunl" : 58.9326,
+        "njd" : 5,
+        "tqxx" : "阴天",
+        "lat" : 36.502,
+        "lon" : 102.103,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 102.10312652587891,
+        "y" : 36.502037048339844
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 296,
+        "PINYIN" : "Menyuan Huizu Zizhixian",
+        "wd" : 27.6252,
+        "zgwd" : 38.117,
+        "zdwd" : 17.1596,
+        "qy" : 1060.11,
+        "sd" : 59.6584,
+        "fs" : 8.02776,
+        "fx" : 83.3598,
+        "yl" : 85.7129,
+        "yunl" : 66.9378,
+        "njd" : 0,
+        "tqxx" : "晴天",
+        "lat" : 37.3748,
+        "lon" : 101.617,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 101.61679840087891,
+        "y" : 37.374786376953125
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 297,
+        "PINYIN" : "Tongren",
+        "wd" : 29.4893,
+        "zgwd" : 48.1498,
+        "zdwd" : 27.2756,
+        "qy" : 1060.95,
+        "sd" : 62.6311,
+        "fs" : 12.2089,
+        "fx" : 233.59,
+        "yl" : 5.48102,
+        "yunl" : 99.1534,
+        "njd" : 16,
+        "tqxx" : "中雨",
+        "lat" : 35.5107,
+        "lon" : 102.006,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 102.00565338134766,
+        "y" : 35.510665893554688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 298,
+        "PINYIN" : "Gonghe",
+        "wd" : 28.7179,
+        "zgwd" : 39.1617,
+        "zdwd" : 18.3704,
+        "qy" : 1039.97,
+        "sd" : 47.7628,
+        "fs" : 7.17722,
+        "fx" : 180.626,
+        "yl" : 60.1247,
+        "yunl" : 62.8874,
+        "njd" : 65,
+        "tqxx" : "多云",
+        "lat" : 36.2821,
+        "lon" : 100.616,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.61582946777344,
+        "y" : 36.282142639160156
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 299,
+        "PINYIN" : "Maqg",
+        "wd" : 30.5204,
+        "zgwd" : 40.9207,
+        "zdwd" : 20.4415,
+        "qy" : 1033.3,
+        "sd" : 76.7064,
+        "fs" : 9.3191,
+        "fx" : 134.434,
+        "yl" : 2.03798,
+        "yunl" : 3.41124,
+        "njd" : 62,
+        "tqxx" : "阴天",
+        "lat" : 34.4796,
+        "lon" : 100.246,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 100.24594116210937,
+        "y" : 34.479633331298828
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 300,
+        "PINYIN" : "Yushu",
+        "wd" : 31.9873,
+        "zgwd" : 42.6997,
+        "zdwd" : 21.5794,
+        "qy" : 1032.42,
+        "sd" : 31.6002,
+        "fs" : 11.5013,
+        "fx" : 129.018,
+        "yl" : 37.5606,
+        "yunl" : 17.2812,
+        "njd" : 72,
+        "tqxx" : "晴天",
+        "lat" : 33.0127,
+        "lon" : 97.0173,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 97.017341613769531,
+        "y" : 33.012714385986328
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 301,
+        "PINYIN" : "Delhi",
+        "wd" : 27.6297,
+        "zgwd" : 37.9075,
+        "zdwd" : 17.4303,
+        "qy" : 1032.84,
+        "sd" : 70.6274,
+        "fs" : 8.80589,
+        "fx" : 130.858,
+        "yl" : 12.4558,
+        "yunl" : 5.88269,
+        "njd" : 92,
+        "tqxx" : "阴天",
+        "lat" : 37.3703,
+        "lon" : 97.3569,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 97.356880187988281,
+        "y" : 37.370349884033203
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 302,
+        "PINYIN" : "Yinchuan",
+        "wd" : 26.532,
+        "zgwd" : 36.9933,
+        "zdwd" : 16.3285,
+        "qy" : 1035.33,
+        "sd" : 74.2002,
+        "fs" : 5.54441,
+        "fx" : 42.9831,
+        "yl" : 58.9086,
+        "yunl" : 65.2053,
+        "njd" : 64,
+        "tqxx" : "中雨",
+        "lat" : 38.468,
+        "lon" : 106.272,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.27194213867187,
+        "y" : 38.468009948730469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 303,
+        "PINYIN" : "Shizuishan",
+        "wd" : 25.9757,
+        "zgwd" : 36.3379,
+        "zdwd" : 15.0456,
+        "qy" : 1035.59,
+        "sd" : 43.0508,
+        "fs" : 3.78487,
+        "fx" : 337.862,
+        "yl" : 76.4416,
+        "yunl" : 7.05167,
+        "njd" : 77,
+        "tqxx" : "小雨",
+        "lat" : 39.0243,
+        "lon" : 106.382,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.38205718994141,
+        "y" : 39.024280548095703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 304,
+        "PINYIN" : "Wuzhong",
+        "wd" : 27.0145,
+        "zgwd" : 37.9665,
+        "zdwd" : 16.0233,
+        "qy" : 1037.78,
+        "sd" : 42.9495,
+        "fs" : 8.39637,
+        "fx" : 216.076,
+        "yl" : 79.3689,
+        "yunl" : 21.8335,
+        "njd" : 55,
+        "tqxx" : "晴天",
+        "lat" : 37.9855,
+        "lon" : 106.199,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.19911193847656,
+        "y" : 37.985496520996094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 305,
+        "PINYIN" : "Guyuan",
+        "wd" : 28.9867,
+        "zgwd" : 39.1867,
+        "zdwd" : 18.0274,
+        "qy" : 1027.6,
+        "sd" : 52.073,
+        "fs" : 11.5573,
+        "fx" : 345.16,
+        "yl" : 9.24825,
+        "yunl" : 59.654,
+        "njd" : 64,
+        "tqxx" : "晴天",
+        "lat" : 36.0133,
+        "lon" : 106.279,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 106.27858734130859,
+        "y" : 36.013259887695313
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 306,
+        "PINYIN" : "Wulumuqi",
+        "wd" : 21.2091,
+        "zgwd" : 31.582,
+        "zdwd" : 10.3963,
+        "qy" : 1028.22,
+        "sd" : 27.4721,
+        "fs" : 7.62816,
+        "fx" : 118.771,
+        "yl" : 55.0574,
+        "yunl" : 92.6149,
+        "njd" : 15,
+        "tqxx" : "阴天",
+        "lat" : 43.7909,
+        "lon" : 87.6061,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 87.606117248535156,
+        "y" : 43.790939331054688
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 307,
+        "PINYIN" : "Karamay",
+        "wd" : 19.4035,
+        "zgwd" : 29.9691,
+        "zdwd" : 9.3473,
+        "qy" : 1061.94,
+        "sd" : 91.0459,
+        "fs" : 9.65644,
+        "fx" : 22.5831,
+        "yl" : 76.7721,
+        "yunl" : 34.1317,
+        "njd" : 100,
+        "tqxx" : "阴天",
+        "lat" : 45.5965,
+        "lon" : 84.8636,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 84.863609313964844,
+        "y" : 45.596511840820312
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 308,
+        "PINYIN" : "Turpan",
+        "wd" : 22.058,
+        "zgwd" : 33.0577,
+        "zdwd" : 11.9261,
+        "qy" : 1018.38,
+        "sd" : 11.9145,
+        "fs" : 6.58429,
+        "fx" : 278.936,
+        "yl" : 61.173,
+        "yunl" : 33.5931,
+        "njd" : 55,
+        "tqxx" : "小雨",
+        "lat" : 42.942,
+        "lon" : 89.1815,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 89.181510925292969,
+        "y" : 42.942039489746094
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 309,
+        "PINYIN" : "Hami(Kumul)",
+        "wd" : 22.1811,
+        "zgwd" : 32.3347,
+        "zdwd" : 11.7178,
+        "qy" : 1025.58,
+        "sd" : 82.745,
+        "fs" : 8.48415,
+        "fx" : 171.968,
+        "yl" : 84.1598,
+        "yunl" : 89.8589,
+        "njd" : 74,
+        "tqxx" : "阴天",
+        "lat" : 42.8189,
+        "lon" : 93.5188,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 93.518806457519531,
+        "y" : 42.818912506103516
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 310,
+        "PINYIN" : "Changji",
+        "wd" : 20.984,
+        "zgwd" : 31.7015,
+        "zdwd" : 10.8862,
+        "qy" : 1051.15,
+        "sd" : 97.1142,
+        "fs" : 9.30995,
+        "fx" : 303.81,
+        "yl" : 25.9393,
+        "yunl" : 25.6601,
+        "njd" : 99,
+        "tqxx" : "多云",
+        "lat" : 44.016,
+        "lon" : 87.3053,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 87.305305480957031,
+        "y" : 44.015983581542969
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 311,
+        "PINYIN" : "Bole",
+        "wd" : 20.0965,
+        "zgwd" : 30.7716,
+        "zdwd" : 9.17292,
+        "qy" : 1032.62,
+        "sd" : 87.6423,
+        "fs" : 3.44083,
+        "fx" : 302.687,
+        "yl" : 75.1552,
+        "yunl" : 31.9893,
+        "njd" : 27,
+        "tqxx" : "晴天",
+        "lat" : 44.9035,
+        "lon" : 82.0744,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 82.074424743652344,
+        "y" : 44.903530120849609
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 312,
+        "PINYIN" : "Ku'erle",
+        "wd" : 23.2401,
+        "zgwd" : 33.8277,
+        "zdwd" : 12.9364,
+        "qy" : 1014.81,
+        "sd" : 92.8002,
+        "fs" : 3.49476,
+        "fx" : 37.5817,
+        "yl" : 97.1896,
+        "yunl" : 48.0359,
+        "njd" : 61,
+        "tqxx" : "中雨",
+        "lat" : 41.7599,
+        "lon" : 86.1347,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 86.13470458984375,
+        "y" : 41.759883880615234
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 313,
+        "PINYIN" : "Aksu",
+        "wd" : 23.8309,
+        "zgwd" : 34.0653,
+        "zdwd" : 13.6678,
+        "qy" : 1028.93,
+        "sd" : 50.2701,
+        "fs" : 4.38773,
+        "fx" : 108.543,
+        "yl" : 32.2981,
+        "yunl" : 47.7439,
+        "njd" : 76,
+        "tqxx" : "多云",
+        "lat" : 41.1691,
+        "lon" : 80.2606,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 80.260589599609375,
+        "y" : 41.169075012207031
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 314,
+        "PINYIN" : "Artux",
+        "wd" : 25.2827,
+        "zgwd" : 35.9399,
+        "zdwd" : 14.7259,
+        "qy" : 1061.28,
+        "sd" : 80.2054,
+        "fs" : 10.4911,
+        "fx" : 352.427,
+        "yl" : 87.766,
+        "yunl" : 17.6208,
+        "njd" : 29,
+        "tqxx" : "晴天",
+        "lat" : 39.7173,
+        "lon" : 76.1692,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 76.169235229492187,
+        "y" : 39.717334747314453
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 315,
+        "PINYIN" : "Kashi(Kaxgar)",
+        "wd" : 25.5338,
+        "zgwd" : 35.9373,
+        "zdwd" : 15.4504,
+        "qy" : 1061.33,
+        "sd" : 18.9712,
+        "fs" : 4.63447,
+        "fx" : 51.855,
+        "yl" : 86.3516,
+        "yunl" : 27.3072,
+        "njd" : 28,
+        "tqxx" : "多云",
+        "lat" : 39.4662,
+        "lon" : 75.9859,
+        "zt" : "停用"
+      },
+      "geometry" : {
+        "x" : 75.985855102539063,
+        "y" : 39.466159820556641
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 316,
+        "PINYIN" : "Yining",
+        "wd" : 21.0891,
+        "zgwd" : 31.6323,
+        "zdwd" : 10.7019,
+        "qy" : 1048.06,
+        "sd" : 23.3138,
+        "fs" : 8.93991,
+        "fx" : 192.417,
+        "yl" : 76.2142,
+        "yunl" : 9.82197,
+        "njd" : 41,
+        "tqxx" : "阴天",
+        "lat" : 43.9109,
+        "lon" : 81.3187,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 81.318656921386719,
+        "y" : 43.910881042480469
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 317,
+        "PINYIN" : "Chilong Shih",
+        "wd" : 39.8705,
+        "zgwd" : 50.6868,
+        "zdwd" : 29.1144,
+        "qy" : 1029.64,
+        "sd" : 1.95312,
+        "fs" : 8.06126,
+        "fx" : 256.501,
+        "yl" : 49.1063,
+        "yunl" : 60.7735,
+        "njd" : 25,
+        "tqxx" : "晴天",
+        "lat" : 25.1295,
+        "lon" : 121.738,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 121.73779296875,
+        "y" : 25.129457473754883
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 318,
+        "PINYIN" : "Taipei Shih",
+        "wd" : 39.9509,
+        "zgwd" : 50.8964,
+        "zdwd" : 29.1528,
+        "qy" : 1026.27,
+        "sd" : 73.9423,
+        "fs" : 6.69144,
+        "fx" : 131.218,
+        "yl" : 50.2468,
+        "yunl" : 24.1944,
+        "njd" : 11,
+        "tqxx" : "晴天",
+        "lat" : 25.0491,
+        "lon" : 121.514,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 121.5142822265625,
+        "y" : 25.049127578735352
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 319,
+        "PINYIN" : "Tainan Hsien",
+        "wd" : 41.999,
+        "zgwd" : 52.0957,
+        "zdwd" : 31.4766,
+        "qy" : 1019.85,
+        "sd" : 50.9928,
+        "fs" : 9.68807,
+        "fx" : 18.6019,
+        "yl" : 3.52694,
+        "yunl" : 89.9677,
+        "njd" : 69,
+        "tqxx" : "多云",
+        "lat" : 23.001,
+        "lon" : 120.197,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.19741821289062,
+        "y" : 23.001010894775391
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 320,
+        "PINYIN" : "Kaohsiung Shih",
+        "wd" : 42.3696,
+        "zgwd" : 52.6907,
+        "zdwd" : 31.587,
+        "qy" : 1026.93,
+        "sd" : 8.36036,
+        "fs" : 8.29054,
+        "fx" : 74.0774,
+        "yl" : 52.5287,
+        "yunl" : 54.7667,
+        "njd" : 55,
+        "tqxx" : "晴天",
+        "lat" : 22.6304,
+        "lon" : 120.298,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.29768371582031,
+        "y" : 22.630373001098633
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 321,
+        "PINYIN" : "Taichung Hsien",
+        "wd" : 40.8554,
+        "zgwd" : 51.2391,
+        "zdwd" : 30.3839,
+        "qy" : 1024.14,
+        "sd" : 62.4031,
+        "fs" : 5.48137,
+        "fx" : 272.264,
+        "yl" : 58.7939,
+        "yunl" : 91.1836,
+        "njd" : 26,
+        "tqxx" : "阴天",
+        "lat" : 24.1446,
+        "lon" : 120.67,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 120.67034149169922,
+        "y" : 24.144577026367188
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 322,
+        "PINYIN" : "Liaoyang",
+        "wd" : 23.7349,
+        "zgwd" : 34.7072,
+        "zdwd" : 13.6986,
+        "qy" : 1035.71,
+        "sd" : 80.1137,
+        "fs" : 8.95111,
+        "fx" : 318.455,
+        "yl" : 79.0881,
+        "yunl" : 47.1494,
+        "njd" : 13,
+        "tqxx" : "中雨",
+        "lat" : 41.2651,
+        "lon" : 123.162,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 123.1617431640625,
+        "y" : 41.26513671875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 323,
+        "PINYIN" : "Hetian",
+        "wd" : 27.8892,
+        "zgwd" : 38.6401,
+        "zdwd" : 17.0299,
+        "qy" : 1020.99,
+        "sd" : 21.8126,
+        "fs" : 10.4359,
+        "fx" : 271.938,
+        "yl" : 91.539,
+        "yunl" : 53.2049,
+        "njd" : 21,
+        "tqxx" : "阴天",
+        "lat" : 37.1108,
+        "lon" : 79.927,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 79.926986694335937,
+        "y" : 37.110782623291016
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 324,
+        "PINYIN" : "Qamdo",
+        "wd" : 33.8578,
+        "zgwd" : 44.8121,
+        "zdwd" : 23.5382,
+        "qy" : 1043.92,
+        "sd" : 3.00009,
+        "fs" : 9.25325,
+        "fx" : 87.7769,
+        "yl" : 66.3674,
+        "yunl" : 70.6559,
+        "njd" : 17,
+        "tqxx" : "多云",
+        "lat" : 31.1422,
+        "lon" : 97.1675,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 97.16754150390625,
+        "y" : 31.142181396484375
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 325,
+        "PINYIN" : "Nagqu",
+        "wd" : 33.5194,
+        "zgwd" : 44.3368,
+        "zdwd" : 22.5964,
+        "qy" : 1055.96,
+        "sd" : 89.421,
+        "fs" : 10.5352,
+        "fx" : 358.924,
+        "yl" : 53.019,
+        "yunl" : 38.3966,
+        "njd" : 12,
+        "tqxx" : "晴天",
+        "lat" : 31.4806,
+        "lon" : 92.0546,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 92.054603576660156,
+        "y" : 31.480579376220703
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 326,
+        "PINYIN" : "Ga'er",
+        "wd" : 32.4947,
+        "zgwd" : 43.3869,
+        "zdwd" : 21.5726,
+        "qy" : 1034.88,
+        "sd" : 24.7432,
+        "fs" : 9.86597,
+        "fx" : 155.622,
+        "yl" : 35.0358,
+        "yunl" : 20.7147,
+        "njd" : 82,
+        "tqxx" : "多云",
+        "lat" : 32.5053,
+        "lon" : 80.0966,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 80.0965576171875,
+        "y" : 32.505340576171875
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 327,
+        "PINYIN" : "Zeetang Zhen",
+        "wd" : 35.7576,
+        "zgwd" : 45.9866,
+        "zdwd" : 24.8458,
+        "qy" : 1018.01,
+        "sd" : 70.6497,
+        "fs" : 9.62925,
+        "fx" : 157.537,
+        "yl" : 64.5693,
+        "yunl" : 2.18896,
+        "njd" : 51,
+        "tqxx" : "阴天",
+        "lat" : 29.2424,
+        "lon" : 91.7806,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 91.780555725097656,
+        "y" : 29.242414474487305
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 328,
+        "PINYIN" : "Bayi Zhen",
+        "wd" : 35.3265,
+        "zgwd" : 45.5064,
+        "zdwd" : 24.5051,
+        "qy" : 1018.89,
+        "sd" : 61.9183,
+        "fs" : 4.20301,
+        "fx" : 119.222,
+        "yl" : 80.4826,
+        "yunl" : 38.1887,
+        "njd" : 61,
+        "tqxx" : "晴天",
+        "lat" : 29.6735,
+        "lon" : 94.3592,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 94.359153747558594,
+        "y" : 29.673543930053711
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 329,
+        "PINYIN" : "Macao",
+        "wd" : 42.7992,
+        "zgwd" : 53.6065,
+        "zdwd" : 32.3475,
+        "qy" : 1027.25,
+        "sd" : 27.1686,
+        "fs" : 5.99018,
+        "fx" : 267.902,
+        "yl" : 30.6858,
+        "yunl" : 7.58649,
+        "njd" : 44,
+        "tqxx" : "多云",
+        "lat" : 22.2008,
+        "lon" : 113.55,
+        "zt" : "正常"
+      },
+      "geometry" : {
+        "x" : 113.55005645751953,
+        "y" : 22.200796127319336
+      }
+    },
+    {
+      "attributes" : {
+        "FID" : 330,
+        "PINYIN" : "Hong Kong",
+        "wd" : 42.7193,
+        "zgwd" : 53.0619,
+        "zdwd" : 32.5444,
+        "qy" : 1036.03,
+        "sd" : 97.727,
+        "fs" : 7.64743,
+        "fx" : 209.338,
+        "yl" : 4.8324,
+        "yunl" : 19.0614,
+        "njd" : 35,
+        "tqxx" : "阴天",
+        "lat" : 22.2807,
+        "lon" : 114.154,
+        "zt" : "故障"
+      },
+      "geometry" : {
+        "x" : 114.15440368652344,
+        "y" : 22.280685424804688
+      }
+    }
+  ]
+}

Різницю між файлами не показано, бо вона завелика
+ 4 - 0
src/assets/map/district.js


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
src/assets/map/district_old.js


BIN
src/assets/map/img/bg.png


BIN
src/assets/map/img/star.png


Різницю між файлами не показано, бо вона завелика
+ 1 - 0
src/assets/map/jquery.min.js


+ 174 - 0
src/assets/map/maptool.js

@@ -0,0 +1,174 @@
+import $ from "@/assets/map/jquery.min";
+export function jqAjax(url, params, reqType = 'GET', dataProcess, 
+                errFunc = function (xhr, status) {console.log("Error: " + status);}) { //AJAX异步请求数据
+    //param: {y: 2020}
+    $.ajax({ //使用ajax需注意在服务器端web.xml中配置跨域过滤器filter
+        async: true,
+        url: url,
+        data: params,
+        dataType: 'json',    //服务器返回数据类型
+        type: reqType,       //HTTP请求类型
+        timeout: 10000,      //超时时间
+        success: dataProcess,
+        error: errFunc,
+    });
+}
+
+//数值检测函数
+export function isNumber(val) {
+    var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+    var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+    if (regPos.test(val) || regNeg.test(val)) {
+        return true;
+    } else {
+        return false;
+    }
+}
+//颜色解析函数
+export function parseColor(hexStr) {
+    return hexStr.length === 4 ? hexStr.substr(1).split('').map(function (s) { return 0x11 * parseInt(s, 16); }) : [hexStr.substr(1, 2), hexStr.substr(3, 2), hexStr.substr(5, 2)].map(function (s) { return parseInt(s, 16); })
+}
+export function pad(s) { // zero-pad 1 digit to 2
+    return (s.length === 1) ? '0' + s : s;
+}
+/*
+ *颜色梯度函数:返回起始颜色和结束颜色之间的渐变色带(按steps划分)
+ */
+export function gradientColors(start, end, steps) {
+    //start 开始颜色: #FF0000
+    //end 结束颜色: #0000FF
+    //steps 颜色分解步长: max-min
+    //gamma 透明度(伽马)
+    var i, j, ms, me, output = [], so = [];
+    var gamma = 2;
+    var normalize = function (channel) {
+        return Math.pow(channel / 255, gamma);
+    };
+    start = parseColor(start).map(normalize);
+    end = parseColor(end).map(normalize);
+    for (i = 0; i < steps; i++) {
+        ms = i / (steps - 1);
+        me = 1 - ms;
+        for (j = 0; j < 3; j++) {
+            so[j] = pad(Math.round(Math.pow(start[j] * me + end[j] * ms, 1 / gamma) * 255).toString(16));
+        }
+        output.push('#' + so.join(''));
+    }
+    return output;
+}
+
+export function labelZoomSize(z0, zoom) {
+    //alert(zoom);
+    var zoomDefault = z0; //z0=5;
+    var lst = [0, 10, 12, 14, 16, 18, 20]; //font-size
+    var i = parseInt(zoom - zoomDefault);
+    if (i >= lst.length) {
+        i = lst.length - 1;
+    }
+    if (i < 0) {
+        i = 0;
+    }
+    return lst[i];
+}
+
+export function markerZoomSize(z0, zoom) {
+    //alert(zoom);
+    var zoomDefault = z0;
+    var lst = [];//
+    lst[0] = 8;
+    var step = 4;
+    for (var i = 1; i < 10; i++) { //div-marker-width/height
+        lst[i] = lst[0] + step * i; //[8,12,16,20,24,28,32,36,40,44]
+    }
+    var delta = zoom - zoomDefault;
+    var i = Math.round(delta, 0); //不能使用parseInt(),不安全,比如parseInt(0.0000000000000000002)返回2;
+    //console.log("--->i= "+i+", z0="+z0+", zoom="+zoom);
+    if (i >= lst.length) {
+        i = lst.length - 1;
+    }
+    if (i < 0) {
+        i = 0;
+    }
+    return lst[i];
+}
+
+export function getMin(arr) {
+    var len = arr.length;
+    var min = 999999999;
+    for (var i = 0; i < len; i++) {
+        min = min > arr[i] ? arr[i] : min;
+    }
+    return min;
+}
+
+export function getMax(arr) {
+    var len = arr.length;
+    var max = -999999999;
+    for (var i = 0; i < len; i++) {
+        max = max < arr[i] ? arr[i] : max;
+    }
+    return max;
+}
+
+export function getAverage(arr) {
+    var len = arr.length;
+    var sum = 0;
+    for (var i = 0; i < len; i++) {
+        sum = sum + arr[i];
+    }
+    return sum / len;
+}
+
+export function colorRGBtoHex(color) {
+    var rgb = color.split(',');
+    var r = parseInt(rgb[0]);
+    var g = parseInt(rgb[1]);
+    var b = parseInt(rgb[2]);
+    var hex = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
+    return hex;
+}
+
+Date.prototype.format = function (formatStr) { //日期对象格式化
+    var date = this;
+    /*  
+    函数:填充0字符  
+    参数:value-需要填充的字符串, length-总长度  
+    返回:填充后的字符串  
+    */
+    var zeroize = function (value, length) {
+        if (!length) {
+            length = 2;
+        }
+        value = new String(value);
+        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
+            zeros += '0';
+        }
+        return zeros + value;
+    };
+    return formatStr.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|M{1,4}|yy(?:yy)?|([hHmstT])\1?|[lLZ])\b/g, function ($0) {
+        switch ($0) {
+            case 'd': return date.getDate();
+            case 'dd': return zeroize(date.getDate());
+            case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][date.getDay()];
+            case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()];
+            case 'M': return date.getMonth() + 1;
+            case 'MM': return zeroize(date.getMonth() + 1);
+            case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][date.getMonth()];
+            case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][date.getMonth()];
+            case 'yy': return new String(date.getFullYear()).substr(2);
+            case 'yyyy': return date.getFullYear();
+            case 'h': return date.getHours() % 12 || 12;
+            case 'hh': return zeroize(date.getHours() % 12 || 12);
+            case 'H': return date.getHours();
+            case 'HH': return zeroize(date.getHours());
+            case 'm': return date.getMinutes();
+            case 'mm': return zeroize(date.getMinutes());
+            case 's': return date.getSeconds();
+            case 'ss': return zeroize(date.getSeconds());
+            case 'l': return date.getMilliseconds();
+            case 'll': return zeroize(date.getMilliseconds());
+            case 'tt': return date.getHours() < 12 ? 'am' : 'pm';
+            case 'TT': return date.getHours() < 12 ? 'AM' : 'PM';
+        }
+    });
+}

+ 300 - 0
src/assets/map/popup.css

@@ -0,0 +1,300 @@
+/* 视图中的popup弹窗容器DIV样式 */
+.ol-popup {
+    position: absolute;
+    padding: 1px;
+    border-radius: 1px;
+    border: 0px solid #FFF;
+    bottom: 15px;
+    left: -90px;
+    cursor: pointer;
+    /*要和.popup的width(180px)相匹配*/
+}
+
+.ol-popup-container {
+    z-index: 9000 !important;
+}
+
+.ol-popup-closer {
+    color: #FFF;
+    text-decoration: none;
+    position: absolute;
+    font-family: "微软雅黑";
+    top: 2px;
+    left: 2px;
+}
+
+.ol-pin {
+    position: absolute;
+    background-color: #FFFFFF;
+    font-size: 13px;
+    padding: 1px;
+    border-radius: 5px;
+    border: 0px solid #CCCCCC;
+    bottom: 10px;
+    left: -15px;
+    cursor: pointer;
+    /*要和.popup的width(180px)相匹配*/
+}
+
+.ol-pin-container {
+    z-index: 8000 !important;
+}
+
+.ol_pin_triangle {
+    width: 0;
+    height: 0;
+    left: 10px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 5px solid transparent;
+    border-right: 5px solid transparent;
+    border-top: 5px solid #fff;
+}
+
+/*
+.ol-popup-closer:after {
+            content: "✖";
+            color: #FFF;
+}
+            
+.popup-content {
+            font-size: 13px;
+            font-family: "微软雅黑";
+}
+*/
+
+.ol-marker {
+    width: 20px;
+    height: 20px;
+    border: 1px solid #088;
+    border-radius: 10px;
+    background-color: #0FF;
+    cursor: pointer;
+    opacity: 0.5;
+}
+
+.ol-marker-text {
+    position: absolute;
+    left: -18px;
+    top: -8px;
+    font-size: 13px;
+    color: #FFF;
+    text-decoration: none;
+    cursor: pointer;
+}
+
+.ol-marker-text-container {
+    z-index: 1000 !important;
+}
+
+.ol-mlabel-text { /*标记上的文本内容*/
+    position: absolute;
+    left: -18px;
+    top: -28px;
+    font-size: 14px;
+    font-weight: bolder;
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+    border:0px solid #000;
+}
+
+.ol-mlabel-text-container {
+    z-index: 1000 !important;
+}
+
+.ol-label-text {
+    position: absolute;
+    left: -18px;
+    top: 5px;
+    font-size: 13px;
+    color: #000;
+    text-decoration: none;
+    cursor: pointer;
+    border:0px solid #000;
+}
+
+.ol-label-text-container {
+    z-index: 1000 !important;
+}
+
+/* 视图中的popup弹窗容器DIV的子元素样式 */
+.popup {
+    width: 180px;
+    height: 100px;
+    font-size: 13px;
+    line-height: 20px;
+}
+
+.popup table {
+    width: 100%;
+    height: 100%;
+    border-collapse: collapse;
+}
+
+.popup td {
+    text-align: center;
+}
+
+.popup_normal_border {
+    border: 3px solid #61AA6E;
+}
+
+.popup_normal_tdborder {
+    border: 1px solid #61AA6E;
+}
+
+.popup_normal_bg {
+    background-color: #61AA6E;
+}
+
+.popup_normal_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #61AA6E;
+    display: flex;
+}
+
+.popup_abnormal_border {
+    border: 3px solid #FB981B;
+}
+
+.popup_abnormal_tdborder {
+    border: 1px solid #FB981B;
+}
+
+.popup_abnormal_bg {
+    background-color: #FB981B;
+}
+
+.popup_abnormal_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #FB981B;
+    display: flex;
+}
+
+.popup_cease_border {
+    border: 3px solid #0C090D;
+}
+
+.popup_cease_tdborder {
+    border: 1px solid #0C090D;
+}
+
+.popup_cease_bg {
+    background-color: #0C090D;
+}
+
+.popup_cease_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #0C090D;
+    display: flex;
+}
+
+.popup_unknown_border {
+    border: 3px solid #CCCCCC;
+}
+
+.popup_unknown_tdborder {
+    border: 1px solid #CCCCCC;
+}
+
+.popup_unknown_bg {
+    background-color: #CCCCCC;
+}
+
+.popup_unknown_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #999999;
+    display: flex;
+}
+
+.popup_offline_border {
+    border: 3px solid #999999;
+}
+
+.popup_offline_tdborder {
+    border: 1px solid #999999;
+}
+
+.popup_offline_bg {
+    background-color: #999999;
+}
+
+.popup_offline_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #999999;
+    display: flex;
+}
+
+popup_danger_border {
+    border: 3px solid #b0413e;
+}
+
+.popup_danger_tdborder {
+    border: 1px solid #b0413e;
+}
+
+.popup_danger_bg {
+    background-color: #b0413e;
+}
+
+.popup_danger_triangle {
+    width: 0;
+    height: 0;
+    left: 80px;
+    /*要和.popup的width相匹配*/
+    position: absolute;
+    border-left: 10px solid transparent;
+    border-right: 10px solid transparent;
+    border-top: 10px solid #b0413e;
+    display: flex;
+}
+
+.visiable{
+    visibility:visible;
+}
+
+.hidden{
+    visibility:hidden;
+}
+
+.normal{
+    font-weight: normal;
+    color:#FFF;
+}
+
+.unnormal{
+    font-weight: bolder;
+    color:#f00;
+    text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff;
+}

+ 33 - 0
src/assets/map/siteinfo.css

@@ -0,0 +1,33 @@
+.siteTable {
+    width: 100%;
+    font-size: 13px;
+    text-align: center;
+    border: 1px solid #FFF;
+    border-collapse: collapse;
+    border-spacing: 1px;
+}
+
+.siteTable tr{
+    height:25px;
+}
+
+.siteTable td{
+    text-align: center;
+    border: 1px solid #FFF;
+    background-color: #e1e8f8;
+}
+
+.siteTable-Title{
+    font-weight: bolder;
+    height:30px;
+    cursor:pointer;
+}
+
+.siteTable-Time{
+    background-color: #a1bbf7;
+}
+
+hr{
+    width:50%;
+    border:5px solid #FFF;
+}

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
src/assets/map/test.js


+ 1677 - 0
src/assets/map/weather.js

@@ -0,0 +1,1677 @@
+import { containsCoordinate, intersects } from 'ol/extent';
+import { OLMap } from "@/assets/map/OLMap";
+import '@/assets/map/popup.css'
+import '@/assets/map/siteinfo.css'
+import { gradientColors, markerZoomSize, labelZoomSize, colorRGBtoHex, jqAjax, isNumber } from "@/assets/map/maptool";
+import { getMax, getMin, getAverage } from "@/assets/map/maptool";
+import $ from "@/assets/map/jquery.min";
+import { Draw } from 'ol/interaction';
+import { createBox } from 'ol/interaction/Draw';
+import { Style, Icon, Text, Fill, Stroke, Circle } from 'ol/style';
+import { fromLonLat, transform } from 'ol/proj';
+import { createStringXY, format } from 'ol/coordinate';
+import LayerVector from 'ol/layer/Vector';
+import SourceVector from 'ol/source/Vector';
+import { Map, View, Feature, Overlay } from 'ol';
+
+/***
+ * weather.js页面用于业务请求处理
+ * 更新时间:2023.04.28
+ */
+
+/**
+ * +++++weather.js页面函数汇总+++++
+ * -----OLMap类扩展函数-----
+ * eventViewChange()
+ * eventOverlayClose()
+ * markerIsExistById()
+ * markerIsExistByName()
+ * drawRectangle()
+ * 
+ * 
+ * -----常规函数-----
+ * calcScope()
+ * createBoxByMouse()
+ * displayPopup()
+ * drawRectangle()
+ * getSiteStateColor()
+ * getTableStyle()
+ * getSiteLabel()
+ * getSiteStateColor()
+ * getSiteLabelColor()
+ * getSiteSudokuLable()
+ * hiddenOverlaysByLevel()
+ * objCopy()
+ * rmOverlaysByLevel()
+ * strOmit()
+ * ...
+ * updateSites()
+ * updateTagName()
+ * 
+ * 涉及气象数据单位,小数位数截留等函数:
+ * load_data()
+ * updateMarkerAndLabel()
+ * updatePopupByFeature()
+ *
+ * 本页面请求站点查询(urlSiteQuery)调用AJAX函数
+ * 无
+ */
+
+//OLMap类扩展函数
+OLMap.prototype.eventViewChange = function (func) { //根据地图缩放级别控制popup弹窗的显隐
+    var view = this.map.getView();
+    var map = this.map;
+    var geoToMrc = this.geoToMrc;
+    var popupN = 0; //设置弹窗自动显示数量
+    view.on('change:resolution', function (event) {
+        let z = view.getZoom();
+        let r = view.getResolution();
+        var region = view.calculateExtent(map.getSize());
+        //console.log('extent: '+region);
+        var overlays = map.getOverlays().getArray();
+        var popups = []; //记录popup
+        //查找marker和label
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            //console.log("zoom: "+z+", "+event.target.get(event.key));
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (containsCoordinate(region, pt)) {
+                    popups.push(overlays[k]);
+                }
+            }
+        }
+        //获取当前视图下的Overlay要素
+        //console.log('zoom: '+z+'_'+popups.length)
+        if (popups.length <= popupN) {
+            for (var p in popups) {
+                if (popups[p].getPosition() != undefined) {
+                    continue;
+                }
+                let ep = popups[p].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //popups[p].setPosition(pt);  //设置为当前站点位置
+                let id = popups[p].getId().split("popup_")[1];
+                func(id, popups[p], pt);
+            }
+        }
+    });
+
+    view.on('change:center', function (event) {
+        let z = view.getZoom();
+        let r = view.getResolution();
+        var region = view.calculateExtent(map.getSize());
+        //console.log('chang-extent: '+region);
+        var overlays = map.getOverlays().getArray();
+        var popups = []; //记录popup
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup") >= 0) {
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (containsCoordinate(region, pt)) {
+                    popups.push(overlays[k]);
+                }
+            }
+        }
+        //获取当前视图下的Overlay要素
+        //console.log('zoom: '+z.toFixed(1)+'_popups: '+popups.length)
+        if (popups.length <= popupN) {
+            for (var p in popups) {
+                if (popups[p].getPosition() != undefined) {
+                    continue;
+                }
+                let ep = popups[p].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = geoToMrc(params.pos);
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //popups[p].setPosition(pt);  //设置为当前站点位置
+                let id = popups[p].getId().split("popup_")[1];
+                func(id, popups[p], pt);
+            }
+        }
+    });
+}
+
+OLMap.prototype.eventOverlayClose = function () {//关闭所有弹窗
+    var mapDiv = this.mapDiv;
+    var geoToMrc = this.geoToMrc;
+    this.map.on('click', function (evt) {
+        //console.log("事件源:"+evt.target.tagName+", 类型:"+evt.type+",是否冒泡事件:"+evt.bubbles);
+        //去除所有Popup
+        var overlays = this.getOverlays().getArray();
+        //console.log(overlays.length);
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            if (oid.indexOf("label_") >= 0) { //显示所有的Marker标注
+                let ep = overlays[k].get('element');
+                let params = JSON.parse(ep.getAttribute("desc"));
+                let pos = geoToMrc(params.pos);
+                if (params.display) { //如果标注为显示,则显示标注,这里是为了协调固定站和便携站
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    //console.log('pos'+"_"+pt);
+                    overlays[k].setPosition(pt);  //设置为当前站点位置
+                }
+            }
+            if (oid.indexOf("popup_") >= 0) {
+                overlays[k].setPosition(undefined); //隐藏所有POPUP
+            }
+        }
+
+    });
+}
+
+OLMap.prototype.getMarkerById = function (fid) {
+    var overlays = this.map.getOverlays().getArray();
+    for (var k in overlays) {
+        let layer = overlays[k];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        if (oid.indexOf("marker") >= 0 && id == fid) {
+            return layer;//layer.getPosition();
+        }
+    }
+    return undefined;
+}
+
+OLMap.prototype.getMarkerByName = function (fname) {
+    var overlays = this.map.getOverlays().getArray();
+    for (var k in overlays) {
+        let layer = overlays[k];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        if (oid.indexOf("marker") >= 0 && name == fname) {
+            return layer;//layer.getPosition();
+        }
+    }
+    return undefined;
+}
+
+//使用鼠标绘制矩形
+OLMap.prototype.drawRectangle = function (resObj) {
+    var source = new SourceVector({ wrapX: false });
+    var vector = new LayerVector({
+        source: source,
+    });
+    this.map.addLayer(vector); //将绘制层添加到地图容器中
+    var draw = new Draw({ //绘制矩形
+        source: source,
+        type: 'LineString',
+        style: new Style({
+            fill: new Fill({
+                color: 'rgba(255, 255, 255, 0.2)'
+            }),
+            stroke: new Stroke({
+                color: '#ffcc33',
+                width: 2
+            }),
+            image: new Circle({
+                radius: 7,
+                fill: new Fill({
+                    color: '#ffcc33'
+                })
+            })
+        }),
+        maxPoints: 2,
+        geometryFunction: createBox(),
+    });
+    this.map.addInteraction(draw);
+    var map = this.map;
+    var showZoom = this.showZoom;
+    var zoomMax = this.zoomMax;
+    var zoomMin = this.zoomMin;
+    draw.on('drawstart', function (e) {
+        source.clear(); //绘制新图形之前先清除之前的形状
+        resObj.html("<div style='margin:10px;color:#f00'>请在视图区使用鼠标左键点击地图<br>"
+            + "绘制矩形框,并确保【便携站】按<br>"
+            + "钮处于打开状态!</div>"); //清空便携台站数据展示页面内容
+    });
+    draw.on('drawend', function (e) { //输出绘制矩形的坐标
+        var coordinates_Polygon = e.feature.getGeometry().getCoordinates();
+        var x = [];
+        var y = [];
+        //console.log("矩形坐标:");
+        for (var i = 0; i < coordinates_Polygon[0].length; i++) {
+            //console.log(coordinates_Polygon[0][i]);
+            x.push(coordinates_Polygon[0][i][0]);
+            y.push(coordinates_Polygon[0][i][1]);
+        }
+        var xmin = getMin(x);
+        var xmax = getMax(x);
+        var ymin = getMin(y);
+        var ymax = getMax(y);
+
+        //查询地图中的便携点
+        var overlays = map.getOverlays().getArray();
+        var ids = []; //标记点
+        var cds = []; //对应的坐标点
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            let id = params.id;
+            let name = params.name;
+            let lx = params.type;
+            if (oid.indexOf('marker') >= 0) {
+                //获取当前处于显示状态标记点的坐标
+                if (lx == "便携站") {
+                    let pos = overlays[k].getPosition();
+                    if (typeof (pos) !== 'undefined') {
+                        let _x = pos[0];
+                        let _y = pos[1];
+                        if (_x >= xmin && _x <= xmax && _y >= ymin && _y <= ymax) {
+                            //console.log('拉框中的点,oid: ' + oid + ', pos: ' + pos);
+                            ids.push(oid.split('marker_')[1]);
+                            cds.push([_x, _y]);
+                        }
+                    }
+                }
+            }
+        }
+        //console.log('CDS: ',cds);
+        if (ids.length == 0) {
+            resObj.html("<div style='margin:10px;'>无数据</div>");
+        } else {
+            //查询拉框中的标记点
+            //向resObj中写入数据
+            resObj.html(""); //清空便携台站数据展示页面内容
+            //let i = 0;
+            for (var k in overlays) {
+                let oid = overlays[k].getId();
+                let ediv = overlays[k].get('element');
+                let params = JSON.parse(ediv.getAttribute("desc"));
+                let fid = params.id;
+                let fname = params.name;
+                //console.log(fid, ids.includes(fid));
+                //获取弹窗中的气象信息,写入展示页面
+                if (oid.indexOf('popup') >= 0 && ids.includes(fid)) {
+                    //i = i + 1;
+                    let ftag = fid + "(" + fname + ")";
+                    let $time = $(ediv).find("#time");
+                    let time = $time.html();
+                    let timeCJ = $time.attr('title');
+                    //获取弹窗中的表格元素
+                    let trs = $(ediv).find("table tr");
+                    let tr1 = $(trs[1]).find("td");
+                    let tr2 = $(trs[2]).find("td");
+
+                    let wd = tr1[0].innerHTML;
+                    let qy = tr1[2].innerHTML;
+                    let sd = tr1[1].innerHTML;
+                    let fx = tr2[0].innerHTML;
+                    let fs = tr2[1].innerHTML;
+                    let yl = tr2[2].innerHTML;
+
+                    //将数据填入表格
+                    let table = `<table class='siteTable'>`;
+                    table = table + `<tr><td colspan=2 style='background-color:#a1bbf7;' class='siteTable-Title' id='siteTable_${k}' title='点击缩放至该台站'>${ftag}</td><td style='background-color:#a1bbf7;' class='siteTable-Time' title='${timeCJ}'>${time}<td></tr>`;
+                    table = table + `<tr><td style='width:32%'>气温</td><td style='width:32%'>湿度</td><td>气压</td></tr>`;
+                    table = table + `<tr><td>${wd}</td><td>${sd}</td><td>${qy}</td></tr>`;
+                    table = table + `<tr><td>风向</td><td>风速</td><td>雨量</td></tr>`;
+                    table = table + `<tr><td>${fx}</td><td>${fs}</td><td>${yl}</td></tr>`;
+                    table = table + `</table>`;
+                    let tableJq = $(table);
+                    //点击缩放至该台站操作
+                    tableJq.find("#siteTable_" + k).click(() => {
+                        //根据id查找当前marker
+                        let idx = ids.indexOf(fid);
+                        let pos = cds[idx];
+                        //console.log(fid,idx,pos,ids.length,cds.length);
+                        let view = map.getView();
+                        //let newZoom = view.getZoom() + 3;
+                        //newZoom = newZoom <= 15 ? newZoom : 15;
+                        let newZoom = 12;
+                        let _view = new View({
+                            center: pos,//fromLonLat([lon, lat]),
+                            zoom: newZoom,
+                            minZoom: zoomMin,
+                            maxZoom: zoomMax,
+                            projection: 'EPSG:3857', //设置墨卡托投影坐标系
+                            enableRotation: false, //禁止地图旋转
+                        });
+                        map.setView(_view);
+                        showZoom('mzoom', map);
+                    });
+                    resObj.append(tableJq);
+                    resObj.append($('<hr/>'));
+                }
+            }
+        }
+    });
+    return { 'source': source, 'vector': vector, 'draw': draw };
+}
+
+var source = null;
+var vector = null;
+var draw = null;
+export function createBoxByMouse(mapDiv, boxValue, resObj) {
+    var map = mapDiv.map;
+    if (boxValue) {
+        //alert("获取鼠标位置!");
+        //获取标记点
+        //let ids = getALLMarkersId(map);
+        var svd = mapDiv.drawRectangle(resObj);
+        source = svd.source;
+        vector = svd.vector;
+        draw = svd.draw;
+    } else {
+        map.removeInteraction(draw); //停止绘制
+        source = null;
+        if (vector != null) {
+            vector.setSource(source);
+        }
+    }
+}
+
+//更新标签名:站名和站号切换
+export function updateTagName(map, zhValue, zmValue) {
+    var types = ['tag'];
+    var layers = map.getOverlays().getArray();
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ea = layer.get('element');
+        let params = JSON.parse(ea.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        for (let i in types) {
+            if (oid.indexOf(types[i]) >= 0) { //根据切换按钮更改标签显示内容
+                let sname = '';
+                let width = 36;
+                let left = -18;
+                ea.style.setProperty('border-width', '0px');
+                if (zhValue && zmValue) {
+                    sname = id + "(" + name + ")";
+                    width = 48 + name.length * 12;
+                    left = -width / 2 + 5;
+                }
+                if (zhValue && !zmValue) {
+                    sname = id;
+                }
+                if (!zhValue && zmValue) {
+                    sname = name;
+                    width = sname.length * 12;
+                    left = -width / 2;
+                }
+                if (!zhValue && !zmValue) {
+                    sname = "";
+                    width = 0;
+                    left = 0;
+                    ea.style.setProperty('border-width', '0px');
+                }
+                //let sname = switch_flag ? strOmit(name, 8) : id; //显示站名、站号
+                ea.innerHTML = sname;
+                ea.style.setProperty('width', width + 'px');
+                ea.style.setProperty('left', left + 'px');
+            }
+        }
+    }
+}
+//更新站点类型:固定站和便携站切换
+export function updateSites(mapDiv, siteType, isDisplay) {
+    //params: 
+    //siteType:站点类型,取值:固定站和便携站
+    //isDisplay: 是否显示站点,取值:true和false
+    var map = mapDiv.map;
+    var layers = map.getOverlays().getArray();
+    var popup_display = [];
+    for (var p in layers) { //筛选处于弹窗开启状态的站点ID,即切换按钮九宫格控制的台站
+        let layer = layers[p];
+        let oid = layer.getId();
+        let ea = layer.get('element');
+        let params = JSON.parse(ea.getAttribute("desc"));
+        if (oid.indexOf("popup_") >= 0 && params.display == true) {
+            popup_display.push(params.id);
+        }
+    }
+    for (var i in layers) {
+        let layer = layers[i];
+        let oid = layer.getId();
+        let ea = layer.get('element');
+        let params = JSON.parse(ea.getAttribute("desc"));
+        let id = params.id;
+        //let name = params.name;
+        let type = params.type; //类型
+        let pos = mapDiv.geoToMrc(params.pos);
+        let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+        if (type == siteType) {
+            if (isDisplay) { //显示便携站|固定站
+                //显示标记和标签
+                if (oid.indexOf("marker_") >= 0 ||
+                    oid.indexOf("tag_") >= 0) { //marker,label,tag
+                    layer.setPosition(pt);
+                }
+                //有条件显示标注
+                if (oid.indexOf("label_") >= 0) {//如果九宫格处于关闭状态,则显示标注
+                    if (popup_display.includes(id)) {
+                        layer.setPosition(undefined);
+                    } else {
+                        layer.setPosition(pt);
+                    }
+                }
+                //如果九宫格是显示状态,则打开
+                if (oid.indexOf("popup_") >= 0 && params.display == true) {
+                    layer.setPosition(pt); //只显示标记点
+                }
+                if (oid.indexOf("label") >= 0) {
+                    params.display = true;
+                }
+            } else { //隐藏便携站|固定站
+                //console.log('隐藏便携站id:', oid);
+                if (oid.indexOf("label_") >= 0 || oid.indexOf("marker_") >= 0 ||
+                    oid.indexOf("tag_") || oid.indexOf("popup_") >= 0) {
+                    params.display = false;
+                }
+                layer.setPosition(undefined);
+            }
+        }
+        $(ea).attr('desc', JSON.stringify(params)); //更新参数
+    }
+}
+
+export function rmOverlaysByLevel(map, levels = [3], types = ['marker', 'tag', 'popup', 'pin']) {
+    /*清除指定Level的Markers*/
+    var layers = map.getOverlays().getArray();
+    //console.log('删除前图层数: '+layers.length);
+    var overlays = []
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let level = params.level;
+        for (let i in types) {
+            for (let j in levels) {
+                if (oid.indexOf(types[i]) >= 0 && level == levels[j]) {
+                    overlays.push(layer);
+                }
+            }
+        }
+    }
+    for (let i in overlays) {
+        map.removeOverlay(overlays[i]);
+    }
+    //layers = map.getOverlays().getArray();
+    //console.log('删除后图层数: '+layers.length);
+}
+
+export function hiddenOverlaysByLevel(map, hidden = true, levels = [3], types = ['marker', 'tag', 'popup', 'pin']) {
+    //关闭指定Level的Markers
+    var layers = map.getOverlays().getArray();
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let level = params.level;
+        for (let i in types) {
+            for (let j in levels) {
+                if (oid.indexOf(types[i]) >= 0 && level == levels[j]) {
+                    if (hidden) {
+                        ediv.classList.add("hidden");
+                    } else {
+                        ediv.classList.remove("hidden");
+                    }
+                }
+            }
+        }
+    }
+}
+
+//更新所有台站九宫格颜色状态,根据设定的离线时间间隔
+export function updateOfflinePopups(mapDiv, offlineTime) {
+    //获取所有的popup
+    var overlays = mapDiv.map.getOverlays().getArray();
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        if (oid.indexOf('popup') >= 0) {
+            let div = overlays[k].get('element');
+            let params = JSON.parse(div.getAttribute("desc"));
+            let id = params.id;
+            let zt = params.status;
+            let timeCJ = params.cjsj;
+
+            let trs = $(div).find("table tr");
+            let tr1 = $(trs[1]).find("td");
+            let tr2 = $(trs[2]).find("td");
+            //let tr3 = $(trs[3]).find("td");
+            let $time = $(div).find("#time");
+
+            let timeCaiji = new Date(timeCJ).getTime();
+            let timeNow = new Date().getTime();
+            let timeDiff = (timeNow - timeCaiji) / 1000 / 60 / 60 / 24;//单位:天
+            let setOffline = timeDiff > Number(offlineTime) ? true : false;
+            let title = $time.attr("title");
+            if (setOffline) {
+                $time.removeClass("normal");
+                $time.addClass("unnormal");
+                $time.attr("title", title.split(' (')[0] + ' (离线)');
+            } else {
+                $time.removeClass("unnormal");
+                $time.addClass("normal");
+                $time.attr("title", title.split(' (')[0]);
+            }
+            //console.log('更新离线弹窗:'+timeCJ+", "+timeDiff+", "+offlineTime+", "+setOffline);
+        }
+    }
+}
+
+function getSiteLabelColorList(dataFactor) {
+    var statis = null;
+    //console.log("气象因子: "+dataFactor);
+    switch (dataFactor) {
+        case 'wd':
+            statis = { 'min': -60, 'max': 60 };
+            break;
+        case 'wdzg':
+            statis = { 'min': -60, 'max': 60 };
+            break;
+        case 'wdzd':
+            statis = { 'min': -60, 'max': 60 };
+            break;
+        case 'qy':
+            statis = { 'min': 900, 'max': 1100 };
+            break;
+        case 'sd':
+            statis = { 'min': 0, 'max': 100 };
+            break;
+        case 'fs':
+            statis = { 'min': 0, 'max': 80 };
+            break;
+        case 'fx':
+            statis = { 'min': 0, 'max': 360 };
+            break;
+        case 'yl':
+            statis = { 'min': 0, 'max': 1000 };
+            break;
+        case 'yun':
+            statis = { 'min': 0, 'max': 100 };
+            break;
+        case 'njd':
+            statis = { 'min': 0, 'max': 5000 };
+            break;
+        case 'tq':
+            statis = null;
+            break;
+        default:
+            statis = null;
+    }
+    var max = 0, min = 0;
+    if (statis != null) {
+        max = parseFloat(statis.max) + 1; //防止色带数溢出,最大值需加1
+        min = parseFloat(statis.min) - 1; //防止色带数溢出,最小值需减1
+    }
+    var colors = gradientColors("#0000FF", "#FF0000", parseInt(max - min));
+    var res = { 'color': colors, 'max': max, 'min': min };
+    return res;
+}
+
+//使用服务器端数据进行九宫格数据切换,向后台发请求
+//更新标记(包含坐标),标注及参数中的站点状态
+export function updateMarkerAndLabel(mapDiv, data, dataFactor, isUpdatePos = true) {
+    var map = mapDiv.map;
+    if (data.code == 0) { //OK
+        //获取数据列表
+        var feas = data.datas.list; //同时刻不同位置站点数据
+        var colorList = getSiteLabelColorList(dataFactor);
+        var color = colorList.color;
+        var min = colorList.min;
+        var max = colorList.max;
+        var overlays = map.getOverlays().getArray();
+        //查找pin
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            let pos_chk = overlays[k].getPosition(); //判断marker的坐标是否为空
+            //如果为空,仅更新参数坐标,不更新实体坐标
+            let ediv = overlays[k].get('element');
+            let params = JSON.parse(ediv.getAttribute("desc"));
+            let id = params.id;
+            for (var i = 0; i < feas.length; i++) {
+                var fea = feas[i];
+                var fid = fea.ZHAN_HAO;
+                //var fname = fea.MING_CHENG;
+                var lon = fea.JING_DU; //便携站的坐标在变化
+                var lat = fea.WEI_DU;
+                var lx = fea.ZHAN_TYPE; //固定站、便携站点
+                var zt = fea.state; //站点状态码:正常、故障、停用、未知
+                var timeCJ = fea.cjsj;
+                zt = statusMap(zt);
+                var labelv = getSiteLabel(fea, dataFactor);
+                var label = labelv.label;
+                var cv = labelv.value;
+                // 符号化
+                let scolor = "#FF0000";
+                if (lx == "便携站") {
+                    scolor = "#0000FF";
+                }
+                //let scolor = getSiteStateColor(zt); //站点颜色状态
+                let bcolor = "#FFF";
+                if (isNumber(cv)) {
+                    cv = parseFloat(cv);
+                    cv = cv > max ? max : cv;
+                    cv = cv < min ? min : cv;
+                    let color_idx = Math.floor((cv - min), 0);
+                    bcolor = color[color_idx];
+                }
+                //console.log("Color: "+fcolor+", "+color_idx+", "+cv);
+                //更新marker样式
+                if (oid.split('marker_')[1] == fid) {
+                    ediv.style.setProperty('background-color', scolor);
+                    ediv.style.setProperty('border', '1px solid #FFF');
+                    //更新坐标和状态参数
+                    let pos = mapDiv.geoToMrc([lon, lat]);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+
+                    if (isUpdatePos) {
+                        if (typeof (pos_chk) !== 'undefined') {
+                            overlays[k].setPosition(pt);
+                        }
+                        params.pos = [lon, lat];
+                    }
+                    params.status = zt;
+                    params.cjsj = timeCJ;
+                    ediv.setAttribute("desc", JSON.stringify(params));
+                    //console.log("updateMarkerAndLabel 更新站点:" + fid + ",坐标:" + params.pos);
+                    break; //取消要素集feas的剩余遍历
+                }
+
+                //更新marker上面的文字内容及样式
+                if (oid.split('label_')[1] == fid) {
+                    ediv.innerHTML = label; //更新标记文字内容
+                    ediv.style.setProperty('color', bcolor); //更新样式
+                    //更新坐标和状态参数
+                    let pos = mapDiv.geoToMrc([lon, lat]);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    if (isUpdatePos) {
+                        if (params.display && typeof (pos_chk) !== 'undefined') {
+                            overlays[k].setPosition(pt);
+                        } else {
+                            overlays[k].setPosition(undefined);
+                        }
+                        params.pos = [lon, lat];
+                    }
+                    params.status = zt;
+                    params.cjsj = timeCJ;
+                    ediv.setAttribute("desc", JSON.stringify(params));
+                    break;//取消要素集feas的剩余遍历
+                }
+
+                //更新标记下面的标签位置及状态参数
+                if (oid.split('tag_')[1] == fid) {
+                    //更新坐标和状态参数
+                    let pos = mapDiv.geoToMrc([lon, lat]);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    if (isUpdatePos) {
+                        if (typeof (pos_chk) !== 'undefined') {
+                            overlays[k].setPosition(pt);
+                        }
+                        params.pos = [lon, lat];
+                    }
+                    params.status = zt;
+                    params.cjsj = timeCJ;
+                    ediv.setAttribute("desc", JSON.stringify(params));
+                    break;//取消要素集feas的剩余遍历
+                }
+
+                //更新弹窗状态参数
+                if (oid.split('popup_')[1] == fid) {
+                    //更新坐标和状态参数
+                    let pos = mapDiv.geoToMrc([lon, lat]);
+                    let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                    if (isUpdatePos) {
+                        if (params.display && typeof (pos_chk) !== 'undefined') {
+                            overlays[k].setPosition(pt);
+                        } else {
+                            overlays[k].setPosition(undefined);
+                        }
+                        params.pos = [lon, lat];
+                    }
+                    params.status = zt;
+                    params.cjsj = timeCJ;
+                    ediv.setAttribute("desc", JSON.stringify(params));
+                    break;//取消要素集feas的剩余遍历
+                }
+            }
+        }
+    }
+}
+//获取地图中站点的九宫格气象标签数据
+function getSiteSudokuLable(mapDiv, dataFactor) {
+    var map = mapDiv.map;
+    var overlays = map.getOverlays().getArray();
+    var res = new Map();
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        let div = overlays[k].get('element');
+        let params = JSON.parse(div.getAttribute("desc"));
+        if (oid.indexOf('popup_') >= 0) {  //获取所有的popup
+            let id = params.id;
+            //let div = popup.getElement();
+            let trs = $(div).find("table tr");
+            let tr1 = $(trs[1]).find("td");
+            let tr2 = $(trs[2]).find("td");
+            let val= $(trs[3]).find("input[id='"+dataFactor+"']")[0].value;
+            let wdzg = $(trs[3]).find("input[id='wdzg']")[0].value;
+            let wdzd = $(trs[3]).find("input[id='wdzd']")[0].value;
+            //console.log("-->"+val);
+            //向九宫格中赋新值
+            let wd = tr1[0].innerHTML;
+            let sd = tr1[1].innerHTML;
+            let qy = tr1[2].innerHTML;
+            let fx = tr2[0].innerHTML;
+            let fs = tr2[1].innerHTML;
+            let yl = tr2[2].innerHTML;
+            let label = "";
+            switch (dataFactor) {
+                case 'wd':
+                    label = wd;
+                    break;
+                case 'wdzg':
+                    label = wdzg + "°C";
+                    break;
+                case 'wdzd':
+                    label = wdzd + "°C";
+                    break;
+                case 'qy':
+                    label = qy;
+                    break;
+                case 'sd':
+                    label = sd;
+                    break;
+                case 'fx':
+                    label = fx;
+                    break;
+                case 'yl':
+                    label = yl;
+                    break;
+                case 'fs':
+                    label = fs;
+                    break;
+                default:
+                    label = wd;
+            }
+            res.set(id, { 'label': label, 'value': val, 'all': { 'wd': wd, 'wdzg': wdzg, 'wdzd': wdzd, 'sd': sd, 'qy': qy, 'fx': fx, 'fs': fs, 'yl': yl } });
+        }
+    }
+    return res;
+}
+//使用本地数据进行九宫格数据切换,不向后台发请求
+export function sudokuSwitch(mapDiv, dataFactor) {
+    var map = mapDiv.map;
+    var colorList = getSiteLabelColorList(dataFactor);
+    var color = colorList.color;
+    var min = colorList.min;
+    var max = colorList.max;
+    var overlays = map.getOverlays().getArray();
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        let ediv = overlays[k].get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        //更新marker上面的文字内容及样式
+        if (oid.indexOf('label_') >= 0) {
+            let fid = oid.split('label_')[1];
+            let labelv = getSiteSudokuLable(mapDiv, dataFactor).get(fid);
+            //console.log(dataFactor + ", " + JSON.stringify(labelv));
+            let label = labelv.label;
+            let value = labelv.value;
+            let bcolor = "#FFF"; //设置label样式
+            if (isNumber(value)) {
+                let cv = parseFloat(value);
+                cv = cv > max ? max : cv;
+                cv = cv < min ? min : cv;
+                let color_idx = Math.floor((cv - min), 0);
+                bcolor = color[color_idx];
+            }
+            ediv.innerHTML = label; //更新标记文字内容
+            ediv.style.setProperty('color', bcolor); //更新样式
+        }
+    }
+}
+
+export function getTableStyle(flag) {
+    var styleList = [["正常", "popup_normal_border", "popup_normal_tdborder", "popup_normal_bg", "popup_normal_triangle"],
+    ["故障", "popup_abnormal_border", "popup_abnormal_tdborder", "popup_abnormal_bg", "popup_abnormal_triangle"],
+    ["异常", "popup_abnormal_border", "popup_abnormal_tdborder", "popup_abnormal_bg", "popup_abnormal_triangle"],
+    ["停用", "popup_cease_border", "popup_cease_tdborder", "popup_cease_bg", "popup_cease_triangle"],
+    ["危险", "popup_danger_border", "popup_danger_tdborder", "popup_danger_bg", "popup_danger_triangle"],
+    ["危险天气", "popup_danger_border", "popup_danger_tdborder", "popup_danger_bg", "popup_danger_triangle"],
+    ["离线", "popup_offline_border", "popup_offline_tdborder", "popup_offline_bg", "popup_offline_triangle"],
+    ["未知", "popup_unknown_border", "popup_unknown_tdborder", "popup_unknown_bg", "popup_unknown_triangle"]];
+    var arr;
+    for (var i in styleList) {
+        arr = styleList[i];
+        if (arr[0] == flag) {
+            return arr.slice(1, 5);
+        }
+    }
+    return arr.slice(1, 5);
+}
+
+export function getAllMarkersId(map) {
+    var overlays = map.getOverlays().getArray();
+    var ids = [];
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        let ep = overlays[k].get('element');
+        let params = JSON.parse(ep.getAttribute("desc"));
+        let id = params.id;
+        if (oid.indexOf('marker_') >= 0) {
+            ids.push(id);
+        }
+    }
+    return ids;
+}
+
+export function getAllMarkersIdAndName(map) {
+    var overlays = map.getOverlays().getArray();
+    var res = [];
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        let ep = overlays[k].get('element');
+        let params = JSON.parse(ep.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        if (oid.indexOf('marker_') >= 0) {
+            res.push({ 'id': id, 'name': name });
+        }
+    }
+    return res;
+}
+
+//字符串截留,超过长度n的字符串将被截断
+function strOmit(str, N = 8) {
+    var n = str.length; //字的长度
+    if (n > N) {
+        return str.slice(0, N);
+    }
+    return str;
+}
+
+//根据要素数据集更新弹窗内容
+export function updatePopupByFeature(mapDiv, data, showPopup = false) {
+    //console.log(JSON.stringify(data));
+    var feas = data.datas.list;
+    var map = mapDiv.map;
+    var overlays = map.getOverlays().getArray();
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        let div = overlays[k].get('element');
+        let params = JSON.parse(div.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        if (oid.indexOf('popup_') >= 0) {  //获取所有的popup
+            //获取弹窗中的表格元素
+            //let div = popup.getElement();
+            let trs = $(div).find("table tr");
+            let tr1 = $(trs[1]).find("td"); //设置带单位的气温等
+            let tr2 = $(trs[2]).find("td"); //设置带单位的风向等
+            let tr3 = $(trs[3]).find("input"); //设置气象数据
+            let $time = $(div).find("#time");
+            //遍历feature
+            for (let i in feas) {
+                let fea = feas[i];
+                let fid = fea.ZHAN_HAO;
+                if (fid == id) {
+                    let fname = fea.MING_CHENG;
+                    let lon = fea.JING_DU;
+                    let lat = fea.WEI_DU;
+
+                    let wdv = fea.qiwen != '' && fea.qiwen != '无数据' ? (parseFloat(fea.qiwen).toFixed(1)) : '';
+                    let wdzgv = fea.qiwen_max != '' && fea.qiwen_max != '无数据' ? (parseFloat(fea.qiwen_max).toFixed(1)) : '';
+                    let wdzdv = fea.qiwen_min != '' && fea.qiwen_min != '无数据' ? (parseFloat(fea.qiwen_min).toFixed(1)) : '';
+                    let qyv = fea.qiya != '' && fea.qiya != '无数据' ? (parseFloat(fea.qiya).toFixed(1)) : '';
+                    let sdv = fea.shidu != '' && fea.shidu != '无数据' ? (parseFloat(fea.shidu).toFixed(1)) : '';
+                    let fxv = fea.fengxiang != '' && fea.fengxiang != '无数据' ? (parseFloat(fea.fengxiang).toFixed(0)) : '';
+                    let ylv = fea.yuliang != '' && fea.yuliang != '无数据' ? (parseFloat(fea.yuliang).toFixed(1)) : '';
+                    let fsv = fea.fengsu != '' && fea.fengsu != '无数据' ? (parseFloat(fea.fengsu).toFixed(1)) : '';
+
+                    let wd = wdv + "°C";
+                    let wdzg = wdzgv + "°C";
+                    let wdzd = wdzdv + "°C";
+                    let qy = qyv + "hPa";
+                    let sd = sdv + "%";
+                    let fx = fxv + "°";
+                    let yl = ylv + "mm";
+                    let fs = fsv + "m/s";
+
+                    let time = fea.cjsj.split(' ')[1]; //截取“时:分”
+                    time = time != undefined ? time : '';
+                    let timeCJ = fea.cjsj; //采集时间
+
+                    let zt = fea.state; //站点状态码:正常、故障、停用、未知
+                    zt = statusMap(zt);
+                    let styles = getTableStyle(zt);
+                    $time.html(time);
+                    $time.attr('title', '采集时间:' + timeCJ);
+
+                    //获取容器元素设置样式
+                    //console.log("showPopup: " + fid + ", " + zt);
+                    $(div).find("table[name='style0']").removeClass();
+                    $(div).find("tr[name='style2']").removeClass();
+                    $(div).find("td[name='style1']").removeClass();
+                    $(div).find("div[name='style3']").removeClass();
+
+                    $(div).find("table[name='style0']").addClass(styles[0]);
+                    $(div).find("tr[name='style2']").addClass(styles[2]);
+                    $(div).find("td[name='style1']").addClass(styles[1]);
+                    $(div).find("div[name='style3']").addClass(styles[3]);
+
+                    //向九宫格中赋新值
+                    tr1[0].innerHTML = wd;
+                    tr1[1].innerHTML = sd;
+                    tr1[2].innerHTML = qy;
+
+                    tr2[0].innerHTML = fx;
+                    tr2[1].innerHTML = fs;
+                    tr2[2].innerHTML = yl;
+
+                    tr3[0].value = wdv;
+                    tr3[1].value = wdzgv;
+                    tr3[2].value = wdzdv;
+                    tr3[3].value = sdv;
+                    tr3[4].value = qyv;
+                    tr3[5].value = fxv;
+                    tr3[6].value = fsv;
+                    tr3[7].value = ylv;
+
+                    //更新容器参数值
+                    //var params = { level: sitelevel, status: zt, name: fname, id: fid, pos: [lon, lat] };
+                    let params = JSON.parse($(div).attr('desc'));
+                    params.status = zt;//更新状态
+                    params.cjsj = timeCJ;
+                    //params.pos=[lon,lat];
+                    if (showPopup) {
+                        popup.setPosition(cpoint);  //设置为当前站点位置
+                        params.display = true;
+                    }
+                    $(div).attr('desc', JSON.stringify(params));
+                    //console.log('弹窗更新后信息:'+$(div).html());
+                }
+            }
+        }
+    }
+}
+
+function displayPopup(marker_div, id, popup_obj) {
+    //查找当前标记点的坐标位置
+    let params = JSON.parse(marker_div.getAttribute("desc"));
+    let pos = params.pos;
+    let pt = fromLonLat(pos);
+    //alert("当前坐标:"+pos);
+    //更新当前popup的坐标参数
+    let pop_ep = popup_obj.get('element');
+    let pop_params = JSON.parse(pop_ep.getAttribute("desc"));
+    pop_params.pos = pos;
+    pop_params.display = true; //设置弹窗显示标记为ture
+    //利用当前标记点的坐标更新对应的弹窗坐标!
+    pop_ep.setAttribute("desc", JSON.stringify(pop_params));
+    popup_obj.setPosition(pt);  //设置为当前站点位置
+}
+
+function getSiteStateColor(zt) { //获取站点状态颜色
+    var c = ['#3861b5', //总数
+        '#419b3e', //正常
+        '#f1970f', //故障
+        '#b0413e', //危险
+        '#444444',  //停用
+        '#00000']; //未知
+    let res = c[-1];
+    if (zt == "正常") { res = c[1]; }
+    if (zt == "故障" || zt == "异常") { res = c[2]; }
+    if (zt == "危险" || zt == "危险天气") { res = c[3]; }
+    if (zt == "停用") { res = c[4]; }
+    if (zt == "未知") { res = c[5]; }
+    return res;
+}
+
+function objCopy(obj) { //对象深复制
+    return JSON.parse(JSON.stringify(obj));
+}
+
+//根据要素获取弹窗表格内容
+function getPopupTableContent(feature) {
+    var fea = feature;
+    var fid = fea.ZHAN_HAO;
+    var fname = fea.MING_CHENG;
+    var lon = fea.JING_DU;
+    var lat = fea.WEI_DU;
+    var zt = fea.state; //站点状态码:正常、故障、停用、未知
+    zt = statusMap(zt);
+    var lx = fea.ZHAN_TYPE; //固定站、便携站点
+    var styles = getTableStyle(zt);
+    var stitle = lx + ": " + fid + "(" + fname + ")"; //站号(站名)
+
+    let wdv = fea.qiwen != '' && fea.qiwen != '无数据' ? (parseFloat(fea.qiwen).toFixed(1)) : '';
+    let wdzgv = fea.qiwen_max != '' && fea.qiwen_max != '无数据' ? (parseFloat(fea.qiwen_max).toFixed(1)) : '';
+    let wdzdv = fea.qiwen_min != '' && fea.qiwen_min != '无数据' ? (parseFloat(fea.qiwen_min).toFixed(1)) : '';
+    let qyv = fea.qiya != '' && fea.qiya != '无数据' ? (parseFloat(fea.qiya).toFixed(1)) : '';
+    let sdv = fea.shidu != '' && fea.shidu != '无数据' ? (parseFloat(fea.shidu).toFixed(1)) : '';
+    let fxv = fea.fengxiang != '' && fea.fengxiang != '无数据' ? (parseFloat(fea.fengxiang).toFixed(0)) : '';
+    let ylv = fea.yuliang != '' && fea.yuliang != '无数据' ? (parseFloat(fea.yuliang).toFixed(1)) : '';
+    let fsv = fea.fengsu != '' && fea.fengsu != '无数据' ? (parseFloat(fea.fengsu).toFixed(1)) : '';
+
+    let wd = wdv + "°C";
+    let wdzg = wdzgv + "°C";
+    let wdzd = wdzdv + "°C";
+    let qy = qyv + "hPa";
+    let sd = sdv + "%";
+    let fx = fxv + "°";
+    let yl = ylv + "mm";
+    let fs = fsv + "m/s";
+
+    let time = fea.cjsj.split(' ')[1]; //截取“时:分”
+    let timeCJ = fea.cjsj; //采集时间
+    time = time != undefined ? time : '';
+    //这里使用模板字符串便于将DOM转换为JS对象
+    let styleh = 'popup';
+    let style0 = styles[0];
+    let style1 = styles[1];
+    let style2 = styles[2];
+    let style3 = styles[3];
+    let div = `<div class='${styleh}'>`;
+    let table = `<table name='style0' class='${style0}' title='鼠标【左/右键】点击九宫格查看【详细信息/快捷菜单】'>`
+        + `<tr name='style2' class='${style2}' style='color:#FFF' title='点击[x]或弹窗外任意区域关闭弹窗'>`
+        + `<td style='height:22px' colspan=2><span id='flag_switch' style='margin-left:18px; font-size:13px; font-weight:bold' title='${stitle}'>${fid}</span></td>`
+        + `<td style='text-align:center; font-size:13px' id='time' title='采集时间:${timeCJ}'>${time}</td>`
+        + `</tr>`
+        + `<tr style='font-size:12px;background-color: #FFF;'>`
+        + `<td title='气温' style='width:50px;height:23px' name='style1' class='${style1}'>${wd}</td>`
+        + `<td title='湿度' style='width:50px;height:23px' name='style1' class='${style1}'>${sd}</td>`
+        + `<td title='气压'  name='style1' class='${style1}'>${qy}</td>`
+        + `</tr>`
+        + `<tr style='font-size:12px;background-color: #FFF;'>`
+        + `<td title='风向' style='width:50px;height:23px' name='style1' class='${style1}'>${fx}</td>`
+        + `<td title='风速'  name='style1' class='${style1}'>${fs}</td>`
+        + `<td title='雨量'  name='style1' class='${style1}'>${yl}</td>`
+        + `</tr>`
+        + `<tr><td style='height:0px'>`
+        + `<input type='hidden' id='wd' value='${wdv}' />`
+        + `<input type='hidden' id='wdzg' value='${wdzgv}' />`
+        + `<input type='hidden' id='wdzd' value='${wdzdv}' />`
+        + `<input type='hidden' id='sd' value='${sdv}' />`
+        + `<input type='hidden' id='qy' value='${qyv}' />`
+        + `<input type='hidden' id='fx' value='${fxv}' />`
+        + `<input type='hidden' id='fs' value='${fsv}' />`
+        + `<input type='hidden' id='yl' value='${ylv}' />`
+        + `</td></tr>`
+        + `</table>`;
+    let info = div + table + `<div id='arrow' name='style3' class='${style3}'></div></div>`;
+    return info;
+}
+
+//映射站点状态
+function statusMap(state) {
+    var zt = "未知";
+    if (state == "不可用") { zt = "停用"; }
+    if (state == "超时") { zt = "故障"; }
+    if (state == "正常") { zt = "正常"; }
+    if (state == "离线") { zt = "未知"; }
+    //站点状态码:正常、故障、停用、未知
+    return zt;
+}
+//或取站点label,即marker上方的标记内容
+function getSiteLabel(fea, dataFactor) { //输入数据feature和气象factor
+    var wd = '气温'
+    var sd = '湿度';
+    var qy = '气压';
+    var fx = '风向';
+    var yun = '云量';
+    var yl = '雨量';
+    var fs = '风速';
+    var njd = '能见度';
+    var tq = '天气';
+    var label = '';
+    var cv = 0;
+    var fd = null;
+    switch (dataFactor) {
+        case 'wd':
+            fd = fea.qiwen; //fd: feature data
+            wd = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = wd != '' ? (wd + "°C") : '';
+            cv = wd;
+            break;
+        case 'wdzg':
+            fd = fea.qiwen_max; //fd: feature data
+            wd = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = wd != '' ? (wd + "°C") : '';
+            cv = wd;
+            break;
+        case 'wdzd':
+            fd = fea.qiwen_min; //fd: feature data
+            wd = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = wd != '' ? (wd + "°C") : '';
+            cv = wd;
+            break;
+        case 'qy':
+            fd = fea.qiya;
+            qy = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = qy != '' ? (qy + "hPa") : '';
+            cv = qy;
+            break;
+        case 'sd':
+            fd = fea.shidu;
+            sd = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = sd != '' ? (sd + "%") : '';
+            cv = sd;
+            break;
+        case 'fx':
+            fd = fea.fengxiang;
+            fx = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(0) : '';
+            label = fx != '' ? (fx + "°") : '';
+            cv = fx;
+            break;
+        case 'yun':
+            fd = fea.yunliang;
+            yun = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = yun != '' ? (yun + "%") : '';
+            cv = yun;
+            break;
+        case 'yl':
+            fd = fea.yuliang;
+            yl = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = yl != '' ? (yl + "mm") : '';
+            cv = yl;
+            break;
+        case 'fs':
+            fd = fea.fengsu;
+            fs = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(1) : '';
+            label = fs != '' ? (fs + "m/s") : '';
+            cv = fs;
+            break;
+        case 'njd':
+            fd = fea.njd;
+            njd = fd != '' && fd != '无数据' ? parseFloat(fd).toFixed(0) : '';
+            label = njd != '' ? (njd + "km") : '';
+            cv = njd;
+            break;
+        case 'tq':
+            fd = fea.tqxx;
+            tq = fd != '' && fd != '无数据' ? fd : '';
+            label = tq + '';
+            cv = tq;
+            break;
+        default:
+            fd = fea.qiwen;
+            wd = fd != '' ? parseFloat(fd).toFixed(1) : '';
+            label = fd != '' ? (wd + "°C") : '';
+            cv = wd;
+    }
+    return { 'label': label, 'value': cv };
+}
+
+//加载台站数据主函数
+export function load_data(mapDiv, data, dataFactor, sitelevel, leftClick, rightClick, jggChange, setView = false, showTag = false) {
+    var ids = [];//记录新添加到地图中的站点编号
+    if (data.code == 0) { //状态: OK
+        var feas = data.datas.list;
+        var colorList = getSiteLabelColorList(dataFactor);
+        var color = colorList.color;
+        var min = colorList.min;
+        var max = colorList.max;
+        if (dataFactor == 'fx') { //风向-蓝色
+            color = "#0000FF";
+        }
+        if (dataFactor == 'qy') { //气压-绿色
+            color = "#00FF00";
+        }
+        var lons = [];
+        var lats = [];
+        //添加点位
+        for (var i = 0; i < feas.length; i++) {
+            var fea = feas[i];
+            var fid = fea.ZHAN_HAO;
+            var fname = fea.MING_CHENG;
+            var lon = fea.JING_DU;
+            var lat = fea.WEI_DU;
+            
+            var zt = fea.state; //站点状态码:正常、故障、停用、未知
+            if (zt == "离线") continue; //如果返回状态为空,不加载站点
+
+            zt = statusMap(zt); //转换站点状态
+            var lx = fea.ZHAN_TYPE; //固定站、便携站点
+            var time = fea.cjsj.split(' ')[1]; //截取“时:分”
+            var timeCJ = fea.cjsj; //采集时间
+            //time = time != undefined ? time : '';
+            //var style = getTableStyle(zt);
+            //var stitle = lx + ": " + fid + "(" + fname + ")"; //站号(站名)
+            var params = { level: sitelevel, status: zt, name: fname, id: fid, pos: [lon, lat], type: lx, cjsj: timeCJ };
+            var params_label = objCopy(params);
+            params_label.display = true; //标注默认显示
+            var params_popup = objCopy(params);
+            params_popup.display = false; //弹窗默认不显示
+
+            lons.push(lon);
+            lats.push(lat);
+
+            var labelv = getSiteLabel(fea, dataFactor);
+            var label = labelv.label;
+            var cv = labelv.value;
+
+            document.oncontextmenu = function (e) {
+                //去掉默认的contextmenu事件,否则会和右键事件同时出现。
+                e.preventDefault();
+            };
+
+            // 符号化
+            let scolor = "#FF0000";
+            if (lx == "便携站") {
+                scolor = "#0000FF";
+            }
+
+            //let scolor = getSiteStateColor(zt);
+            let bcolor = "#FFF"; //设置label样式
+            if (isNumber(cv)) {
+                cv = parseFloat(cv);
+                cv = cv > max ? max : cv;
+                cv = cv < min ? min : cv;
+                let color_idx = Math.floor((cv - min), 0);
+                bcolor = color[color_idx];
+            }
+
+            //点位去重检查
+            //var m = mapDiv.markerIsExist([lon, lat]);
+            var m = mapDiv.markerIsExistById(fid); //站点编号不重复,坐标有可能重复
+            //console.log("站点是否存在:" + fid + ", " + m);
+            if (!m) { //站点不存在就添加
+                let jggInfo = getPopupTableContent(fea); //获取弹窗表格内容
+                mapDiv.addPopup([lon, lat], 0, fid, jggInfo, leftClick, rightClick, jggChange,
+                    params_popup);  //点击台站显示的九宫格弹窗
+                mapDiv.addMarkerLabel([lon, lat], 1, fid, label, params_label,
+                    { color: bcolor }) //台站标记上方的属性标注,如900hPa
+                mapDiv.addMarker([lon, lat], fid, label, scolor, 0.8, params,
+                    { width: '8px', height: '8px' }, displayPopup, jggChange); //台站标记,绿、橙、红、黑
+
+                if (showTag) { //台站标记下方的标签
+                    let tag = fid;
+                    mapDiv.addTag([lon, lat], fid, tag, params, { color: '#000', fontSize: '11px' })
+                }
+                ids.push(fid);
+            }
+        }
+        //mapDiv.eventOverlayClose(); //添加单击地图关闭弹窗事件
+        mapDiv.eventViewChange(displayPopup);
+        //设置当前显示范围
+        if (setView && lats.length>0 && lons.length>0) {
+            let scope = calcScope(lons, lats, 1);
+            mapDiv.setViewByExtent(scope);
+        }
+    } else {
+        throw ("加载数据失败,数据标识:" + data.msg);
+    }
+    return ids;
+}
+
+function calcScope(lonArr, latArr, offset = 0) {
+    let lonMin = Math.min(...lonArr) - offset;
+    let lonMax = Math.max(...lonArr) + offset;
+    let latMin = Math.min(...latArr) - offset;
+    let latMax = Math.max(...latArr) + offset;
+    return [lonMin, latMin, lonMax, latMax];
+}
+
+//筛选新入库站点的feature
+export function getAddSitesData(ids_old, data) {
+    var data_new = objCopy(data); //新站点数据
+    data_new.datas.list = []; //清空列表
+    var ids_add = [];
+    var len = 0;
+    if (data.code == 0) { //状态:OK
+        var feas = data.datas.list;
+        for (var i = 0; i < feas.length; i++) {
+            var fea = feas[i];       //ids_old:[1,2,3]
+            var fid = fea.ZHAN_HAO;  //fid:[3,4,5]
+            var fs=fea.state;
+            if (!ids_old.includes(fid) && fs!="离线") { //当前的fid是新入库站点
+                data_new.datas.list.push(fea);
+                ids_add.push(fid);
+            }
+        }
+    }
+    len = data_new.datas.list.length;
+    return { 'data': data_new, 'ids': ids_add, 'length': len };
+}
+
+//筛选被删掉站点的id
+export function getDelSitesData(ids_old, data) {
+    var len = 0;
+    var data_remain = objCopy(data); //刷新后待保留的站点
+    data_remain.datas.list = []; //清空列表
+    let ids_new = [];
+    let ids_del = [];
+    if (data.code == 0) { //状态:OK
+        var feas = data.datas.list;
+        for (var i = 0; i < feas.length; i++) {
+            var fea = feas[i];
+            var fid = fea.ZHAN_HAO;
+            ids_new.push(fid);
+            if (ids_old.includes(fid)) { //ids_old:[1,2,3]
+                //ids_new:[3,4,5]
+                data_remain.datas.list.push(fea);//保留点[3]
+            }
+        }
+    }
+    for (let i in ids_old) {//ids_old:[1,2,3]
+        let fid = ids_old[i]; //ids_new:[3,4,5]
+        if (!ids_new.includes(fid)) { //当前的fid是已被删掉的站点
+            ids_del.push(fid);
+        }
+    }
+    len = ids_del.length;
+    return { 'ids': ids_del, 'length': len, 'remainData': data_remain };
+}
+///////////////////////////////////////////////////////////////////
+
+function getRandom(m, n) {
+    return Math.random() * (n - m) + m;
+}
+function getPosRand(offset = 0) {
+    let latn = 42;
+    let lats = 25;
+    let lonw = 96;
+    let lone = 121;
+    let lat = getRandom(lats, latn) + offset;
+    let lon = getRandom(lonw, lone) + offset;
+    return { 'lat': lat, 'lon': lon };
+}
+
+function timeFormat(date = new Date()) {
+    //var date = new Date();
+    let year = date.getFullYear();
+    let month = date.getMonth() + 1;
+    let day = date.getDate();
+    let hours = date.getHours();
+    let minutes = date.getMinutes();
+    let seconds = date.getSeconds();
+    let res = year + "-" + month + "-" + day + " " + hours + ":" + minutes +
+        ":" + seconds;
+    return res;
+}
+//模拟返回数据
+export function res_data_simu0() {
+    var data = {
+        "code": 0,
+        "msg": "OK",
+        "datas": {
+            "list": [
+                { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD8", "MING_CHENG": "1号站点", "ZHAN_HAO": "1", "ZHAN_TYPE": "固定站", "JING_DU": "119", "WEI_DU": "34", "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1013.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-02-21 10:11:26", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "正常", "danger": "" },
+                { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "2号站点", "ZHAN_HAO": "2", "ZHAN_TYPE": "便携站", "JING_DU": 119.07276805058684, "WEI_DU": 33.57725633349737, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1013.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-03-21 15:11:01", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "正常", "danger": "大风" },
+                { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "3号站点", "ZHAN_HAO": "3", "ZHAN_TYPE": "便携站", "JING_DU": 120.37001083785111, "WEI_DU": 31.31200379255739, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1013.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-04-21 20:11:34", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "超时", "danger": "" },
+                { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "4号站点", "ZHAN_HAO": "4", "ZHAN_TYPE": "便携站", "JING_DU": 120.94426237086982, "WEI_DU": 32.161930989038005, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1013.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-02-21 10:11:06", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "正常", "danger": "" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M1号站点", "ZHAN_HAO": "M1", "ZHAN_TYPE": "便携站", "JING_DU": 109.33988134137039, "WEI_DU": 27.862424830783905, "DATA_TYPE": "--", "qiwen": -31, "qiwen_min": -36, "qiwen_max": -26, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "正常", "danger": "冰雹" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M2号站点", "ZHAN_HAO": "M2", "ZHAN_TYPE": "便携站", "JING_DU": 117.02682959359893, "WEI_DU": 32.11829392952986, "DATA_TYPE": "--", "qiwen": -5, "qiwen_min": -10, "qiwen_max": 0, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "超时", "danger": "冰雹" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M5号站点", "ZHAN_HAO": "M5", "ZHAN_TYPE": "固定站", "JING_DU": 103.48072941367461, "WEI_DU": 31.509770277237656, "DATA_TYPE": "--", "qiwen": 28, "qiwen_min": 23, "qiwen_max": 33, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "超时", "danger": "冰雹" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M6号站点", "ZHAN_HAO": "M6", "ZHAN_TYPE": "便携站", "JING_DU": 118.8144837593801, "WEI_DU": 28.33239418178894, "DATA_TYPE": "--", "qiwen": -26, "qiwen_min": -31, "qiwen_max": -21, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "正常", "danger": "冰雹" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M4号站点", "ZHAN_HAO": "M4", "ZHAN_TYPE": "便携站", "JING_DU": 98.67928314600218, "WEI_DU": 30.683067214473823, "DATA_TYPE": "--", "qiwen": 36, "qiwen_min": 31, "qiwen_max": 41, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "不可用", "danger": "冰雹" },
+                { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M3号站点", "ZHAN_HAO": "M3", "ZHAN_TYPE": "便携站", "JING_DU": 102.07964462186851, "WEI_DU": 40.94762732290464, "DATA_TYPE": "--", "qiwen": 30, "qiwen_min": 25, "qiwen_max": 35, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-27 20:22:5", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "", "danger": "冰雹" }]
+            ,
+            "numbers": {
+                "state_running_count": 3,
+                "state_stop_count": 1,
+                "state_error_count": 2,
+                "state_danger_count": 6,
+            },
+            "global_qiwen": {
+                "min": "-20.799999",
+                "max": "33.5"
+            },
+            "global_qiya": {
+                "min": "0.000000",
+                "max": "1013.5"
+            }
+        },
+        "elapsed time": "423548us"
+    };
+    return data;
+}
+export function res_data_simu(dynamic = false) {
+    if (!dynamic) { //静态站点
+        var data = {
+            "code": 0,
+            "msg": "OK",
+            "datas": {
+                "list": [
+                    { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD8", "MING_CHENG": "1号站点", "ZHAN_HAO": "1", "ZHAN_TYPE": "固定站", "JING_DU": 119, "WEI_DU": 34, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1013.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-02-21 10:11:01", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "正常", "danger": "" },
+                    { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "2号站点", "ZHAN_HAO": "2", "ZHAN_TYPE": "便携站", "JING_DU": 119.29704363940438, "WEI_DU": 32.316579115599914, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "1000.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-03-21 10:31:08", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "正常", "danger": "大风" },
+                    { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "3号站点", "ZHAN_HAO": "3", "ZHAN_TYPE": "便携站", "JING_DU": 120.63246664260988, "WEI_DU": 32.743683255511314, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "800.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-04-21 10:11:34", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "超时", "danger": "" },
+                    { "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9", "MING_CHENG": "4号站点", "ZHAN_HAO": "4", "ZHAN_TYPE": "便携站", "JING_DU": 120.04603494157196, "WEI_DU": 32.1159969158977, "DATA_TYPE": "--", "qiwen": "23.4", "qiwen_min": "19.8", "qiwen_max": "33.5", "qiya": "900.5", "shidu": "56", "fengxiang": "177", "yuliang": "0.000000", "fengsu": "4.5", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-04-25 10:11:21", "cjsjc": "1676945460", "data_update_time": "1676945381", "meta_update_time": "1676620809", "state": "超时", "danger": "" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M1号站点", "ZHAN_HAO": "M1", "ZHAN_TYPE": "便携站", "JING_DU": 105.27518105770783, "WEI_DU": 27.747750119537017, "DATA_TYPE": "--", "qiwen": 13, "qiwen_min": 8, "qiwen_max": 18, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-09-22 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "超时", "danger": "冰雹" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M2号站点", "ZHAN_HAO": "M2", "ZHAN_TYPE": "便携站", "JING_DU": 113.71362071076472, "WEI_DU": 36.191964410795535, "DATA_TYPE": "--", "qiwen": -27, "qiwen_min": -32, "qiwen_max": -22, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-23 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "正常", "danger": "冰雹" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M5号站点", "ZHAN_HAO": "M5", "ZHAN_TYPE": "便携站", "JING_DU": 98.45219490225608, "WEI_DU": 36.330597566836886, "DATA_TYPE": "--", "qiwen": -41, "qiwen_min": -46, "qiwen_max": -36, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-24 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "超时", "danger": "冰雹" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M4号站点", "ZHAN_HAO": "M4", "ZHAN_TYPE": "便携站", "JING_DU": 115.7280218752159, "WEI_DU": 36.74062592459678, "DATA_TYPE": "--", "qiwen": 0.1, "qiwen_min": -5, "qiwen_max": 5, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-25 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "正常", "danger": "冰雹" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M3号站点", "ZHAN_HAO": "M3", "ZHAN_TYPE": "便携站", "JING_DU": 113.15779455530073, "WEI_DU": 39.22608953803255, "DATA_TYPE": "--", "qiwen": 11, "qiwen_min": 6, "qiwen_max": 16, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-26 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "超时", "danger": "冰雹" },
+                    { "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095", "MING_CHENG": "M6号站点", "ZHAN_HAO": "M6", "ZHAN_TYPE": "便携站", "JING_DU": 109.82567827010885, "WEI_DU": 42.27176743020384, "DATA_TYPE": "--", "qiwen": '0', "qiwen_min": -11, "qiwen_max": 8, "qiya": "949.5", "shidu": "54", "fengxiang": "325", "yuliang": "0.00", "fengsu": "4.30", "njd": "-16777215", "tqxx": "无数据", "cjsj": "2023-11-26 15:41:29", "cjsjc": "1670915880", "data_update_time": "1670915903", "meta_update_time": "1671691090", "state": "正常", "danger": "冰雹" }
+                ],
+                "numbers": {
+                    "state_running_count": 5,
+                    "state_stop_count": 0,
+                    "state_error_count": 5,
+                    "state_danger_count": 7,
+                },
+                "global_qiwen": {
+                    "min": "-20.799999",
+                    "max": "33.5"
+                },
+                "global_qiya": {
+                    "min": "0.000000",
+                    "max": "1013.5"
+                }
+            },
+            "elapsed time": "423548us"
+        };
+        return data;
+    }
+    if (dynamic) { //动态站点
+        var data = {
+            "code": 0,
+            "msg": "OK",
+            "datas": {
+                "list": [
+                    {
+                        "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD8",
+                        "MING_CHENG": "1号站点",
+                        "ZHAN_HAO": "1",
+                        "ZHAN_TYPE": "固定站",
+                        "JING_DU": "119",
+                        "WEI_DU": "34",
+                        "DATA_TYPE": "--",
+                        "qiwen": "23.4",
+                        "qiwen_min": "19.8",
+                        "qiwen_max": "33.5",
+                        "qiya": "1013.5",
+                        "shidu": "56",
+                        "fengxiang": "177",
+                        "yuliang": "0.000000",
+                        "fengsu": "4.5",
+                        "njd": "-16777215",
+                        "tqxx": "无数据",
+                        "cjsj": "2023-02-21 10:11:26",
+                        "cjsjc": "1676945460",
+                        "data_update_time": "1676945381",
+                        "meta_update_time": "1676620809",
+                        "state": "离线",
+                        "danger": ""
+                    },
+                    {
+                        "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9",
+                        "MING_CHENG": "2号站点",
+                        "ZHAN_HAO": "2",
+                        "ZHAN_TYPE": "便携站",
+                        "JING_DU": 120 + getRandom(-1, 1),
+                        "WEI_DU": 33 + getRandom(-1, 1),
+                        "DATA_TYPE": "--",
+                        "qiwen": "23.4",
+                        "qiwen_min": "19.8",
+                        "qiwen_max": "33.5",
+                        "qiya": "1013.5",
+                        "shidu": "56",
+                        "fengxiang": "177",
+                        "yuliang": "0.000000",
+                        "fengsu": "4.5",
+                        "njd": "-16777215",
+                        "tqxx": "无数据",
+                        "cjsj": "2023-03-21 15:11:01",
+                        "cjsjc": "1676945460",
+                        "data_update_time": "1676945381",
+                        "meta_update_time": "1676620809",
+                        "state": "正常",
+                        "danger": "大风"
+                    },
+                    {
+                        "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9",
+                        "MING_CHENG": "3号站点",
+                        "ZHAN_HAO": "3",
+                        "ZHAN_TYPE": "固定站",
+                        "JING_DU": 120 + getRandom(-1, 1),
+                        "WEI_DU": 33 + getRandom(-1, 1),
+                        "DATA_TYPE": "--",
+                        "qiwen": "23.4",
+                        "qiwen_min": "19.8",
+                        "qiwen_max": "33.5",
+                        "qiya": "1013.5",
+                        "shidu": "56",
+                        "fengxiang": "177",
+                        "yuliang": "0.000000",
+                        "fengsu": "4.5",
+                        "njd": "-16777215",
+                        "tqxx": "无数据",
+                        "cjsj": "2023-03-21 15:11:01",
+                        "cjsjc": "1676945460",
+                        "data_update_time": "1676945381",
+                        "meta_update_time": "1676620809",
+                        "state": "不可用",
+                        "danger": "大风"
+                    },
+                    {
+                        "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9",
+                        "MING_CHENG": "4号站点",
+                        "ZHAN_HAO": "4",
+                        "ZHAN_TYPE": "便携站",
+                        "JING_DU": 121 + getRandom(-1, 1),
+                        "WEI_DU": 32 + getRandom(-1, 1),
+                        "DATA_TYPE": "--",
+                        "qiwen": "23.4",
+                        "qiwen_min": "19.8",
+                        "qiwen_max": "33.5",
+                        "qiya": "1013.5",
+                        "shidu": "56",
+                        "fengxiang": "177",
+                        "yuliang": "0.000000",
+                        "fengsu": "4.5",
+                        "njd": "-16777215",
+                        "tqxx": "无数据",
+                        "cjsj": "2023-04-21 20:11:34",
+                        "cjsjc": "1676945460",
+                        "data_update_time": "1676945381",
+                        "meta_update_time": "1676620809",
+                        "state": "超时",
+                        "danger": ""
+                    },
+                    {
+                        "ZI_DONG_ZHAN_ID": "5D0D05FF50B64D9D921C1C82F6E98BD9",
+                        "MING_CHENG": "5号站点",
+                        "ZHAN_HAO": "5",
+                        "ZHAN_TYPE": "便携站",
+                        "JING_DU": 121 + getRandom(-1, 1),
+                        "WEI_DU": 32 + getRandom(-1, 1),
+                        "DATA_TYPE": "--",
+                        "qiwen": "23.4",
+                        "qiwen_min": "19.8",
+                        "qiwen_max": "33.5",
+                        "qiya": "1013.5",
+                        "shidu": "56",
+                        "fengxiang": "177",
+                        "yuliang": "0.000000",
+                        "fengsu": "4.5",
+                        "njd": "-16777215",
+                        "tqxx": "无数据",
+                        "cjsj": "2023-02-21 10:11:06",
+                        "cjsjc": "1676945460",
+                        "data_update_time": "1676945381",
+                        "meta_update_time": "1676620809",
+                        "state": getRandom(-1, 1) > 0 ? "正常" : "超时",
+                        "danger": ""
+                    }
+
+                ],
+                "numbers": {
+                    "state_running_count": 1,
+                    "state_stop_count": 1,
+                    "state_error_count": 2,
+                    "state_danger_count": 1
+                },
+                "global_qiwen": {
+                    "min": "-20.799999",
+                    "max": "33.5"
+                },
+                "global_qiya": {
+                    "min": "0.000000",
+                    "max": "1013.5"
+                }
+            },
+            "elapsed time": "423548us"
+        };
+
+        for (let i = 0; i < 5; i++) {
+            let p = getPosRand(i * 0.1);
+            let qw = Math.round(getRandom(-60, 40), 1);
+            let timeNow = new Date();
+            let cjsj = timeFormat(timeNow);
+            let id = Math.floor(getRandom(1, 99));
+            let sid = 'M' + id;
+            let sname = sid + '号站点';
+            let state = getRandom(0, 9) > 7 ? "正常" : "超时";
+            let danger = getRandom(0, 9) > 5 ? "冰雹" : "";
+            data.datas.list.push({
+                "ZI_DONG_ZHAN_ID": "E6B84175CDEE4481A65D19E4F1C4A095",
+                "MING_CHENG": sname,
+                "ZHAN_HAO": sid,
+                "ZHAN_TYPE": "便携站",
+                "JING_DU": p.lon,
+                "WEI_DU": p.lat,
+                "DATA_TYPE": "--",
+                "qiwen": qw,
+                "qiwen_min": qw - 5,
+                "qiwen_max": qw + 5,
+                "qiya": "949.5",
+                "shidu": "54",
+                "fengxiang": "325",
+                "yuliang": "0.00",
+                "fengsu": "4.30",
+                "njd": "-16777215",
+                "tqxx": "无数据",
+                "cjsj": cjsj,
+                "cjsjc": "1670915880",
+                "data_update_time": "1670915903",
+                "meta_update_time": "1671691090",
+                "state": state,
+                "danger": "冰雹"
+            });
+            if (state == "超时") {
+                data.datas.numbers.state_error_count++;
+            } else if (state == "正常") {
+                data.datas.numbers.state_running_count++;
+            }
+            if (danger == "冰雹") {
+                data.datas.numbers.state_danger_count++;
+            }
+        }
+        return data;
+    }
+}

+ 604 - 0
src/assets/map/weather_old.js

@@ -0,0 +1,604 @@
+import { containsCoordinate } from 'ol/extent';
+import { OLMap } from "@/assets/map/OLMap";
+import '@/assets/map/popup.css'
+import { gradientColors, markerZoomSize, labelZoomSize, colorRGBtoHex, jqAjax } from "@/assets/map/maptool";
+import $ from "@/assets/map/jquery.min";
+
+OLMap.prototype.eventViewChange = function (func) { //根据地图缩放级别控制popup弹窗的显隐
+    var view = this.map.getView();
+    var map = this.map;
+    view.on('change:resolution', function (event) {
+        let z = view.getZoom();
+        let r = view.getResolution();
+        var region = view.calculateExtent(map.getSize());
+        //console.log('extent: '+region);
+        var overlays = map.getOverlays().getArray();
+        var popups = []; //记录popup
+        //查找marker和label
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            if (oid.indexOf('marker') >= 0) {
+                let ediv = overlays[k].get('element');
+                let params = JSON.parse(ediv.getAttribute("desc"));
+                let level = params.level;
+                if (level == 1) {
+                    if (z < 5.3) {
+                        var wh = markerZoomSize(5, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else if (z >= 5.3 && z < 6.3) {
+                        var wh = markerZoomSize(4, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else {
+                        var wh = markerZoomSize(3, z);
+                        ediv.style.setProperty('width', (wh * 1.5) + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    }
+                }
+                if (level == 2) {
+                    if (z < 7.2) {
+                        var wh = markerZoomSize(6, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else if (z >= 7.2 && z < 7.6) {
+                        var wh = markerZoomSize(5, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else if (z >= 7.6 && z < 8) {
+                        var wh = markerZoomSize(4, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else {
+                        var wh = markerZoomSize(3, z);
+                        ediv.style.setProperty('width', (wh * 1.5) + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    }
+                }
+                if (level == 3) {
+                    if (z < 8.5) {
+                        var wh = markerZoomSize(7, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else if (z >= 8.5 && z < 9) {
+                        var wh = markerZoomSize(5, z);
+                        ediv.style.setProperty('width', wh + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    } else {
+                        var wh = markerZoomSize(3, z);
+                        ediv.style.setProperty('width', (wh * 1.5) + 'px');
+                        ediv.style.setProperty('height', wh + 'px');
+                    }
+                }
+            }
+            if (oid.indexOf("label") >= 0) {
+                // 重新设置标注的尺寸
+                let ea = overlays[k].get('element');
+                let params = JSON.parse(ea.getAttribute("desc"));
+                let level = params.level;
+                if (level == 1) {
+                    var fz = labelZoomSize(6.3, z);
+                    if (z >= 6.3) {
+                        fz = fz > 8 ? fz : 8;
+                    }
+                    ea.style.setProperty('font-size', fz + "px");
+                }
+                if (level == 2) {
+                    var fz = labelZoomSize(8, z);
+                    if (z >= 8) {
+                        fz = fz > 8 ? fz : 8;
+                    }
+                    ea.style.setProperty('font-size', fz + "px");
+                }
+                if (level == 3) {
+                    var fz = labelZoomSize(9, z);
+                    if (z >= 9) {
+                        fz = fz > 8 ? fz : 8;
+                    }
+                    ea.style.setProperty('font-size', fz + "px");
+                }
+            }
+            //console.log("zoom: "+z+", "+event.target.get(event.key));
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup") >= 0) {
+                let ep = overlays[k].get('element');
+                let pos = ep.getElementsByTagName('input')[0].value;
+                pos = pos.split(',');
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (containsCoordinate(region, pt)) {
+                    popups.push(overlays[k]);
+                }
+            }
+
+        }
+        //获取当前视图下的Overlay要素
+        //console.log('zoom: '+z+'_'+popups.length)
+        if (popups.length <= 8) {
+            for (var p in popups) {
+                if (popups[p].getPosition() != undefined) {
+                    continue;
+                }
+                let ep = popups[p].get('element');
+                let pos = ep.getElementsByTagName('input')[0].value;
+                pos = pos.split(',');
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //popups[p].setPosition(pt);  //设置为当前站点位置
+                let id=popups[p].getId().split("popup_")[1];
+                func(id,popups[p],pt);
+            }
+        }
+    });
+    view.on('change:center', function (event) {
+        let z = view.getZoom();
+        let r = view.getResolution();
+        var region = view.calculateExtent(map.getSize());
+        //console.log('chang-extent: '+region);
+        var overlays = map.getOverlays().getArray();
+        var popups = []; //记录popup
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            // 记录位于当前视图的popup
+            if (oid.indexOf("popup") >= 0) {
+                let ep = overlays[k].get('element');
+                let pos = ep.getElementsByTagName('input')[0].value;
+                pos = pos.split(',');
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //console.log('pos'+"_"+pt);
+                if (containsCoordinate(region, pt)) {
+                    popups.push(overlays[k]);
+                }
+            }
+
+        }
+        //获取当前视图下的Overlay要素
+        //console.log('zoom: '+z.toFixed(1)+'_popups: '+popups.length)
+        if (popups.length <= 8) {
+            for (var p in popups) {
+                if (popups[p].getPosition() != undefined) {
+                    continue;
+                }
+                let ep = popups[p].get('element');
+                let pos = ep.getElementsByTagName('input')[0].value;
+                pos = pos.split(',');
+                let pt = [parseFloat(pos[0]), parseFloat(pos[1])];
+                //popups[p].setPosition(pt);  //设置为当前站点位置
+                let id=popups[p].getId().split("popup_")[1];
+                func(id,popups[p],pt);
+            }
+        }
+
+    });
+}
+
+OLMap.prototype.eventOverlayClose = function () {//关闭所有弹窗
+    this.map.on('click', function (evt) {
+        //console.log("事件源:"+evt.target.tagName+", 类型:"+evt.type+",是否冒泡事件:"+evt.bubbles);
+        //去除所有Popup
+        var overlays = this.getOverlays().getArray();
+        //console.log(overlays.length);
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            if (oid.indexOf('marker') >= 0) {
+                let e = overlays[k].get('element');
+                let c = e.style['background-color'];
+                c = colorRGBtoHex(c);
+                //console.log('c='+c);
+                e.style.setProperty('border', '1px solid' + c);
+            }
+            if (oid.indexOf("popup") >= 0) {
+                overlays[k].setPosition(undefined); //隐藏所有POPUP
+            }
+        }
+    });
+}
+
+export function updatePopupTitle(map, switch_flag) {
+    var types = ['popup']
+    var layers = map.getOverlays().getArray();
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let id = params.id;
+        let name = params.name;
+        for (let i in types) {
+            if (oid.indexOf(types[i]) >= 0) {
+                //更改popup的标题
+                let x = $(ediv).find("#flag_switch");
+                let sname = switch_flag ? strOmit(name, 8) : id; //显示站名、站号
+                x.html(sname);
+            }
+        }
+    }
+}
+
+export function rmOverlaysByLevel(map, levels = [3], types = ['marker', 'label', 'popup']) {//清除指定Level的Marker和Popup
+    var layers = map.getOverlays().getArray();
+    //console.log('删除前图层数: '+layers.length);
+    var overlays = []
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let level = params.level;
+        for (let i in types) {
+            for (let j in levels) {
+                if (oid.indexOf(types[i]) >= 0 && level == levels[j]) {
+                    overlays.push(layer);
+                }
+            }
+        }
+    }
+    for (let i in overlays) {
+        map.removeOverlay(overlays[i]);
+    }
+    //layers = map.getOverlays().getArray();
+    //console.log('删除后图层数: '+layers.length);
+}
+
+export function hiddenOverlaysByLevel(map, hidden = true, levels = [3], types = ['marker', 'label', 'popup']) {//关闭指定Level的Marker和Popup
+    var layers = map.getOverlays().getArray();
+    var overlays = []
+    for (let i = 0; i < layers.length; i++) {
+        const layer = layers[i];
+        let oid = layer.getId();
+        let ediv = layer.get('element');
+        let params = JSON.parse(ediv.getAttribute("desc"));
+        let level = params.level;
+        for (let i in types) {
+            for (let j in levels) {
+                if (oid.indexOf(types[i]) >= 0 && level == levels[j]) {
+                    if (hidden) {
+                        ediv.classList.add("hidden");
+                    } else {
+                        ediv.classList.remove("hidden");
+                    }
+                }
+            }
+        }
+    }
+}
+export function updateMarkerAndLabel(map, data, dataFactor) {
+    if (String(data.msg).toLowerCase() == "ok") {
+        //获取数据列表
+        var feas = data.datas.list;
+        var statis = null;
+        //console.log("气象因子: "+dataFactor);
+        switch (dataFactor) {
+            case 'wd':
+                statis = data.global_air_temp;
+                break;
+            case 'qy':
+                statis = data.global_apressure;
+                break;
+            default:
+                statis = data.global_air_temp;
+        }
+        if (statis == null) {
+            throw ("统计参数为空!");
+        }
+        var max = parseFloat(statis.max) + 1; //防止色带数溢出,最大值需加1
+        var min = parseFloat(statis.min) - 1; //防止色带数溢出,最小值需减1
+        var color = gradientColors("#0000FF", "#FF0000", parseInt(max - min));
+        //console.log("要素长度:" + feas.length);
+
+        //查找markers和labels
+        var overlays = map.getOverlays().getArray();
+        //查找markers
+        for (var k in overlays) {
+            let oid = overlays[k].getId();
+            for (var i = 0; i < feas.length; i++) {
+                var fea = feas[i];
+                var fid = fea.id;
+                var fname = fea.name;
+                var wd = '温度'
+                var sd = '湿度';
+                var qy = '气压';
+                var fx = '风向';
+                var yun = '云量';
+                var yl = '雨量';
+                var fs = '风速';
+                var jd = '能见度';
+                var tq = '天气';
+                var time = null;
+                var label = '';
+                var cv = 0;
+                var fd = null;
+                switch (dataFactor) {
+                    case 'wd':
+                        fd = fea.AIR_TEMP; //fd: feature data
+                        time = fd.time.slice(-8, -3); //截取“时:分”
+                        wd = parseFloat(fd.value).toFixed(1);
+                        label = wd + "°C";
+                        cv = wd;
+                        break;
+                    case 'qy':
+                        fd = fea.APRESSURE;
+                        time = fd.time.slice(-8, -3); //截取“时:分”
+                        qy = parseFloat(fd.value).toFixed(0);
+                        label = qy + "kPa";
+                        cv = qy;
+                        break;
+                    default:
+                        fd = fea.AIR_TEMP;
+                        time = fd.time.slice(-8, -3); //截取“时:分”
+                        wd = parseFloat(fd.value).toFixed(1);
+                        label = wd + "°C";
+                        cv = wd;
+                }
+                // 符号化
+                //cv = cv > max ? max : cv;
+                //cv = cv < min ? min : cv;
+                var color_idx = Math.floor((cv - min), 0);
+                var fcolor = color[color_idx];
+                //console.log("Color: "+fcolor+", "+color_idx+", "+cv);
+                //更新marker样式
+                if (oid.split('marker_')[1] == fid) {
+                    let ediv = overlays[k].get('element');
+                    ediv.style.setProperty('background-color', fcolor);
+                    ediv.style.setProperty('border', '1px solid' + fcolor);
+                }
+                //更新label文本
+                if (oid.split('label_')[1] == fid) {
+                    let ediv = overlays[k].get('element');
+                    ediv.innerHTML = label; //设置文本
+                }
+            }
+        }
+    }
+}
+
+export function getSiteStatus(map) {
+    var overlays = map.getOverlays().getArray();
+    //查找markers
+    var nTotal = 0;
+    var nNormal = 0;
+    var nAbnormal = 0;
+    var nCease = 0;
+    var nOther = 0;
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        if (oid.indexOf('marker') >= 0) {
+            let ediv = overlays[k].get('element');
+            let sdesc = ediv.getAttribute("desc");
+            let params = JSON.parse(sdesc);
+            let status = params.status;
+            switch (status) {
+                case "正常": nNormal++; break;
+                case "故障": nAbnormal++; break;
+                case "停用": nCease++; break;
+                default: nOther++;
+            }
+            nTotal++;
+        }
+    }
+    return { total: nTotal, normal: nNormal, abnormal: nAbnormal, cease: nCease, other: nOther };
+}
+
+export function getTableStyle(flag) {
+    var styleList = [["正常", "popup_normal_border", "popup_normal_tdborder", "popup_normal_bg", "popup_normal_triangle"],
+    ["故障", "popup_abnormal_border", "popup_abnormal_tdborder", "popup_abnormal_bg", "popup_abnormal_triangle"],
+    ["停用", "popup_cease_border", "popup_cease_tdborder", "popup_cease_bg", "popup_cease_triangle"],
+    ["未知", "popup_unknown_border", "popup_unknown_tdborder", "popup_unknown_bg", "popup_unknown_triangle"]];
+    var arr;
+    for (var i in styleList) {
+        arr = styleList[i];
+        if (arr[0] == flag) {
+            return arr.slice(1, 5);
+        }
+    }
+    return arr.slice(1, 5);
+}
+
+export function getALLMarkersId(map) {
+    var overlays = map.getOverlays().getArray();
+    var ids = [];
+    for (var k in overlays) {
+        let oid = overlays[k].getId();
+        if (oid.indexOf('marker') >= 0) {
+            ids.push(oid.split('marker_')[1]);
+        }
+    }
+    return ids;
+}
+
+function strOmit(str, N = 8) { //字符串截留,超过长度n的字符串将被截断
+    var n = str.length; //字的长度
+    if (n > N) {
+        return str.slice(0, N);
+    }
+    return str;
+}
+
+function showPopup(id, popup, cpoint) {
+    //获取弹窗中的表格元素
+    let div = popup.getElement();
+    let trs = $(div).find("table tr");
+    let tr1 = $(trs[1]).find("td");
+    let tr2 = $(trs[2]).find("td");
+    let tr3 = $(trs[3]).find("td");
+
+    //向后台发送id,查询九宫格数据
+    let url = 'http://debug.api.9poc.com/map/zhandian';
+    let p = {
+        "ID": id,
+        "TOKEN": "SW6Q7Q74YX2V97JZSW6Q7Q74YX2V97JZ"
+    }
+    let params = {
+        ACT: "GIRD9_DATA",
+        PARAMETERS: JSON.stringify(p),
+    }
+    jqAjax(url, params, 'POST', function (data) {
+        if(data.code==0){
+            let grid = data.msg.grid;
+            let wd = grid[0].value + "°C";;
+            let sd = grid[1].value + grid[1].unit;
+            let qy = grid[2].value + "kPa";
+            let fx = grid[3].value + grid[3].unit;
+            let yun = grid[4].value + grid[4].unit;
+            let yl = grid[5].value + grid[5].unit;
+            let fs = grid[6].value + grid[6].unit;
+            let jd = grid[7].value + grid[7].unit;
+            let tq = grid[8].value;
+            let time = null;
+            //向九宫格中赋新值
+            tr1[0].innerHTML = wd;
+            tr1[1].innerHTML = sd;
+            tr1[2].innerHTML = qy;
+            tr2[0].innerHTML = fx;
+            tr2[1].innerHTML = yun;
+            tr2[2].innerHTML = yl;
+            tr3[0].innerHTML = fs;
+            tr3[1].innerHTML = jd;
+            tr3[2].innerHTML = tq;
+        }
+        popup.setPosition(cpoint);  //设置为当前站点位置
+        
+    });
+}
+
+export function load_data(mapDiv, data, dataFactor, sitelevel, switch_flag, leftClick, rightClick) {
+    if (String(data.msg).toLowerCase() == "ok") {
+        var feas = data.datas.list;
+        var statis = null;
+        //console.log("气象因子: "+dataFactor);
+        switch (dataFactor) {
+            case 'wd':
+                statis = data.global_air_temp;
+                break;
+            case 'qy':
+                statis = data.global_apressure;
+                break;
+            default:
+                statis = data.global_air_temp;
+        }
+        if (statis == null) {
+            throw ("统计参数为空!");
+        }
+        var max = parseFloat(statis.max) + 1; //防止色带数溢出,最大值需加1
+        var min = parseFloat(statis.min) - 1; //防止色带数溢出,最小值需减1
+        var color = gradientColors("#0000FF", "#FF0000", parseInt(max - min));
+        //console.log("要素长度:" + feas.length);
+        //添加点位
+        for (var i = 0; i < feas.length; i++) {
+            var fea = feas[i];
+            var fid = fea.id;
+            var fname = fea.name;
+            var lon = fea.longitude;
+            var lat = fea.latitude;
+            var zt = fea.status.text; //站点状态码:正常、故障、停用、未知
+            var style = getTableStyle(zt);
+            var sname = switch_flag ? strOmit(fname, 8) : fid; //显示站名、站号
+            var stitle = "站名:" + fname + ",站号:" + fid
+            var params = { level: sitelevel, status: zt, name: fname, id: fid };
+
+            var wd = '温度'
+            var sd = '湿度';
+            var qy = '气压';
+            var fx = '风向';
+            var yun = '云量';
+            var yl = '雨量';
+            var fs = '风速';
+            var jd = '能见度';
+            var tq = '天气';
+            var time = null;
+            var label = '';
+            var cv = 0;
+            var fd = null;
+            switch (dataFactor) {
+                case 'wd':
+                    fd = fea.AIR_TEMP; //fd: feature data
+                    time = fd.time.slice(-8, -3); //截取“时:分”
+                    wd = parseFloat(fd.value).toFixed(1);
+                    label = wd + "°C";
+                    cv = wd;
+                    break;
+                case 'qy':
+                    fd = fea.APRESSURE;
+                    time = fd.time.slice(-8, -3); //截取“时:分”
+                    qy = parseFloat(fd.value).toFixed(0);
+                    label = qy + "kPa";
+                    cv = qy;
+                    break;
+                default:
+                    fd = fea.AIR_TEMP;
+                    time = fd.time.slice(-8, -3); //截取“时:分”
+                    wd = parseFloat(fd.value).toFixed(1);
+                    label = wd + "°C";
+                    cv = wd;
+            }
+
+            //这里使用模板字符串便于将DOM转换为JS对象
+            let styleh = 'popup';
+            let style0 = style[0];
+            let style1 = style[1];
+            let style2 = style[2];
+            let style3 = style[3];
+            let div = `<div class='${styleh}'>`;
+            let table = `<table class='${style0}' title='鼠标【左/右键】点击九宫格查看【详细信息/快捷菜单】'>`
+                + `<tr class='${style2}' style='color:#FFF' title='点击[x]或弹窗外任意区域关闭弹窗'>`
+                + `<td colspan=2><span id='flag_switch' style='margin-left:18px; font-size:12px; font-weight:bold' title='${stitle}'>${sname}</span></td>`
+                + `<td style='text-align:center; font-size:12px'>${time}</td>`
+                + `</tr>`
+                + `<tr>`
+                + `<td class='${style1}'>${wd}</td>`
+                + `<td class='${style1}'>${sd}</td>`
+                + `<td class='${style1}'>${qy}</td>`
+                + `</tr>`
+                + `<tr>`
+                + `<td class='${style1}'>${fx}</td>`
+                + `<td class='${style1}'>${yun}</td>`
+                + `<td class='${style1}'>${yl}</td>`
+                + `</tr>`
+                + `<tr>`
+                + `<td class='${style1}'>${fs}</td>`
+                + `<td class='${style1}'>${jd}</td>`
+                + `<td class='${style1}'>${tq}</td>`
+                + `</tr>`
+                + `</table>`;
+            let info = div + table + `<div class='${style3}'></div></div>`;
+            /*
+            //将模板字符串DOM转为JS对象
+            let t = document.createElement('template');
+            t.innerHTML=info;
+            let _div=t.content.firstElementChild;
+            let _tab=_div.firstElementChild;
+            console.log("NodeName: "+_tab.nodeName);
+            */
+
+            document.oncontextmenu = function (e) {
+                //去掉默认的contextmenu事件,否则会和右键事件同时出现。
+                e.preventDefault();
+            };
+
+            // 符号化
+            //cv = cv > max ? max : cv;
+            //cv = cv < min ? min : cv;
+            var color_idx = Math.floor((cv - min), 0);
+            //console.log(cv, max, min);
+            //console.log(sname+"_"+color_idx+"_"+color[color_idx]+"_"+min+"_"+max);
+            //点位去重检查
+            let m = mapDiv.markerIsExist([lon, lat]);
+            //let m = mapDiv.markerIsExistById(fid);
+            //console.log("站点是否存在:"+fid+", "+m);
+            if (!m) {
+                mapDiv.addPopup([lon, lat], 0, fid, info, leftClick, rightClick, params);  //添加POPUP弹窗
+                if (sitelevel != 3) {
+                    mapDiv.addMarkerAndLabel([lon, lat], fid, label, color[color_idx], 0.8,
+                        params, { width: '8px', height: '8px' }, showPopup); //添加marker和label
+                } else {
+                    mapDiv.addMarkerAndLabel([lon, lat], fid, label, color[color_idx], 0.8,
+                        params, { width: '12px', height: '12px' }, showPopup); //添加marker和label
+                }
+            }
+        }
+        mapDiv.eventOverlayClose();
+        mapDiv.eventViewChange(showPopup);
+    } else {
+        throw ("加载数据失败,数据标识:" + data.msg);
+    }
+}
+

+ 480 - 69
src/views/alarm/gis/index.vue

@@ -1,29 +1,44 @@
 <template>
   <div class="table-box">
-    <div class="card table-search" style="overflow: hidden;display: flex;justify-content: space-between;">
+    <!-- 顶部查询栏 -->
+    <div class="card table-search" style="overflow: hidden; display: flex; justify-content: space-between;">
       <el-form :inline="true" label-width="auto">
+
         <el-form-item label="自动站:" prop="station">
-          <el-select v-model="searchParam.station" placeholder="请选择" style="width: 200px">
-            <el-option v-for="item in stationOptions" :key="item.value" :label="item.label" :value="item.value"/>
+          <el-select v-model="code_list" multiple collapse-tags filterable placeholder="请搜索自动站" remote reserve-keyword clearable @change="changeCodeList"  style="width: 200px">
+                <el-option
+                  v-for="item in platformList"
+                  :key="item.as_code"
+                  :label="item.as_code +' '+item.as_name"
+                  :value="item.as_code"
+                />
+                <template #prefix>
+                  <el-icon class="el-input__icon"><search /></el-icon>
+                </template>
           </el-select>
         </el-form-item>
+
         <el-form-item label="所属基地:" prop="base">
           <el-select v-model="searchParam.base" placeholder="请选择" style="width: 200px">
             <el-option v-for="item in baseOptions" :key="item.value" :label="item.label" :value="item.value"/>
           </el-select>
         </el-form-item>
+        <el-form-item><div class="lan-state">台站总数5</div></el-form-item>
+        <el-form-item><div class="lv-state">设备正常3</div></el-form-item>
+        <el-form-item><div class="hong-state">设备故障2</div></el-form-item>
+        <el-form-item><div class="cheng-state">危险天气1</div></el-form-item>
         <el-form-item>
-          <div class="lan-state">台站总数5</div>
-        </el-form-item>
-        <el-form-item>
-          <div class="lv-state">设备正常3</div>
-        </el-form-item>
-        <el-form-item>
-          <div class="hong-state">设备故障2</div>
-        </el-form-item>
-        <el-form-item>
-          <div class="cheng-state">危险天气1</div>
+          <el-switch
+          size="large"
+    v-model="isEagleEyeOn"
+    inline-prompt
+    active-text="打开鹰眼"
+    inactive-text="关闭鹰眼"
+  />
         </el-form-item>
+
+
+        <!-- 基本信息 -->
         <el-form-item>
           <el-popover
             v-model="visible"
@@ -37,23 +52,26 @@
               <el-checkbox label="站名" value="站名" style="width: 100%"/>
               <el-checkbox label="框选" value="框选" style="width: 100%"/>
               <el-checkbox label="九宫格" value="九宫格" style="width: 100%"/>
+              <el-checkbox label="鹰眼视图" value="鹰眼视图" style="width: 100%"/>
             </el-checkbox-group>
             <template #reference>
-              <div :class="visible?'hei-state-primary':'hei-state'">基本信息</div>
+              <div :class="visible ? 'hei-state-primary' : 'hei-state'">基本信息</div>
             </template>
           </el-popover>
         </el-form-item>
       </el-form>
+      <!-- 右侧功能栏 -->
       <div class="header-button-ri">
         <el-popover
           class="tab-pane"
-          :width="400"
+          :width="600"
           v-model="visible2"
           @show="handleShowChange2"
           @hide="handleHideChange2"
           placement="bottom-start"
           trigger="click">
           <el-tabs tab-position="right" class="demo-tabs">
+            <!-- 气温 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -61,7 +79,14 @@
                   <img class="gis-icon" src="../../../assets/images/temperature.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='温湿度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 气压 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -69,7 +94,14 @@
                   <img class="gis-icon" src="../../../assets/images/pressure.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='气压'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 湿度 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -77,7 +109,14 @@
                   <img class="gis-icon" src="../../../assets/images/humidity.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='温湿度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 风 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -85,7 +124,14 @@
                   <img class="gis-icon" src="../../../assets/images/wind.svg">
                 </div>
               </template>
+              <div  class="container-tag" style="overflow-y: auto;height: 300px;">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='风'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 降雨 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -93,7 +139,16 @@
                   <img class="gis-icon" src="../../../assets/images/rainfall.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='降水'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
+
             </el-tab-pane>
+
+
+            <!-- 云量 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -101,7 +156,14 @@
                   <img class="gis-icon" src="../../../assets/images/cloud.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='云'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 能见度 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -109,7 +171,14 @@
                   <img class="gis-icon" src="../../../assets/images/visibility.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='能见度'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
+
+            <!-- 天气现象 -->
             <el-tab-pane>
               <template #label>
                 <div class="gis-c">
@@ -117,22 +186,31 @@
                   <img class="gis-icon" src="../../../assets/images/phenomenon.svg">
                 </div>
               </template>
+              <div class="container-tag" style="overflow-y:auto; height:300px ">
+                <template v-for="item in elementList" :key="item.id"  >
+                  <div v-if="item.data_type==='天气现象'"  :class="item.isSelected?'item-tag-active':'item-tag'" @click="toggleSelection(item)" >{{item.data_name}}</div>
+                </template>
+              </div>
             </el-tab-pane>
           </el-tabs>
           <template #reference>
             <slot name="toolButton">
               <div style="cursor: pointer">
-                <img :class="visible2?'gis-icon-type2':'gis-icon-type1'"  src="@/assets/images/classify.svg"/>
+                <img :class="visible2 ? 'gis-icon-type2' : 'gis-icon-type1'" src="@/assets/images/classify.svg"/>
               </div>
             </slot>
           </template>
         </el-popover>
-
       </div>
     </div>
-    <div style="flex-grow: 1;">
 
-    </div>
+    <!-- 地图与经纬度显示区域 -->
+    <!-- <div id="map" class="map"></div>     -->
+    <div id="map" class="map" style="width: 100%; height: 100vh;"></div>
+
+    <div id="mouse-position" class="mouse-position">经纬度: </div>
+
+    <!-- 地图底部控制栏 -->
     <div class="gis-bottom-box">
       <div class="gis-bottom-item">
         <div class="button-bg" @click="isPlay=!isPlay">
@@ -175,69 +253,402 @@
         <div class="gis-bottom-hei-state">当前时间 {{formatTooltip(value2)}}</div>
       </div>
     </div>
+
   </div>
+
 </template>
 
-<script setup lang="ts" name="gis">
-import {reactive, ref} from "vue";
-const value1 = ref('')
-const value2 = ref(0)
-const visible = ref(false)
-const visible2 = ref(false)
-const checkList = ref(['Value selected and disabled', 'Value A'])
-const isPlay = ref(true)
-const handleShowChange = () => {
-  visible.value = true
+<script setup lang="ts">
+import { ref, reactive, onMounted } from "vue";
+import 'ol/ol.css';
+// import { Map, View } from 'ol';
+import TileLayer from 'ol/layer/Tile';
+import { fromLonLat, toLonLat } from 'ol/proj';
+// import { TileWMS } from 'ol/source';
+import OverviewMap from 'ol/control/OverviewMap';
+import SwitchButton from './SwitchButton.vue';
+import { watch, defineComponent } from "vue";
+import { Vector as VectorLayer } from 'ol/layer'; // 引入矢量图层
+import { Vector as VectorSource } from 'ol/source';
+// import Feature from 'ol/Feature';
+// import { Point } from 'ol/geom';
+// import { Style, Icon } from 'ol/style';
+import { Platform} from "@/api/interface";
+import {getPlatformList,getRgDataList} from "@/api/modules/allData";
+import Vector from './Vector.vue';
+import { coordinateParser } from '@/utils/coordinateParser';
+import { l } from "vite/dist/node/types.d-aGj9QkWt";
+// import LayerVector from 'ol/layer/Vector';
+// import SourceVector from 'ol/source/Vector';
+import OverlayMap from './overLayer.vue'; // 引入OverlayMap组件
+import http from "@/api";
+import {ElementColumnsList, ResPage, ResultData} from "@/api/interface/index";
+import { PORT1 } from "@/api/config/servicePort";
+
+
+import 'ol/ol.css'
+import '@/assets/map/popup.css'
+import { Tile, Image } from 'ol/layer';
+import { XYZ, TileWMS, ImageWMS } from 'ol/source';
+import LayerVector from 'ol/layer/Vector';
+import SourceVector from 'ol/source/Vector';
+import { Map, View, Feature, Overlay } from 'ol';
+import { transform } from 'ol/proj';
+import { defaults, FullScreen, ScaleLine, ZoomToExtent, ZoomSlider, MousePosition } from 'ol/control'
+import { Point } from 'ol/geom';
+import { Style, Icon, Text, Fill, Stroke, Circle } from 'ol/style';
+import { createStringXY, format } from 'ol/coordinate';
+import { getCenter } from 'ol/extent';
+import { METERS_PER_UNIT } from 'ol/proj/Units';
+import { labelZoomSize, colorRGBtoHex } from "@/assets/map/maptool";
+import { Draw } from 'ol/interaction';
+
+// 新建VectorSource(矢量信息图层) 来存放台站数据
+const stationSource = new VectorSource();
+const stationLayer = new VectorLayer({
+  source: stationSource,
+});
+
+// 定义状态变量
+const value1 = ref('');
+const value2 = ref(0);
+const visible = ref(false);
+const visible2 = ref(false);
+const checkList = ref(['Value selected and disabled', 'Value A']);
+const isPlay = ref(true);
+const isEagleEyeOn = ref(true);
+const searchParam = reactive({ base: undefined, station: undefined });
+const baseOptions = ref([{ value: 0, label: '基地1' }, { value: 1, label: '基地2' }]);
+const stationOptions = ref([{ value: 0, label: 'M1986' }, { value: 1, label: 'M1987' }]);
+
+// 查询自动站列表
+const queryas = ref<Platform>({
+  pageSize: 10000,
+  pageNum: 1
+})
+const platformList =ref<any>([]); // 平台列表存储从后端获取的自动站数据列表
+
+// 获取站点列表
+const getPlatforms = async () => {
+  try{
+    const { data } = await getPlatformList(queryas.value);
+    platformList.value = data.list;
+    console.log("platformList.value:",+ platformList.value); // 在控制台输出平台列表
+    // 调用 getStations 以添加站点到地图
+    getStations(data.list);
+    // console.log("打印data.list的数据:",+data.list)
+  }catch(error){
+    console.log("获取平台列表失败:",error)
+  }
 };
-const handleBack = () => {
-  value2.value = value2.value-10
-}
 
-const handleForward = () => {
-  value2.value = value2.value+10
-}
-const formatTooltip = (value) => {
-  const hours = Math.floor(value / 60);
-  const minutes = value % 60;
-  return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+//查询观测要素
+//  const getDataItemList = (params:{}) => {
+//   return http.post<ResPage<any>>(PORT1 + `/querydataitem`,params);
+//     console.log("http.post<ResPage<any>>(PORT1 + `/querydataitem`,params)",http.post<ResPage<any>>(PORT1 + `/querydataitem`,params))
+// };
+
+
+
+// 获取台站信息
+const getStations = (stations) => {
+  stationSource.clear();  // 清除之前的站点标记
+
+  stations.forEach(station => {
+    console.log(`Station ${station.as_code} data_list:`, station.data_list); // 打印每个站点的 data_list  返回undefined
+
+    if (station.as_lon && station.as_lat) {
+      const latitude = parseFloat(station.as_lat.replace('N', ''));
+      const longitude = parseFloat(station.as_lon.replace('E', ''));
+
+      // 基础信息,如站号和站名
+      const featureTextParts = [
+        `${station.as_code}`,
+        // `站名: ${station.as_name}`
+      ];
+
+      // 确保 data_list 存在且为数组
+      const selectedElementsText = copiedCustomizeColumns.value.map(selectedElem => {
+        if (station.data_list && Array.isArray(station.data_list)) {
+          // 在 `data_list` 中查找与当前选中要素 `data_id` 匹配的项
+          const dataItem = station.data_list.find(item => item.data_id === selectedElem.data_id);
+
+          // 检查数据项是否存在,并确保显示值和单位
+          if (dataItem) {
+            const value = dataItem.data_value || "暂无数据";  // 如果值不存在则显示“暂无数据”
+            return `${dataItem.data_name}: ${value}${dataItem.data_unit || ''}`;
+          } else {
+            // 如果未找到匹配项
+            return `${selectedElem.data_name}: 暂无数据`;
+          }
+        } else {
+          // 如果 data_list 不存在或不是数组
+          return `${selectedElem.data_name}: 暂无数据`;
+        }
+      }).join("\n");  // 使用换行符分隔每个选中要素
+
+      // 组合站点基础信息和选中要素信息
+      const featureText = `${featureTextParts.join("\n")}\n${selectedElementsText}`;
+
+      // 创建站点的特征(Feature)
+      const feature = new Feature({
+        geometry: new Point(fromLonLat([longitude, latitude], 'EPSG:3857')),
+        name: station.as_name,
+        code: station.as_code,
+      });
+
+      // 设置站点图标和文字样式
+      feature.setStyle(new Style({
+        image: new Icon({
+          src: '/src/assets/images/station_location.png',  // 图标路径
+          scale: 0.8,
+        }),
+        text: new Text({
+          text: featureText,  // 显示站号、站名和选中要素信息
+          font: '12px Calibri,sans-serif',
+          fill: new Fill({ color: '#000' }),
+          stroke: new Stroke({ color: '#fff', width: 2 }),
+          offsetY: -20,
+          textAlign: 'center',
+        })
+      }));
+
+      // 将站点特征添加到站点源
+      stationSource.addFeature(feature);
+    }
+  });
 };
 
-const handleHideChange = () => {
-  visible.value = false
+// 更新特征的样式,包括显示选中的要素值
+const updateFeatureStyle = (feature, station) => {
+  let featureTextParts = [`站号: ${feature.get('code')}`, `站名: ${feature.get('name')}`];
+
+  // 检查每个选中的要素是否在站点数据中,并添加到显示文本中
+  copiedCustomizeColumns.value.forEach(selectedElem => {
+    if (station.data_list && Array.isArray(station.data_list)) {
+      const dataItem = station.data_list.find(item => item.data_id === selectedElem.data_id);
+      if (dataItem) {
+        const value = dataItem.data_value || "暂无数据";  // 如果值不存在则显示“暂无数据”
+        featureTextParts.push(`${selectedElem.data_name}: ${value}${dataItem.data_unit || ''}`);
+      } else {
+        featureTextParts.push(`${selectedElem.data_name}: 暂无数据`);
+      }
+    } else {
+      featureTextParts.push(`${selectedElem.data_name}: 暂无数据`);
+    }
+
+  });
+
+  // 设置站点图标和文字样式
+  feature.setStyle(new Style({
+    image: new Icon({
+      src: '/src/assets/images/station_location.png',  // 图标路径
+      scale: 0.8,
+    }),
+    text: new Text({
+      text: featureTextParts.join("\n"),  // 显示站号、站名和选中要素信息
+      font: '12px Calibri,sans-serif',
+      fill: new Fill({ color: '#000' }),
+      stroke: new Stroke({ color: '#fff', width: 2 }),
+      offsetY: -20,
+      textAlign: 'center',
+    })
+  }));
 };
-const handleShowChange2 = () => {
-  visible2.value = true
+
+
+// 右侧图标
+const tabPaneData = ref([
+  { label: '气温', icon: '@/assets/images/temperature.svg' },
+  { label: '气压', icon: '@/assets/images/pressure.svg' },
+  { label: '湿度', icon: '@/assets/images/humidity.svg' },
+  { label: '风', icon: '@/assets/images/wind.svg' },
+  { label: '降雨', icon: '@/assets/images/rainfall.svg' },
+  { label: '云量', icon: '@/assets/images/cloud.svg' },
+  { label: '能见度', icon: '@/assets/images/visibility.svg' },
+  { label: '天气现象', icon: '@/assets/images/phenomenon.svg' }
+ ]);
+const playIcon = ref('@/assets/images/play.svg');
+const stopIcon = ref('@/assets/images/stop.svg');
+const backIcon = ref('@/assets/images/back.svg');
+const forwardIcon = ref('@/assets/images/forward.svg');
+// 工具提示格式化函数
+const formatTooltip = (value) => `${Math.floor(value / 60).toString().padStart(2, '0')}:${(value % 60).toString().padStart(2, '0')}`;
+const handleBack = () => value2.value -= 10;
+const handleForward = () => value2.value += 10;
+const handleHideChange = () => { visible.value = false; };
+const handleShowChange = () => { visible.value = true; };
+const handleShowChange2 = () => { visible2.value = true; };
+const handleHideChange2 = () => { visible2.value = false; };
+
+// 图层配置数组
+const layersConfig = [
+  { layerName: 'basemap:boundary', minZoom: 0, maxZoom: 6, opacity: 1 },
+  { layerName: 'basemap:province', minZoom: 1, maxZoom: 6 },
+  { layerName: 'basemap:capital', minZoom: 6, maxZoom: 10 },
+  { layerName: 'basemap:city', minZoom: 6, maxZoom: 10 },
+  { layerName: 'basemap:cityName', minZoom: 6, maxZoom: 10 },
+  { layerName: 'basemap:county', minZoom: 10, maxZoom: 15 },
+  { layerName: 'basemap:countyName', minZoom: 10, maxZoom: 15 },
+  { layerName: 'basemap:provinceName', minZoom: 1, maxZoom:6 }
+];
+
+// 创建图层的函数
+const createWMSLayer = ({ layerName, minZoom, maxZoom, opacity = 1 }) => {
+  return new TileLayer({
+    source: new TileWMS({
+      url: 'http://192.168.43.77:8080/geoserver/wms',
+      params: { 'LAYERS': layerName, 'TILED': true, 'FORMAT': 'image/png', 'TRANSPARENT': true, 'ENCODING': 'UTF-8' },
+      serverType: 'geoserver'
+    }),
+    opacity,
+    minZoom,
+    maxZoom
+  });
 };
-const handleHideChange2 = () => {
-  visible2.value = false
+
+let map; // 定义为全局变量
+let overviewMapControl: OverviewMap;
+// 地图初始化
+const initializeMap = () => {
+  let view =new View({
+      center: fromLonLat([104.1954, 35.8617]),
+      zoom: 4,
+      projection: 'EPSG:3857'//定义坐标系
+    })
+  map = new Map({
+    target: 'map',
+    layers: [
+    ...layersConfig.map(createWMSLayer),
+      stationLayer  // 初始化时添加 stationLayer
+    ],
+    view: view
+  });
+
+  // 定义鹰眼视图层
+  const overviewMapLayer = new TileLayer({
+    source: new TileWMS({
+      url: 'http://192.168.43.77:8080/geoserver/wms',
+      params: {
+        'LAYERS': 'basemap:province',  // 选择可见的图层为省级
+        'TILED': true,
+        'FORMAT': 'image/png',
+        'TRANSPARENT': true,
+        'ENCODING': 'UTF-8'
+      },
+      serverType: 'geoserver'
+    })
+  });
+
+  // 初始化 OverviewMap 控件并添加至地图
+  overviewMapControl = new OverviewMap({
+    collapsed: !isEagleEyeOn.value,
+    layers: [overviewMapLayer]
+  });
+  map.addControl(overviewMapControl);
+
+  // 显示小数点经纬度
+  map.on('pointermove', (evt) => {
+      const [lon, lat] = toLonLat(map.getCoordinateFromPixel(evt.pixel));
+      document.getElementById('mouse-position').innerHTML = `经度: ${lon.toFixed(6)}°,  纬度: ${lat.toFixed(6)}°`;
+    });
 };
-const searchParam = reactive({
-  base: undefined,
-  station: undefined,
-})
 
-interface Mark {
-  label: string
-}
+// 监听 isEagleEyeOn 变化,触发折叠状态
+watch(isEagleEyeOn, (newValue) => {
+  overviewMapControl.setCollapsed(!newValue);
+});
+// 鹰眼图层的初始化
+const initializeOverviewMap = () => {
+  const overviewMapLayer = new TileLayer({
+    source: new TileWMS({
+      url: 'http://192.168.43.77:8080/geoserver/wms',
+      params: {
+        'LAYERS': 'basemap:province',
+        'TILED': true,
+        'FORMAT': 'image/png',
+        'TRANSPARENT': true,
+        'ENCODING':'UTF-8'
+      },
+      serverType: 'geoserver'
+    })
+  })
+};
+
+// 查询所有人工要素字典表
+const elementList =ref<any>([])
+const getAllRgDataList = async () => {
+  const { data } = await getRgDataList();
+  elementList.value = data.list
+  console.log("所有人工要素:",elementList.value)
+};
+
+// 存放选中要素列表
+const copiedCustomizeColumns = ref<any>([]);
+// 要素的选中和取消
+const toggleSelection = (item) => {
+  item.isSelected = !item.isSelected;
+
+  if (item.isSelected) {
+    // 添加选中的要素
+    copiedCustomizeColumns.value.push(item);
+  } else {
+    // 取消选中的要素
+    copiedCustomizeColumns.value = copiedCustomizeColumns.value.filter(column => column.data_id !== item.data_id);
+  }
+  console.log("copiedCustomizeColumns.value:", copiedCustomizeColumns.value);
+
+  // 重新调用 getStations 更新地图上的显示内容
+  getStations(platformList.value);
+};
+
+
+  // 在组件挂载时初始化地图
+  onMounted(() => {
+    getAllRgDataList(); // 存放人工选择的要素列表
+    initializeMap();
+    getPlatforms();
+  });
 
-const baseOptions = ref([{
-  value: 0,
-  label: '基地1',
-},
-  {
-    value: 1,
-    label: '基地2',
-  }])
-
-const stationOptions = ref([{
-  value: 0,
-  label: 'M1986',
-},
-  {
-    value: 1,
-    label: 'M1987',
-  }])
 </script>
 
+
+
+
+<style>
+.ol-overviewmap {
+    right: 0.5em!important;
+    bottom: 0.5em!important;
+    left: initial!important;
+}
+</style>
+
 <style scoped>
+.map {
+  width: 100%;
+  /* height: 100vh; */
+  height: calc(100vh - 50px); /* 使用 calc() 来确保地图占满视口高度,减去上方的固定高度 */
+}
+
+.slider-scale {
+  width: 720px;
+  margin-top: -10px;
+}
+
+.gis-bottom-box {
+  display: flex;
+  align-items: center;
+  }
+
+/* 经纬度所在位置 */
+.mouse-position {
+  position: absolute;
+  bottom: 0px;
+  right: 1px;
+  background-color: rgba(255, 255, 255, 0.7);
+  padding: 3px;
+  border: 1px solid #ccc;
+  font-size: 14px;
+  z-index: 1000;
+}
 </style>

Деякі файли не було показано, через те що забагато файлів було змінено