Keys →
Functions ↓
function parseCoords ( $str, &$ll ) {#-k geo parse#- parse coords. options are:#- X [ [,] X ] ] where X is in the form#- -12.345678#- -12:34:56.78#- 12° [ 34' [ 56" [ S ] ] ]#- degrees - xB0#- mins - x2032#- $ll -1 - unknown - sign only; will return a value if we can figure it out#- 0 - longitude - EW#- 1 - latitude - NS $deg = 'o'; $min = "'"; $sec = '"'; $d = $e = ''; $sgn = 1; $typ = 3; $str = replaceSpecialChars ( $str ); if (strpos($str,":")) $typ = 1; elseif (Sstrpos($str,$deg.$min.$sec)>=0) $typ = 2; elseif (strpos($str,".")) $typ = 0; switch ($typ) {case 0: # -12.345678 $dot = false; $w = $f = ''; for ($i=0;$i<strlen($str);$i++) { if (!strlen($d) && ($str[$i] == '+')) { $d = '+'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == '-')) { $d = '-'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'N')) { $d = 'N'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'S')) { $d = 'S'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'W')) { $d = 'W'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'E')) { $d = 'E'; $sgn = -1; } elseif ($str[$i] == '.') $dot = true; elseif (is_numeric($str[$i])) { if ($dot) $f .= $str[$i]; elseif (strlen($w) || ($str[$i] > 0)) $w .= $str[$i]; } else $e = 'Error - unknown format-case 0'; } $coord = $w . '.' . $f; break;case 1: # -12:34:56.78 $shft = 0; $f = $w = array( '','',''); $dot = false; for ($i=0;$i<strlen($str);$i++) { if (!strlen($d) && ($str[$i] == '+')) { $d = '+'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == '-')) { $d = '-'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'N')) { $d = 'N'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'S')) { $d = 'S'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'W')) { $d = 'W'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'E')) { $d = 'E'; $sgn = -1; } elseif ($str[$i] == ':') $shft++; elseif ($str[$i] == '.') $dot = true; elseif (is_numeric($str[$i])) { if ($dot) $f[$shft] .= $str[$i]; else $w[$shft] .= $str[$i]; } else $e = 'Error - unknown format-case 1'; } if (($shft>0) && strlen($f[0])) $e = 'unknown format-case 1 - dots0'; if (($shft>1) && strlen($f[1])) $e = 'unknown format-case 1 - dots1'; $a = $w[0]; if (strlen($f[1])) $a += ($w[1].'.'.$f[1])/60; else { $a += $w[1]/60; if (strlen($f[2])) $a += ($w[2].'.'.$f[2])/3600; else $a += $w[2]/3600; } $coord = $a; break;case 2: # 12° [ 34' [ 56" [ S ] ] ] $shft = 0; $nw = $nf = 0; $w = array( '','',''); $dot = false; for ($i=0;$i<strlen($str);$i++) { if (!strlen($d) && ($str[$i] == '+')) { $d = '+'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == '-')) { $d = '-'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'N')) { $d = 'N'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'S')) { $d = 'S'; $sgn = -1; } elseif (!strlen($d) && ($str[$i] == 'W')) { $d = 'W'; $sgn = 1; } elseif (!strlen($d) && ($str[$i] == 'E')) { $d = 'E'; $sgn = -1; } elseif ($str[$i] == 'o') { $w[0] = $nw . '.' . $nf; $nw = $nf = 0; } elseif ($str[$i] == "'") { $w[1] = $nw . '.' . $nf; $nw = $nf = 0; } elseif ($str[$i] == '"') { $w[2] = $nw . '.' . $nf; $nw = $nf = 0; } elseif ($str[$i] == '.') $dot = true; elseif (is_numeric($str[$i])) { if ($dot) $nf .= $str[$i]; else $nw .= $str[$i]; } elseif ($str[$i] != ' ') $e = 'Error - unknown format-case 2'; } $coord = $w[0] + $w[1]/60 + $w[2]/3600; break;default: $e = 'Error - unknown format'; break; } if (strlen($e)) return $e; else { # N41.761, W73.0454 = 41:45:40, -73:02:43.5 = $coord = round($coord,5); switch ($ll) {case 0: # longitude if (($d == '+') || ($d == 'E') || !strlen($d)) return 'E' . $coord; else return 'W' . $coord; break;case 1: # latitude if (($d == '+') || ($d == 'N') || !strlen($d)) return 'N' . $coord; else return 'S' . $coord; break;default: # unknown param. use (1) if alpha($d); # (2) if >= 180, must be long; # (3) if sign use it; # (4) '+' $ll = '?'; $dir['N'] = $dir['S'] = '1'; $dir['E'] = $dir['W'] = '0'; if (is_alpha($d)) { $ll = $dir[$d]; return $d . $coord; } elseif ($coord >= 90) { $ll = 0; if ($d == '-') return 'W' . $coord; else return 'E' . $coord; } elseif ($d == '-') return '-' . $coord; else return '+' . $coord; } } }?>