User Tools

Site Tools


teaching:m_r:excersize:proj4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
teaching:m_r:excersize:proj4 [2012/11/07 16:20]
karina [Awk]
teaching:m_r:excersize:proj4 [2021/08/14 04:21] (current)
Line 3: Line 3:
  
  
-===== Proj4 =====+===== Proj.4 =====
 Reference: [[https://trac.osgeo.org/proj/]] Reference: [[https://trac.osgeo.org/proj/]]
 +
 +
 +PROJ.4 is a library for performing conversions between cartographic projections. The library is based on the work of Gerald Evenden at the USGS,[2] but is now an OSGeo project maintained by Frank Warmerdam. The library also ships with executables for performing these transformations from the command line. (Reference: [[http://en.wikipedia.org/wiki/PROJ.4]])
 +
 +
 +
 +== Download program ==
 +^Windows^Mac^Linux^
 +|[[http://trac.osgeo.org/mapserver/wiki/WindowsProjHowto|Proj.4]] |  |[[http://linux.softpedia.com/get/Programming/Libraries/PROJ-4-19030.shtml|Proj.4]] |
 +
 +
  
 ===== Awk ===== ===== Awk =====
 +Awk is a terminal program / script program. 
 +
 Reference: [[http://www.gnu.org/software/gawk/]] Reference: [[http://www.gnu.org/software/gawk/]]
  
Line 17: Line 30:
 == Download program == == Download program ==
 ^Windows^Mac^Linux^ ^Windows^Mac^Linux^
-| |[[http://code.google.com/p/rudix/downloads/detail?name=gawk-3.1.8-1.dmg&can=2&q=label%3ARudix-2011|Gnu Awk]]| |+|[[http://gnuwin32.sourceforge.net/packages/gawk.htm|Gnu Awk]] |[[http://code.google.com/p/rudix/downloads/detail?name=gawk-3.1.8-1.dmg&can=2&q=label%3ARudix-2011|Gnu Awk]]\\ open gawk.pkg|[[http://linux.softpedia.com/get/Text-Editing-Processing/Filters/GNU-awk-207.shtml|Gnu Awk]] | 
 + 
 +===== Awk/proj4 script ===== 
 +Script that convert gga-strings to UTM co-ordinates. 
 + 
 + 
 +<file bash ggacs2cs.awk>  
 +#!/usr/bin/awk -f 
 +function usage(){ 
 +  print "purpose: convert geographical/projected coordinates from NMEA input" 
 +  print "default: parses GGA and transforms coordinates from WGS84 to UTM 32 N" 
 +  print "options [-v OPT=value]:" 
 +  print "EPSGFROM=4326 (epsg code to convert from)" 
 +  print "EPSGTO=25832 (epsg code to convert to)" 
 +  print "MYFS=\",\" (field separator)" 
 +  print "CNV=false (convert to pseudo NMEA message with converted coordinates)" 
 +  print "NFN=3 (input field latitude)" 
 +  print "EFN=5 (input field longitude)" 
 +  print "ECHO=false (echo NMEA messages)" 
 +  print "PRINT2FILE=false (set to false in order not to write to file)" 
 +  print "OUTPUTFILE=ggacs2cs (filename of the output file)" 
 +   
 +
 +#Windows command: gawk -f ggacs2cs.awk -v ECHO=true PRINT2FILE=true OUTPUTFILE=utm_row4_adana EPSGTO=32636 ggaLog.log 
 +#Windows command: gawk -f ggacs2cs.awk -v PRINT2FILE=true OUTPUTFILE=gga_l_u EPSGTO=32636 GGAlinksoben.log 
 +#EPSG:32636: WGS 84 / UTM zone 36N 
 + 
 +# TODO: feed all coordinates to cs2cs in one large chunk, not line per line 
 +# TODO: use optarg: http://snap.nlc.dcccd.edu/reference/awkref/gawk_17.html 
 +BEGIN{ 
 +<<<<<<< .mine 
 +CONVFMT="%.12f" 
 +======= 
 +CONVFMT="%.10f" 
 +>>>>>>> .r1275 
 +#     while ((c = getopt(ARGC, ARGV, "h")) != -1) { 
 +#         if (c == "h") { 
 +#             usage() 
 +#         }# else if (c == "c") { # TODO implement other options here 
 +        #} 
 + 
 +if(MYFS==""){ 
 +  FS="," 
 +
 +  OFS=FS 
 +  if (EPSGTO==""){ 
 +    EPSGTO="25832" # 25832: # ETRS89 / UTM zone 32N <25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs  <> 
 +  } 
 +  if (EPSGFROM==""){ 
 +    EPSGFROM="4326" 
 +  } 
 +  if (CNV==""){ # if CNV="true" then a fake string is created with the transformed coordinates 
 +    CNV="false"  
 +  } 
 +  if(NFN==""){NFN=3} 
 +  if(EFN==""){EFN=5} 
 +  if(HFN==""){HFN=10} 
 +  if(ECHO==""){ECHO="false"} # echo NMEA as seen? set with -v ECHO=true 
 +  if(PRINT2FILE==""){PRINT2FILE="false"
 +  if(OUTPUTFILE==""){OUTPUTFILE="ggacs2cs"
 +
 + 
 +function nmea2dd(nmeacoord){ 
 +  dn=int(nmeacoord/100); 
 +  return dn+((nmeacoord-(dn*100.0))/60) 
 +
 +function cs2cs(coordarray){ 
 +  CMD="echo "coordarray[2]" "coordarray[1]" "coordarray[3]" | cs2cs -f \"%.6f\" +init=epsg:"coordarray[4]" +to +init=epsg:"coordarray[5] 
 +   #print CMD 
 +  gkarray[0]="" 
 +  CMD | getline TRANSFCOORD 
 +#   printf "begin"TRANSFCOORD"end" 
 +  split(TRANSFCOORD, gkarray, "\t"
 +  split(gkarray[2],D," ") 
 +  # print  C[0] 
 +  # GKR=C[1] 
 +  # GKH=D[1] 
 +  coordarray[7]=gkarray[1] 
 +  coordarray[6] = D[1] #northing 
 +  coordarray[8] = D[2] #easting 
 +#   print "\\debug wgs2gk3: " coordarray[1] FS coordarray[2] FS coordarray[3]  FS coordarray[4] FS coordarray[5] FS coordarray[6] 
 +#   return gkarray 
 +
 + 
 +# function wgs84toepsg(coord_n_e_h_to){ 
 +#   CMD="echo "coord_n_e_h_to[1]" "coord_n_e_h_to[2]" "coord_n_e_h_to[3]" | cs2cs -f \"%.3f\" +proj=latlong +datum=WGS84 +to +EPSG:"coord_n_e_h_to[4]"
 +#   # print CMD 
 +#   resarray[0]="" 
 +#   CMD | getline TRANSFCOORD 
 +# #   printf "begin"TRANSFCOORD"end" 
 +#   split(TRANSFCOORD, splitarray, "\t"
 +#   split(splitarray[2],D," ") 
 +#   # print  C[0] 
 +#   # GKR=C[1] 
 +#   # GKH=D[1] 
 +#   resarray[1]=splitarray[1] 
 +#   resarray[2] = D[1] 
 +#   resarray[3] = D[2] 
 +#    print "\\debug wgs84toepsg: " resarray[1] FS resarray[2] FS resarray[3] 
 +#   return resarray 
 +# } 
 +{if (ECHO!="false"){print;
 +#if (true){ 
 +# for (i=1;i<=NF;i++){ 
 +# print i"\t"$i 
 +# } 
 +#} 
 +
 +/GGA/{ 
 +#   $GPGGA,131329.00,4842.71443089,N,00912.27614062,E,4,07,1.3,437.834,M,0.000,M,0.0,0000*70 
 +  transarray[0]="" 
 +  transarray[1]=nmea2dd($NFN) # ddlat 
 +  transarray[2]=nmea2dd($EFN) # ddlon 
 +  transarray[3]=$HFN # wgsheight 
 +  transarray[4]=EPSGFROM 
 +  transarray[5]=EPSGTO 
 +#   transarray[4]=EPSGCODE 
 +  cs2cs(transarray) 
 +  if(CNV!="false"){ # print pseudo string with transformed coordinates 
 +    $1="$CCONV" 
 +    $NFN=transarray[6] 
 +    $EFN=transarray[7] 
 +    $HFN=transarray[8] 
 +    print $0 
 +  }else 
 +  print transarray[6] FS transarray[7] FS transarray[8] 
 +  #write to file: works in windows 
 +  if(PRINT2FILE=="true"){ 
 + #{print transarray[6] FS transarray[7] FS transarray[8] > OUTPUTFILE".log"
 + #northing,easting 
 + {print transarray[1] FS transarray[2] FS transarray[3] > OUTPUTFILE".log"
 +  
 +  } 
 +
 + 
 +</file>
teaching/m_r/excersize/proj4.1352301600.txt.gz · Last modified: 2021/08/14 04:20 (external edit)