<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>
ol4 wind-layer
</title>
<!--<link rel="stylesheet" href="dat.gui.css">-->
<script src="ol.js">
</script>
<link rel="stylesheet" href="ol.css">
<script src="ol-wind.js">
</script>
<style type="text/css">
html, body { margin: 0; height: 100%; width: 100% }
.container { width: 100%; height: 100% }
</style>
<body>
<div id="map" class="container">
</div>
<script>
const map = new ol.Map({
target: 'map',
view: new ol.View({
center: [113.53450137499999, 34.44104525],
// center: ol.proj.fromLonLat([113.53450137499999, 34.44104525]),
zoom: 5,
projection: 'EPSG:4326',
}),
layers: [new ol.layer.Tile({
source: new ol.source.OSM({
url: '//{a-d}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
})
})],
});
let layer;
// https://sakitam-fdd.github.io/wind-layer/data/wind.json
fetch('data.json').then(res =>res.json()).then(res =>{
// const range = vectorField.range || [0.02, 28.21618329965979];
// const scale = chroma.scale('OrRd').domain(range);
const windLayer = new OlWind.WindLayer(res, {
windOptions: {
/*colorScale: (m) => {
console.log(m);
return '#ff473c';
},*/
// colorScale: scale,
colorScale: ["rgb(36,104, 180)", "rgb(60,157, 194)", "rgb(128,205,193 )", "rgb(151,218,168 )", "rgb(198,231,181)", "rgb(238,247,217)", "rgb(255,238,159)", "rgb(252,217,125)", "rgb(255,182,100)", "rgb(252,150,75)", "rgb(250,112,52)", "rgb(245,64,32)", "rgb(237,45,28)", "rgb(220,24,32)", "rgb(180,0,35)"],
/*frameRate: 16,
maxAge: 60,
globalAlpha: 0.9,*/
//velocityScale: 1 / 500,
velocityScale: 1 / 30,
//paths: 800,
paths: 3000,
// particleMultiplier: 0.3 * 10,
},
map: map,
});
analysisWindyData(res);
console.log(map, windLayer);
layer = windLayer;
// layer.appendTo(map);
map.addLayer(windLayer);
map.on('singleclick', e =>{
var details = getWindyDetail(e.coordinate);
console.log(details);
alert(' 风向:' + details.direction + '\n 风级:' + details.level + '\n 风速:' + details.speed);
});
});
var allgrid = [];
function analysisWindyData(windydata) {
var p = 0;
var east, north;
if (windydata[0].header.parameterNumberName == "eastward_wind") {
east = windydata[0];
north = windydata[1];
} else {
east = windydata[1];
north = windydata[0];
}
for (var j = 0; j < north.header.ny; j++) {
var row = [];
for (var i = 0; i < north.header.nx; i++, p++) {
row[i] = [east.data[p], north.data[p]];
}
allgrid[j] = row;
}
}
function getWindyDetail(coord) {
var lng = coord[0];
var lat = coord[1];
// 与格网序列的数据转换
if (lng >= 0) {
lng = Math.floor(lng);
} else {
lng = 360 + Math.floor(lng)
}
lat = 90 - Math.floor(lat);
// 获取对应的格网序列
var xlength = lng;
var ylength = lat;
var xdata, ydata;
xdata = allgrid[Math.abs(ylength)][Math.abs(xlength)][0];
ydata = allgrid[Math.abs(ylength)][Math.abs(xlength)][1];
console.log(xdata);
console.log(ydata);
if (typeof xdata != "number" || typeof ydata != "number") {
console.error("暂无该区域风向数据!");
return;
}
var v = Math.sqrt(Math.pow(xdata, 2) + Math.pow(ydata, 2));
var angle = getWindyAngle(xdata, ydata);
var result = {
"direction": getWindyDirection(angle),
"level": getWindyLevel(v),
"speed": v.toFixed(2)
};
return result;
}
function getWindyDirection(angle) {
if ((angle >= 0 && angle <= 22.5) || (angle <= 360 && angle > 337.5)) {
return "北风";
}
if (angle <= 337.5 && angle > 292.5) {
return "西北风";
}
if (angle <= 292.5 && angle > 247.5) {
return "西风";
}
if (angle <= 247.5 && angle > 202.5) {
return "西南风";
}
if (angle <= 202.5 && angle > 157.5) {
return "南风";
}
if (angle <= 157.5 && angle > 112.5) {
return "东南风";
}
if (angle <= 112.5 && angle > 67.5) {
return "东风";
}
if (angle <= 67.5 && angle > 22.5) {
return "东北风";
}
}
function getWindyAngle(u, v) {
var fx = 0;
if (u > 0 & v > 0) {
fx = 270 - Math.atan(v / u) * 180 / Math.PI;
} else if (u < 0 & v > 0) {
fx = 90 - Math.atan(v / u) * 180 / Math.PI;
} else if (u < 0 & v < 0) {
fx = 90 - Math.atan(v / u) * 180 / Math.PI;
} else if (u > 0 & v < 0) {
fx = 270 - Math.atan(v / u) * 180 / Math.PI;
} else if (u == 0 & v > 0) {
fx = 180;
} else if (u == 0 & v < 0) {
fx = 0;
} else if (u > 0 & v == 0) {
fx = 270;
} else if (u < 0 & v == 0) {
fx = 90;
} else if (u == 0 & v == 0) {
fx = 999.9;
}
return fx;
}
function getWindyLevel(v) {
if (v < 0.3) {
return 0;
}
if (v >= 0.3 && v < 1.6) {
return 1;
}
if (v >= 1.6 && v < 3.4) {
return 2;
}
if (v >= 3.4 && v < 5.5) {
return 3;
}
if (v >= 5.5 && v < 8.0) {
return 4;
}
if (v >= 8.0 && v < 10.8) {
return 5;
}
if (v >= 10.8 && v < 13.9) {
return 6;
}
if (v >= 13.9 && v < 17.2) {
return 7;
}
if (v >= 17.2 && v < 20.8) {
return 8;
}
if (v >= 20.8 && v < 24.5) {
return 9;
}
if (v >= 24.5 && v < 28.5) {
return 10;
}
if (v >= 28.5 && v < 32.7) {
return 11;
}
if (v >= 32.7 && v < 37.0) {
return 12;
}
if (v >= 37.0 && v < 41.5) {
return 13;
}
if (v >= 41.5 && v < 46.2) {
return 14;
}
if (v >= 46.2 && v < 51.0) {
return 15;
}
if (v >= 51.0 && v < 56.1) {
return 16;
}
if (v >= 56.1 && v < 61.2) {
return 17;
}
if (v >= 61.2) {
return 18;
}
}
//更新风场windLayer图层数据
function updateWinLayer(windLayer){
if(windLayer!=undefined){
windLayer.setData(result.content);
windLayer.setMap(map);
windLayer.start();
return;
}
}
//设置风场windLayer图层显示或隐藏
function setWinLayerVisible(windLayer,visibleState){
if(windLayer!=undefined){
windLayer.setVisible(visibleState);//false隐藏,true显示
}
}
</script>
</body>
</html>
<!--参考https://blog.csdn.net/u010065726/article/details/106338194 ; https://blog.csdn.net/l329831342/article/details/119185174; https://github.com/blissvisitor/wind-layer; github复制仓库https://gitee.com/FOF/wind-layer-->
没有合适的资源?快使用搜索试试~ 我知道了~
openlayers扩展:风场可视化(wind-layer)
共8个文件
css:2个
js:2个
map:1个
需积分: 0 24 下载量 188 浏览量
2023-05-18
16:18:04
上传
评论
收藏 572KB ZIP 举报
温馨提示
openlayers扩展:风场可视化(wind-layer)。 能计算风速、风向、风级 有更新风场数据,显示/隐藏风场图层的方法 放IIS或nginx就行运行
资源推荐
资源详情
资源评论
收起资源包目录
ol-wind.zip (8个子文件)
ol-wind.js.map 65KB
ol-wind.js 26KB
dat.gui.css 6KB
data.json 2.46MB
olwindtest.html 7KB
data.json2 189KB
ol.css 3KB
ol.js 492KB
共 8 条
- 1
资源评论
cwr888
- 粉丝: 494
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功