AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[func] Convert basic forms of Latitude and Longitude

 
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
toralf



Joined: 31 Jan 2005
Posts: 3842
Location: Bremen, Germany

PostPosted: Sun Dec 02, 2007 5:53 pm    Post subject: [func] Convert basic forms of Latitude and Longitude Reply with quote

wikipedia wrote:
There are three basic forms of a coordinate.

1. Coordinate containing degrees (integer), minutes (integer), and seconds (integer, or real number) (DMS).
2. Coordinate containing degrees (integer) and minutes (real number) (MinDec).
3. Coordinate containing only degrees (real number) (DegDec).


These functions convert the coordinates between these basic forms.

Valid Formats are:
Code:
DMS)    87° 43' 41.00'' N       87° 43' 41.00'' W
MinDec) 87° 43.68' N            87° 43.68' W
DegDec) 87.7280555556          -87.7280555556


More information on wikipedia

Code:
Convert_DMS2DegDec(DMSLat, DMSLon, ByRef DegDecLat, ByRef DegDecLon){
  RegExMatch(DMSLat, "([snSN]?)(\d+)\D+(\d+)\D+([\d.]*)[^snSN]+([snSN]?)", Lat)
  RegExMatch(DMSLon, "([weoWEO]?)(\d+)\D+(\d+)\D+([\d.]*)[^weoWEO]+([weoWEO]?)", Lon)
  Save_FormatFloat := A_FormatFloat
  SetFormat Float, 0.6
  DegDecLat := (Lat2 + (Lat3 * 60 + Lat4) / 3600) * ((InStr(Lat1,"S") OR InStr(Lat5,"S")) ? -1 : 1)
  DegDecLon := (Lon2 + (Lon3 * 60 + Lon4) / 3600) * ((InStr(Lon1,"W") OR InStr(Lon5,"W")) ? -1 : 1)
  SetFormat Float, %Save_FormatFloat%
}

Convert_DMS2MinDec(DMSLat, DMSLon, ByRef MinDecLat, ByRef MinDecLon){
  RegExMatch(DMSLat, "[snSN]?\d+\D+((\d+)\D+([\d.]*)'*)[^snSN]+[snSN]?", Lat)
  RegExMatch(DMSLon, "[weoWEO]?\d+\D+((\d+)\D+([\d.]*)'*)[^weoWEO]+[weoWEO]?", Lon)
  Save_FormatFloat := A_FormatFloat
  SetFormat Float, 0.2
  MinLat := Lat2 + Lat3 / 60
  MinLon := Lon2 + Lon3 / 60
  MinDecLat := RegExReplace(DMSLat, "([snSN]?\d+\D+)\d+\D+[\d.]*'*([^snSN]+[snSN]?)", "$1" MinLat "'$2")
  MinDecLon := RegExReplace(DMSLon, "([weoWEO]?\d+\D+)\d+\D+[\d.]*'*([^weoWEO]+[weoWEO]?)", "$1" MinLon "'$2")
  SetFormat Float, %Save_FormatFloat%
}
Convert_DegDec2DMS(DegLat, DegLon, ByRef DMS1, ByRef DMS2){
  Dir1 := (DegLat > 0 ? "N" : (DegLat < 0 ? "S" : ""))
  Dir2 := (DegLon > 0 ? "E" : (DegLon < 0 ? "W" : ""))
  Save_FormatFloat := A_FormatFloat
  Loop,2{
    SetFormat Float, 0.99
    DegDec := Abs(A_Index = 1 ? DegLat : DegLon)
    Deg := Floor(DegDec)
    Fract := (DegDec - Deg) * 60
    Min := Floor(Fract)
    SetFormat Float, 0.2
    Sec := (Fract - Min) * 60
    DMS%A_Index% := Deg "° " Min "' " Sec "'' " Dir%A_Index%
  }
  SetFormat Float, %Save_FormatFloat%
}
Convert_DegDec2MinDec(DegLat, DegLon, ByRef MinDec1, ByRef MinDec2){
  Dir1 := (DegLat > 0 ? "N" : (DegLat < 0 ? "S" : ""))
  Dir2 := (DegLon > 0 ? "E" : (DegLon < 0 ? "W" : ""))
  Save_FormatFloat := A_FormatFloat
  Loop,2{
    SetFormat Float, 0.99
    DegDec := Abs(A_Index = 1 ? DegLat : DegLon)
    Deg := Floor(DegDec)
    SetFormat Float, 0.2
    Min := (DegDec - Deg) * 60
    MinDec%A_Index% := Deg "° " Min "' " Dir%A_Index%
  }
  SetFormat Float, %Save_FormatFloat%
}
Convert_MinDec2DMS(MinDecLat, MinDecLon, ByRef DMSLat, ByRef DMSLon){
  RegExMatch(MinDecLat, "[snSN]?\d+\D+([\d.]*)[^snSN]+[snSN]?", Lat)
  RegExMatch(MinDecLon, "[weoWEO]?\d+\D+([\d.]*)[^weoWEO]+[weoWEO]?", Lon)
  MinLat := Floor(Lat1)
  MinLon := Floor(Lon1)
  Save_FormatFloat := A_FormatFloat
  SetFormat Float, 0.2
  SecLat := (Lat1 - MinLat) * 60
  SecLon := (Lon1 - MinLon) * 60
  DMSLat := RegExReplace(MinDecLat, "([snSN]?\d+\D+)[\d.]*([^snSN]+[snSN]?)", "$1" MinLat "' " SecLat "'$2")
  DMSLon := RegExReplace(MinDecLon, "([weoWEO]?\d+\D+)[\d.]*([^weoWEO]+[weoWEO]?)", "$1" MinLat "' " SecLon "'$2")
  SetFormat Float, %Save_FormatFloat%
}
Convert_MinDec2DegDec(MinDecLat, MinDecLon, ByRef DegDecLat, ByRef DegDeclon){
  RegExMatch(MinDecLat, "([snSN]?)(\d+)\D+([\d.]*)[^snSN]+([snSN]?)", Lat)
  RegExMatch(MinDecLon, "([weoWEO]?)(\d+)\D+([\d.]*)[^weoWEO]+([weoWEO]?)", Lon)
  Save_FormatFloat := A_FormatFloat
  SetFormat Float, 0.6
  DegDecLat := (Lat2 + Lat3 / 60) * ((InStr(Lat1,"S") OR InStr(Lat4,"S")) ? -1 : 1)
  DegDecLon := (Lon2 + Lon3 / 60) * ((InStr(Lon1,"W") OR InStr(Lon4,"W")) ? -1 : 1)
  SetFormat Float, %Save_FormatFloat%
}

_________________
Ciao
toralf
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Page 1 of 1

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group