mirror of
				https://github.com/jiawanlong/Cesium-Examples.git
				synced 2025-11-04 09:14:17 +00:00 
			
		
		
		
	
		
			
	
	
		
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								// 风流线层数据获取
							 | 
						||
| 
								 | 
							
								import { UtilsHttpQuery as async } from '@/utils/Utils'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class DataWindField {
							 | 
						||
| 
								 | 
							
								  constructor(config = {}) {
							 | 
						||
| 
								 | 
							
								    this._access_token = config.access_token ? config.access_token : ''
							 | 
						||
| 
								 | 
							
								    this._params = {}
							 | 
						||
| 
								 | 
							
								    this._promise = {}
							 | 
						||
| 
								 | 
							
								    this._status = 'idle' // idle pendding
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  get access_token() {
							 | 
						||
| 
								 | 
							
								    return this._access_token
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  set access_token(val) {
							 | 
						||
| 
								 | 
							
								    if (!val || typeof val != 'string') return
							 | 
						||
| 
								 | 
							
								    this._access_token = val
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  async request(options = {}) {
							 | 
						||
| 
								 | 
							
								    this._params = this.buildParams(options)
							 | 
						||
| 
								 | 
							
								    this._promise = async({
							 | 
						||
| 
								 | 
							
								      method: 'GET',
							 | 
						||
| 
								 | 
							
								      url: this._params.url
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      this._status = 'pendding'
							 | 
						||
| 
								 | 
							
								      let res = await Promise.all([this._promise])
							 | 
						||
| 
								 | 
							
								      this._status = 'idle'
							 | 
						||
| 
								 | 
							
								      let result = res[0]
							 | 
						||
| 
								 | 
							
								      if (result.data.code != 200) return []
							 | 
						||
| 
								 | 
							
								      if (!result.data.data) result.data.data = {}
							 | 
						||
| 
								 | 
							
								      let data = result.data.data
							 | 
						||
| 
								 | 
							
								      let uvData = this.buildResult(data)
							 | 
						||
| 
								 | 
							
								      return uvData
							 | 
						||
| 
								 | 
							
								    } catch (error) {
							 | 
						||
| 
								 | 
							
								      return []
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  // async request(options = {}) {
							 | 
						||
| 
								 | 
							
								  //   this._params = this.buildParams(options);
							 | 
						||
| 
								 | 
							
								  //   this._promise = async({
							 | 
						||
| 
								 | 
							
								  //     method: "POST",
							 | 
						||
| 
								 | 
							
								  //     url: this._params.url,
							 | 
						||
| 
								 | 
							
								  //     data: this._params.query,
							 | 
						||
| 
								 | 
							
								  //   });
							 | 
						||
| 
								 | 
							
								  //   try {
							 | 
						||
| 
								 | 
							
								  //     this._status = "pendding";
							 | 
						||
| 
								 | 
							
								  //     let res = await Promise.all([this._promise]);
							 | 
						||
| 
								 | 
							
								  //     this._status = "idle";
							 | 
						||
| 
								 | 
							
								  //     let result = res[0];
							 | 
						||
| 
								 | 
							
								  //     if (result.data.code != 200) return [];
							 | 
						||
| 
								 | 
							
								  //     if (!result.data.data) result.data.data = {};
							 | 
						||
| 
								 | 
							
								  //     let data = result.data.data;
							 | 
						||
| 
								 | 
							
								  //     let uvData = this.buildResult(data);
							 | 
						||
| 
								 | 
							
								  //     return uvData;
							 | 
						||
| 
								 | 
							
								  //   } catch (error) {
							 | 
						||
| 
								 | 
							
								  //     return [];
							 | 
						||
| 
								 | 
							
								  //   }
							 | 
						||
| 
								 | 
							
								  // }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  cancel() {
							 | 
						||
| 
								 | 
							
								    if (this._status == 'pendding') {
							 | 
						||
| 
								 | 
							
								      this._promise.cancel()
							 | 
						||
| 
								 | 
							
								      this._status = 'idle'
							 | 
						||
| 
								 | 
							
								      this._promise = null
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  buildParams(options = {}) {
							 | 
						||
| 
								 | 
							
								    if (!options.query) options.query = {}
							 | 
						||
| 
								 | 
							
								    let _def = {
							 | 
						||
| 
								 | 
							
								      url: `http://111.199.67.88:18080/20230425toubiao/WindDirection_202008280000.json`
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      url: options.url || _def.url
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // buildParams(options = {}) {
							 | 
						||
| 
								 | 
							
								  //   if (!options.query) options.query = {};
							 | 
						||
| 
								 | 
							
								  //   let _def = {
							 | 
						||
| 
								 | 
							
								  //     url: `http://69.230.250.151:7012/PIE-Engine-Earth-ECLF/digitalshow/v2/getDynamicStreamline`,
							 | 
						||
| 
								 | 
							
								  //     query: {
							 | 
						||
| 
								 | 
							
								  //       date: "202110251800",
							 | 
						||
| 
								 | 
							
								  //       element: "UU;VV",
							 | 
						||
| 
								 | 
							
								  //       level: "9999",
							 | 
						||
| 
								 | 
							
								  //       modelType: "ec",
							 | 
						||
| 
								 | 
							
								  //       // elat: "90",
							 | 
						||
| 
								 | 
							
								  //       // elng: "180",
							 | 
						||
| 
								 | 
							
								  //       // slat: "-90",
							 | 
						||
| 
								 | 
							
								  //       // slng: "-180"
							 | 
						||
| 
								 | 
							
								  //     },
							 | 
						||
| 
								 | 
							
								  //   };
							 | 
						||
| 
								 | 
							
								  //   return {
							 | 
						||
| 
								 | 
							
								  //     url: options.url || _def.url,
							 | 
						||
| 
								 | 
							
								  //     query: {
							 | 
						||
| 
								 | 
							
								  //       ..._def.query,
							 | 
						||
| 
								 | 
							
								  //       ...options.query,
							 | 
						||
| 
								 | 
							
								  //     },
							 | 
						||
| 
								 | 
							
								  //   };
							 | 
						||
| 
								 | 
							
								  // }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  buildResult(data) {
							 | 
						||
| 
								 | 
							
								    let field = []
							 | 
						||
| 
								 | 
							
								    let w = data.gridWidth
							 | 
						||
| 
								 | 
							
								    let h = data.gridHeight
							 | 
						||
| 
								 | 
							
								    let i = 0
							 | 
						||
| 
								 | 
							
								    for (let x = 0; x < w; x++) {
							 | 
						||
| 
								 | 
							
								      field[x] = []
							 | 
						||
| 
								 | 
							
								      for (let y = 0; y < h; y++) {
							 | 
						||
| 
								 | 
							
								        let vx = Number(data.field[i++])
							 | 
						||
| 
								 | 
							
								        let vy = Number(data.field[i++])
							 | 
						||
| 
								 | 
							
								        let v = { x: vx, y: vy }
							 | 
						||
| 
								 | 
							
								        field[x][y] = v
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let ydatas = [],
							 | 
						||
| 
								 | 
							
								      xdatas = []
							 | 
						||
| 
								 | 
							
								    for (let y = data.gridHeight - 1; y >= 0; y--) {
							 | 
						||
| 
								 | 
							
								      for (let x = 0; x < data.gridWidth; x++) {
							 | 
						||
| 
								 | 
							
								        // xdatas.push(field[x][y].x / 100)
							 | 
						||
| 
								 | 
							
								        // ydatas.push(field[x][y].y / 100)
							 | 
						||
| 
								 | 
							
								        xdatas.push(field[x][y].x)
							 | 
						||
| 
								 | 
							
								        ydatas.push(field[x][y].y)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    let header = {
							 | 
						||
| 
								 | 
							
								      nx: data.gridWidth,
							 | 
						||
| 
								 | 
							
								      ny: data.gridHeight,
							 | 
						||
| 
								 | 
							
								      // "nx": 69,
							 | 
						||
| 
								 | 
							
								      // "ny": 44,
							 | 
						||
| 
								 | 
							
								      basicAngle: 0,
							 | 
						||
| 
								 | 
							
								      subDivisions: 0,
							 | 
						||
| 
								 | 
							
								      lo1: data.x0,
							 | 
						||
| 
								 | 
							
								      la1: data.y0,
							 | 
						||
| 
								 | 
							
								      lo2: data.x1,
							 | 
						||
| 
								 | 
							
								      la2: data.y1,
							 | 
						||
| 
								 | 
							
								      dx: 1,
							 | 
						||
| 
								 | 
							
								      dy: 1
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    let uData = xdatas
							 | 
						||
| 
								 | 
							
								    let vData = ydatas
							 | 
						||
| 
								 | 
							
								    return [header, uData, vData]
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default DataWindField
							 |