Select to view content in your preferred language

Offline 3D Elevation Data/Scene

144
0
2 weeks ago
Labels (3)
Polemics
New Contributor

Hello,

I'm looking for some help getting offline 3D elevation data working properly in a WPF/.NET 9 application (Windows 11) that uses ArcGIS Runtime SDK for .NET to power a 3D scene. The goal is to render 3D terrain with elevation and a custom imagery basemap, fully offline.

When I use this elevation service:

https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer

…and pair it with a .tpkx basemap I created, everything works perfectly. The 3D terrain renders, and the ground texture + color shows up as intended.

I need this system to function offline.

To prepare for this, I downloaded 1/3 arc-second (10m) DEM tiles from the National Map:

https://apps.nationalmap.gov/downloader/

For testing, I chose a tile covering the Tucson, AZ area. I followed this workflow in ArcGIS Pro:

  1. Used "Manage Tile Cache" with the WGS84 V2 tiling scheme and “Elevation” format.

  2. Then ran "Export Tile Cache" to output a .tpkx from the tile cache.

  3. For the basemap, I also used Manage Tile Cache → Create Tile Cache → Export Tile Cache, using imagery data (configured to match Tucson area).

  4. Both elevation and basemap caches use the tiling scheme.

Here are my current results,

Case 1: Load elevation .tpkx (no basemap)

  • 3D terrain shows up (elevation working)

  • Ground is white/grid/dotted (no imagery)

Case 2: Load basemap .tpkx (no elevation)

  • Ground texture and color load

  • Terrain is flat (elevation not applied)

Case 3: Load both elevation + basemap .tpkx

  • Terrain becomes flat again

  • Imagery shows up properly

So far, I have not been able to get both the imagery basemap and 3D terrain working together in offline mode — it’s always one or the other.

Here's the code currently used to load the basemap and elevation.  This version of the code loads the 3D terrain but not the colored basemap over it:

public async static Task<SceneView> 3DScene_Initialize (SceneView sceneView)
{

{
sceneView.SetFieldOfView(85);

// Basemap (imagery)
string basemapPath = @"MYPATH";
TileCache basemapCache = new TileCache(basemapPath);
ArcGISTiledLayer basemapLayer = new ArcGISTiledLayer(basemapCache);
Scene scene = new Scene(new Basemap(basemapLayer));
sceneView.Scene = scene;

// Elevation
string elevationPath = @"MYPATH";
TileCache elevationCache = new TileCache(elevationPath);
ArcGISTiledElevationSource elevationSource = new ArcGISTiledElevationSource(elevationCache);

Surface elevationSurface = new Surface();
elevationSurface.ElevationSources.Add(elevationSource);
elevationSurface.ElevationExaggeration = 1.5;scene.BaseSurface = elevationSurface;

// Clean up
sceneView.Unloaded += (s, e) =>
{
if (sceneView.Scene != null)
{
sceneView.Scene.OperationalLayers.Clear();
sceneView.GraphicsOverlays.Clear();
}
};

return sceneView;
}

From my troubleshooting so far, I suspect:

  • A projection mismatch or tiling scheme issue between the basemap and elevation .tpkx

  • Possibly something about the draw order or layer conflicts between the elevation surface and the imagery

  • The .tpkx basemap might not be rendering correctly over the custom elevation surface when loaded together

  • Does the level of detail on each map have to match?

Questions/Thoughts?

  1. Is there a required projection or tiling scheme for basemaps to overlay correctly on an elevation .tpkx?

  2. Is there a known conflict when using custom ArcGISTiledLayer + ArcGISTiledElevationSource in the same scene?

  3. Are there any tools in ArcGIS Pro that can help verify or align these two caches?

  4. Is there a preferred export format or method (e.g., LERC, JPEG, etc.) for this use case

Any help on this would be very much appreciated and I would be very grateful for. 

Thank You!

0 Kudos
0 Replies