Code: Select all
Pos=1
Inputbox, CoordRaw
If !InStr(CoordRaw, "°")
{
CoordRaw := RegExReplace(CoordRaw, "(?<=\d)\s(?=.\d+?(\,|\.|\s(N|S|E|W)))", "°")
StringReplace, CoordRaw, CoordRaw, %A_Space%N, 'N, all
StringReplace, CoordRaw, CoordRaw, %A_Space%S, 'S, all
StringReplace, CoordRaw, CoordRaw, %A_Space%E, 'E, all
StringReplace, CoordRaw, CoordRaw, %A_Space%W, 'W, all
CoordRaw := RegExReplace(CoordRaw, "(?<=.\d)\s(?=.\d+?°)", "°")
CoordRaw := RegExReplace(CoordRaw, "(?<=.°\d\d)°(?=.\d+?)", "'")
CoordRaw := RegExReplace(CoordRaw, "(?<=.\d'\d\d)'(?=(N|S|E|W))", "@")
CoordRaw := RegExReplace(CoordRaw, "(?<=.'\d\d\,\d)'(?=(N|S|E|W))", "@")
CoordRaw := RegExReplace(CoordRaw, "°(?=\d\d'\s\d\d´·)", " ")
CoordRaw := RegExReplace(CoordRaw, "(?<=\d\d)'(?=\s\d\d´·)", "°")
CoordRaw := StrReplace(CoordRaw, "@", """")
}
While Pos := RegExMatch(CoordRaw, "\d+(º|°|-).+?(N|S|E|" Chr(1045) "|W)", m, Pos+StrLen(m))
{
If InStr(m, °) {
If A_Index = 1
Lat := CoordinateConvert(m)
If A_Index = 2
Long := CoordinateConvert(m)
}
}
MsgBox % Lat ", " Long
ExitApp
Return
;MsgBox % ArrayCoords[1] ":" ArrayCoords[2] ":" ArrayCoords[3]
CoordinateConvert(byref Input)
{
Input := StrReplace(Input, ",", ".") ;Fix for European countries that use a , instead of a .
Input := StrReplace(Input, Chr(186), "°")
ArrayOfApostrophes := ["180", "700", "1370", "2036", "2037", "8217", "65287"]
For, q,v in ArrayOfApostrophes
Input := StrReplace(Input, Chr(v), "'") ;Fix so all ' are seen the same
ArrayOfQuotes := ["733", "8221", "10078", "12317", "12318", "12319", "65282"]
For, q,v in ArrayOfQuotes
Input := StrReplace(Input, Chr(v), """") ;Fix so all " are seen the same
If InStr(Input, """") { ;General Degree Minute Second
ArrayCoords := StrSplit(Input, ["°","'",""""], A_Space)
If InStr(ArrayCoords[4], "S") or InStr(ArrayCoords[4], "W")
Return % (ArrayCoords[1] + ArrayCoords[2]/60 + ArrayCoords[3]/3600)*-1
Else
Return % ArrayCoords[1] + ArrayCoords[2]/60 + ArrayCoords[3]/3600
} Else If InStr(Input, "'.") { ;Turkey Specific
ArrayCoords := StrSplit(Input, "°")
If InStr(ArrayCoords[2], "S") or InStr(ArrayCoords[2], "W") {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "S", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "W", ""), ArrayCoords[2] := StrReplace(ArrayCoords[2], "'.", ".")
Return % (ArrayCoords[1] + ArrayCoords[2]/60)*-1
} Else {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "N", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "E", ""), ArrayCoords[2] := StrReplace(ArrayCoords[2], "'.", ".")
Return % ArrayCoords[1] + ArrayCoords[2]/60
}
} Else If InStr(Input, "'") { ;General Degree Minute
ArrayCoords := StrSplit(Input, ["°","'"], A_Space)
If InStr(ArrayCoords[3], "S") or InStr(ArrayCoords[3], "W")
Return % (ArrayCoords[1] + ArrayCoords[2]/60)*-1
Else
Return % ArrayCoords[1] + ArrayCoords[2]/60
} Else If InStr(Input, "-") { ;Any Country that uses Dashes
ArrayCoords := StrSplit(Input, "-", A_Space)
If InStr(ArrayCoords[2], "S") or InStr(ArrayCoords[2], "W") {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "S", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "W", "")
If ArrayCoords.MaxIndex() = 2 ;Sweden Specifc
Return % (ArrayCoords[1] + ArrayCoords[2]/60)*-1
Else { ;Japan, South Korea, US
ArrayCoords[3] := StrReplace(ArrayCoords[3], "S", "") , ArrayCoords[3] := StrReplace(ArrayCoords[3], "W", "")
Return % (ArrayCoords[1] + ArrayCoords[2]/60 + ArrayCoords[3]/3600)*-1
}
} Else {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "N", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "E", "")
If ArrayCoords.MaxIndex() = 2 ;Sweden Specifc
Return % ArrayCoords[1] + ArrayCoords[2]/60
Else { ;Japan, South Korea, US
ArrayCoords[3] := StrReplace(ArrayCoords[3], "N", "") , ArrayCoords[3] := StrReplace(ArrayCoords[3], "E", "")
Return % ArrayCoords[1] + ArrayCoords[2]/60 + ArrayCoords[3]/3600
}
}
} Else If InStr(Input, "´") { ;UK, India Specific
ArrayCoords := StrSplit(Input, "°")
If InStr(ArrayCoords[2], "S") or InStr(ArrayCoords[2], "W") {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "S", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "W", ""), ArrayCoords[2] := StrReplace(ArrayCoords[2], "´·", ".")
Return % (ArrayCoords[1] + ArrayCoords[2]/60)*-1
} Else {
ArrayCoords[2] := StrReplace(ArrayCoords[2], "N", "") , ArrayCoords[2] := StrReplace(ArrayCoords[2], "E", ""), ArrayCoords[2] := StrReplace(ArrayCoords[2], "´·", ".")
Return % ArrayCoords[1] + ArrayCoords[2]/60
}
}
}