Cesium快速入门27:GeoJson自定义样式

上一节我们把 GeoJSON 成功"搬"进了地球,但默认白膜+黑边看起来总归有点"素"。

今天给它来点颜色------随机染色、挤出高度、取消边框,再顺手把属性数据掏出来,让地图既好看又有"统计味儿"。


一、拿到每个实体,再"穿衣戴帽"

GeoJsonDataSource.load 返回的是 Promise,解包后就能遍历里面所有实体:

复制代码
scGeoJson.then((dataSource) => {
  viewer.dataSources.add(dataSource);

  /* 遍历每个省份/区域 */
  dataSource.entities.values.forEach((entity) => {
    /* 1. 随机颜色 + 半透明 */
    entity.polygon.material = Cesium.Color.fromRandom({ alpha: 0.5 });

    /* 2. 取消边框,干净利落 */
    entity.polygon.outline = false;

    /* 3. 挤出 3 万米,立刻"立"起来 */
    entity.polygon.extrudedHeight = 30000.0;

    /* 4. 顺便打印名字,看看谁是谁 */
    console.log(entity.properties.name._value);
  });
});

刷新地球------瞬间五颜六色,像积木一样全站了起来。


二、颜色、高度、边框,想怎么玩就怎么玩

目标 字段 示例
换颜色 polygon.material 纯色、图片、甚至自定义 MaterialProperty
去边框 polygon.outline false 秒变"无框"
挤出高度 polygon.extrudedHeight 30000.0(单位:米)
抬到空中 polygon.height 先整体抬,再挤出,可做"悬浮"效果

三、高度别乱随机------用"有意义"的数据更香

GeoJSON 里自带属性,例如人口、GDP、确诊人数,全藏在 entity.properties 里:

复制代码
// 拿"北京市"的属性示例
const name = entity.properties.name._value;        // "北京市"
const level = entity.properties.level._value;      // "province"
// 你可以把"人口"当成挤出高度,疫情人数映射成颜色......

思路:

  • 人口越多 → extrudedHeight 越高;

  • 确诊越多 → 颜色越红;

  • GDP 越高 → 透明度越低,金光闪闪。

    这样"好看"瞬间升级为"可视化叙事"。

相关推荐
kyriewen4 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒4 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
小林攻城狮4 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦5 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer5 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队5 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY5 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_5 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏6 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
SkyWalking中文站6 小时前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控