cesium 实战系列之风场进阶版
在此前我写过一个关于风场的一个文章今天的这个是在区域风场的基础上做的一个案例可以动态改变例子个数、线宽度、移动速度、颜色和存活时间先看效果风场进阶版代码实现div classwindycanvas_list div classwindycanvas_row div classname粒子个数/div div classslidercont div idwindy_count classsliderbaritem/div /div /div div classwindycanvas_row div classname线宽度/div div classslidercont div idwindy_linewidth classsliderbaritem/div /div /div div classwindycanvas_row div classname移动速率/div div classslidercont div idwindy_speed classsliderbaritem/div /div /div div classwindycanvas_row div classname存活时间/div div classslidercont div idwindy_age classsliderbaritem/div /div /div div classwindycanvas_row div classwindycanvas_formcont span classwindycanvas_span颜色/span input idpoint_color value#FFFFFF classwindycanvas_formitem windycanvas_picker readonly div classwindycanvas_colorpanelbg stylebackground-color:#FFFFFF/div /div /div /divvar windy null, windycanvas null; var resizeCanvas function () { if (windycanvas null) { return; } windycanvas.width $(#mapDivWrap).width(); windycanvas.height $(#mapDivWrap).height(); if (windy) { windy._resize(windycanvas.width, windycanvas.height); } } var drawCanvas function () { windycanvas document.createElement(canvas); windycanvas.setAttribute(id, windycanvas); windycanvas.style.position absolute windycanvas.style[pointer-events] none; windycanvas.style[left] 0px; windycanvas.style[top] 0px; windycanvas.style[z-index] 10; windycanvas.style.width window.innerWidth; windycanvas.style.height window.innerHeight; document.getElementById(mapDivWrap).appendChild(windycanvas); $.ajax({ type: get, url: windy/data/data2.json, dataType: json, success: function (response) { resizeCanvas(); window.onresize resizeCanvas; //风场的参数配置除了canvas/viewer是必传项其他可以不传参数含义见windy.js var params { viewer: viewer, canvas: windycanvas, canvasWidth: $(#mapDivWrap).width(), canvasHeight: $(#mapDivWrap).height(), speedRate: 5000, particlesNumber: 3000, maxAge: 120, frameRate: 10, color: #FFFFFF, lineWidth: 1, }; windy new CanvasWindy(response, params); }, error: function (errorMsg) { console.log(请求数据失败!); } }); }; //加载暗黑背景底图 viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({ url: http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer, baseLayerPicker: false })); viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(105.00000, 35.95551, 18654200), orientation: { heading: Cesium.Math.toRadians(360), pitch: Cesium.Math.toRadians(-90), roll: 0.0 } }); //加载风场图 setTimeout(function () { drawCanvas(); }, 500); var canrefresh -1, canrefresh2 -1;//拖动粒子个数和存活时间滑块时不能随时刷新需要隔一段时间刷新避免卡顿 layui.use(slider, function () { var slider layui.slider; slider.render({ elem: #windy_count, min: 100, max: 20000, value: 3000, tips: false, input: true, theme: #3b86ca, change: function (value) { if (windy) { clearTimeout(canrefresh); windy.particlesNumber value; canrefresh setTimeout(function () { windy.redraw(); }, 500); } } }); }); layui.use(slider, function () { var slider layui.slider; slider.render({ elem: #windy_linewidth, min: 1, max: 10, value: 1, tips: false, input: true, theme: #3b86ca, change: function (value) { if (windy) { windy.lineWidth value; } } }); }); layui.use(slider, function () { var slider layui.slider; slider.render({ elem: #windy_speed, min: 1, max: 100, value: 50, tips: false, input: true, theme: #3b86ca, change: function (value) { if (windy) { windy.speedRate (100 - (value 99 ? 99 : value)) * 100; windy._calcStep(); } } }); }); layui.use(slider, function () { var slider layui.slider; slider.render({ elem: #windy_age, min: 10, max: 500, value: 120, tips: false, input: true, theme: #3b86ca, change: function (value) { if (windy) { clearTimeout(canrefresh2); windy.maxAge value; canrefresh2 setTimeout(function () { windy.redraw(); }, 500); } } }); }); // 颜色选择插件初始化 $(.windycanvas_picker).each(function (inx, dom) { $(dom).ColorPicker({ color: $(dom).val(), pickerDom: $(dom), pickerDomInx: 0, onShow: function (colpkr) { $(colpkr).fadeIn(300); return false; }, onHide: function (colpkr) { $(colpkr).fadeOut(300); return false; }, //onchange方法改过pickerdom,inx是新增的属性 //pickerdom当前点击节点inx就是pickerDomInx属性跟for循环中i相同用来更新颜色之后同步修改颜色数组 onChange: function (hsb, hex, rgb, pickerdom, inx) { var colorvl # hex; $(pickerdom).val(colorvl); $(pickerdom).next().css({ background-color: colorvl }); if (windy) { windy.color colorvl; } } }); });

相关新闻

LLM推理GPU利用率低的原因分析与优化策略

LLM推理GPU利用率低的原因分析与优化策略

1. 从“GPU利用率10%”的困惑说起如果你正在部署或使用一个大语言模型(LLM),比如Llama、ChatGLM或者Qwen,然后满怀期待地打开nvidia-smi,看到的GPU利用率(Volatile GPU-Util)却只有个位数或者可…

2026/10/20 0:31:00 阅读更多 →
构建AI应用统一存储架构:Vault系统解决多模态数据管理难题

构建AI应用统一存储架构:Vault系统解决多模态数据管理难题

1. 项目缘起:当AI项目需要“记忆”时最近在折腾几个AI应用项目,从简单的智能客服到复杂的多模态内容生成平台,我发现一个绕不开的痛点:状态管理。这里的“状态”不是指前端组件的状态,而是指AI应用在运行过程中产生的、…

2026/10/17 23:29:27 阅读更多 →
SKILL脚本与外部系统对接:手写接口文档的核心要素与工程实践

SKILL脚本与外部系统对接:手写接口文档的核心要素与工程实践

1. 项目概述:为什么“手写”接口文档对接SKILL如此重要?在软件开发领域,尤其是涉及硬件驱动、EDA(电子设计自动化)工具二次开发或者特定工业软件的场景里,你可能会遇到一个叫“SKILL”的语言。它不是指个人…

2026/10/19 22:52:49 阅读更多 →

最新新闻

DeskcommCRM实战:轻量级客户管理与销售跟进全流程落地指南

DeskcommCRM实战:轻量级客户管理与销售跟进全流程落地指南

1. 项目概述:DeskcommCRM 到底是什么,以及为什么值得关注这两年市面上叫 CRM 的产品多得数不过来,但绝大多数都陷入了一个怪圈:功能越做越重,权限越加越细,你要是只为了管好手头几百个客户,得先…

2026/10/19 23:47:06 阅读更多 →
以沟通为核心的轻量级CRM系统设计与实践

以沟通为核心的轻量级CRM系统设计与实践

一个叫 DeskcommCRM 的项目,听起来有点像某个内部系统的代号,但实际上它代表了一类特别值得聊的东西:以“沟通”为核心的客户关系管理工具。我一开始接触这个项目名的时候,第一反应是“Deskcomm”可能是 Desk Communication 的缩写…

2026/10/19 23:47:06 阅读更多 →
从线程池失控到全局限流:高并发系统稳定性实战指南

从线程池失控到全局限流:高并发系统稳定性实战指南

1. 并发失控的第一现场:线程池是怎么被击穿的先说一个我实际排查过的案例场景。某公司核心交易链路的订单服务,平时性能表现很稳定,高峰期单机支撑上千QPS没有任何压力。但一次大促活动中,下游的库存服务因为数据库连接池被打满&a…

2026/10/19 23:39:50 阅读更多 →
STC单片机范例程序实战指南:从点灯到多外设工程搭建

STC单片机范例程序实战指南:从点灯到多外设工程搭建

简介:这是一份面向嵌入式初学者与单片机开发者的STC单片机C语言范例程序合集,围绕ADC采样、串口通信、EEPROM读写、ISP在系统编程、时钟中断、端口测试及优化编程思想等核心功能展开,适合用于课程实验、自学练手与项目参考。资源包共612个文件…

2026/10/19 23:39:50 阅读更多 →
Kafka全链路性能调优:吞吐量与延迟的实战权衡

Kafka全链路性能调优:吞吐量与延迟的实战权衡

前阵子业务告警群里又炸了——消费延迟从平时的几百毫秒一路飙到分钟级,P99 延迟曲线在监控面板上直接拉成一条陡坡。接手这套 Kafka 系统两年,类似的戏码每隔一阵就重演一次。与其每次都临时救火,不如把全链路参数优化这件事系统捋一遍。这篇…

2026/10/19 23:37:47 阅读更多 →
ZXing.Net 0.16.8.0 条码识别实战:从解码链路到性能调优

ZXing.Net 0.16.8.0 条码识别实战:从解码链路到性能调优

简介:ZXing.Net.0.16.8.0 是面向 C# 与 Unity 开发者的开源条码处理库,基于 Zebra Crossing 项目,可在 .NET 框架与 Unity 引擎中实现 QR 码、Aztec、Code 128、EAN 等多种条码的读取与生成。开发者只需调用少量 API 即可为桌面应用、移动端或…

2026/10/19 23:37:47 阅读更多 →

日新闻

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →