[GRASS-user] Re: i.atcorr returns all NULL values

Chemin, Yann (IWMI) Y.Chemin at cgiar.org
Sun May 22 23:07:07 EDT 2011


p192 r030 image of July 2003 of Italy (L5TM) successfully corrected for
band 1 and 2. 
The following script works well in GRASS GIS Trunk SVN.
Please try.

#!/bin/bash

echo "Part 0 (Import in GRASS GIS)"
echo "RUN from the MTL.txt directory and within the GRASS environment"
echo "-----------------------------------"
echo "It will create for *.[1-7] images from r.in.gdal"
echo "image=DN"

# DEM file name
dem=dem
r.mapcalc expression=dem=5.0
# r.in.gdal input=$dem output=$dem


for file in L5*.TIF
do
       out=$(echo $file | sed
's/\(.*\)_\(.*\)_B\(.*\)0.TIF/\1\_\2\.\3/g')
       echo $out
       r.in.gdal --overwrite input=$file output=$out
done

echo "Part 1 (After DN)"
echo "-----------------------------------"
echo "It will create for *.toar.* images from i.landsat.toar"
echo "image=top of atmosphere reflectance"

for L5_MTL_file in L5*_MTL.txt
do
       L5_prefix=$(echo $L5_MTL_file | sed 's/\(.*\)_MTL.txt/\1/')
       i.landsat.toar -t input_prefix=$L5_prefix\.
output_prefix=$L5_prefix\.toar.  metfile=$L5_MTL_file sensor=tm5
done


echo "Part 2 (After TOAR)"
echo "-----------------------------------"
echo "It will create for *.surf.* images from i.atcorr"
echo "Atmospherically corrected image=surface reflectance"
#-----------------------------------------------------
# For i.atcorr scripting
#-----------------------------------------------------
vis_list=(10 10 8 9.7 15 8 7 10 10 9.7 12 9.7 7 12 12 12 3 15 12 9.7 6
15)
vis_len=${#vis_list[*]}
echo $vis_len
i=0

# Location of parameter file
root=~/
# Basic script for i.atcorr for L 5 TM
#Geometrical conditions (L5TM)
geom=7
#Sensor height (satellite is -1000)
sens_height=-1000
#Atmospheric mode
atm_mode=6 #us standard 62 (for lack of more precise model)
#Aerosol model
aerosol_mode=1 #continental
#satellite band number (L5TM [25,26,27,28,29,30])
satbandno=25 #Band 1 of L5TM is first to undergo atmospheric correction

for file in $(g.mlist type=rast pattern=*.toar.1)
do
 #Here we suppose you have altitude (DEM) and Visibility (VIS) maps
ready
 
#-----------------------------------------------------------------------
 r.mapcalc expression="visibility=${vis_list[$i]}" --overwrite
 # Dummy visibility value for atcorr param file
 vis=12
 #Increment i
 i=$(echo "$i + 1" | bc)
 #Altitude dummy value (in Km should be negative in this param file)
 #(overwritten by DEM raster input)
 alt=-1.200
 # L5 basename as stored in GRASS GIS and used by i.landsat.toar
 L5basename=$(echo $file | sed 's/\(.*\)\.\(.*\)\.\(.*\)/\1/')
 echo $L5basename

 #---------------------------
 # Please change as you need
 #---------------------------

 #datetime of satellite overpass (month, day, GMT decimal hour)
 echo "Input: GMT (i.e. 6.30)"
 read gmt
 #mdh="6 03 6.30"
 monthday=$(echo $L5basename | sed 's/\(.*\)_.......\(.*\)/\2/')
 day=$(echo $L5basename | sed 's/\(.*\)_.........\(.*\)/\2/')
 month=$(echo "($monthday - $day) / 100" | bc)
 mdh="$month $day $gmt"
 echo $mdh

 # Central Lat/Long
 north=$(g.region -p | grep north | sed 's/north:\ \(.*\)/\1/' | bc)
 south=$(g.region -p | grep south | sed 's/south:\ \(.*\)/\1/' | bc)
 east=$(g.region -p | grep east | sed 's/east:\ \(.*\)/\1/' | bc)
 west=$(g.region -p | grep west | sed 's/west:\ \(.*\)/\1/' | bc)
 Lat_nonproj=$(echo "(($north - $south)/2.0) + $south" | bc )
 Long_nonproj=$(echo "(($east - $west)/2.0) + $west" | bc )
 echo "$Long_nonproj $Lat_nonproj" > tempfile.txt
 Long=$(m.proj -o -d input=tempfile.txt | sed
's/\(.*\)|\(.*\)|\(.*\)/\1/')
 Lat=$(m.proj -o -d input=tempfile.txt | sed
's/\(.*\)|\(.*\)|\(.*\)/\2/')
 echo $Long_nonproj $Lat_nonproj
 echo $Long $Lat

 for bandno in 1 2 3 4 5 7
 do # Generate the parameterization file
 echo "$geom                            - geometrical
conditions=Landsat 5 TM" > $root/param_L5.txt
 echo "$mdh $Long $Lat   - month day hh.ddd longitude latitude
(\"hh.ddd\" is in decimal hours GMT)" >>  $root/param_L5.txt
 echo "$atm_mode                            - atmospheric
mode=tropical" >> $root/param_L5.txt
 echo "$aerosol_mode                            - aerosols
model=continental" >> $root/param_L5.txt
 echo "$vis                           - visibility [km] (aerosol
model concentration), not used as there is raster input" >>
$root/param_L5.txt
 echo "$alt                       - mean target elevation above sea
level [km] (here 600m asl), not used as there is raster input" >>
$root/param_L5.txt
 echo "$sens_height                        - sensor height (here,
sensor on board a satellite)" >> $root/param_L5.txt
 echo "$satbandno                           - 'i'th band of TM
Landsat 5" >> $root/param_L5.txt
 # Process band-wise atmospheric correction with 6s
 cat $root/param_L5.txt
 echo "i.atcorr -r input=$L5basename.toar.$bandno elevation=$dem
visibility=visibility parameters=$root/param_L5.txt
output=$L5basename.surf.$bandno range=0,1 rescale=0,1 --overwrite"
 i.atcorr -r input=$L5basename.toar.$bandno elevation=$dem
visibility=visibility parameters=$root/param_L5.txt
output=$L5basename.surf.$bandno range=0,1 rescale=0,1 --overwrite
 satbandno=$((satbandno+1))
 if [ $satbandno -gt 30 ]
  then satbandno=25
 fi
 done
done


-----Original Message-----
From: grass-user-bounces at lists.osgeo.org
[mailto:grass-user-bounces at lists.osgeo.org] On Behalf Of Elena Mezzini
Sent: Saturday, May 14, 2011 12:14 AM
To: grass-user at lists.osgeo.org
Subject: [GRASS-user] Re: i.atcorr returns all NULL values

I have the same problem, both with band 1 and 2.
I did i.landsat.toar and then i.atcorr but all the bands worked except
for band 1 and 2, these have values min=-nan and max=-nan.
There is someone who can help us?

Thank you!
Elena



More information about the grass-user mailing list