mirror of
				https://github.com/jiawanlong/Cesium-Examples.git
				synced 2025-11-04 01:04: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
 |