Select to view content in your preferred language

"Error Decoding" a custom ElevationLayer

751
2
Jump to solution
09-07-2017 11:47 AM
by Anonymous User
Not applicable

Hello -

The world elevation service does not provide enough topographic relief in my gently sloping project area. I am trying to test if it gets better using a USGS NED raster in a custom ElevationLayer. However, in the browser console log I receive "Error Decoding: undefined" for my custom DEM tiles.

The only thing different from this sample and the documentation is that I do not have the Image Server extension on our ArcGIS Server (10.5). I'm simply publishing an Image Service from Catalog to our regular Server. The REST URL however does state "Image Server". The raster is in Web Mercator and tiled with ArcGIS tile scheme.

Can I only do this with a literal Image Server license? Or am I missing something else? I cannot share my dem URL.

require(["esri/Map", "esri/views/SceneView", "esri/layers/BaseElevationLayer", "esri/layers/ElevationLayer", "esri/layers/FeatureLayer", "esri/renderers/SimpleRenderer", "esri/symbols/ObjectSymbol3DLayer", 
"esri/symbols/PointSymbol3D", "dojo/domReady!"],
function(Map, SceneView, BaseElevationLayer, ElevationLayer, FeatureLayer, SimpleRenderer, ObjectSymbol3DLayer, PointSymbol3D) {

var mapObj = new Map({
 basemap : "satellite",
 ground : "world-elevation"
 });
 var viewObj = new SceneView({
 container : "mapDiv",
 camera: {
 position: {
 x: -10888242.6,
 y: 6093694.16,
 z: 1618269,
 spatialReference: {
 wkid: 102100
 }
 },
 heading: 17,
 tilt: 48
 },
 map : mapObj, // Reference to the map object created before the scene
 scale : 50000, 
 center : [-97.81, 47.94]
 });

// Create elevation layer and add to the map
 var dem = new ElevationLayer({
 url: "https://xxx/arcgis/rest/services/dem/ImageServer", //ArcGIS Server 10.5
 visible: true
 });
mapObj.ground.layers.add(dem);
});‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍
0 Kudos
1 Solution

Accepted Solutions
ThomasSolow
Frequent Contributor

Elevation data is expected to be encoded using lerc, which is an open source method for encoding (and compressing?) image data: GitHub - Esri/lerc: Limited Error Raster Compression 

My feeling based on your description and the error message you're getting is that the image service you've set up isn't serving up lerc encoded data and therefore the JS API isn't equipped to handle it.  Also, my understanding is that the JS API expects image services suitable for backing elevation layers to be cached, as elevation data is assumed to have various levels of detail.

I'm not sure whether an image server license is required for publishing elevation layers, but here's a list of steps to get an elevation layer published: Publish an elevation image service—Documentation | ArcGIS Enterprise

Another troubleshooting option would be to compare your image service's page with the world elevation page: WorldElevation3D/Terrain3D (ImageServer).  You can see that service page has a TileInfo field that specifies the LODs, and that the format is LERC.

View solution in original post

0 Kudos
2 Replies
ThomasSolow
Frequent Contributor

Elevation data is expected to be encoded using lerc, which is an open source method for encoding (and compressing?) image data: GitHub - Esri/lerc: Limited Error Raster Compression 

My feeling based on your description and the error message you're getting is that the image service you've set up isn't serving up lerc encoded data and therefore the JS API isn't equipped to handle it.  Also, my understanding is that the JS API expects image services suitable for backing elevation layers to be cached, as elevation data is assumed to have various levels of detail.

I'm not sure whether an image server license is required for publishing elevation layers, but here's a list of steps to get an elevation layer published: Publish an elevation image service—Documentation | ArcGIS Enterprise

Another troubleshooting option would be to compare your image service's page with the world elevation page: WorldElevation3D/Terrain3D (ImageServer).  You can see that service page has a TileInfo field that specifies the LODs, and that the format is LERC.

0 Kudos
by Anonymous User
Not applicable

Thanks - there in fact were 2 settings in Services Editor to specify LERC. The defaults allowed other formats

0 Kudos