Cesium height rendering issue - Pointcloud

Hi,

Is there a way to specify the height parameter of the pointcloud when using the following call:

new Cesium.Cesium3DTileset({
    url: Cesium.IonResource.fromAssetId

So that we can adjust the point cloud height to show up barely above water. Otherwise most of them are flying high in air (as in the left side of attached image). We have hundreds of point clouds on the ION and I’m not sure what is the best way to bring them down to water level (as in the right side image). But, if there is JS API that lets us that do dynamically when rendered on the browser then that will be helpful. Or if there is modify JS API call (like the file upload JS API call), which can reset the height parameter only, that could also work.

Thanks.

Sincerely,

Q. Iqbal

You can adjust the height of a tileset dynamically by setting its model matrix. See the 3D Tiles Adjust Height Sandcastle.

Perfect! Really seems to work very well on a few samples that I tried. Let me try more. Thanks a lot. Especially for the fast response and also on the weekend! Appreciate that.

An interesting thing is that we did not use the location parameter during the JS API call to upload our LAZ’s - geolocation was embedded into LAZ. And, it appears that Cesium picked up the height parameter shown in the console from the min Z values in the xyz values in the LAZ. I haven’t fully understood the meaning of the height parameter in the console. In our LAZ file the min Z = 170 and Cesium makes the tileset height parameter also 170 during upload. Does that mean the point cloud will be rendered at a height of 170 + 170 = 340? Could that be the reason the point cloud was flying high in the air? Or may be I’m missing out the meaning of the height parameter entirely?

At first I tried -170 in the offset parameter of the model matrix for the height to bring the point cloud down. Which seems to work as noted above. But, then I switched to -cartographic.height (notice the minus sign) as I noticed that this value was different from 170 for some of the files. Is that the right way to approach bringing the point cloud at the water level?

Thanks again.

Here it is after height adjustment in the attached image.

The ion UI shows the longitude/latitude/height of the tileset as it’s currently being displayed on the globe. It’s not additive (e.g. not 170 + 170).

As for why it’s floating, there could be two reasons:

  1. If terrain is turned off the tileset will appear to be floating 170 meters above the ellipsoid. If terrain is turned on it should line up better.
  2. The data could be missing a vertical datum. E.g. the heights might be relative to MSL but without that information the tiler would treat heights as relative to ellipsoid.
1 Like

Hello @sean_lilley,

I am using Cesium ion, and encountered similar issues with displaying point cloud data.
The image on the right shows the data slightly floating when displayed using the WGS84 global base layer, while the second image shows the point cloud hidden beneath the terrain when displayed using google photorealistic 3D. Do you the cause of this?

Thank you

Hi @ndi_joe

The WGS84 globe doesn’t include elevation data so it’s expected that you’re seeing differences between WGS84 and Google 3D Tiles.

As for why your point cloud is below Google 3D Tiles - there could be a few reasons. Do you know if your LAS file has a vertical datum?

Hi, @sean_lilley. I am using cesium ion to visualize a point cloud but I am having the same problem that the point cloud is flying in the air. I looked into the header of my data and this is the information about the crs


And these is how the point cloud is located

I want to upload several point cloud data and I want to know if there is a way in which I can adjust the vertical datum so the point cloud are not floating over the basemap.

Thanks, Juan.

Hi @jpbolanod - your point cloud might already be positioned correctly. Have you tried adding Cesium World Terrain to see if it lines up?

Otherwise, if you think the vertical coordinate system in the LAS is wrong, you can use PDAL to assign a different coordinate system. See LAS Reading and Writing with PDAL — pdal.io.

Yes, I tried adding Cesium World Terrain but the point cloud gets below the surface


So, I may have to change the reference frame in order to adjust the vertical coordinate system

Hello @sean_lilley

Thank you for the swift reply and for providing answers to my question. I had to confirm whether the file had a vertical datum, and it turns out it does not.

If I need to change the vertical datum of my tileset, can it be done using cesium ion, or is cesiumjs the only option?

Thank You.

@ndi_joe the best approach would be to assign a new coordinate system in the LAS itself, and then reupload to ion. Check out the Vertical Datum Example in the PDAL link I posted above.

@sean_lilley Okay, thank you!

the cesium world terrain is an ellipsoid elevation and not an orthometric elevation. the difference between the two is a geoid model.

The vertical offset you will need is probably be the geoid offset at the models location.

It would be really nice if there was a cesium Ion world terrain provided with a EGM included. The ESRI terrain is orthometric

Hi Berwyn, I tried to use the ESRI terrain basemap but I keep getting the point cloud floating over it. Do you know if I have to reproject the point cloud in order to adjust the vertical position?

Thanks