You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cesium的GeoJsonDataSource时无法控制strokeWidth的原因

问题原因

你设置的strokeWidth:20是屏幕像素单位,但你的多边形覆盖了跨30经度、15纬度的超大区域,当相机处于默认全局视角时,整个多边形在屏幕上的占比极小,20像素的轮廓线相对于多边形的屏幕尺寸就会显得非常细。

另外,Cesium的GeoJsonDataSource加载多边形后,轮廓线宽度是固定像素值,不会随相机缩放自动调整视觉比例——相机拉得越远,线条看起来就越窄。

解决办法

1. 聚焦到多边形区域

在加载完成后添加相机缩放代码,让镜头拉近到多边形,20像素的轮廓就能正常显示:

source.load(geometry, {
    stroke: new Cesium.Color(1, 1, 0, 1),
    fill: new Cesium.Color(1, 0, 0, .1),
    strokeWidth: 20,
}).then( (result) => {
  viewer.dataSources.add(source);
  // 让相机聚焦到加载的数据源
  viewer.zoomTo(source);
})

2. 改用实体方式创建多边形(更灵活控制轮廓)

如果需要在不同缩放级别保持轮廓的视觉宽度,可以直接创建实体,通过outlineWidth设置,还能结合动态逻辑调整:

viewer.entities.add({
  polygon: {
    hierarchy: Cesium.Cartesian3.fromDegreesArray([
      -120, 30,
      -120, 45,
      -90, 45,
      -90, 30,
      -120, 30
    ]),
    material: new Cesium.Color(1, 0, 0, 0.1),
    outline: true,
    outlineColor: new Cesium.Color(1, 1, 0, 1),
    outlineWidth: 20,
  }
});
// 聚焦到实体
viewer.zoomTo(viewer.entities);

3. 注意WebGL线宽限制

部分浏览器的WebGL实现对线条宽度有上限(通常为1-16像素),如果设置的strokeWidth超过这个上限,实际显示会被截断。如果需要更宽的轮廓,可以用"双线"技巧:绘制两层多边形,内层填充,外层用稍大的多边形模拟轮廓,或者用材质属性实现宽线条效果。


内容的提问来源于stack exchange,提问作者Eric G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:45:15