[Proj] lla file format

Clifford J Mugnier cjmce at lsu.edu
Tue Feb 26 11:19:10 PST 2008


Is this what you need?
 
Cliff Mugnier
LOUISIANA STATE UNIVERSITY
 
c       program convert.ftn  -- cpfs csm golden,co
c
c       this routine converts ascii files of x,y,z1,z2,...zn 
c       data to the center format for binary file storage
c       the interactive nature allows for creation of the
c       appropriate headers and file formats
c
c----------------------------------------------------------------
      program convdam
      parameter(nfile=50,nx=6000,ny=10)
      character rident*56,pgm*8,filin(nfile)*30,
     1          filout*30,formin*56
      character gname(nfile)*8
      dimension data(ny,nx),zero(ny)           
      common /inout/ iit,iot
      common /input/ nv,nr,formin,rident,pgm,filout
c      data iit,iot/5,6/,in,iout/30,31/,nc/-1/
c      data pgm/'convertd'/
      data x0,dx,y0,dy,angle/5*0.0/,zero/ny*0.0/
 iit = 5
 iot = 6
 in = 30
 iout = 31
 nc = -1
 pgm = 'convertd'
c
c......................................................................
1000  format(///,5x,'this program converts a formatted data file to',/,
     &           5x,'an unformatted binary file conforming to the  ',/,
     &           5x,'center format',//,' ** warning - the input files',
     &              ' are assumed to have a uniform format;',
     &            /,' all the groups are to have the same number',
     &              ' and type of variables',//,
     &           5x,'each group will come from one input file.',//,
     &           5x,'program is dimensioned to read',i3,' files of',/,
     &           8x,i6,' variables per sample',/,
     &           8x,i6,' samples per group',//)
1005  format(' enter number of input-files/output-groups',
     &       ' (eg. flightlines):')
1010  format(' enter filename for input file ',i3,' :')
1020  format(/,' enter filename for output file:')
1030  format(a30)                         
1040  format(///,5x,'enter header information,up to 56 characters',/,
     &           5x,'this should include data identifier',/,
     &           5x,'and coordinate system used !!')
1050  format(a56)
1070  format(/,5x,'enter the number of variables at each location',/,
     &         5x,'this includes the x and y locations')             
1080  format(/,5x,'enter the format of the input file records',/,
     &         5x,'e.g. (3f20.4)    ')
1100  format(' enter an groupname (8 char) for input file ',a30,)
1110  format(a8) 
1120  format('there will be',i3,' sample sets on each binary record')
1130  format(' there are ',i6,' samples in group: ',a8)
1300  format(' cannot open file ',a30,/,' reenter correct name:')
1400  format(' error in read; current format: ',a56,//,
     &       ' fix file and/or reenter correct format:')
c......................................................................
c
c...write intro to screen
      write(iot,1000)nfile,ny,nx
c...get in and out filenames 
             
      write(iot,1005)
      read(iit,*)nr
      do 50 i = 1,nr
         write(iot,1010)i
         read(iit,1030)filin(i)
50    continue
      write(iot,1020)
      read(iit,1030)filout
c
c...get input information from user and set pgm for header
c
      write(iot,1040)
      read(iit,1050)rident
      write(iot,1070)
      read(iit,*)nv
      write(iot,1080)
      read(iit,1050)formin
      do 60 i = 1,nr
         write(iot,1100)filin(i)
         read(iit,1110)gname(i)
60    continue
c
c...check input information and allow for changes
c
      call go(nfile,filin,gname)
c
c...now figure number of samples that will fit in 256 bytes
c
      nrec=64/nv
      write(iot,1120)nrec
c
c...open output file
c
      open(iout,file=filout,access='direct',
     *     form='unformatted',status='unknown',recl=256)
c      rewind(iout)
c
c...write header to output file
c
      nrd = 1
      write(iout,rec=nrd)rident,pgm,nc,nr,nv,x0,dx,y0,dy,angle                
      nrd = nrd + 1
c
c...proceed to open input data files
c              
      do 70 if=1,nr
1     open(in,file=filin(if),status='old',err=2000)
      rewind(in)
c...read in file/group data and recover the number of samples (nsamp)
                                                                    
      j = 1
80    read(in,fmt=formin,end=100,err=3000) (data(k,j),k=1,nv)
      j = j + 1
      goto 80
100   nsamp = j - 1
c...write group header to binary file
      write(iout,rec=nrd)gname(if),nsamp
      nrd = nrd + 1                       
      write(iot,1130)nsamp,gname(if)
c...check to see if last binary record is filled
c   (use integer division)
                       
      numrec = nsamp / nrec
      nsleft = nsamp - (nrec*numrec)
      if(nsleft.eq.0)then
         numwri = numrec
      else
         numwri = numrec + 1
      endif
c...see how many zeros are in remainder part of record
      nremain = 64 - nv * nrec
      
c...write this data to records (extra space in records are zeros)
                  
      do 110 k=1,numwri
         write(iout,rec=nrd)((data(j,i),j=1,nv),i=(k-1)*nrec+1,k*nrec),
     1                                         (zero(ir),ir=1,nremain)
         nrd = nrd + 1    
110   continue
c...zero data array for next file read
c
      do 120 kk=1,nx
         do 130 kkk=1,ny
            data(kkk,kk) = 0.0
130      continue
120   continue
              
c...loop back up and write next file
      close(in)
      go to 70
2000  write(iot,1300)filin(if)
      read(iit,1030)filin(if)
      goto 1
3000  write(iot,1400)formin
      read(iit,1050)formin
      goto 80
70    continue
c
      close(iout)
      stop    
      end
c-------------------------------------------------------------------
      subroutine go(nfile,filin,gname)
c
c  purpose: allows alteration of input parameters
c
      character rident*56,pgm*8,filin(nfile)*30,ac*1,
     1     filout*30,formin*56,gname(nfile)*8,
     1     buffer*200
      common /inout/ iit,iot
      common /input/ nv,nr,formin,rident,pgm,filout
c....................................................................
100   format(/,' there are ',i3,' input data files:',/)
102   format(' file ',i3,' is :',a30)
103   format(/,'  enter filename number to change: ',/,
     1         '  (enter 0 if no changes desired)')
104   format(/,' file ',i3,' is presently :',a30,/,
     1         ' please enter correct filename :')
105   format(a30)
110   format(/,' there are ',i3,' group names:',/)
111   format(' group ',i3,' is :',a8)
112   format(/,'  enter groupname number to change: ',/,
     1         '  (enter 0 if no changes desired)')
113   format(/,' group ',i3,' is presently :',a8,/,
     1         ' please enter correct groupname (8 char):')
114   format(a8)
300   format(/,' okay, enter changes ... (c/r twice when finished)',/)
301   format(a1)
c....................................................................
200     write(iot,400)nr,nr,formin,filout,rident,pgm,nr,nv
400     format(/////,
     1  ' the following are the control parameters:',//,
     1  ' 1. enter  1  to change any of the ',i3,' input files',/,
     1  ' 2. enter  2  to change any of the ',i3,' group names',/,
     1  ' 3. input files format (assumed the same): ',/,4x,a56,/,
     1  ' 4. output filename: ',/,4x,a30,/,
     1  ' 5. output file header comment:',/,4x,a56,/,
     1  ' 6. program title (8 CHARACTERS): ...................',A8,/,
     1  ' 7. NUMBER OF DATA Groups in output file: ...........',i3,/,
     1  ' 8. number of variables per sample: .................',i3,//)
        write(iot,*)' do you wish to change anything ? (y/n) :'
        read(iit,301)ac                        
            if(ac.eq.'n'.or.ac.eq.'n')return
            write(iot,300)
c    an 80 character buffer is used to input the changed parameters
c    from the crt screen.  the number identifying the parameter is
c    read first then the parameter is read.  changes are accordingly
c    made.                          
c
201           read(iit,fmt='(a)',end=200)buffer
                read(buffer(1:2),403)chng              
403             format(f2.0)       
410             format(f2.0,1x,a8)
420             format(f2.0,1x,a30)
430             format(f2.0,1x,a56)
440             format(f2.0,1x,i3)
              if(chng.eq.1.0)goto 500
              if(chng.eq.2.0)goto 600
              if(chng.eq.3.0)read(buffer,430)chng,formin
              if(chng.eq.4.0)read(buffer,420)chng,filout
              if(chng.eq.5.0)read(buffer,430)chng,rident
              if(chng.eq.6.0)read(buffer,410)chng,pgm
              if(chng.eq.7.0)read(buffer,440)chng,nr
              if(chng.eq.8.0)read(buffer,440)chng,nv
              if(chng.eq.0.0)goto 200
              goto 201
c
500   write(iot,100)nr
      do 501 i=1,nr
         write(iot,102)filin(i)
501   continue
      write(iot,103)
      read(iit,*)ichng
      if(ichng.eq.0)goto 200
      write(iot,104)ichng,filin(ichng)
      read(iit,105)filin(ichng)
      goto 500
600   write(iot,110)nr
      do 601 i=1,nr
         write(iot,111)gname(i)
601   continue
      write(iot,112)
      read(iit,*)ichng
      if(ichng.eq.0)goto 200
      write(iot,113)ichng,gname(ichng)
      read(iit,114)gname(ichng)
      goto 600
c
      end

________________________________

From: proj-bounces at lists.maptools.org on behalf of Eric Miller
Sent: Tue 26-Feb-08 12:00
To: PROJ.4 and general Projections Discussions
Subject: Re: [Proj] lla file format



As far as I can tell, it is only documented in the Fortran source code for nadgrd.  Get the sources and read "readme.grd" for some help...

"""
The program NADCON reads binary grids that contain NAD 27 to NAD 83
latitude and longitude shifts.  The first record in a grid file consists of
header information.  All the other records consist of FORTRAN REAL*4
numbers.  The grid files are unformatted and direct access.

...
""" 

>>> On 2/16/2008 at 5:30 PM, "Richard Greenwood" <richard.greenwood at gmail.com>
wrote:
> Can anyone point me to documentation of the *.lla file format?


_______________________________________________
Proj mailing list
Proj at lists.maptools.org
http://lists.maptools.org/mailman/listinfo/proj


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/proj/attachments/20080226/f2ae7517/attachment.html>


More information about the Proj mailing list