ich habe in PHP eine Funktion, welche die Koordinaten eines Punktes in Länge und Breite transformiert.
Nun versuche ich in VB2005 genau diese Funktion abzubilden aber VB rechnet ab einer bestimmten Stelle im Code nicht so wie das PHP rechnet.
Der Wert in Variable 'Laenge' und demzufolge auch in Variable 'Laenge_Return' werden nicht wie in PHP berechnet.
Warum ist das so? Verwende ich falsche Datentypen?
Hier der PHP-Code:
Code: Alles auswählen
<?
//gegeben
$rechtswert_gegeben = 4404994;
$hochwert_gegeben = 5667943;
//Konstanten
$n = 0.00167922;
$a = 6378137;
$e = 0.00669438;
$L0= 0.20943951;
// Berechnungen
$rechts = -160.8228 + 0.9999996802134 * ($rechtswert_gegeben + 0.000010079883 * $hochwert_gegeben);
$hoch = 489.0613 + 0.9999996802134 * (-0.000010079883 * $rechtswert_gegeben + $hochwert_gegeben);
$Bf0 = $hoch * (1 + $n) / $a / (1 + (pow($n,2))/4 + (pow($n,4))/64);
$Bf = $Bf0 + 3/2 * ($n - 9/16 * pow($n,3)) * sin(2*$Bf0) + 21/16 * pow($n,2) * sin(4*$Bf0) + 151/96 * pow($n,3) * sin(6*$Bf0);
$t = tan($Bf);
$nu = $e/(1-$e) * pow(cos($Bf),2); // = nü^2
$NN = $a / sqrt(1 - $e * pow(sin($Bf),2));
$y = $rechts - 4500000;
$Breite = $Bf - $t/2 * (1+$nu) * pow($y,2)/pow($NN,2) + $t/24*(5 + 3 * pow($t,2) + 6 * $nu - 6 * pow($t,2) * $nu)* pow($y,4)/pow($NN,4) + $t/720 * (61 + 90 * pow($t,2) + 45 * pow($t,4)) * pow($y,6) / pow($NN,6);
$Breite_Return = $Breite * 180 / pi();
$Laenge = $L0 + 1/cos($Breite) * $y/$NN - 1/(6*cos($Breite))*(1-pow($t,2)+$nu)*pow($y,3)/pow($NN,3)+1/120/cos($Breite)*(5+28*pow($t,2)+24*pow($t,4))*pow($y,5)/pow($NN,5)-1/240/cos($Breite)*(61+662*pow($t,2)+1320*pow($t,4)+720*pow($t,6))*pow($y,7)/pow($NN,7);
$Laenge_Return = $Laenge * 180 / pi();
echo "rechtswert gegeben=> $rechtswert_gegeben<br>";
echo "hochwert gegeben=> $hochwert_gegeben<br>";
echo "rechts=> $rechts<br>";
echo "hoch=> $hoch<br>";
echo "Bf0=> $Bf0<br>";
echo "Bf=> $Bf<br>";
echo "t=> $t<br>";
echo "nu=> $nu<br>";
echo "NN=> $NN<br>";
echo "n=> $n<br>";
echo "y=> $y<br>";
echo "Breite=> $Breite<br>";
echo "Breite_Return=> $Breite_Return<br>";
echo "Laenge=> $Laenge<br>";
echo "Laenge_Return=> $Laenge_Return<br>";
?>
Code: Alles auswählen
Public Class Umrechnung1
Const rechtswert_gegeben As Double = 4404994
Const hochwert_gegeben As Double = 5667943
Const n As Double = 0.00167922
Const a As Double = 6378137
Const e As Double = 0.00669438
Const L0 As Double = 0.20943951
Dim Bf0, Bf, t, nu, NN, y, rechts, hoch, Breite, Breite_Return, Laenge, Laenge_Return As Double
Public Sub New()
rechts = -160.8228 + 0.9999996802134 * (rechtswert_gegeben + 0.000010079883 * hochwert_gegeben)
hoch = 489.0613 + 0.9999996802134 * (-0.000010079883 * rechtswert_gegeben + hochwert_gegeben)
Bf0 = hoch * (1 + n) / a / (1 + (Math.Pow(n, 2)) / 4 + (Math.Pow(n, 4)) / 64)
Bf = Bf0 + 3 / 2 * (n - 9 / 16 * Math.Pow(n, 3)) * Math.Sin(2 * Bf0) + 21 / 16 * Math.Pow(n, 2) * Math.Sin(4 * Bf0) + 151 / 96 * Math.Pow(n, 3) * Math.Sin(6 * Bf0)
t = Math.Tan(Bf)
nu = e / (1 - e) * Math.Pow(Math.Cos(Bf), 2)
NN = a / Math.Sqrt(1 - e * Math.Pow(Math.Sin(Bf), 2))
y = rechts - 4500000
Breite = Bf - t / 2 * (1 + nu) * Math.Pow(y, 2) / Math.Pow(NN, 2) + t / 24 * (5 + 3 * Math.Pow(t, 2) + 6 * nu - 6 * Math.Pow(t, 2) * nu) * Math.Pow(y, 4) / Math.Pow(NN, 4) + t / 720 * (61 + 90 * Math.Pow(t, 2) + 45 * Math.Pow(t, 4)) * Math.Pow(y, 6) / Math.Pow(NN, 6)
Breite_Return = Breite * 180 / Math.PI
Laenge = L0 + 1 / Math.Cos(Breite_Return) * y / NN - 1 / (6 * Math.Cos(Breite_Return)) * (1 - Math.Pow(t, 2) + nu) * Math.Pow(y, 3) / Math.Pow(NN, 3) + 1 / 120 / Math.Cos(Breite_Return) * (5 + 28 * Math.Pow(t, 2) + 24 * Math.Pow(t, 4)) * Math.Pow(y, 5) / Math.Pow(NN, 5) - 1 / 240 / Math.Cos(Breite_Return) * (61 + 662 * Math.Pow(t, 2) + 1320 * Math.Pow(t, 4) + 720 * Math.Pow(t, 6)) * Math.Pow(y, 7) / Math.Pow(NN, 7)
Laenge_Return = Laenge * 180 / Math.PI
Debug.Print("rechtswert_gegeben ==> " & rechtswert_gegeben.ToString)
Debug.Print("hochwert_gegeben ==> " & hochwert_gegeben.ToString)
Debug.Print("rechts ==> " & rechts.ToString)
Debug.Print("hoch ==> " & hoch.ToString)
Debug.Print("Bf0 ==> " & Bf0.ToString)
Debug.Print("Bf ==> " & Bf.ToString)
Debug.Print("t ==> " & t.ToString)
Debug.Print("nu ==> " & nu.ToString)
Debug.Print("NN ==> " & NN.ToString)
Debug.Print("n ==> " & n.ToString)
Debug.Print("y ==> " & y.ToString)
Debug.Print("Breite ==> " & Breite.ToString)
Debug.Print("Breite_Return ==> " & Breite_Return.ToString)
Debug.Print("Laenge ==> " & Laenge.ToString)
Debug.Print("Laenge_Return ==> " & Laenge_Return.ToString)
End Sub
End Class
MfG Rico