Formule omdraaien!

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
Plaats reactie
Dusty
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 11 nov 2017, 09:41

Formule omdraaien!

Bericht door Dusty » 11 nov 2017, 09:48

Op werk ben ik bezig met het in en exporteren van coordinaten van RD naar wgs en andersom. Nu heb ik een hele mooie formule gevonden van RD naar wgs, maar ik wil hem nu ook hebben van wgs naar RD. Kan iemand mij helpen onderstaande formule van X en y als input naar longtitude en latitude als input te schrijven? Dat het antwoord x en y eruit komt?

dX = (X - 155000) * 10 ^ -5
dY = (y - 463000) * 10 ^ -5

SomN = (3235.65389 * dY) + (-32.58297 * dX ^ 2) + (-0.2475 * dY ^ 2) + (-0.84978 * dX ^ 2 * dY) + (-0.0655 * dY ^ 3) + (-0.01709 * dX ^ 2 * dY ^ 2) + (-0.00738 * dX) + (0.0053 * dX ^ 4) + (-0.00039 * dX ^ 2 * dY ^ 3) + (0.00033 * dX ^ 4 * dY) + (-0.00012 * dX * dY)
SomE = (5260.52916 * dX) + (105.94684 * dX * dY) + (2.45656 * dX * dY ^ 2) + (-0.81885 * dX ^ 3) + (0.05594 * dX * dY ^ 3) + (-0.05607 * dX ^ 3 * dY) + (0.01199 * dY) + (-0.00256 * dX ^ 3 * dY ^ 2) + (0.00128 * dX * dY ^ 4) + (0.00022 * dY ^ 2) + (-0.00022 * dX ^ 2) + (0.00026 * dX ^ 5)

latitude = (52.15517 + (SomN / 3600))
Longitude = (5.387206 + (SomE / 3600))

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Formule omdraaien!

Bericht door arie » 11 nov 2017, 11:32

Zie http://home.solcon.nl/pvanmanen/Downloa ... rmules.pdf
onder de paragraaf
"Transformatie van RD-coördinaten naar ellipsoïdische WGS84-coördinaten (j, l) en vice versa"
De rechter kolom op pagina 2 geeft jouw bovenstaande formule,
de linker kolom op pagina 3 de formule die je zoekt.

Kom je hiermee verder?

Dusty
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 11 nov 2017, 09:41

Re: Formule omdraaien!

Bericht door Dusty » 12 nov 2017, 18:35

Hartstikke bedankt!

Als ik het goed heb kom ik dan op het volgende uit:

dF = 0.36 * (InputF - 52.1551744)
dL = 0.36 * (InputL - 5.38720621)

SomX = (190094.945 * dL) + (-11832.228 * dF * dL) + (-144.221 * (dF ^ 2) * dL) + (-32.391 * (dL ^ 3)) + (-0.705 * dF) + (-2.34 * (dF ^ 3) * dL) + (-0.608 * dF * (dL ^ 3)) + (-0.008 * (dL ^ 2)) + (0.148 * (dF ^ 2) * (dL ^ 3))

SomY = (309056.544 * dF) + (3638.893 * (dL ^ 2)) + (73.077 * (dF ^ 2)) + (-157.984 * dF * (dL ^ 2)) + (59.788 * (dF ^ 3)) + (0.433 * dL) + (-6.439 * (dF ^ 2) * (dL ^ 2)) + (-0.032 * dF * dL) + (0.092 * (dL ^ 4)) + (-0.054 * dF * (dL ^ 4))

X = 155000 + SomX
y = 463000 + SomY

Waarbij InputF en InputL als gps coordinaten zijn en x en y in RD.

Dusty
Nieuw lid
Nieuw lid
Berichten: 3
Lid geworden op: 11 nov 2017, 09:41

Re: Formule omdraaien!

Bericht door Dusty » 12 nov 2017, 18:49

Volgens het document kan er een afwijking zijn en helaas zie ik die ook. Is er een mogelijkheid om die afwijking ongedaan te maken of niet te laten voorkomen?

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Formule omdraaien!

Bericht door arie » 15 nov 2017, 08:08

Controleer je constanten nog even:
(die -144.221 moet in ieder geval -114.221 zijn):
Dusty schreef:SomX = (190094.945 * dL) + (-11832.228 * dF * dL) + (-144.221 * (dF ^ 2) * dL) + (-32.391 * (dL ^ 3)) + (-0.705 * dF) + (-2.34 * (dF ^ 3) * dL) + (-0.608 * dF * (dL ^ 3)) + (-0.008 * (dL ^ 2)) + (0.148 * (dF ^ 2) * (dL ^ 3))
Met deze Pari/GP code krijg ik in ieder geval dezelfde antwoorden als in Rekenvoorbeeld 2:

Code: Selecteer alles

init()={
KL=
[0, 1, 3235.65389, 1, 0, 5260.52916;
 2, 0, -32.58297,  1, 1, 105.94684;
 0, 2, -0.24750,   1, 2, 2.45656;
 2, 1, -0.84978,   3, 0, -0.81885;
 0, 3, -0.06550,   1, 3, 0.05594;
 2, 2, -0.01709,   3, 1, -0.05607;
 1, 0, -0.00738,   0, 1, 0.01199;
 4, 0, 0.00530,    3, 2, -0.00256;
 2, 3, -0.00039,   1, 4, 0.00128;
 4, 1, 0.00033,    0, 2, 0.00022;
 1, 1, -0.00012,   2, 0, -0.00022;
 0, 0, 0,          5, 0, 0.00026   ];

RS=
[0, 1, 190094.945, 1, 0, 309056.544;
 1, 1, -11832.228, 0, 2, 3638.893;
 2, 1, -114.221,   2, 0, 73.077;
 0, 3, -32.391,    1, 2, -157.984;
 1, 0, -0.705,     3, 0, 59.788;
 3, 1, -2.340,     0, 1, 0.433;
 1, 3, -0.608,     2, 2, -6.439;
 0, 2, -0.008,     1, 1, -0.032;
 2, 3, 0.148,      0, 4, 0.092;
 0, 0, 0,          1, 4, -0.054     ];

X0 = 155000.00;
Y0 = 463000.00;
p0 = 52.15517440; \\ phi0
l0 = 5.38720621;  \\ lambda0
}

RD2WGS(X,Y)={
dX = (X-X0)*10^-5;
dY = (Y-Y0)*10^-5;
s=0;
for(i=1,12,  s+=(KL[i,3]*dX^KL[i,1]*dY^KL[i,2])  );
p_out=p0 + s/3600;
s=0;
for(i=1,12,  s+=(KL[i,6]*dX^KL[i,4]*dY^KL[i,5])  );
l_out=l0 + s/3600;
[p_out, l_out]  \\ return vector
}

WGS2RD(p,l)={
dp=0.36*(p-p0);
dl=0.36*(l-l0);
s=0;
for(i=1,10,  s+=(RS[i,3]*dp^RS[i,1]*dl^RS[i,2])  );
x_out=X0 + s;
s=0;
for(i=1,10,  s+=(RS[i,6]*dp^RS[i,4]*dl^RS[i,5])  );
y_out=Y0 + s;
[x_out, y_out]  \\ return vector
}


\\MAIN PROGRAM:
{
\\ lees alle constanten in:
init();

\\ rekenvoorbeeld 2: 
\\ Westertoren Amsterdam:
w = RD2WGS(120700.723, 487525.501);
print(w);
v = WGS2RD(w[1],w[2]);
print(v);

\\ Martinitoren Groningen:
print();
w2 = RD2WGS(233883.131, 582065.167);
print(w2);
v2 = WGS2RD(w2[1],w2[2]);
print(v2);
}
Dit levert als output:

[52.3745325270, 4.88352559145]
[120700.722776, 487525.501259]

[53.2193831670, 6.56820052908]
[233883.131225, 582065.167605]

Deze getallen komen ook overeen met
https://www.gpscoordinaten.nl/convertee ... inaten.php


Heb je een voorbeeld met een te grote afwijking?
En hoe nauwkeurig wil je je omzetting hebben?

Plaats reactie