import java.applet.*; import java.awt.*; import java.awt.image.*; import java.*; import java.lang.*; import java.util.*; import java.net.*; public class ShowTemperature extends Applet { Image[] img; Image backimg; int[][] pixels; int num, index; int width, height; String stemp, slat, slong; int curX, curY; FontMetrics fm; Font myFont, boldFont; PSnav nav; double tLow, tHigh; int bLow, bHigh; EnhancementTable et; public void init() { slat = " "; slong = " "; stemp = " "; curX = 0; curY = 0; index = 0; String ifn = getParameter("image_filename"); String scaling = getParameter("scale"); StringTokenizer st = new StringTokenizer(scaling, ","); tLow = Double.valueOf(st.nextToken().trim()).doubleValue(); tHigh = Double.valueOf(st.nextToken().trim()).doubleValue(); bLow = Integer.parseInt(st.nextToken().trim()); bHigh = Integer.parseInt(st.nextToken().trim()); StringTokenizer ist = new StringTokenizer(ifn,","); num = ist.countTokens(); if (num < 1) num = 1; img = new Image[num]; pixels = new int[num][]; try { String ets = getParameter("et_filename"); GetImageFile gif = new GetImageFile(this); // URL eturl = gif.getFile(ets); URL eturl = new URL(ets); et = new EnhancementTable(eturl); for (int i=0; i width) { xPos = curX - w - 10; } int yPos = curY; if ( (yPos - h) < 5) { yPos = h+5; } else if ( (yPos + 3*h+5) > height) { yPos = height - 3*h - 5; } drawBold(gb,"Temp = "+stemp,xPos,yPos); drawBold(gb,"Lat = "+slat,xPos+4,yPos+h); drawBold(gb,"Long = "+slong,xPos+8,yPos+2*h); g.drawImage(backimg,0,0,this); } void drawBold(Graphics g, String s, int x, int y) { g.setColor(Color.black); g.drawString(s,x-1,y-1); g.drawString(s,x+1,y-1); g.drawString(s,x-1,y+1); g.drawString(s,x+1,y+1); g.setColor(Color.white); g.drawString(s,x,y); return; } public boolean mouseDown(Event e, int x, int y) { index = index + 1; if (index >= num) index = 0; return mouseMove(e, x, y); } public boolean mouseMove(Event e, int x, int y) { if (x > width-1 || y > height-1) return true; if (x < 0 || y < 0 ) return true; int value = et.getIndex(pixels[index][x + y*width]); //System.out.println("#### value="+value); // well-known formulae for converting between brightness and temperature if (value < bLow || value > bHigh) { stemp = "---"; } else { double temp; temp = tHigh - (tHigh - tLow)*(bHigh - value)/(bHigh - bLow); int it = (int) Math.round(temp * 10 - 2731.6); stemp = new String( (it / 10) +"."+ (Math.abs(it) % 10) + "\u00b0"+"C"); } double[][] lineele = new double[2][1]; lineele[0][0] = (double)x; lineele[1][0] = (double)y; double[][] latlon = nav.toLatLon(lineele); int ll = (int) Math.round(Math.abs(latlon[0][0]) * 100.); String ns = "N"; if (latlon[0][0] < 0.0) ns ="S"; int lo = (int) Math.round(Math.abs(latlon[1][0]) * 100.); String ew = "E"; if (latlon[1][0] < 0.0) ew ="W"; slat = new String((ll/100)+"."+(ll%100)+ns); slong = new String((lo/100)+"."+(lo%100)+ew); //System.out.println("#### lineele[0][0] = "+lineele[0][0]+ " lineele[1][0] = "+lineele[1][0]+" slat/slong = "+slat+" "+slong); curX = x; curY = y; repaint(); return true; } // return String to two decimal places for value v String c2s(double v) { String s = v+".000"; int i = s.indexOf("."); return (s.substring(0,i+3)); } }