John Cichy wrote:
> 
> Hello all,

Hello,

> I have a binary I*2 format data file that I would like to extract data from.
> The file comes with a discription file that contains a fortran sub to extract
> the data. For the life of me I can't figure out how to accomplish the extraction.
> The following is from the description file nad includes the fortran sub:
> 
> ---begin paste
> 
> 2. The goes.nav is a file containing latitude/longitude data which can be
>    used with satellite images in this directory to pinpoint geographical
>    locations on goes-8 images. The file is binary  I*2 format with the
>    first two values being the pixel and line (x,y) size of the image.
>    The succeeding pairs of elements are I*2 values of latitude longitude * 100.
>    Compared to the goes image, the lat/lon pairs are stored by column first,
>    then row; i.e. all the elements in row 1 are stored, then row 2 etc until
>    the bottom of the image.
> 
>     The following is a fortran subroutine that can be used to read
>     the goes.nav file:
> 
>          subroutine getnav(lat,lon)
> c************************************************************************
> c*       This routine reads goes.nav files with a maximum size of       *
> c*       2000 pixels wide and 2000 lines/records and stores             *
> c*       latitude/longitude data into lat lon                           *
> c*       the format of the goes.nav data is as follows                  *
> c*                                                                      *
> c*                   i*2      i*2                                       *
> c*                    |        |                                        *
> c*                    V        V                                        *
> c*       record 1   x size    ysize                                     *
> c*       record 2  lat *100   lon*100                                   *
> c*       record 3  lat *100   lon*100                                   *
> c*       record 4    etc       etc                                      *
> c*                                                                      *
> c************************************************************************            
>     character       file_name*80
>         real            lat(2000,2000),lon(2000,2000)
> c
> c
>         integer*2       tempstor(2)
>         integer*4       buffout,record_count,xsize,ysize,yyyy,xxxx
>         equivalence (buffout,tempstor(1))
> C
> C
> C          PLEASE NOTE: recl=1 in the open statment below means
> C                       that the record length is 32 bits ( 4 bytes)
> C                       not 8 bits (1 byte)
>         open(23,file='goes.nav',access='direct',recl=1,status='old')
>         READ(23,REC=1)buffout
> C
> C
>         xsize=tempstor(1)
> C
> C
>         ysize=tempstor(2)
>         type *,' width =',xsize, ' height =',ysize
> C
> C
>         record_count=1
>         do yyyy=1,ysize
>         do xxxx=1,xsize
>         record_count = record_count + 1
>         read(23,rec=record_count)buffout
>          lat(xxxx,yyyy)=tempstor(1) * .01
>          lon(xxxx,yyyy)=tempstor(2) * .01
> c  ...............................................
> c       NOTE: LATITUDE VALUES OFF THE EARTH ARE 99.00
> C             AND LONGITUDE VALUES ARE -256.35999 AT THIS
> C             POINT IN THE SUBROUTINE
> C  ...............................................
>         end do
>         end do
>        RETURN
>        END
> 
> ----end paste


Well, my FORTRAN is a little rusty (to say the least) but I'll give it a shot.
(caveat: this is a literal translation and isn't very "Perlish". YMMV)


my $file = 'goes.nav';
open FILE, $file or die "Cannot open $file: $!";
$/ = \4;

my ( $xsize, $ysize ) = unpack 'ss', scalar <FILE>;
print " width=$xsize height=$ysize\n";

my ( @lat, @lon );
for my $yyyy ( 1 .. $ysize ) {
    for my $xxxx ( 1 .. $xsize ) {
        ( $lat[$xxxx][$yyyy], $lon[$xxxx][$yyyy] ) = map $_ *= 0.01, unpack 'ss', 
scalar <FILE>;
        }
    }



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to