Cesium CRS Offset compared to UE Georeferencing

Hello,

I’m loading a Lidar point cloud to UE, using the georeferencing plugin from UE with UTM coordinates I can match positions.

In this example I’m getting a coordinate from a point in my lidar point cloud in cloud compare:

Then, I use that coordinate in UTM with the native georeferencing plugin and it matches exactly the point in Unreal. When I transform the coordinate to lat/long and use Cesium globe anchor to position it I get an important drift:


The green sphere is using UE’s UTM, and the right green box is with Cesium’s globe anchor.

Is there a way to handle UTM coordinates in Cesium within Unreal Engine? Or maybe there’s another way to do the conversions?

These are my settings for the UE Georeference:

And here for Cesium Georeference:

For reference here is the coordinate I’m trying to locate:
Projected:
x = 344820.740005
y = 6293874.320000
z = 571.320007

Lat/Long:
-33.48338943
-70.67024106
571.32

Hi @JulianCrespi,

A few questions:

  • How are you computing the longitude/latitude coordinates that you provide to Cesium?
  • How big is the discrepancy between the coordinates in meters? It’s hard to tell from the screenshots.
  • I noticed that the built-in georeference is set to “Flat Earth”. The Cesium Georeference / Globe Anchor will definitely not assume a flat Earth, so could that be the source of the discrepancy?

Kevin

Hi @Kevin_Ring

Thanks for the quick reply.

-I’m using the conversion blueprints from the UE Georeference plugin, also doing some tests with epsg.io
-The difference is about 3 meters

I think you are right, it’s me using a Flat earth and Cesium working with a round one. When I change my system to round it matches Cesium’s position (ie: the sphere moves to the location of the box), but it no longer matches my lidar point cloud.

Is there a way to tell Cesium to use a flat earth mode with a projected CRS? (as my base of work are those lidar point clouds that use that specific CRS)

Thanks!

No, sorry, Cesium is currently unsuitable for use by flat-Earthers. :grin:

Your best bet is probably to reproject your point cloud using GDAL or QGIS or similar.

Kevin

1 Like

haha dang! :joy:

Ok, so doing some tests here, reprojecting my point cloud to EPSG:4978 which I understand it’s the same that is using Cesium.

When loading that point cloud in UE, I get it rotated:

I understand that this happens because the coordinates from the point cloud correspond to the southern hemisphere, so it’s rotated to it’s lat long degrees.

When looking at Cesium when I change the origin I would imagine it’s rotating the planet that to that particular position:
image

It gives me the impression that I could use that same rotation offset and apply it to my point cloud, to negate the rotation that I got from changing projections, but don’t know how.

Any hints would be much appreciated!

So after you reproject the point cloud, are you still using the UE georeferencing plugin? I think you shouldn’t need it.

I think maybe you could use a CRS like EPSG:4461, with the “topocentric origin” set to any point in the middle of the point cloud. And then use Cesium functions to compute the UE world coordinates for that topocentric origin and set the point cloud actor accordingly.

It depends what transformations (if any) the UE point cloud support applies, though. It would need to do some, presumably, because UE uses a left-handed coordinate system while something like EPSG:4461 (and most geospatial systems to my knowledge) are right-handed.

It’ll probably take some experimentation!

Kevin