Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can not add the terrain data in cesium #96

Open
DeZhao-Zhang opened this issue Mar 26, 2021 · 17 comments
Open

Can not add the terrain data in cesium #96

DeZhao-Zhang opened this issue Mar 26, 2021 · 17 comments

Comments

@DeZhao-Zhang
Copy link

  1. At first i get the terrain tile use ctb-tile --output-dir ./terrain-tiles dem.tif
    image

  2. The I add the data in tomcat webapp root dir, which as apache-tomcat-10.0.2\webapps\ROOT\output-dir

  3. I add the terrain use

viewer.terrainProvider = new Cesium.CesiumTerrainProvider({
        url : `http://localhost:8081/output-dir`,
    });
  1. The world is black and can not see anything
    image

  2. The http request have only one for 0/1/0.terrain
    image

@jachym
Copy link

jachym commented Apr 28, 2021

I'm facing the same issue. Javascript debugging console reports:

An error occurred in "CesiumTerrainProvider": Failed to obtain terrain tile X: 1 Y: 0 Level: 0.

layers.json and the first tile (zoom level) are loaded fine , http://localhost:8083/data/tin/0/0/0.terrain?v=1.1.0 returns data and corect Content-type

Generated using intput GeoTIFF and -N -C options

Running ctb-info

ctb-info tin7/9/559/395.terrain
reports ```Error: File has wrong file size to be a valid terrain

NOTE: It seems I've used different docker image. Will test with homme/cesium-terrain-builder and report. Sorry for disturbance.

@deepatm003
Copy link

I am also getting the same problem with Cesium Terrain Builder with quantized mesh. Please help me on this. I am stuck on this problem for over a month

@deepatm003
Copy link

I'm facing the same issue. Javascript debugging console reports:

An error occurred in "CesiumTerrainProvider": Failed to obtain terrain tile X: 1 Y: 0 Level: 0.

layers.json and the first tile (zoom level) are loaded fine , http://localhost:8083/data/tin/0/0/0.terrain?v=1.1.0 returns data and corect Content-type

Generated using intput GeoTIFF and -N -C options

Running ctb-info

ctb-info tin7/9/559/395.terrain
reports ```Error: File has wrong file size to be a valid terrain

NOTE: It seems I've used different docker image. Will test with homme/cesium-terrain-builder and report. Sorry for disturbance.

Any progress on this. I am also getting same error. Cant understand where I did wrong

@jachym
Copy link

jachym commented Apr 30, 2021

I've checked the empty tile issue, as well as tried various ctb-tile tools. All with the same result. Tiles generated with this tool about 3 years back are working in the new version of Cesium.

@deepatm003
Copy link

I've checked the empty tile issue, as well as tried various ctb-tile tools. All with the same result. Tiles generated with this tool about 3 years back are working in the new version of Cesium

Can you mention which version of Cesium and ctb-tile tools you used? Have you done any settings in tomcat server?

@klucg
Copy link

klucg commented Dec 12, 2021

The main reason that you can't load terrain file into cesium is because .terrain is ziped file, you need to unzip it or tell your browser to do it (by setting response header 'Content-Encoding: gzip')

@BWibo
Copy link

BWibo commented Dec 12, 2021

@crocij
Copy link

crocij commented Mar 8, 2022

I can confirm this. Check this for a possible solution: https://stackoverflow.com/questions/54879535/cesium-terrain-builder-docker-error-when-i-load-cesium-js-in-browser/65196056#65196056

Sadly the problem still persists for me although the Content-Encoding is correctly set to gzip and the Content-Type to application/octet-stream. The error message in the console using chrome is:
RangeError: Invalid typed array length: 4225

I tried it both with a dataset in float32 and UInt16. The layer.json can also be loaded.

I am using geo-data/cesium-terrain-server as server.

EDIT: I found the problem, the terrain sever removes for some reason the available array from the layer.json. For testing, I fixed it by hard coding it into the node_modules/cesium/Source/Core/CesiumTerrainProvider.js file in the parseMetadataSuccess method

@ruanqizhen
Copy link

I got the same problem

@Gitwinters1973
Copy link

I use docker container cesium-terrain-builder to generate terrain tiles (ctb-tile -f Mesh -C -N -v -o ./terrain/ ./XXX.vrt) , then use cesium-terrain-server to server terrain tiles, a cesium client error occurs :

An error occurred in "CesiumTerrainProvider": Failed to obtain terrain tile X: 0 Y: 0 Level: 0. Error message: "RangeError: Invalid typed array length: 4225"

finally,i found .terrain file is compressed (gzip), then use nginx to server it :

location /{
    alias d:/terrain/;
   
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
    add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
    location ~* .terrain$ {
        add_header Content-Disposition 'attachment;filename=$arg_filename';
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
        add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
        add_header Content-Encoding "gzip";
        add_header Content-Type "application/octet-stream";
    } 
}

then solved it ! I am sure this is the key point :

location ~* .terrain$ {
add_header Content-Encoding gzip;
}

reference:
Cesium-terrain-builder-docker error when i load cesium.js in browser

@zhangiser
Copy link

@Gitwinters1973
May i know if the quantized-mesh produced by the docker CTB has metadata extension in 0/0/0.terrain and 0/1/0.terrain?
I used CTB by this fork https://github.com/ahuarte47/cesium-terrain-builder/tree/master-quantized-mesh,the quantized-mesh has no metadata extension,only can i get is layer.json,i guess there has some bug.

@BWibo
Copy link

BWibo commented Aug 7, 2022

Hey there,
cesium-terrain-builder-docker is built from the latest commit on #64. Check the PR for all features included.

@maximilianwicen
Copy link

I can confirm this. Check this for a possible solution: https://stackoverflow.com/questions/54879535/cesium-terrain-builder-docker-error-when-i-load-cesium-js-in-browser/65196056#65196056

Sadly the problem still persists for me although the Content-Encoding is correctly set to gzip and the Content-Type to application/octet-stream. The error message in the console using chrome is: RangeError: Invalid typed array length: 4225

I tried it both with a dataset in float32 and UInt16. The layer.json can also be loaded.

I am using geo-data/cesium-terrain-server as server.

EDIT: I found the problem, the terrain sever removes for some reason the available array from the layer.json. For testing, I fixed it by hard coding it into the node_modules/cesium/Source/Core/CesiumTerrainProvider.js file in the parseMetadataSuccess method

@crocij
What changes to CesiumTerrainProvider.js did you do? I am having this problem and getting the correct gzip and the Content-Type as well...

@crocij
Copy link

crocij commented May 18, 2023

I can confirm this. Check this for a possible solution: https://stackoverflow.com/questions/54879535/cesium-terrain-builder-docker-error-when-i-load-cesium-js-in-browser/65196056#65196056

Sadly the problem still persists for me although the Content-Encoding is correctly set to gzip and the Content-Type to application/octet-stream. The error message in the console using chrome is: RangeError: Invalid typed array length: 4225
I tried it both with a dataset in float32 and UInt16. The layer.json can also be loaded.
I am using geo-data/cesium-terrain-server as server.
EDIT: I found the problem, the terrain sever removes for some reason the available array from the layer.json. For testing, I fixed it by hard coding it into the node_modules/cesium/Source/Core/CesiumTerrainProvider.js file in the parseMetadataSuccess method

@crocij What changes to CesiumTerrainProvider.js did you do? I am having this problem and getting the correct gzip and the Content-Type as well...

At the start of the parseMetadataSuccess I just added the the available array like this:
data.available = [ [ { "startX": 0, "startY": 0, "endX": 1, "endY": 0 } ] ,[ { "startX": 2, "startY": 1, "endX": 2, "endY": 1 } ] ,[ { "startX": 4, "startY": 3, "endX": 4, "endY": 3 } ] ,[ { "startX": 8, "startY": 6, "endX": 8, "endY": 6 } ] ,[ { "startX": 16, "startY": 12, "endX": 16, "endY": 12 } ] ,[ { "startX": 33, "startY": 24, "endX": 33, "endY": 24 } ] ,[ { "startX": 66, "startY": 48, "endX": 67, "endY": 49 } ] ,[ { "startX": 132, "startY": 96, "endX": 135, "endY": 98 } ] ,[ { "startX": 264, "startY": 193, "endX": 271, "endY": 196 } ] ,[ { "startX": 528, "startY": 386, "endX": 542, "endY": 392 } ] ,[ { "startX": 1057, "startY": 772, "endX": 1084, "endY": 784 } ] ,[ { "startX": 2115, "startY": 1544, "endX": 2168, "endY": 1568 } ] ,[ { "startX": 4230, "startY": 3089, "endX": 4336, "endY": 3136 } ] ,[ { "startX": 8460, "startY": 6179, "endX": 8672, "endY": 6272 } ] ,[ { "startX": 16921, "startY": 12359, "endX": 17345, "endY": 12544 } ] ,[ { "startX": 33843, "startY": 24719, "endX": 34690, "endY": 25088 } ] ,[ { "startX": 67686, "startY": 49438, "endX": 69380, "endY": 50176 } ] ,[ { "startX": 135373, "startY": 98877, "endX": 138761, "endY": 100353 } ] ]

@maximilianwicen
Copy link

I can confirm this. Check this for a possible solution: https://stackoverflow.com/questions/54879535/cesium-terrain-builder-docker-error-when-i-load-cesium-js-in-browser/65196056#65196056

Sadly the problem still persists for me although the Content-Encoding is correctly set to gzip and the Content-Type to application/octet-stream. The error message in the console using chrome is: RangeError: Invalid typed array length: 4225
I tried it both with a dataset in float32 and UInt16. The layer.json can also be loaded.
I am using geo-data/cesium-terrain-server as server.
EDIT: I found the problem, the terrain sever removes for some reason the available array from the layer.json. For testing, I fixed it by hard coding it into the node_modules/cesium/Source/Core/CesiumTerrainProvider.js file in the parseMetadataSuccess method

@crocij What changes to CesiumTerrainProvider.js did you do? I am having this problem and getting the correct gzip and the Content-Type as well...

At the start of the parseMetadataSuccess I just added the the available array like this: data.available = [ [ { "startX": 0, "startY": 0, "endX": 1, "endY": 0 } ] ,[ { "startX": 2, "startY": 1, "endX": 2, "endY": 1 } ] ,[ { "startX": 4, "startY": 3, "endX": 4, "endY": 3 } ] ,[ { "startX": 8, "startY": 6, "endX": 8, "endY": 6 } ] ,[ { "startX": 16, "startY": 12, "endX": 16, "endY": 12 } ] ,[ { "startX": 33, "startY": 24, "endX": 33, "endY": 24 } ] ,[ { "startX": 66, "startY": 48, "endX": 67, "endY": 49 } ] ,[ { "startX": 132, "startY": 96, "endX": 135, "endY": 98 } ] ,[ { "startX": 264, "startY": 193, "endX": 271, "endY": 196 } ] ,[ { "startX": 528, "startY": 386, "endX": 542, "endY": 392 } ] ,[ { "startX": 1057, "startY": 772, "endX": 1084, "endY": 784 } ] ,[ { "startX": 2115, "startY": 1544, "endX": 2168, "endY": 1568 } ] ,[ { "startX": 4230, "startY": 3089, "endX": 4336, "endY": 3136 } ] ,[ { "startX": 8460, "startY": 6179, "endX": 8672, "endY": 6272 } ] ,[ { "startX": 16921, "startY": 12359, "endX": 17345, "endY": 12544 } ] ,[ { "startX": 33843, "startY": 24719, "endX": 34690, "endY": 25088 } ] ,[ { "startX": 67686, "startY": 49438, "endX": 69380, "endY": 50176 } ] ,[ { "startX": 135373, "startY": 98877, "endX": 138761, "endY": 100353 } ] ]

Cool. I ended up fixing it by using the docker container rinstead of compiling the Go code.

@techmavengeospatial
Copy link

techmavengeospatial commented Apr 7, 2024

PAID Commercial Cesium Quantized Mesh Terrain Tile Serving (from MBTILES)
https://tileserver.techmaven.net/
https://3dsceneserver.techmaven.net/
https://geodataserver.techmaven.net/
they offers the proper headers and metadata

Perfect for Cesium WebGL, Cesium Game Engines, Other Solutions
Terriajs

@techmavengeospatial
Copy link

techmavengeospatial commented Apr 7, 2024

Serve Quantized Mesh in Android App (from MBTILES)
https://techmaven.net/portabletileserver/

or
iOS, Android and Windows APp
https://earthexplorer.techmaven.net

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests