Terrain Correction not working with ASTER data in GPT

I’m using GPT to processing some Sentinel-1 (and RCM) images in an area above 60 deg N. This means that SRTM 3-sec data are not available anymore for the Terrain Correction step. In other posts on this forum I saw recommendations to use ASTER data as a relatively high-resolution alternative, so I am pursuing this. However, it’s not working properly.

I manually downloaded the ASTER tiles from the NASA Earthdata website. I first uploaded my study area geojson and then searched for “ASTER Global Digital Elevation Model V003”. I downloaded all tiles that intersected my study area. I saved the downloaded GeoTIFFs in the following folder: “c:\Users\USERNAME\.snap\auxdata\dem\ASTER 1sec GDEM”.

Note: This was a fresh installation of SNAP, so I had to manually make the “dem” and “ASTER 1sec GDEM” folders (strangely, DEM.AsterDEMDataPath = ${demPath}/ASTER in the snap.auxdata.properties folder, but I saw in other posts that it should be the former, and also saw that in a different test, SNAP made a folder called “ASTER 1sec GDEM”).

For testing purposes, I’ve selected a location south of 60 deg N, so I can compare performance between ASTER and SRTM. I have a GPT file that works perfectly with SRTM 3-sec data. However, when I change:

<demName>SRTM 3Sec</demName>
to:
<demName>ASTER 1sec GDEM</demName>

…I start to get errors like the one below in the GPT log. Does anyone have ideas as to what is causing these errors, and what I can do about it?

.SEVERE: com.sun.xml.bind.v2.util.XmlFactory: null
org.xml.sax.SAXNotRecognizedException: Feature ‘http://javax.xml.XMLConstants/feature/secure-processing’ is not recognized.
at org.apache.xerces.parsers.AbstractSAXParser.setFeature(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.setFeatures(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.(Unknown Source)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParserImpl(Unknown Source)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(Unknown Source)
at com.sun.xml.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:106)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:124)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
at it.geosolutions.imageioimpl.plugins.tiff.gdal.GDALMetadataParser.parse(GDALMetadataParser.java:60)
at it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader.initializeFromMetadata(TIFFImageReader.java:1337)
at it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader.seekToImage(TIFFImageReader.java:865)
at it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader.seekToImage(TIFFImageReader.java:822)
at it.geosolutions.imageioimpl.plugins.tiff.TIFFImageReader.getWidth(TIFFImageReader.java:1080)
at org.esa.snap.dataio.geotiff.GeoTiffImageReader.getImageWidth(GeoTiffImageReader.java:160)
at org.esa.snap.dataio.geotiff.GeoTiffProductReader.readProduct(GeoTiffProductReader.java:230)
at org.esa.snap.dataio.geotiff.GeoTiffProductReader.readProductNodesImpl(GeoTiffProductReader.java:136)
at org.esa.snap.core.dataio.AbstractProductReader.readProductNodes(AbstractProductReader.java:178)
at org.esa.snap.core.dataop.dem.ElevationFile.getLocalFile(ElevationFile.java:137)
at org.esa.snap.core.dataop.dem.ElevationFile.getFile(ElevationFile.java:104)
at org.esa.snap.core.dataop.dem.ElevationFile.getTile(ElevationFile.java:84)
at org.esa.snap.core.dataop.dem.BaseElevationModel.getSamples(BaseElevationModel.java:169)
at org.esa.snap.core.dataop.resamp.BilinearInterpolationResampling.resample(BilinearInterpolationResampling.java:82)
at org.esa.snap.core.dataop.dem.BaseElevationModel.getElevation(BaseElevationModel.java:107)
at org.esa.snap.dem.dataio.DEMFactory.getLocalDEM(DEMFactory.java:182)
at org.esa.s1tbx.sar.gpf.geometric.RangeDopplerGeocodingOp.computeTileStack(RangeDopplerGeocodingOp.java:888)
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.cobbleFloat(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.datamodel.Band.readRasterData(Band.java:309)
at org.esa.snap.core.dataio.ProductSubsetBuilder.readBandRasterDataRegion(ProductSubsetBuilder.java:393)
at org.esa.snap.core.dataio.ProductSubsetBuilder.readBandRasterDataImpl(ProductSubsetBuilder.java:330)
at org.esa.snap.core.dataio.AbstractProductReader.readBandRasterData(AbstractProductReader.java:277)
at org.esa.snap.core.gpf.common.SubsetOp.computeTile(SubsetOp.java:290)
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.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.raster.gpf.LinearTodBOp.computeTile(LinearTodBOp.java:116)
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.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.internal.OperatorImageTileStack.computeRect(OperatorImageTileStack.java:116)
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)

I cannot comment on the error but please use Copernicus DEM instead, it is also of higher quality than the ASTER DEM.

Typo? Missing \ after USERNAME.

Thanks. This was caused by formatting of the forum post (. apparently deletes the ). I’ve fixed it in the post (in the original file it’s correct).

Ok, I changed
<demName>ASTER 1sec GDEM</demName>
to
<demName>Copernicus 30m Global DEM</demName>

…and now it seems to work without error!

(This doesn’t answer the question posed, but may be a solution for my situation, as I’m not attached to using ASTER data).

@mengdahl, I see that Copernicus 30m Global DEM is new since 1 year ago. Is this considered better than SRTM 3Sec data? What is the URL that it downloads from? I don’t see any corresponding URL listed in the snap.auxdata.properties file.

Just following up on this. If I want to download the Copernicus 30m Global DEM manually, where can I do that? I see that there are paths for other data sources in this format:

https://step.esa.int/auxdata/dem/DATASOURCE

But it’s not clear to me where the Copernicus 30m DEM is downloaded from. I need to know this so I can either download the tiles manually or be able to whitelist the URL.

First register here: https://cdsportal.copernicus.eu/en/home
Then you can download the tiles here: https://panda.copernicus.eu/web/cds-catalogue/panda