Cesium - Range Error: Invalid Array Length on Validated geoJson
Cesium - Range Error: Invalid Array Length on Validated geoJson
我正在尝试在基于标准 HelloWorld 示例应用程序的测试应用程序中加载以下 geoJson 文件。
{
"type": "FeatureCollection",
"generator": "overpass-turbo",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.",
"timestamp": "2016-09-12T19:22:48Z",
"features": [
{
"type": "Feature",
"id": "way/442106309",
"properties": {
"@id": "way/442106309",
"addr:city": "Ottawa",
"addr:housenumber": "999",
"addr:postcode": "H8G8F9",
"addr:street": "My Road",
"building": "apartments",
"building:levels": "3",
"levels": "3"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-75.7337391,
45.3783003
],
[
-75.7335222,
45.378383
],
[
-75.7335439,
45.3784096
],
[
-75.733525,
45.3784206
],
[
-75.7335406,
45.3784375
],
[
-75.7335003,
45.378453
],
[
-75.7335867,
45.378543
],
[
-75.7338474,
45.3784262
],
[
-75.7337391,
45.3783003
]
]
]
}
}]}
我正在使用以下代码加载它:
var dataSource = Cesium.GeoJsonDataSource.load('../data/kirkwood.json').then(function(data) {
viewer.dataSources.add(data);
viewer.zoomTo(data);
}
这会导致以下错误消息:
An error occurred while rendering. Rendering has stopped.
RangeError: Invalid array length
RangeError: Invalid array length
at updateFrustums (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155215:36)
at createPotentiallyVisibleSet (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155389:13)
at executeCommandsInViewport (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155943:9)
at updateAndExecuteCommands (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155841:17)
at render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:156177:9)
at Scene.render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:156215:13)
at CesiumWidget.render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:164962:25)
at render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:164364:32)
我很困惑,因为 geoJson 使用 http://geojson.io and http://geojsonlint.com
验证得很好
谁能提供一些有用的建议?
谢谢!
不幸的是,您在此处显示的错误是 Cesium 渲染循环内部的一种包罗万象的错误。每当无效对象将无效边界球体引入可见对象列表时,它就会突然出现。遗憾的是,当坏对象首次添加到列表中时,不会抛出此错误。直到 Cesium 的渲染循环尝试渲染所有对象(包括一个坏对象)时,才会抛出错误。坏对象是在其创建例程从调用堆栈中消失很久之后才被发现的,因此错误并不能确定首先出错的地方。调用堆栈的底部只是要求渲染下一帧,这意味着引入问题的代码已经完成并返回。
也就是说,您在此处显示的代码在 Cesium 1.25 中确实适用于我。它在特定建筑物上显示黄色多边形。但是,这里的一些变量名在我看来是错误的,这表明您可能在此处未显示的代码的其他部分中误用了它们。特别地,dataSource
是真正的Promise,不是真正的DataSource,而data
才是真正的dataSource。所以,我建议重命名:
var dataSourcePromise = Cesium.GeoJsonDataSource.load('../data/kirkwood.json').then(
function(dataSource) {
viewer.dataSources.add(dataSource);
viewer.zoomTo(dataSource);
}
);
此代码与您 post 编写的代码没有任何不同,但您 post 编写的代码在我的机器上运行良好。我在这里所做的是重命名一些变量,以防您试图在其他地方使用它们,从而产生问题。这应该清楚表明您不能将 dataSourcePromise
用作实际的数据源。
如果您在应用此重构后未发现问题,您可能需要在此处 post 或删除任何添加要在 Cesium 中呈现的对象的额外代码。该错误清楚地表明某种无效对象已添加到渲染循环中。
我正在尝试在基于标准 HelloWorld 示例应用程序的测试应用程序中加载以下 geoJson 文件。
{
"type": "FeatureCollection",
"generator": "overpass-turbo",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.",
"timestamp": "2016-09-12T19:22:48Z",
"features": [
{
"type": "Feature",
"id": "way/442106309",
"properties": {
"@id": "way/442106309",
"addr:city": "Ottawa",
"addr:housenumber": "999",
"addr:postcode": "H8G8F9",
"addr:street": "My Road",
"building": "apartments",
"building:levels": "3",
"levels": "3"
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-75.7337391,
45.3783003
],
[
-75.7335222,
45.378383
],
[
-75.7335439,
45.3784096
],
[
-75.733525,
45.3784206
],
[
-75.7335406,
45.3784375
],
[
-75.7335003,
45.378453
],
[
-75.7335867,
45.378543
],
[
-75.7338474,
45.3784262
],
[
-75.7337391,
45.3783003
]
]
]
}
}]}
我正在使用以下代码加载它:
var dataSource = Cesium.GeoJsonDataSource.load('../data/kirkwood.json').then(function(data) {
viewer.dataSources.add(data);
viewer.zoomTo(data);
}
这会导致以下错误消息:
An error occurred while rendering. Rendering has stopped.
RangeError: Invalid array length
RangeError: Invalid array length
at updateFrustums (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155215:36)
at createPotentiallyVisibleSet (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155389:13)
at executeCommandsInViewport (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155943:9)
at updateAndExecuteCommands (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:155841:17)
at render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:156177:9)
at Scene.render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:156215:13)
at CesiumWidget.render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:164962:25)
at render (http://127.0.0.1:8081/Build/CesiumUnminified/Cesium.js:164364:32)
我很困惑,因为 geoJson 使用 http://geojson.io and http://geojsonlint.com
验证得很好谁能提供一些有用的建议?
谢谢!
不幸的是,您在此处显示的错误是 Cesium 渲染循环内部的一种包罗万象的错误。每当无效对象将无效边界球体引入可见对象列表时,它就会突然出现。遗憾的是,当坏对象首次添加到列表中时,不会抛出此错误。直到 Cesium 的渲染循环尝试渲染所有对象(包括一个坏对象)时,才会抛出错误。坏对象是在其创建例程从调用堆栈中消失很久之后才被发现的,因此错误并不能确定首先出错的地方。调用堆栈的底部只是要求渲染下一帧,这意味着引入问题的代码已经完成并返回。
也就是说,您在此处显示的代码在 Cesium 1.25 中确实适用于我。它在特定建筑物上显示黄色多边形。但是,这里的一些变量名在我看来是错误的,这表明您可能在此处未显示的代码的其他部分中误用了它们。特别地,dataSource
是真正的Promise,不是真正的DataSource,而data
才是真正的dataSource。所以,我建议重命名:
var dataSourcePromise = Cesium.GeoJsonDataSource.load('../data/kirkwood.json').then(
function(dataSource) {
viewer.dataSources.add(dataSource);
viewer.zoomTo(dataSource);
}
);
此代码与您 post 编写的代码没有任何不同,但您 post 编写的代码在我的机器上运行良好。我在这里所做的是重命名一些变量,以防您试图在其他地方使用它们,从而产生问题。这应该清楚表明您不能将 dataSourcePromise
用作实际的数据源。
如果您在应用此重构后未发现问题,您可能需要在此处 post 或删除任何添加要在 Cesium 中呈现的对象的额外代码。该错误清楚地表明某种无效对象已添加到渲染循环中。