Rev 3408 | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
* Copyright (C) 2009 Christian Gawron
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* Author: Christian Gawron
* Create date: 03-Jul-2009
*/
package uk.me.parabola.mkgmap.reader.dem;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Writer;
import java.nio.MappedByteBuffer;
import uk.me.parabola.imgfmt.ExitException;
import static java.nio.channels.FileChannel.MapMode.READ_ONLY;
public class HGTDEM extends DEM
{
private MappedByteBuffer buffer ;
public HGTDEM(String dataPath, double minLat, double minLon, double maxLat, double maxLon)
{
this.lat = (int) minLat;
this.lon = (int) minLon;
if (maxLat > lat+1 || maxLon > lon+1)
throw new ExitException("Area too large (must not span more than one SRTM file)");
String northSouth = lat < 0 ? "S" : "N";
String eastWest = lon > 0 ? "E" : "W";
String fileName = String.format("%s/%s%02d%s%03d.hgt", dataPath,
northSouth, lat < 0 ? -lat : lat,
eastWest, lon < 0 ? -lon : lon);
try {
FileInputStream is = new FileInputStream(fileName);
buffer = is.getChannel().map(READ_ONLY, 0, 2*(M+1)*(M+1));
}
catch (Exception e) {
throw new ExitException("failed to open " + fileName, e);
}
}
public void read(int minLon, int minLat, int maxLon, int maxLat)
{
}
public double ele(int x, int y)
{
return buffer.getShort(2*((M-y)*(M+1)+x))+delta;
}
public void serializeCopyRight(Writer out) throws IOException
{
out.write(" <copyright>\n");
out.write(" Contour lines generated from DEM data by NASA\n");
out.write(" </copyright>\n");
}
}