Reading ASTER DEM Data

  • Follow


Hi,

How can I read ASTER DEM data set.
http://en.wikipedia.org/wiki/Advanced_Spaceborne_Thermal_Emission_and_Reflection_Radiometer

I have folder that contains tiles of ASTER in tif format, and I want
to write a function that take lon/lat as arguments and return a number
as an elevation.

I wrote a class in Java to do that, but I think I have something
wrong. The readings seems not to be correct!

import java.util.concurrent.ConcurrentHashMap;

import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.media.jai.iterator.RandomIter;
import javax.media.jai.iterator.RandomIterFactory;

public class AsterDemReader implements DemProvider {

    // base path for the tiles
    private String basePath;

    // tiles RAM cache
    private ConcurrentHashMap<String, RandomIter> cache = new
ConcurrentHashMap<String, RandomIter>();

    public AsterDemReader(String basePath) {
        this.basePath = basePath;
    }

    private RandomIter getTile(String tileName) {
        RandomIter iter = cache.get(tileName);
        if (iter == null) {
            PlanarImage image = JAI.create("fileload", String.format(
                    "%s/ASTGTM_%s_dem.tif", basePath, tileName));
            iter = RandomIterFactory.create(image, null);
            cache.put(tileName, iter);
        }
        return iter;
    }

    // lat and lon in decimal degrees
    /*
     * (non-Javadoc)
     *
     *
     */
    public double getElevation(double lat, double lon) throws
Exception {

        lat -= .0001389;
        lon -= .0001389;

        // file name
        int latDegree = (int) Math.abs(lat);
        int lonDegree = (int) Math.abs(lon);

        char northSouth = (lat < 0) ? 'E' : 'N';
        char eastWest = (lon < 0) ? 'W' : 'E';

        String tileName = String.format("%c%2d%c%3d", northSouth,
latDegree,
                eastWest, lonDegree).replace(" ", "0");
        // the frection only
        lat -= (int) lat;
        lon -= (int) lon;

        lat = Math.abs(lat);
        lon = Math.abs(lon);

        // calculate x and y of the image
        int y = 3600 - (int) (3600 * lat);
        int x = (int) (3600 * lon);
        // System.out.println(String.format("x=%d y=%d", x, y));

        // get the image from cache

        RandomIter iter = getTile(tileName);
        double av = iter.getSampleDouble(x, y, 0);

        return av;
    }

    public static void main(String args[]) throws Exception {
        DemProvider aster = new AsterDemReader("D:/OldHP");
        double elev = aster.getElevation(33.5, 42.5);

        System.out.println(elev);
    }
}

Could anyone please point me where I'm getting wrong? where can I find
more info about reading ASTER DEM?

Best Regards,
0
Reply Ahmad 9/28/2009 9:04:05 PM

Ahmad,

you are not providing enough information about your data and your GIS.

 From your code, I would focus on how you compute the X;Y coordinates. 
You are not considering any projection nor any resolution and you assume 
that the north is straight up. I suggest you to search the available 
libraries for doing such conversion.

Jean

Ahmad wrote:
> Hi,
> 
> How can I read ASTER DEM data set.
> http://en.wikipedia.org/wiki/Advanced_Spaceborne_Thermal_Emission_and_Reflection_Radiometer
> 
> I have folder that contains tiles of ASTER in tif format, and I want
> to write a function that take lon/lat as arguments and return a number
> as an elevation.
> 
> I wrote a class in Java to do that, but I think I have something
> wrong. The readings seems not to be correct!
> 
> import java.util.concurrent.ConcurrentHashMap;
> 
> import javax.media.jai.JAI;
> import javax.media.jai.PlanarImage;
> import javax.media.jai.iterator.RandomIter;
> import javax.media.jai.iterator.RandomIterFactory;
> 
> public class AsterDemReader implements DemProvider {
> 
>     // base path for the tiles
>     private String basePath;
> 
>     // tiles RAM cache
>     private ConcurrentHashMap<String, RandomIter> cache = new
> ConcurrentHashMap<String, RandomIter>();
> 
>     public AsterDemReader(String basePath) {
>         this.basePath = basePath;
>     }
> 
>     private RandomIter getTile(String tileName) {
>         RandomIter iter = cache.get(tileName);
>         if (iter == null) {
>             PlanarImage image = JAI.create("fileload", String.format(
>                     "%s/ASTGTM_%s_dem.tif", basePath, tileName));
>             iter = RandomIterFactory.create(image, null);
>             cache.put(tileName, iter);
>         }
>         return iter;
>     }
> 
>     // lat and lon in decimal degrees
>     /*
>      * (non-Javadoc)
>      *
>      *
>      */
>     public double getElevation(double lat, double lon) throws
> Exception {
> 
>         lat -= .0001389;
>         lon -= .0001389;
> 
>         // file name
>         int latDegree = (int) Math.abs(lat);
>         int lonDegree = (int) Math.abs(lon);
> 
>         char northSouth = (lat < 0) ? 'E' : 'N';
>         char eastWest = (lon < 0) ? 'W' : 'E';
> 
>         String tileName = String.format("%c%2d%c%3d", northSouth,
> latDegree,
>                 eastWest, lonDegree).replace(" ", "0");
>         // the frection only
>         lat -= (int) lat;
>         lon -= (int) lon;
> 
>         lat = Math.abs(lat);
>         lon = Math.abs(lon);
> 
>         // calculate x and y of the image
>         int y = 3600 - (int) (3600 * lat);
>         int x = (int) (3600 * lon);
>         // System.out.println(String.format("x=%d y=%d", x, y));
> 
>         // get the image from cache
> 
>         RandomIter iter = getTile(tileName);
>         double av = iter.getSampleDouble(x, y, 0);
> 
>         return av;
>     }
> 
>     public static void main(String args[]) throws Exception {
>         DemProvider aster = new AsterDemReader("D:/OldHP");
>         double elev = aster.getElevation(33.5, 42.5);
> 
>         System.out.println(elev);
>     }
> }
> 
> Could anyone please point me where I'm getting wrong? where can I find
> more info about reading ASTER DEM?
> 
> Best Regards,
0
Reply jeanh 9/28/2009 9:50:15 PM


1 Replies
282 Views

(page loaded in 0.052 seconds)

5/24/2013 6:59:05 AM


Reply: