# ------------------------------------------------------------ # TERCOR.sml # ------------------------------------------------------------ # SET WARNING LEVEL: Refer to B5 & B6. $warnings 3 # ------------------------------------------------------------ # DEFINE VARIABLES RELATED TO TERCOR MODEL: numeric p,flr; numeric s,fCB,fBL,fGL,fYL,fRL,fRE; numeric fNA,fNB,fMA,fMB,fMC,fMD,fME,fMF,fMG; numeric srfi1,srfi,srfimax; flr = 0.12; p = 2.0; srfimax = 10000; # ------------------------------------------------------------ # DEFINE VARIABLES FOR GENERAL CHARACTER STRINGS: # Refer to B7. string t$,p$,p1$,p2$,p3$,p4$,p5$,p6$,p7$,p8$,p9$; string p10$,p11$,p12$,p13$,p14$,p15$,p16$,p17$,p18$,p19$; string p20$,p21$; # ------------------------------------------------------------ # CLEAR CONSOLE WINDOW & REQUEST REPOSITIONING: # Refer to B7, B8 & B9. clear(); p1$ = "CONSOLE-WINDOW ADJUSTMENT\n"; p2$ = "* REPOSITION the CONSOLE WINDOW.\n"; p3$ = "* Then, CLICK the OK Button."; p$ = p1$ + p2$ + p3$; PopupMessage(p$); # ------------------------------------------------------------ # DEFINE proc checkHisto(Band) # PURPOSE: Check that Input Raster has a Full (Unsampled) # Histogram. If Not, Then Recompute Histogram. proc checkHisto (raster Band) begin local numeric sampleInt; sampleInt = HistogramGetSampleInterval(Band); if (sampleInt > 1) begin DeleteHistogram(Band); CreateHistogram(Band,0); end else if (sampleInt == -1) then begin CreateHistogram(Band,0); end end # ------------------------------------------------------------ # DEFINE PROCEDURE writeTitle: Refer to B13 & B14. # PURPOSE: WRITES TITLE & AUTHOR INFO TO CONSOLE WINDOW. proc writeTitle() begin printf("TERCOR.sml:\n"); printf(" VERSION: November 15, 2005\n"); printf(" PURPOSE: CORRECT SRFI RASTERS "); printf("FOR TERRAIN-SHADING EFFECTS\n"); printf(" DETAILS: FAQs_by_Jack A & D\n"); printf(" AUTHOR: Dr. Jack F. Paris\n"); printf(" CONTACT INFO: jparis37@msn.com "); printf(" 303-775-1195\n"); printf(" ALLOWED USE: ONLY NON-COMMERCIAL\n\n"); end # ------------------------------------------------------------ # WRITE TITLE & AUTHOR INFORMATION: Refer to B14. writeTitle(); # ------------------------------------------------------------ # DECLARE VARIABLES RELATED TO USER INPUTS: # Refer to B15 & B16. string site$ = "Stockton, CA"; numeric imager,vnir; # ------------------------------------------------------------ # DECLARE VARIABLES DIRECTLY RELATED TO USER PROVIDED VALUES: # Refer to B15 & B16. string imager$; # ------------------------------------------------------------ # DECLARE STRING VARIABLE RELATED TO SRFI RASTERS: # Refer to DXX. string rtype$ = "16-bit unsigned"; string stype$ = "8-bit unsigned"; # ------------------------------------------------------------ # DECLARE STRING VARIABLE RELATED TO ALL RASTER TYPES: # Refer to DXX. # ------------------------------------------------------------ # DECLARE VARIABLES RELATED TO BOOLEAN ENABLERS: # Refer to B15 & B16 numeric pCB,pBL,pGL,pYL,pRL,pRE; numeric pNA,pNB,pMA,pMB,pMC,pMD,pME,pMF,pMG,iip,isp,ipp; # ------------------------------------------------------------ # DECLARE VARIBLES RELATED TO FOR-EACH LOOPS: numeric i,nlins,ncols,maxi; # ------------------------------------------------------------ # DECLARE VARIABLES RELATED TO PVI & PBI: Refer to B15 & B16. numeric pfac,angrad,sinang,cosang; numeric pbioff,pvioff,srfiNRint,bslineslope,maxpvipbi; numeric srfiRL,srfiNR,tsrfiNR,pbif,pbi,pvif,pvi; # ------------------------------------------------------------ # DECLARE LIST OF POSSIBLE INPUT RASTERS: raster SRFICB1,SRFIBL1,SRFIGL1,SRFIYL1,SRFIRL1,SRFIRE1; raster SRFINA1,SRFINB1,SRFIMA1,SRFIMB1,SRFIMC1,SRFIMD1; raster SRFIME1,SRFIMF1,SRFIMG1; raster PBI1,PVI1,SHADING; # ------------------------------------------------------------ # DECLARE LIST OF POSSIBLE OUTPUT RASTERS: raster SRFICB,SRFIBL,SRFIGL,SRFIYL,SRFIRL,SRFIRE; raster SRFINA,SRFINB,SRFIMA,SRFIMB,SRFIMC,SRFIMD,SRFIME; raster SRFIMF,SRFIMG; raster PBI,PVI; # ------------------------------------------------------------ # DECLARE VARIABLES RELATED TO WAVELENGTH-BASED MODELS: # Refer to B15 & B16. numeric wLenCB,wLenBL,wLenGL,wLenYL,wLenRL,wLenRE; numeric wLenNA,wLenNB,wLenMA,wLenMB,wLenMC,wLenMD,wLenME; numeric wLenMF,wLenMG; # ------------------------------------------------------------ # DECLARE VARIABLES RELATED TO SUN ANGLES: numeric sunelevang,sunaziang; # ------------------------------------------------------------ # GET NAME OF SITE FROM THE USER: Refer to B17. t$ = "SITE NAME"; p1$ = "SITE-NAME ENTRY\n"; p2$ = "* ENTER the SITE NAME.\n"; p3$ = "* Then, CLICK the OK Button.\n\n"; p4$ = "SITE-NAME ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$; site$ = PopupString(p$,site$,t$); printf(" SITE NAME: %s\n",site$); # ------------------------------------------------------------ # GET IMAGER NUMBER FROM THE USER: Refer to B17. p1$ = "IMAGER-NUMBER:\n"; p2$ = " IMAGER\n"; p3$ = " NUMBER: SYSTEM NAME\n"; p4$ = " 1: QuickBird 2 MS\n"; p5$ = " 2: Ikonos 2 MS\n"; p6$ = " 3: OrbView 3 MS\n"; p7$ = " 4: Landsat 7 ETM+\n"; p8$ = " 5: Landsat 5 TM\n"; p9$ = " 6: Landsat 5 MSS\n"; p10$ = " 7: Landsat 4 TM\n"; p11$ = " 8: Landsat 4 MSS\n"; p12$ = " 9: Landsat 3 MSS\n"; p13$ = " 10: Landsat 2 MSS\n"; p14$ = " 11: Landsat 1 MSS\n"; p15$ = " 12: Terra ASTER\n"; p16$ = " 13: Terra MODIS\n"; p17$ = " 14: Aqua MODIS\n"; p18$ = "* Either ACCEPT the Default NUMBER,\n"; p19$ = "* Or, SELECT a Different NUMBER.\n"; p20$ = "* Then, CLICK the OK Button.\n\n"; p21$ = "NUMBER ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$ + p5$ + p6$ + p7$ + p8$ + p9$; p$ = p$ + p10$ + p11$ + p12$ + p13$ + p14$ + p15$ + p16$; p$ = p$ + p17$ + p18$ + p19$ + p20$ + p21$; imager = PopupNum(p$,4,1,14,0); # ------------------------------------------------------------ # GENERATE IMAGER-SPECIFIC PARAMETERS: Refer to B25. if (imager == 1) then begin imager$ = "QuickBird 2 MS"; pBL=1; pNA=1; wLenBL=0.482; wLenGL=0.548; wLenRL=0.654; wLenNA=0.809; end if (imager == 2) then begin imager$ = "Ikonos 2 MS"; pBL=1; pNA=1; wLenBL=0.480; wLenGL=0.551; wLenRL=0.665; wLenNA=0.805; end if (imager == 3) then begin imager$ = "OrbView 3 MS"; pBL=1; pNA=1; wLenBL=0.482; wLenGL=0.548; wLenRL=0.654; wLenNA=0.809; end if (imager == 4) then begin imager$ = "Landsat 7 ETM+"; pBL=1; pNA=1; pMB=1; pMC=1; wLenBL=0.482; wLenGL=0.565; wLenRL=0.660; wLenNA=0.825; wLenMB=1.650; wLenMC=2.220; end if (imager == 5) then begin imager$ = "Landsat 5 TM"; pBL=1; pNA=1; pMB=1; pMC=1; wLenBL=0.482; wLenGL=0.565; wLenRL=0.660; wLenNA=0.825; wLenMB=1.650; wLenMC=2.220; end if (imager == 6) then begin imager$ = "Landsat 5 MSS"; pRE=1; pNB=1; wLenGL=0.550; wLenRL=0.650; wLenRE=0.750; wLenNB=0.950; end if (imager == 7) then begin imager$ = "Landsat 4 TM"; pBL=1; pNA=1; pMB=1; pMC=1; wLenBL=0.482; wLenGL=0.548; wLenRL=0.660; wLenNA=0.825; wLenMB=1.650; wLenMC=2.220; end if (imager == 8) then begin imager$ = "Landast 4 MSS"; pRE=1; pNB=1; wLenGL=0.550; wLenRL=0.650; wLenRE=0.750; wLenNB=0.950; end if (imager == 9) then begin imager$ = "Landsat 3 MSS"; pRE=1; pNB=1; wLenGL=0.550; wLenRL=0.650; wLenRE=0.750; wLenNB=0.950; end if (imager == 10) then begin imager$ = "Landsat 2 MSS"; pRE=1; pNB=1; wLenGL=0.550; wLenRL=0.650; wLenRE=0.750; wLenNB=0.950; end if (imager == 11) then begin imager$ = "Landsat 1 MSS"; pRE=1; pNB=1; wLenGL=0.550; wLenRL=0.650; wLenRE=0.750; wLenNB=0.950; end if (imager == 12) then begin imager$ = "Terra ASTER"; pNA=1; pMB=1; pMC=1; pMD=1; pME=1; pMF=1; pMG=1; p1$ = "VNIR or ALL OPTION:\n"; p2$ = " OPTION 1: VNIR ONLY\n"; p3$ = " OPTION 2: ALL 9 BANDS\n"; p4$ = "OPTION ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$; vnir = PopupNum(p$,2,1,2,0); if (vnir == 1) then begin pMB=0; pMC=0; pMD=0; pME=0; pMF=0; pMG=0; end wLenGL=0.560; wLenRL=0.660; wLenNA=0.820; wLenMB=1.650; wLenMC=2.165; wLenMD=2.205; wLenME=2.260; wLenMF=2.330; wLenMG=2.395; end if (imager == 13) then begin imager$ = "Terra MODIS"; pBL=1; pNA=1; pMA=1; pMB=1; pMC=1; wLenBL=0.469; wLenGL=0.555; wLenRL=0.645; wLenNA=0.8585; wLenMA=1.240; wLenMB=1.640; wLenMC=2.013; end if (imager == 14) then begin imager$ = "Aqua MODIS"; pBL=1; pNA=1; pMA=1; pMB=1; pMC=1; wLenBL=0.469; wLenGL=0.555; wLenRL=0.645; wLenNA=0.8585; wLenMA=1.240; wLenMB=1.640; wLenMC=2.013; end printf(" IMAGER: %s\n\n",imager$); # ------------------------------------------------------------ # GET fGL VALUE FROM USER: Refer to D2. p1$ = "GL SKY SPECTRAL-IRRADIANCE FRACTION:\n"; p2$ = " fGL ROLE: Determines f for Other Bands)\n"; p3$ = " fGL RANGE: 0.20 to 0.90\n"; p4$ = "* Either ACCEPT the Default FRACTION,\n"; p5$ = "* Or, ENTER a Different FRACTION.\n"; p6$ = "* Then, CLICK the OK Button.\n\n"; p7$ = "FRACTION ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$ + p5$ + p6$ + p7$; fGL = PopupNum(p$,0.40,0.10,1.0,2); # ------------------------------------------------------------ # ASSIGN VALUES TO f-FACTORS: Refer to D2. printf("SKY SPECTRAL-IRRADIANCE FRACTIONS, fBAND:\n"); printf(" BAND wLen fBAND\n"); if (pCB) then begin fCB = flr + (fGL - flr) * (wLenGL / wLenCB)^p; printf(" CB%7.3f%7.3f (MODEL)\n",wLenCB,fCB); end if (pBL) then begin fBL = flr + (fGL - flr) * (wLenGL / wLenBL)^p; printf(" BL%7.3f%7.3f (MODEL)\n",wLenBL,fBL); end printf(" GL%7.3f%7.3f (INPUT)\n",wLenGL,fGL); if (pYL) then begin fYL = flr + (fGL - flr) * (wLenGL / wLenYL)^p; printf(" YL%7.3f%7.3f (MODEL)\n",wLenYL,fYL); end fRL = flr + (fGL - flr) * (wLenGL / wLenRL)^p; printf(" RL%7.3f%7.3f (MODEL)\n",wLenRL,fRL); if (pRE) then begin fRE = flr + (fGL - flr) * (wLenGL / wLenRE)^p; printf(" RE%7.3f%7.3f (MODEL)\n",wLenRE,fRE); end if (pNA) then begin fNA = flr + (fGL - flr) * (wLenGL / wLenNA)^p; printf(" NA%7.3f%7.3f (MODEL)\n",wLenNA,fNA); end if (pNB) then begin fNB = flr + (fGL - flr) * (wLenGL / wLenNB)^p; printf(" NB%7.3f%7.3f (MODEL)\n",wLenNB,fNB); end if (pMA) then begin fMA = flr + (fGL - flr) * (wLenGL / wLenMA)^p; printf(" MA%7.3f%7.3f (MODEL)\n",wLenMA,fMA); end if (pMB) then begin fMB = flr + (fGL - flr) * (wLenGL / wLenMB)^p; printf(" MB%7.3f%7.3f (MODEL)\n",wLenMB,fMB); end if (pMC) then begin fMC = flr + (fGL - flr) * (wLenGL / wLenMC)^p; printf(" MC%7.3f%7.3f (MODEL)\n",wLenMC,fMC); end if (pMD) then begin fMD = flr + (fGL - flr) * (wLenGL / wLenMD)^p; printf(" MD%7.3f%7.3f (MODEL)\n",wLenMD,fMD); end if (pME) then begin fME = flr + (fGL - flr) * (wLenGL / wLenME)^p; printf(" ME%7.3f%7.3f (MODEL)\n",wLenME,fME); end if (pMF) then begin fMF = flr + (fGL - flr) * (wLenGL / wLenMF)^p; printf(" MF%7.3f%7.3f (MODEL)\n",wLenMC,fMC); end if (pMG) then begin fMG = flr + (fGL - flr) * (wLenGL / wLenMG)^p; printf(" MC%7.3f%7.3f (MODEL)\n",wLenMC,fMC); end printf("\n fBAND MODEL EXPONENT: %6.2f\n",p); printf(" fBAND MODEL FLOOR: %6.2f\n",flr); # ------------------------------------------------------------ # GET SUN ELEVATION ANGLE FROM THE USER: Refer to B17. p1$ = "SUN-ELEVATION-ANGLE ENTRY\n"; p2$ = " UNITS: degrees (above the horizon)\n"; p3$ = " FORMAT: NN.NN\n"; p4$ = " RANGE: 10.00 to 90.00 degrees\n"; p5$ = "* Either ACCEPT the Default ANGLE,\n"; p6$ = "* Or, ENTER a Different ANGLE.\n"; p7$ = "* Then, CLICK the OK Button.\n\n"; p8$ = "SUN-ELEVATION-ANGLE (degrees) ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$ + p5$ + p6$ + p7$ + p8$; sunelevang = PopupNum(p$,45.18,10,90,2); printf(" SUN ELEV. ANGLE: %6.2f deg\n",sunelevang); # ------------------------------------------------------------ # GET SUN AZIMUTH ANGLE FROM THE USER: Refer to EXX. p1$ = "SUN-AZIMUTH-ANGLE:\n"; p2$ = " UNITS: degrees (relative to true north)\n"; p3$ = " FORMAT: NNN.NN\n"; p4$ = " RANGE: 0.00 to 360.00 degrees\n"; p5$ = "* Either ACCEPT the Default ANGLE,\n"; p6$ = "* Or, ENTER a Different ANGLE.\n"; p7$ = "* Then, CLICK the OK Button.\n\n"; p8$ = "ANGLE ENTERED:"; p$ = p1$ + p2$ + p3$ + p4$ + p5$ + p6$ + p7$ + p8$; sunaziang = PopupNum(p$,149.41,0,360,2); printf(" SUN AZI. ANGLE: %6.2f deg\n\n",sunaziang); # ------------------------------------------------------------ # OPEN INPUT RASTERS: Refer to EXX. printf("INPUT RASTERS:\n"); if (pCB) then begin printf(" SRFICB"); GetInputRaster(SRFICB1); nlins = NumLins(SRFICB1); ncols = NumCols(SRFICB1); checkHisto(SRFICB1); end if (pCB) then begin if (pBL) then begin printf(" SRFIBL"); GetInputRaster(SRFIRL1,nlins,ncols,rtype$); checkHisto(SRFIRL1); end end else begin if (pBL) then begin printf(" SRFIBL"); GetInputRaster(SRFIBL1); nlins = NumLins(SRFIBL1); ncols = NumCols(SRFIBL1); checkHisto(SRFIBL1); end end printf(" SRFIGL"); if (pBL) then begin GetInputRaster(SRFIGL1,nlins,ncols,rtype$); checkHisto(SRFIGL1); end else begin GetInputRaster(SRFIGL1); nlins = NumLins(SRFIGL1); ncols = NumCols(SRFIGL1); checkHisto(SRFIGL1); end if (pYL) then begin printf(" SRFIYL"); GetInputRaster(SRFIYL1,nlins,ncols,rtype$); checkHisto(SRFIYL1); end printf(" SRFIRL"); GetInputRaster(SRFIRL1,nlins,ncols,rtype$); checkHisto(SRFIRL1); if (pRE) then begin printf(" SRFIRE"); GetInputRaster(SRFIRE1,nlins,ncols,rtype$); checkHisto(SRFIRE1); end if (pNA) then begin printf(" SRFINA"); GetInputRaster(SRFINA1,nlins,ncols,rtype$); checkHisto(SRFINA1); end if (pNB) then begin printf(" SRFINB"); GetInputRaster(SRFINB1,nlins,ncols,rtype$); checkHisto(SRFINB1); end if (pMA) then begin printf(" SRFIMA"); GetInputRaster(SRFIMA1,nlins,ncols,rtype$); checkHisto(SRFIMA1); end if (pMB) then begin printf(" SRFIMB"); GetInputRaster(SRFIMB1,nlins,ncols,rtype$); checkHisto(SRFIMB1); end if (pMC) then begin printf(" SRFIMC"); GetInputRaster(SRFIMC1,nlins,ncols,rtype$); checkHisto(SRFIMC1); end if (pMD) then begin printf(" SRFIMD"); GetInputRaster(SRFIMD1,nlins,ncols,rtype$); checkHisto(SRFIMD1); end if (pME) then begin printf(" SRFIME"); GetInputRaster(SRFIME1,nlins,ncols,rtype$); checkHisto(SRFIME1); end if (pMF) then begin printf(" SRFIMF"); GetInputRaster(SRFIMF1,nlins,ncols,rtype$); checkHisto(SRFIMF1); end if (pMG) then begin printf(" SRFIMG"); GetInputRaster(SRFIMG1,nlins,ncols,rtype$); checkHisto(SRFIMG1); end printf(" PVI"); GetInputRaster(PVI1,nlins,ncols,rtype$); checkHisto(PVI1); printf(" PBI"); GetInputRaster(PBI1,nlins,ncols,rtype$); checkHisto(PBI1); printf(" SHADING"); GetInputRaster(SHADING,nlins,ncols,stype$); checkHisto(SHADING); # ------------------------------------------------------------ # SET UP OUTPUT RASTERS: printf("\n\nOUTPUT RASTERS:\n"); if (pCB) then begin printf(" SRFICB"); GetOutputRaster(SRFICB,nlins,ncols,rtype$); SetNull(SRFICB,0); CopySubobjects(SRFICB1,SRFICB,"GEOREF"); CopySubobjects(SRFICB1,SRFICB,"CONTAB"); end if (pBL) then begin printf(" SRFIBL"); GetOutputRaster(SRFIBL,nlins,ncols,rtype$); SetNull(SRFIBL,0); CopySubobjects(SRFIBL1,SRFIBL,"GEOREF"); CopySubobjects(SRFIBL1,SRFIBL,"CONTAB"); end printf(" SRFIGL"); GetOutputRaster(SRFIGL,nlins,ncols,rtype$); SetNull(SRFIGL,0); CopySubobjects(SRFIGL1,SRFIGL,"GEOREF"); CopySubobjects(SRFIGL1,SRFIGL,"CONTAB"); if (pYL) then begin printf(" SRFIYL"); GetOutputRaster(SRFIYL,nlins,ncols,rtype$); SetNull(SRFIYL,0); CopySubobjects(SRFIYL1,SRFIYL,"GEOREF"); CopySubobjects(SRFIYL1,SRFIYL,"CONTAB"); end printf(" SRFIRL"); GetOutputRaster(SRFIRL,nlins,ncols,rtype$); SetNull(SRFIRL,0); CopySubobjects(SRFIRL1,SRFIRL,"GEOREF"); CopySubobjects(SRFIRL1,SRFIRL,"CONTAB"); if (pRE) then begin printf(" SRFIRE"); GetOutputRaster(SRFIRE,nlins,ncols,rtype$); SetNull(SRFIRE,0); CopySubobjects(SRFIRE1,SRFIRE,"GEOREF"); CopySubobjects(SRFIRE1,SRFIRE,"CONTAB"); end if (pNA) then begin printf(" SRFINA"); GetOutputRaster(SRFINA,nlins,ncols,rtype$); SetNull(SRFINA,0); CopySubobjects(SRFINA1,SRFINA,"GEOREF"); CopySubobjects(SRFINA1,SRFINA,"CONTAB"); end if (pNB) then begin printf(" SRFINB"); GetOutputRaster(SRFINB,nlins,ncols,rtype$); SetNull(SRFINB,0); CopySubobjects(SRFINB1,SRFINB,"GEOREF"); CopySubobjects(SRFINB1,SRFINB,"CONTAB"); end if (pMA) then begin printf(" SRFIMA"); GetOutputRaster(SRFIMA,nlins,ncols,rtype$); SetNull(SRFIMA,0); CopySubobjects(SRFIMA1,SRFIMA,"GEOREF"); CopySubobjects(SRFIMA1,SRFIMA,"CONTAB"); end if (pMB) then begin printf(" SRFIMB"); GetOutputRaster(SRFIMB,nlins,ncols,rtype$); SetNull(SRFIMB,0); CopySubobjects(SRFIMB1,SRFIMB,"GEOREF"); CopySubobjects(SRFIMB1,SRFIMB,"CONTAB"); end if (pMC) then begin printf(" SRFIMC"); GetOutputRaster(SRFIMC,nlins,ncols,rtype$); SetNull(SRFIMC,0); CopySubobjects(SRFIMC1,SRFIMC,"GEOREF"); CopySubobjects(SRFIMC1,SRFIMC,"CONTAB"); end if (pMD) then begin printf(" SRFIMD"); GetOutputRaster(SRFIMD,nlins,ncols,rtype$); SetNull(SRFIMD,0); CopySubobjects(SRFIMD1,SRFIMD,"GEOREF"); CopySubobjects(SRFIMD1,SRFIMD,"CONTAB"); end if (pME) then begin printf(" SRFIME"); GetOutputRaster(SRFIME,nlins,ncols,rtype$); SetNull(SRFIME,0); CopySubobjects(SRFIME1,SRFIME,"GEOREF"); CopySubobjects(SRFIME1,SRFIME,"CONTAB"); end if (pMF) then begin printf(" SRFIMF"); GetOutputRaster(SRFIMF,nlins,ncols,rtype$); SetNull(SRFIMF,0); CopySubobjects(SRFIMF1,SRFIMF,"GEOREF"); CopySubobjects(SRFIMF1,SRFIMF,"CONTAB"); end if (pMG) then begin printf(" SRFIMG"); GetOutputRaster(SRFIMG,nlins,ncols,rtype$); SetNull(SRFIMG,0); CopySubobjects(SRFIMG1,SRFIMG,"GEOREF"); CopySubobjects(SRFIMG1,SRFIMG,"CONTAB"); end printf(" PVI"); GetOutputRaster(PVI,nlins,ncols,rtype$); SetNull(PVI,0); CopySubobjects(PVI1,PVI,"GEOREF"); CopySubobjects(PVI1,PVI,"CONTAB"); CloseRaster(PVI1); printf(" PBI"); GetOutputRaster(PBI,nlins,ncols,rtype$); SetNull(PBI,0); CopySubobjects(PBI1,PBI,"GEOREF"); CopySubobjects(PBI1,PBI,"CONTAB"); CloseRaster(PBI1); # ------------------------------------------------------------ # PRODUCE OUTPUT RASTERS: Refer to EXX. printf("\n\n"); printf("CORRECTING SRFT RASTERS:\n"); array numeric tc[256]; for i=0 to 254 begin tc[i] = i / 180; end # CB DATA: if (pCB) then begin printf(" SRFICB"); for each SRFICB1 begin iip = 1; isp = 1; if (IsNull(SRFICB1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFICB1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fCB)+fCB)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFICB = srfi; end end CreateHistogram(SRFICB,0); CreatePyramid(SRFICB,0); CloseRaster(SRFICB1); CloseRaster(SRFICB); end # BL DATA: if (pBL) then begin printf(" SRFIBL"); for each SRFIBL1 begin iip = 1; isp = 1; if (IsNull(SRFIBL1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIBL1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fBL)+fBL)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIBL = srfi; end end CreateHistogram(SRFIBL,0); CreatePyramid(SRFIBL,0); CloseRaster(SRFIBL1); CloseRaster(SRFIBL); end # GL DATA: printf(" SRFIGL"); for each SRFIGL1 begin iip = 1; isp = 1; if (IsNull(SRFIGL1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIGL1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fGL)+fGL)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIGL = srfi; end end CreateHistogram(SRFIGL,0); CreatePyramid(SRFIGL,0); CloseRaster(SRFIGL1); CloseRaster(SRFIGL); # YL DATA: if (pYL) then begin printf(" SRFIYL"); for each SRFIYL1 begin iip = 1; isp = 1; if (IsNull(SRFIYL1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIYL1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fYL)+fYL)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIYL = srfi; end end CreateHistogram(SRFIYL,0); CreatePyramid(SRFIYL,0); CloseRaster(SRFIYL1); CloseRaster(SRFIYL); end # RL DATA: printf(" SRFIRL"); for each SRFIRL1 begin iip = 1; isp = 1; if (IsNull(SRFIRL1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIRL1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fRL)+fRL)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIRL = srfi; end end CreateHistogram(SRFIRL,0); CreatePyramid(SRFIRL,0); CloseRaster(SRFIRL1); # RE DATA: if (pRE) then begin printf(" SRFIRE"); for each SRFIRE1 begin iip = 1; isp = 1; if (IsNull(SRFIRE1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIRE1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fRE)+fRE)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIRE = srfi; end end CreateHistogram(SRFIRE,0); CreatePyramid(SRFIRE,0); CloseRaster(SRFIRE1); CloseRaster(SRFIRE); end # NA DATA: if (pNA) then begin printf(" SRFINA"); for each SRFINA1 begin iip = 1; isp = 1; if (IsNull(SRFINA1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFINA1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fNA)+fNA)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFINA = srfi; end end CreateHistogram(SRFINA,0); CreatePyramid(SRFINA,0); CloseRaster(SRFINA1); end # NB DATA: if (pNB) then begin printf(" SRFINB"); for each SRFINB1 begin iip = 1; isp = 1; if (IsNull(SRFINB1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFINB1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fNB)+fNB)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFINB = srfi; end end CreateHistogram(SRFINB,0); CreatePyramid(SRFINB,0); CloseRaster(SRFINB1); end # MA DATA: if (pMA) then begin printf(" SRFIMA"); for each SRFIMA1 begin iip = 1; isp = 1; if (IsNull(SRFIMA1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMA1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMA)+fMA)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMA = srfi; end end CreateHistogram(SRFIMA,0); CreatePyramid(SRFIMA,0); CloseRaster(SRFIMA1); CloseRaster(SRFIMA); end # MB DATA: if (pMB) then begin printf(" SRFIMB"); for each SRFIMB1 begin iip = 1; isp = 1; if (IsNull(SRFIMB1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMB1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMB)+fMB)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMB = srfi; end end CreateHistogram(SRFIMB,0); CreatePyramid(SRFIMB,0); CloseRaster(SRFIMB1); CloseRaster(SRFIMB); end # MC DATA: if (pMC) then begin printf(" SRFIMC"); for each SRFIMC1 begin iip = 1; isp = 1; if (IsNull(SRFIMC1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMC1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMC)+fMC)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMC = srfi; end end CreateHistogram(SRFIMC,0); CreatePyramid(SRFIMC,0); CloseRaster(SRFIMC1); CloseRaster(SRFIMC); end # MD DATA: if (pMD) then begin printf(" SRFIMD"); for each SRFIMD1 begin iip = 1; isp = 1; if (IsNull(SRFIMD1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMD1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMD)+fMD)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMD = srfi; end end CreateHistogram(SRFIMD,0); CreatePyramid(SRFIMD,0); CloseRaster(SRFIMD1); CloseRaster(SRFIMD); end # ME DATA: if (pME) then begin printf(" SRFIME"); for each SRFIME1 begin iip = 1; isp = 1; if (IsNull(SRFIME1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIME1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fME)+fME)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIME = srfi; end end CreateHistogram(SRFIME,0); CreatePyramid(SRFIME,0); CloseRaster(SRFIME1); CloseRaster(SRFIME); end # MF DATA: if (pMF) then begin printf(" SRFIMF"); for each SRFIMF1 begin iip = 1; isp = 1; if (IsNull(SRFIMF1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMF1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMF)+fMF)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMF = srfi; end end CreateHistogram(SRFIMF,0); CreatePyramid(SRFIMF,0); CloseRaster(SRFIMF1); CloseRaster(SRFIMF); end # MG DATA: if (pMG) then begin printf(" SRFIMG"); for each SRFIMG1 begin iip = 1; isp = 1; if (IsNull(SRFIMG1)) then iip = 0; if (IsNull(SHADING)) then isp = 0; ipp = iip * isp; if (ipp) then begin srfi1 = SRFIMG1; s = SHADING; s = tc[s]; srfi = round(srfi1/(s*(1-fMG)+fMG)); if (srfi < 1) then srfi = 1; if (srfi > srfimax) then srfi = srfimax; SRFIMG = srfi; end end CreateHistogram(SRFIMG,0); CreatePyramid(SRFIMG,0); CloseRaster(SRFIMG1); CloseRaster(SRFIMG); end CloseRaster(SHADING); printf("\n\n"); # ------------------------------------------------------------ # PRODUCE VALUES FOR PVI & PBI RASTERS: printf("PRODUCING PVI & PBI RASTERS."); srfiNRint = 254; bslineslope = 1.086; pbioff = 100; pvioff = 1000; pfac = 0.2723659; maxpvipbi = 3000; angrad = -atan(bslineslope); sinang = sin(angrad); cosang = cos(angrad); for each SRFIRL begin srfiRL = SRFIRL; if (srfiRL > 0) then begin if (pNA) then srfiNR = SRFINA; if (pNB and pNA==0) then begin srfiNR = SRFINB; end tsrfiNR = srfiNR - srfiNRint; pbif = srfiRL * cosang - srfiNR * sinang; pbi = round(pfac * pbif)+ pbioff; pvif = srfiRL * sinang + srfiNR * cosang; pvi = round(pfac * pvif) + pvioff; if (pbi < 1) then pbi = 1; if (pbi > maxpvipbi) then pbi = maxpvipbi; if (pvi < 1) then pvi = 1; if (pvi > maxpvipbi) then pvi = maxpvipbi; PBI = pbi; PVI = pvi; end end CreateHistogram(PBI,0); CreateHistogram(PVI,0); CreatePyramid(PBI,0); CreatePyramid(PVI,0); CloseRaster(PBI); CloseRaster(PVI); if (pNA) then CloseRaster(SRFINA); if (pNB) then CloseRaster(SRFINB); CloseRaster(SRFIRL); # ------------------------------------------------------------ printf("TO SAVE THE CONSOLE WINDOW TEXT AS A REPORT:\n"); printf(" 1. RIGHT-CLICK IN THE CONSOLE WINDOW.\n"); printf(" 2. SELECT THE Save As... OPTION.\n"); printf(" 3. NAVIGATE TO THE DESIRED LOCATION.\n"); printf(" 4. PROVIDE A REPORT NAME (or OVERWRITE).\n"); printf(" 5. CLICK OK.");