epfl-archive/Alpano/tests/ch/epfl/alpano/dem/DrawElevationProfile.java

70 lines
2.5 KiB
Java
Raw Permalink Normal View History

2022-04-07 18:43:21 +02:00
package ch.epfl.alpano.dem;
import static java.lang.Math.toRadians;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import javax.imageio.ImageIO;
import ch.epfl.alpano.GeoPoint;
final class DrawElevationProfile {
final static File HGT_FILE = new File("HGT"+File.separatorChar+"N46E006.hgt");
final static double MAX_ELEVATION = 1_500;
final static int LENGTH = 111_000;
final static double AZIMUTH = toRadians(27.97);
final static double LONGITUDE = toRadians(6.15432);
final static double LATITUDE = toRadians(46.20562);
final static int WIDTH = 800, HEIGHT = 100;
public static void main(String[] as) throws Exception {
DiscreteElevationModel dDEM =
new HgtDiscreteElevationModel(HGT_FILE);
ContinuousElevationModel cDEM =
new ContinuousElevationModel(dDEM);
GeoPoint o =
new GeoPoint(LONGITUDE, LATITUDE);
ElevationProfile p1 =
new ElevationProfile(cDEM, o, AZIMUTH, (int)(LENGTH/3));
GeoPoint gP1 = p1.positionAt((int)LENGTH/3);
ElevationProfile p2 =
new ElevationProfile(cDEM, p1.positionAt((int)LENGTH/3), AZIMUTH+toRadians(6.0),2*((int)LENGTH/3));
GeoPoint gP2 = p2.positionAt(2*((int)LENGTH/3));
ElevationProfile p3 = new ElevationProfile (cDEM,p2.positionAt(2*((int)LENGTH/3)), AZIMUTH, LENGTH);
ArrayList<GeoPoint> trekkingSpots = new ArrayList<GeoPoint>(Arrays.asList(o,gP1,gP2));
ArrayList<ElevationProfile> profiles= new ArrayList<ElevationProfile>();
for (int index = 0; index < trekkingSpots.size()-1; index++){
GeoPoint current= trekkingSpots.get(index);
GeoPoint next = trekkingSpots.get(index+1);
ElevationProfile evP= new ElevationProfile(cDEM, current,current.azimuthTo(next), current.distanceTo(next));
profiles.add(evP);
}
CompositElevationProfile p = new CompositElevationProfile(profiles);
int BLACK = 0x00_00_00, WHITE = 0xFF_FF_FF;
BufferedImage i =
new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < WIDTH; ++x) {
double pX = x * (double) LENGTH / (WIDTH - 1);
double pY = p.elevationAt(pX);
int yL = (int)((pY / MAX_ELEVATION) * (HEIGHT - 1));
for (int y = 0; y < HEIGHT; ++y) {
int color = y < yL ? BLACK : WHITE;
i.setRGB(x, HEIGHT - 1 - y, color);
}
}
dDEM.close();
ImageIO.write(i, "png", new File("tests/ch/epfl/alpano/dem/profile.png"));
}
}