Pergunta

Eu estou preso com mais coordenadas relacionadas consulta aqui. Eu tenho um número de arquivos CSV e todos eles têm um monte de coordenadas mencionado no entanto as coordenadas estão em diferentes formatos, como alguns arquivos têm as coordenadas como assim:

40.0873°N 20.1531°E

Enquanto alguns têm-los assim:

27°50′21″N 00°11′07″W

Eu preciso de uma maneira de criar uma função em PHP que:

Antes de tudo, deduz que formato as coordenadas estão em

Em seguida, converter as coordenadas em latitude e longitudes assim:

37.235
-115.811111

Além disso, eu entendo o segundo formato é Horas Minutos Segundos - a coisa é que como faço para extrair as horas minutos e segundos a partir deste tipo de corda

.

Qualquer ajuda seria muito apreciada ...

Foi útil?

Solução

Código:

print_r(parse("40.0873°N 20.1531°E"));
print_r(parse("27°50′21″N 00°11′07″W"));
function parse($coord)
{
    $strings = split(' ',$coord);
    $ret['lat'] = degree2decimal($strings[0]);
    $ret['lon'] = degree2decimal($strings[1]);
    return $ret;
}
function degree2decimal($deg_coord="")
{
    $dpos=strpos($deg_coord,'°');
    $mpos=strpos($deg_coord,'‘');
    $spos=strpos($deg_coord,'"');
    $mlen=(($mpos-$dpos)-1);
    $slen=(($spos-$mpos)-1);
    $direction=substr(strrev($deg_coord),0,1);
    $degrees=substr($deg_coord,0,$dpos);
    $minutes=substr($deg_coord,$dpos+1,$mlen);
    $seconds=substr($deg_coord,$mpos+1,$slen);
    $seconds=($seconds/60);
    $minutes=($minutes+$seconds);
    $minutes=($minutes/60);
    $decimal=($degrees+$minutes);
    if (($direction=="S") or ($direction=="W"))
        { $decimal=$decimal*(-1);}
    return $decimal;
}

Output:

Array
(
    [lat] => 40.08732425
    [lon] => 20.153142527778
)
Array
(
    [lat] => 27.835277777778
    [lon] => -0.18333333333333
)

Outras dicas

Assumindo que esses são os únicos dois formatos, você poderia encontrar o formato de uma string foi pesquisando nele para "ou '(você pode usar