<?php
/* ***************************************
* Funktion zur Umrechnung von Gauß-Krüger
* in Breiten- und Längengerade
* Walter Hupfeld (aus Quellen in Internet)
**************************************** */
function calculate($GKRight,$GKHeight) {
//Falls nicht alle GK-Werte eingegeben wurden -> Meldung, Verlassen
if (!(($GKRight > 1000000) && ( $GKHeight > 1000000)))
{
//echo("Es wurde kein gültiger Gauß-Krüger-Code eingegeben. Bitte überprüfen Sie Ihre Eingaben!");
return;
}
//$bII, $bf, $co, $g2, $g1, $t, $fa, $dl, $min, $sek, $rho,
$e2 = 0.0067192188;
$c = 6398786.849;
$rho = 180.0 / pi();
$bII = ($GKHeight / 10000855.7646) * ($GKHeight / 10000855.7646);
$bf = 325632.08677 * ($GKHeight / 10000855.7646) * ((((((0.00000562025 * $bII + 0.00022976983) * $bII - 0.00113566119) * $bII + 0.00424914906) * $bII - 0.00831729565) * $bII + 1));
$bf /= 3600 * $rho;
$co = cos($bf);
$g2 = $e2 * ($co * $co);
$g1 = $c / sqrt(1 + $g2);
$t = tan($bf);
$fa = ($GKRight - floor($GKRight / 1000000) * 1000000 - 500000) / $g1;
$GeoDezRight = (($bf - $fa * $fa * $t * (1 + $g2) / 2 + $fa * $fa * $fa * $fa * $t * (5 + 3 * $t * $t + 6 * $g2 - 6 * $g2 * $t * $t) / 24) * $rho);
$dl = $fa - $fa * $fa * $fa * (1 + 2 * $t * $t + $g2) / 6 + $fa * $fa * $fa * $fa * $fa * (1 + 28 * $t * $t + 24 * $t * $t * $t * $t) / 120;
//echo "FA:".$fa."<br>";
//echo "dl:".$dl."<br>";
//echo "rho:".$rho."<br>";
//echo "co:".$co."<br>";
$GeoDezHeight = $dl * $rho / $co + floor($GKRight / 1000000) * 3;
//echo "Height ".$GeoDezHeight."<br>";
//echo "Right ".$GeoDezRight."<br>";
$GeoSystemEll = "WGS84";
if ($GeoSystemEll == "WGS84")
{
//var CartesianXMeters, CartesianYMeters, CartesianZMeters, n,
$aBessel = 6377397.155;
$eeBessel = 0.0066743722296294277832;
$CartOutputXMeters;
//CartOutputYMeters, CartOutputZMeters,
$ScaleFactor = 0.00000982;
$RotXRad = -7.16069806998785E-06;
$RotYRad = 3.56822869296619E-07;
$RotZRad = 7.06858347057704E-06;
$ShiftXMeters = 591.28;
$ShiftYMeters = 81.35;
$ShiftZMeters = 396.39;
$aWGS84 = 6378137;
$eeWGS84 = 0.0066943799;
//var Latitude, LatitudeIt;
$GeoDezRight = ($GeoDezRight / 180) * pi();
$GeoDezHeight= ($GeoDezHeight / 180) * pi();
$n = $eeBessel * sin($GeoDezRight) * sin($GeoDezRight);
$n = 1 - $n;
$n = sqrt($n);
$n = $aBessel / $n;
//window.alert(n);
$CartesianXMeters = $n * cos($GeoDezRight) * cos($GeoDezHeight);
$CartesianYMeters = $n * cos($GeoDezRight) * sin($GeoDezHeight);
$CartesianZMeters = $n * (1 - $eeBessel) * sin($GeoDezRight);
$CartOutputXMeters = (1 + $ScaleFactor) * $CartesianXMeters + $RotZRad * $CartesianYMeters - $RotYRad * $CartesianZMeters + $ShiftXMeters;
$CartOutputYMeters = -$RotZRad * $CartesianXMeters + (1 + $ScaleFactor) * $CartesianYMeters + $RotXRad * $CartesianZMeters + $ShiftYMeters;
$CartOutputZMeters = $RotYRad * $CartesianXMeters - $RotXRad * $CartesianYMeters + (1 + $ScaleFactor) * $CartesianZMeters + $ShiftZMeters;
$GeoDezHeight = atan(($CartOutputYMeters / $CartOutputXMeters));
$Latitude = ($CartOutputXMeters * $CartOutputXMeters) + ($CartOutputYMeters * $CartOutputYMeters);
$Latitude = sqrt($Latitude);
$Latitude = $CartOutputZMeters / $Latitude;
//window.alert("First");
$Latitude = atan($Latitude);
//window.alert(Latitude);
$LatitudeIt = 99999999;
do
{
$LatitudeIt = $Latitude;
$n = 1 - $eeWGS84 * sin($Latitude) * sin($Latitude);
$n = sqrt($n);
$n = $aWGS84 / $n;
$Latitude = $CartOutputXMeters * $CartOutputXMeters + $CartOutputYMeters * $CartOutputYMeters;
$Latitude = sqrt($Latitude);
$Latitude = ($CartOutputZMeters + $eeWGS84 * $n * sin($LatitudeIt)) / $Latitude;
//window.alert("Atan-Test");
//window.alert(Latitude);
$Latitude = atan($Latitude);
//window.alert(Latitude);
}
while (abs($Latitude - $LatitudeIt) >= 0.000000000000001);
$numLat = $Latitude / pi() * 180;
$numLong = $GeoDezHeight / pi() * 180;
return array($numLat,$numLong);
}
}
// ===============================================================================================
/*
Calculate(3419148,5727132);
echo $numLong;
echo "<br>";
echo $numLat;
*/