Warning: Invalid argument supplied for foreach() in /home/jihswbiz/public_html/t6.gwilt.org/refDox.php on line 212
Docs-parseCoords

 

ReLoad

Keys


Functions

arraybrowsercolorcookiedatetimeDBdebugdeviceDSTequiverrorflagsfontformatgeo
holidayhtmlisjsonmathparsePHPprintsearchsortstringtabletexttracetype
VOTDweatherxml

Function  parseCoords   Lines 369-530 (161 lines) file  utilsCoords.php   Last mod: Tue 2021-04-06 21:34:28

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;
                        }
                }
        }

?>