2009-08-28 9 views
0

Je voudrais convertir une chaîne lat/lng en décimales en php. Un exemple:Geo conversion avec php

N47° 30.5951' = 47+(30.59517/60) = 47.509918333

est-il un moyen facile de le faire, l'expression régulière?

Merci

Répondre

0

Vous ne pouvez pas faire de l'arithmétique dans une regex normale REPLACE, mais vous pouvez écrire une fonction de rappel et utiliser preg_replace_callback.

function matches_to_decimal($matches) { 
    return $matches[2] + ($matches[3]/60); 
} 

$inputString = "N47° 30.5951'"; 
$resultDecimal = preg_replace_callback('/(N|S)(\d+)° (\d+\.?\d*)\'/', 
    "matches_to_decimal", 
    $inputString); 

Par ailleurs, la latitude et la longitude sont généralement écrites 47 ° 30'35 "N, 123 ° 56'12" W, pour que vous puissiez régler la regex et la fonction de rappel en conséquence.

0
preg_match('/^N(\d+)\° (\d+(?:\.\d+)?)\'$/i', "N47° 30.5951'", $bits); 
$coord = floatval($bits[1]) + (floatval($bits[2])/60); 

Pardonnez mon ignorance de lat long, si je suis hors sujet.

1

ne sais pas si E et W appartiennent, mais sauf que:

$regex = "/[EWNS](\d{1,3})°\ (\d{1,3}\.\d{0,10})'/"; 
if (preg_match($regex, "N47° 30.5951'", $matches)) 
{ 
    $result = $matches[1] + ((float) $matches[2]/60); 
}