Cesium加载地图提示RangeError:Invalid of array List

博客讲述了加载区域地图时渲染失败的问题。加载部分区域正常,排错发现是出问题区域的数据问题。打断点得知是地图图标模型经纬度数据有误,查看数据库发现是拖动图标存经纬度时数据格式出错,存为了NaN。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现一个新的问题,在加载一个区域的地图时提示渲染失败,并且给了一串英文提示

但是去加载另外的区域又没有问题,所以排错的大致方向就是出问题区域的数据问题了。

后打断点得知:在地图上自己添加的图标模型的经纬度数据有问题,把不是经纬度的数据传给了Cesium去创建地图,当然会出问题了。

查看了后台代码没问题,查看数据库找到的错误的数据。

原来在Cesium地图上拖动了图标,再把图标的经纬度存到数据库的过程中出了问题。数据格式在这里出了错,存为了NaN(js中代表不是一个数字)

转载于:https://www.cnblogs.com/runwithraining/p/11169748.html

### 渲染停止错误 `RangeError: Invalid array length` 的原因分析 在使用 Cesium v25 开发时,可能会遇到渲染过程中的错误提示:“An error occurred while rendering. Rendering has stopped.” 并伴随具体的 JavaScript 错误信息 “RangeError: Invalid array length”。此问题的根本原因是某些数组长度被非法定义为负数或非数值(NaN),这通常发生在场景渲染逻辑中。 具体来说,在 Cesium 的核心文件 `scene/scene.js` 中存在一个名为 `createPotentiallyVisibleSet(scene)` 的函数。该函数内部有一个变量 `numFrustums`,其值应为正整数,但在特定情况下可能变为 NaN 或其他不合法值[^1]。进一步追踪发现,这种异常源于另一个对象 `boundingVolume` 的属性 `radius` 偶尔也会成为 NaN。当这些非法值传递到后续依赖它们的计算中时,就会触发范围错误。 #### 解决方案描述 针对这一问题,可以通过修改源码的方式修复。以下是实现的具体方法: 1. **检测并过滤非法数据** 修改 `createPotentiallyVisibleSet(scene)` 函数内的循环部分,增加对 `boundingVolume.radius` 是否为 NaN 的判断条件。如果检测到半径为 NaN,则跳过当前迭代,避免将其用于任何可能导致错误的操作。代码片段如下所示: ```javascript if (defined(boundingVolume)) { if (isNaN(command.boundingVolume.radius)) { continue; // 如果 radius 是 NaN 则忽略本次循环 } if ( command.cull && ( cullingVolume.getVisibility(boundingVolume) === Intersect.OUTSIDE || defined(occluder) && !occluder.isBoundingSphereVisible(boundingVolume) ) ) { continue; } } ``` 通过以上调整可以有效防止因非法输入引发的崩溃行为。 另外值得注意的是,虽然上述更改解决了主要的技术难题,但如果项目允许升级至更高版本的库也是一个不错的选择。因为官方维护团队很可能已经在更新后的发行版里修正了此类已知缺陷[^3]。 ### 示例初始化配置代码 为了确保应用能够正常启动而不受额外干扰因素影响,还可以考虑适当简化初始加载参数设定。例如关闭默认弹窗功能以减少不必要的复杂度: ```javascript const viewer = new Cesium.Viewer('cesiumContainer', { infoBox : false, // 关闭信息框显示 }); ``` 这样做的好处在于减少了潜在冲突点的同时也提升了用户体验流畅感[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值