Optimal Arc GIS Pro workflow for exporting 3D terrain data for Cesium

This question is aimed at the Cesium user who routinely uses Arc GIS to prepare or generate terrain. The objective of the question is to solicit recommendations on best workflows, most efficient data formats for surfaces / elevation data. It is the intention that a terrain object covering a relatively small area will be be placed on top of background terrain.

The input data are stored as a “File Geodatabase Raster”. I can readily see all of the metadata associated with this data source, e.g. Projection, Coordinates system, extent. I note that the coordinates system is a flavor of UTM, while I typically pass .geojsons containing WGS84 coordinates to Cesium. The data are elevations in meters; an m x n matrix.

This link: Terrain – Cesium provides a list of supported input formats. My preference is .flt or .tiff.

I generated small .flt and .tif in Arc GIS by using a subset of our data (by zooming-in and limiting the extent to the current map view) by using the “Raster to Float” tool as well as the “Export to Raster” operation.

In both of these cases, we received the errors:

Missing or invalid spatial reference system

Specific questions are:

  1. Are either of the approaches described above recommended? If not suggestions would be greatly appreciated.

  2. If the approaches are valid, what is the best way to ensure that the coordinates and coordinate system metadata make it into the exported file as they should?

  3. Arc GIS appears to support a variety of representations for empty value / do not render pixel. In other environments, NaN is sometimes is used for this purpose. What is best practice / preferred empty value for Cesium?

  4. Is the general approach here suitable for both 2D and 3D (terrain) representations of small patches of elevation maps? The end objective is to show 3D terrain - I would like to choose the best workflow and formats for this.

Hi,

Would you be able to provide us with some assetId for the terrain tiles that failed like above that you mentioned? It would help us understand what may be happening here better and provide you with better answers.

Thanks,
Ankit

Thank you, Ankit - here you go: 2155287

Hi,

This page should help you with file exports for .tif data. It looks like ArcGIS puts the georeferencing information into a TFW file. If you upload the file along with the TIFF file it should work as expected.

Regarding the empty values, it shouldn’t matter which values you use as long as the GeoTIFF’s metadata correctly says what it is. Please give this a try and let me know if you see any issues.

Thanks,
Ankit

Thanks, Ankit. So by “If you upload the file along with the .tiff file it should work as expected”, you simply mean that if the .tiff / .tif and the .tfw are placed alongside one another in our asset repository, Cesium will identify the companion file, ingest it, and interpret the data in the .tif accordingly? I would imagine that there is a requirement for the .tfw and the .tif to share the same filename?

Hi,

Yes it should be able to detect the companion file. If you have the exported .tfw file from the above instructions in your dataset Cesium’s tilers should be able to detect that. Please give it a try and if it doesn’t work I will open an internal request ticket for the team to a deeper look at supporting your use case.

Thanks,
Ankit

Hi Ankit, still no luck. I am getting the following error:

“Missing or invalid spatial reference system”

assetId: 2190631

I would be grateful if you could open an internal request ticket.

In my own investigation, I compared a .tiff that loads with a .tif which does not. I looked at the metadata within each geotiff file. I see a few differences between the the files which may explain why one file fails. I read the files with a matlab function called geoimread.m. In addition to the primary geographic data, the function returns a metadata structure/object which is referred to as info here. In the file which was read / integrated into Cesium successfully, I see that

info.SpatialRef contained an object called: [1x1 map.rasterref.GeographicPostingsRef]

while the file which doesn’t load contains:

inf.SpatialRef contained an object called: [1x1 map.rasterref.GeographicCellsReference]

I also see that the map.rasterref.GeographicPostingsRef (loads) object contains lat lon metadata data in WGS84 format, while the map.rasterref.GeographicCellsReference object contains lat lon data which appears to be in the SIRAS 2000 flavor which is native to the original ArcGIS geodatabase from which the .tif which fails was generated.

Looking forward to hearing your suggestions.

Hi,

I have opened an internal feature request for this. The team will take a look at this issue and add it to their roadmap. Would you be able to provide us with some sample data/assetIds of the exported data with the .tfw file from ArcGIS to help understand this better?

Thanks,
Ankit