Nedávno jsem potřeboval převádět WGS - tedy obvyklý a zažitý zápis zeměpisné šířky a zeměpisné délky na takzvaný Decimal Degrees - zkráceně DD - který používá Google ve svém Google api - například ve funkci - GLatLng.
DD není nic jiného než převedené zeměpisné hodiny
, minuty a sekundy na jedno číslo v desítkové soustavě. Zeměpisné hodiny
se nechávají tak jak jsou k nim se přepočnou z šedesátkové soustavy převedené minuty a k nim se připočtnou z 3600tkové soustavy zeměpisné sekundy (včetně desetiných míst. Dále jih a západ prezentují záporné číslo a sever a východ kladné.)
function WGStoDD($x, $y) {
//Decimal Degrees = Degrees + minutes/60 + seconds/3600
$x1 = explode("°", $x);
$y1 = explode("°", $y);
$x2 = explode("'", $x1[1]);
$y2 = explode("'", $y1[1]);
$x3 = explode('"', $x2[1]);
$y3 = explode('"', $y2[1]);
if($x3[1] == "S") { $lat = "-"; } else { $lat = "+"; }
if($y3[1] == "W") { $lon = "-"; } else { $lon = "+"; }
$allx = $x1[0] +$x2[0]/60 +$x3[0]/3600;
$ally = $y1[0] +$y2[0]/60 +$y3[0]/3600;
return ($lat .$allx ."/" .$lon .$ally);
}
A zpět to funguje opačně:
function DDtoWGS($x, $y) {
$x1 = explode(".", $x); //$x1[0] = hodiny
$y1 = explode(".", $y); //$y1[0] = hodiny
if($x1[0] < 0) { $lat = "S"; } else { $lat = "N"; }
if($y1[0] < 0) { $lon = "W"; } else { $lon = "E"; }
$x2 = "0." .$x1[1] * 60;
$y2 = "0." .$y1[1] * 60;
$x3 = explode(".", $x2); //$x3[0] = minuty
$y3 = explode(".", $y2); //$y3[0] = minuty
$x3[3] = ('0.'.$x3[1])*100;
$y3[3] = ('0.'.$y3[1])*100;
$x4 = round(($x3[3]-(($x3[3]%60)))*600000)/10000;
$y4 = round(($y3[3]-(($y3[3]%60)))*600000)/10000;
return ($x1[0] ."°" .floor($x3[3]) ."'" .$x4 .'"' .$lat .'/' .$y1[0] ."°" .floor($y3[3]) ."'" .$y4 .'"' .$lon);
}
Použití:
$vysl2 = explode ('/', DDtoWGS ($vysl[0], $vysl[1]));
Tak snad se to bude někomu hodit...

1 komentářů:
kód se hodí, díky moc :)
Přidat komentář