Voor een website probeer ik een PHP-implementatie te maken van RDNAPTRANS2018. Mijn eerste versie had redelijk grote afwijkingen. Omdat het moeilijk is om te constateren in welke stap de afwijking is ontstaan, heb ik daarna de SAS-implementatie die ik heb gevonden op https://github.com/FVelli…ain/gm_rdnaptrans2018.sas herschreven naar PHP.
Die resultaten waren al een stuk beter, maar ik constateer nog steeds een klein verschil in de uitkomst. ik hoop dat iemand me kan duiden in welke stap het verschil optreedt.
Ik ben even uitgegaan van het eerste punt in het zelfvalidatie-bestand:
ETRS89:
lat: 51.728601274
lon: 4.712120126
hoogte: 301.7981
Verwacht resultaat:
x:108360.8790
y:415757.2745
h:258.0057
Mijn resultaat:
‘gmv_RD_x_lon’ => float 108360.88437748
‘gmv_RD_y_lat’ => float 415757.27429712
‘gmv_NAP_height’ => float 258.01342490227
Tussenreultaten:
De resultaten van de verschillende stappen die in de pdf worden genoemd.
ik heb de namen van de waarden genomen zoals die genoemd worden in de SAS-implementatie:
2.1 Omrekenen naar radialen
Mijn resultaat:
‘gmv_ETRS89_lat_rad’ => float 0.90283440968263
‘gmv_ETRS89_lon_rad’ => float 0.08224201094819
2.2 Datum transformatie (stap 1)
‘gmv_geoc_cart_ETRS89_X’ => float 3945358.2222048
‘gmv_geoc_cart_ETRS89_Y’ => float 325207.73269047
‘gmv_geoc_cart_ETRS89_Z’ => float 4984189.6144722
2.2 Helbert-transformatie naar pseudo Bessel (stap 2)
‘gmv_geoc_cart_ETRS89_X’ => float 3945358.2222048
‘gmv_geoc_cart_ETRS89_Y’ => float 325207.73269047
‘gmv_geoc_cart_ETRS89_Z’ => float 4984189.6144722
‘gmv_geog_ellips_psdo_Bessel_lat’ => float 0.90285076437824
‘gmv_geog_ellips_psdo_Bessel_lon’ => float 0.082247920070159
2.3 Iteratieve RDcorrectie
‘gmv_geog_ellips_real_Bessel_lat’ => float 51.72953802384
‘gmv_geog_ellips_real_Bessel_lon’ => float 4.7124591666284
2.4 Omzetting naar RD
‘gmv_RD_x_lon’ => float 108360.88437748
‘gmv_RD_y_lat’ => float 415757.27429712
2.5 Hoogte-correctie
‘gmv_NAP_height’ => float 258.01342490227
Voor de compleetheid, heb ik hieronder een compleet overzicht van alle variabelen die voorbij komen in mijn PHP-implementatie van de SAS-variant:
‘gmv_GRS80_a’ => int 6378137
‘gmv_GRS80_f’ => float 0.0033528106811823
‘gmv_ETRS89_h0’ => int 43
‘gmv_epsilon_GRS80_threshold’ => float 2.0E-11
‘gmv_tX’ => float -565.7346
‘gmv_tY’ => float -50.4058
‘gmv_tZ’ => float -465.2895
‘gmv_D_dec’ => float 5.3876388888889
‘gmv_D_rad’ => float 0.0940320375196
‘gmv_alpha’ => float -1.9151255475293E-6
‘gmv_beta’ => float 1.6036473018269E-6
‘gmv_gamma’ => float -9.0954585716021E-6
‘gmv_delta’ => float -4.07242E-6
‘gmv_tX_inv’ => float 565.7381
‘gmv_tY_inv’ => float 50.4018
‘gmv_tZ_inv’ => float 465.2904
‘gmv_alpha_inv’ => float 1.9151400919398E-6
‘gmv_beta_inv’ => float -1.6036279092796E-6
‘gmv_gamma_inv’ => float 9.0954634197389E-6
‘gmv_delta_inv’ => float 4.07244E-6
‘gmv_B1841_a’ => float 6377397.155
‘gmv_B1841_f’ => float 0.0033427731821748
‘gmv_epsilon_B1841_threshold’ => float 2.0E-11
‘gmv_RD_Bessel_h0’ => int 0
‘gmv_phi_min’ => int 50
‘gmv_phi_max’ => int 56
‘gmv_labda_min’ => int 2
‘gmv_labda_max’ => int 8
‘gmv_phi_delta’ => float 0.0125
‘gmv_labda_delta’ => float 0.02
‘gmv_c0’ => int 0
‘gmv_epsilon_RD_threshold’ => float 1.0E-9
‘gmv_k_amersfoort’ => float 0.9999079
‘gmv_x0_amersfoort’ => int 155000
‘gmv_y0_amersfoort’ => int 463000
‘gmv_phi0_amersfoort’ => float 0.91029672689324
‘gmv_labda0_amersfoort’ => float 0.0940320375196
‘lmv_height_bln’ => int 1
‘gmv_ETRS89_lat_dec’ => float 51.728601274
‘gmv_ETRS89_lon_dec’ => float 4.712120126
‘gmv_ETRS89_height’ => float 301.7981
‘gmv_ETRS89_lat_rad’ => float 0.90283440968263
‘gmv_ETRS89_lon_rad’ => float 0.08224201094819
‘gmv_geoc_cart_ETRS89_X’ => float 3945358.2222048
‘gmv_geoc_cart_ETRS89_Y’ => float 325207.73269047
‘gmv_geoc_cart_ETRS89_Z’ => float 4984189.6144722
‘gmv_geoc_cart_RD_Bessel_X’ => float 3944765.4696156
‘gmv_geoc_cart_RD_Bessel_Y’ => float 325182.34180738
‘gmv_geoc_cart_RD_Bessel_Z’ => float 4983710.9769915
‘gmv_geog_ellips_psdo_Bessel_lat’ => float 0.90285076437824
‘gmv_geog_ellips_psdo_Bessel_lon’ => float 0.082247920070159
‘lmv_phi0’ => float 51.729538329034
‘lmv_phi’ => float 51.729538329034
‘lmv_phi1’ => float 51.72953802384
‘lmv_labda0’ => float 4.7124586937494
‘lmv_labda’ => float 4.7124586937494
‘lmv_labda1’ => float 4.7124591666284
‘gmv_geog_ellips_real_Bessel_lat’ => float 51.72953802384
‘gmv_geog_ellips_real_Bessel_lon’ => float 4.7124591666284
‘gmv_RD_x_lon’ => float 108360.88437748
‘gmv_RD_y_lat’ => float 415757.27429712
‘gmv_NAP_height’ => float 258.01342490227
Ik hoop dat iemand me kan helpen en kan aangeven welke tussenresultaten kloppen en waar de afwijking begint.
Oh ja, de gebruikte waarden van het correctiegrid voor dit ene punt:
‘correctionCache’ =>
array (size=4)
51.7375,4.7200 =>
array (size=3)
‘LatCor’ => string ‘0.000000320’ (length=11)
‘LonCor’ => string ‘-0.000000440’ (length=12)
‘Height’ => string ‘43.7790’ (length=7)
51.7375,4.7400 =>
array (size=3)
‘LatCor’ => string ‘0.000000320’ (length=11)
‘LonCor’ => string ‘-0.000000520’ (length=12)
‘Height’ => string ‘43.7699’ (length=7)
51.7250,4.7200 =>
array (size=3)
‘LatCor’ => string ‘0.000000298’ (length=11)
‘LonCor’ => string ‘-0.000000414’ (length=12)
‘Height’ => string ‘43.7949’ (length=7)
51.7250,4.7400 =>
array (size=3)
‘LatCor’ => string ‘0.000000296’ (length=11)
‘LonCor’ => string ‘-0.000000493’ (length=12)
‘Height’ => string ‘43.7855’ (length=7)