Copernicus DEM elevation model fails at latitudes where resolution of DEM changes
Activity
Martin Böttcher 23 July 2024 at 10:28
I have added a preliminary fix to the 9.x.calvalus branch: I am not sure it is the final fix because it changes the resampling method from bi-cubic to nearest close to the latitudes where DEM resolution changes.
Martin Böttcher 23 July 2024 at 10:14
interpolation errors, or rather failures. This can be re-produced using a resampled S2 granule 32VLM and adding elevation based on the Copernicus 90m Global DEM to it, as done e.g. in Idepix. The trace below shows that four DEM tiles are requested. Two of them are north of 60 degrees north and have 600 columns only (0..599). Access to column 600 fails for them.
S2B_MSIL1C_20220518T105619_N0400_R094_T32VLM_20220518T114320-resampled.nc
Idepix cloud screening ...
Executing processing graph
Initializing Elevation Model
100% done.
100% done.
100% done.
100% done.
100% done.
Copernicus_DSM_COG_30_N60_00_E005_00_DEM.tif
Copernicus_DSM_COG_30_N60_00_E006_00_DEM.tif
Copernicus_DSM_COG_30_N60_00_E007_00_DEM.tif
Copernicus_DSM_COG_30_N59_00_E005_00_DEM.tif
600
done.
org.esa.snap.core.gpf.graph.GraphException: [NodeId: idepix] 600
at org.esa.snap.core.gpf.graph.NodeContext.initTargetProduct(NodeContext.java:79)
at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:199)
at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:182)
at org.esa.snap.core.gpf.graph.GraphContext.initNodeContext(GraphContext.java:182)
at org.esa.snap.core.gpf.graph.GraphContext.initOutput(GraphContext.java:166)
at org.esa.snap.core.gpf.graph.GraphContext.<init>(GraphContext.java:85)
at org.esa.snap.core.gpf.graph.GraphContext.<init>(GraphContext.java:58)
at org.esa.snap.core.gpf.graph.GraphProcessor.executeGraph(GraphProcessor.java:127)
at org.esa.snap.core.gpf.main.DefaultCommandLineContext.executeGraph(DefaultCommandLineContext.java:86)
at org.esa.snap.core.gpf.main.CommandLineTool.executeGraph(CommandLineTool.java:547)
at org.esa.snap.core.gpf.main.CommandLineTool.runGraph(CommandLineTool.java:391)
at org.esa.snap.core.gpf.main.CommandLineTool.runGraphOrOperator(CommandLineTool.java:287)
at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:188)
at org.esa.snap.core.gpf.main.CommandLineTool.run(CommandLineTool.java:121)
at org.esa.snap.core.gpf.main.GPT.run(GPT.java:59)
at org.esa.snap.core.gpf.main.GPT.main(GPT.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.esa.snap.runtime.Launcher.lambda$run$0(Launcher.java:55)
at org.esa.snap.runtime.Engine.runClientCode(Engine.java:189)
at org.esa.snap.runtime.Launcher.run(Launcher.java:51)
at org.esa.snap.runtime.Launcher.main(Launcher.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:84)
at com.install4j.runtime.launcher.UnixLauncher.start(UnixLauncher.java:66)
at install4j.org.esa.snap.runtime.Launcher_gpt.main(Unknown Source)
Caused by: org.esa.snap.core.gpf.OperatorException: 600
at org.esa.snap.core.gpf.internal.OperatorExecutor$GPFImagingListener.errorOccurred(OperatorExecutor.java:381)
at com.sun.media.jai.util.SunTileScheduler.sendExceptionToListener(Unknown Source)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(Unknown Source)
at javax.media.jai.OpImage.getTile(Unknown Source)
at javax.media.jai.PlanarImage.getData(Unknown Source)
at com.bc.ceres.glevel.MultiLevelImage.getData(MultiLevelImage.java:64)
at org.esa.snap.core.gpf.internal.OperatorContext.getSourceTile(OperatorContext.java:449)
at org.esa.snap.core.gpf.internal.OperatorContext.getSourceTile(OperatorContext.java:435)
at org.esa.snap.core.gpf.Operator.getSourceTile(Operator.java:459)
at org.esa.snap.idepix.s2msi.S2IdepixClassificationOp.computeTileStack(S2IdepixClassificationOp.java:184)
at org.esa.snap.core.gpf.internal.OperatorImageTileStack.computeRect(OperatorImageTileStack.java:122)
at org.esa.snap.core.gpf.internal.OperatorImageTileStack.computeTile(OperatorImageTileStack.java:86)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(Unknown Source)
at javax.media.jai.OpImage.getTile(Unknown Source)
at javax.media.jai.PlanarImage.cobbleInt(Unknown Source)
at javax.media.jai.PlanarImage.getData(Unknown Source)
at com.bc.ceres.glevel.MultiLevelImage.getData(MultiLevelImage.java:64)
at org.esa.snap.core.gpf.internal.OperatorContext.getSourceTile(OperatorContext.java:449)
at org.esa.snap.core.gpf.internal.OperatorContext.getSourceTile(OperatorContext.java:435)
at org.esa.snap.core.gpf.Operator.getSourceTile(Operator.java:459)
at org.esa.snap.idepix.s2msi.operators.S2IdepixCloudPostProcessOp.computeTile(S2IdepixCloudPostProcessOp.java:182)
at org.esa.snap.core.gpf.internal.OperatorImage.computeRect(OperatorImage.java:82)
at javax.media.jai.SourcelessOpImage.computeTile(Unknown Source)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(Unknown Source)
at javax.media.jai.OpImage.getTile(Unknown Source)
at javax.media.jai.PlanarImage.cobbleInt(Unknown Source)
at javax.media.jai.PlanarImage.getData(Unknown Source)
at com.bc.ceres.glevel.MultiLevelImage.getData(MultiLevelImage.java:64)
at javax.media.jai.PlanarImage.getExtendedData(Unknown Source)
at org.esa.snap.core.gpf.internal.OperatorContext.getSourceTile(OperatorContext.java:447)
at org.esa.snap.core.gpf.Operator.getSourceTile(Operator.java:479)
at org.esa.snap.idepix.s2msi.operators.cloudshadow.S2IdepixPreCloudShadowOp.computeTileStack(S2IdepixPreCloudShadowOp.java:171)
at org.esa.snap.core.gpf.internal.OperatorImageTileStack.computeRect(OperatorImageTileStack.java:122)
at org.esa.snap.core.gpf.internal.OperatorImageTileStack.computeTile(OperatorImageTileStack.java:86)
at com.sun.media.jai.util.SunTileScheduler.scheduleTile(Unknown Source)
at javax.media.jai.OpImage.getTile(Unknown Source)
at com.sun.media.jai.util.RequestJob.compute(Unknown Source)
at com.sun.media.jai.util.WorkerThread.run(Unknown Source)
Caused by: org.esa.snap.core.gpf.OperatorException: 600
at org.esa.snap.engine_utilities.gpf.OperatorUtils.catchOperatorException(OperatorUtils.java:434)
at org.esa.snap.dem.gpf.AddElevationOp.computeTile(AddElevationOp.java:209)
at org.esa.snap.core.gpf.internal.OperatorImage.computeRect(OperatorImage.java:82)
at javax.media.jai.SourcelessOpImage.computeTile(Unknown Source)
... 36 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 600
at org.esa.snap.core.dataop.dem.BaseElevationTile.getSample(BaseElevationTile.java:70)
at org.esa.snap.core.dataop.dem.BaseElevationModel.getSamples(BaseElevationModel.java:177)
at org.esa.snap.core.dataop.resamp.BiCubicInterpolationResampling.resample(BiCubicInterpolationResampling.java:105)
at org.esa.snap.dem.dataio.copernicus.CopernicusElevationModel.getElevation(CopernicusElevationModel.java:73)
at org.esa.snap.dem.dataio.DEMFactory.getLocalDEM(DEMFactory.java:182)
at org.esa.snap.dem.gpf.AddElevationOp.computeTile(AddElevationOp.java:182)
... 38 more
Error: [NodeId: idepix] 600
Copernicus DEM changes resolution above 60 deg. This leads to interpolation errors