Cesium-Examples/examples/cesiumEx/ocean/layers/LayerWindField/DataWindField.js
2025-03-11 17:51:04 +08:00

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