当前位置: 首页 > news >正文

Cesium快速入门34:3dTile高级样式设置

这一节,我们把“3D Tiles 样式”再升一级——按“距离中心”做渐变圆
以广州塔为圆心,离得越近颜色越红,越远越淡,甚至直接隐藏,全程只用官方样式语言,不动顶点、不写 GLSL。


一、思路:把“距离”算出来,再当条件用

3D Tiles 样式支持内联表达式,可调用distance()直接算经纬度平面距离。
步骤:

  1. defines先算好距离,存成变量;

  2. show用距离裁掉外围建筑;

  3. color用距离做渐变色。


二、定义中心点 & 距离变量

const osmtile = Cesium.createOsmBuildings(); const osmBuildings = viewer.scene.primitives.add(osmtile); /* 广州塔经纬度(vec2 格式) */ const center = [113.31914, 23.109]; osmtile.style = new Cesium.Cesium3DTileStyle({ defines: { distance: "distance(vec2(${feature['cesium#longitude']}, ${feature['cesium#latitude']}), vec2(113.31914, 23.109))", }, /* 距离 > 0.02° 的直接隐藏 */ show: "Number(${distance}) < 0.02", /* 距离渐变:越近越红,越远越淡 */ color: { conditions: [ [ "${distance} !== undefined && ${distance} !== null && Number(${distance}) < 0.01", "rgba(255, 0, 0, 0.9)", // 内圈:鲜红 ], [ "${distance} !== undefined && ${distance} !== null && Number(${distance}) < 0.02", "rgba(0, 255, 255, 0.5)", // 外圈:青半透明 ], ["true", "rgba(255, 255, 255, 0.2)"], // 兜底:淡白 ], }, });
  • distance()返回的是“弧度”单位,0.01 ≈ 1 km,按需调阈值;

  • 先做!== undefined && !== null判断,避免空特征报错;

  • 条件数组从上到下匹配,命中即停,最后一条必须是兜底。


三、点击 InfoBox 报错?给 iframe 开 sandbox

鼠标点建筑时,Cesium 默认用iframe 内嵌 InfoBox,如果里层脚本被拦截,就会报 “Sandbox” 错。
解决:事后给 iframe 加权限即可。

/* 允许 iframe 里执行脚本、弹窗、表单 */ const iframe = document.getElementsByClassName("cesium-infoBox-iframe")[0]; iframe.setAttribute( "sandbox", "allow-scripts allow-same-origin allow-popups allow-forms" );

刷新后再点建筑,信息窗乖乖弹出,再无红色报错。


四、常用“距离”玩法速记

场景关键表达式说明
圆环渐变distance(vec2(lon, lat), vec2(cx, cy))平面距离,单位弧度
球形遮挡acos(dot(normalize(pos), normalize(center)))立体角,可做“地平线”遮挡
高度分层${feature['cesium#estimatedHeight']}按楼高染色

五、小结 & 预告

  • defines里先算好距离,后面show / color直接复用,避免重复计算。

  • 条件写法 = “先判空 + 再比大小 + true 兜底”,顺序别反。

  • 点击报错 = 给 InfoBox iframe 开 sandbox,一句话解决。

下节课,我们让“距离圆”随时间脉冲,再给楼顶加“夜间霓虹”,完成真正的“动态雷达圈”城市皮肤!

http://www.jsqmd.com/news/150900/

相关文章:

  • 【人工智能学习-AI-MIT公开课-第5. 搜索:最优、分支限界、A**】
  • 企业社会责任报告:ESG数据整理通过TensorRT自动汇总
  • jflash下载入门必看:新手快速上手配置指南
  • 并购尽职调查助手:风险点排查借助TensorRT全面覆盖
  • 市场营销策划AI:创意方案生成依托TensorRT快速迭代
  • RK3568 Android14 调试 RTL8211F 千兆以太网 (RGMII)
  • 促销活动效果预测:转化率模型通过TensorRT提前评估
  • 当你跌入深渊退无可退的时候,眼前就只剩下向上这一条路了
  • 三句话,复盘我的2025年网安学习之路
  • STM32CubeMX启动无反应?通俗解释新手应对方法
  • 跨平台CubeMX安装对比:Windows/Linux/IDE配置差异解析
  • 银行智能投顾服务:投资建议生成模型通过TensorRT快速响应
  • 【钓鱼攻防】浅谈制作免杀word文档钓鱼
  • 专利侵权比对工具:文本相似度分析在TensorRT上高效执行
  • 物流路线智能规划:多目标优化算法在TensorRT上求解
  • 工业控制场景下Keil MDK下载及权限设置说明
  • 工控场景下STLink驱动安装失败原因全面讲解
  • 包装设计推荐:视觉元素搭配AI通过TensorRT提供建议
  • MOSFET驱动电路设计实战入门:简单项目应用示例
  • 「智效跃迁,架构无界」2025 腾讯云架构师峰会金句大全
  • 多用户工控终端下STM32CubeMX打不开:账户权限问题深度剖析
  • 基于python宠物医院药品管理系统的设计与实现_5xeq5a9b
  • STM32CubeMX配置ST7735:实战案例详解
  • 港口物流调度AI:集装箱分配方案在TensorRT上快速生成
  • 矿产资源勘探AI:重力磁场模式识别借助TensorRT提效
  • 保险理赔自动化:病历文本理解借助TensorRT提升处理效率
  • 电感和电容特性
  • 基于python开发的送货上门系统 _1rh1je1n
  • 文物保护修复辅助:材质分析AI通过TensorRT提供参考方案
  • 短视频内容标签生成:CLIP模型经TensorRT优化批量打标