functie Omrekenen coördinaten
Wie wil mij verder helpen onderstaande functie te gebruiken. De bedoeling is dat deze functie een RD coördinaat (bijv x194965 y328209) omrekent in longitude lattitude (goed voor google maps). De functie is geschreven door Vasco Tenner en mocht vrij worden gebruikt, waarvoor mijn dank
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
function amersfoort2greenwich($ax, $ay, &$gx, &$gy){
/* This is formula in sql to calculate Greenwich co-ordinates from
* the Dutch "Amersfoort" co-ordinates ("N" in quadrant).
* Our computer on the Dutch Ringing Ringing does use this program.
*/
/* from Amersfoort (quadrant "N") coordinates to Greenwich */
/*
select $ca="180"
select $cb="450"
*/
/* first amsfrt coordinaat : lengte = smallest number
* second amsfrt coordinaat : breedte= largest number
* first geogr coordinaat : breedte
* second geogr coordinaat : lengte
*/
/* coordinaten outside min and max ? */
if (($ax < 0) ||($ax > 300) ||($ay < 300) ||($ay > 650)) return
false;
$abr=187762.0; /* latitude Amersfoort in seconden */
$ale=19395.5; /* longitude Amersfoort in seconden */
/* calculate the point 500 m NorthEast from point of intersection
from given line */
$x= ($ax -154.5)/100;
$y= ($ay-462.5)/100;
/* calculate greenwich latitude */
$z=3236.033*$y-32.592*$x*$x-.247*$y*$y-.85*$x*$x*$y;
$z=$z-.065*$y*$y*$y+.005*$x*$x*$x*$x-.017*$x*$x*$y*$y;
/* $z is the difference to amfrt in sec */
$gr=floor(($z+$abr)/3600); /* latitude degrees */
$m=($z+$abr)/36;
$z=$m-$gr*100;
$mn=floor($z*.6+.5); /* latitude in minutes */
if ($mn >= 60){
$mn=0;
$gr=$gr+1;
}
if ($mn < 10) $ca=$gr."0".substr($mn,strlen($mn)-1,1);
else $ca=$gr.substr($mn,strlen($mn)-2,2);
/* calculate greenwich longitude */
$z=5261.305*$x+105.979*$x*$y+2.458*$x*$y*$y-.819*$x*$x*$x;
$z=$z+.056*$x*$y*$y*$y-.056*$x*$x*$x*$y;
/* $z is the difference to amfrt in sec */
$gr=floor(($z+$ale)/3600); /* longitude degrees */
$m=($z+$ale)/36;
$z=$m-$gr*100;
$mn=floor($z*.6+.5); /* longitude minutes */
if ($mn >= 60){
$mn=0;
$gr=$gr+1;
}
if ($mn < 10) $cb=$gr."0".substr($mn,strlen($mn)-1,1);
else $cb=$gr.substr($mn,strlen($mn)-2,2);
$q="E";
$gx = $ca/100;
$gy = $cb/100;
return true;
}
?>
function amersfoort2greenwich($ax, $ay, &$gx, &$gy){
/* This is formula in sql to calculate Greenwich co-ordinates from
* the Dutch "Amersfoort" co-ordinates ("N" in quadrant).
* Our computer on the Dutch Ringing Ringing does use this program.
*/
/* from Amersfoort (quadrant "N") coordinates to Greenwich */
/*
select $ca="180"
select $cb="450"
*/
/* first amsfrt coordinaat : lengte = smallest number
* second amsfrt coordinaat : breedte= largest number
* first geogr coordinaat : breedte
* second geogr coordinaat : lengte
*/
/* coordinaten outside min and max ? */
if (($ax < 0) ||($ax > 300) ||($ay < 300) ||($ay > 650)) return
false;
$abr=187762.0; /* latitude Amersfoort in seconden */
$ale=19395.5; /* longitude Amersfoort in seconden */
/* calculate the point 500 m NorthEast from point of intersection
from given line */
$x= ($ax -154.5)/100;
$y= ($ay-462.5)/100;
/* calculate greenwich latitude */
$z=3236.033*$y-32.592*$x*$x-.247*$y*$y-.85*$x*$x*$y;
$z=$z-.065*$y*$y*$y+.005*$x*$x*$x*$x-.017*$x*$x*$y*$y;
/* $z is the difference to amfrt in sec */
$gr=floor(($z+$abr)/3600); /* latitude degrees */
$m=($z+$abr)/36;
$z=$m-$gr*100;
$mn=floor($z*.6+.5); /* latitude in minutes */
if ($mn >= 60){
$mn=0;
$gr=$gr+1;
}
if ($mn < 10) $ca=$gr."0".substr($mn,strlen($mn)-1,1);
else $ca=$gr.substr($mn,strlen($mn)-2,2);
/* calculate greenwich longitude */
$z=5261.305*$x+105.979*$x*$y+2.458*$x*$y*$y-.819*$x*$x*$x;
$z=$z+.056*$x*$y*$y*$y-.056*$x*$x*$x*$y;
/* $z is the difference to amfrt in sec */
$gr=floor(($z+$ale)/3600); /* longitude degrees */
$m=($z+$ale)/36;
$z=$m-$gr*100;
$mn=floor($z*.6+.5); /* longitude minutes */
if ($mn >= 60){
$mn=0;
$gr=$gr+1;
}
if ($mn < 10) $cb=$gr."0".substr($mn,strlen($mn)-1,1);
else $cb=$gr.substr($mn,strlen($mn)-2,2);
$q="E";
$gx = $ca/100;
$gy = $cb/100;
return true;
}
?>
Gesponsorde koppelingen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$ax = 194.965 ; // Uitdrukken in km, niet in m
$ay = 328.209 ;
$gx = ''; // de variabele moet aangemaakt worden vooraleer de functie te gebruiken
$gy = ''; // dito
$result = amersfoort2greenwich($ax, $ay, $gx, $gy);
echo '<div>'. $gx .'</div><div>'. $gy .'</div>';
function amersfoort2greenwich($ax, $ay, &$gx, &$gy){
...
?>
$ax = 194.965 ; // Uitdrukken in km, niet in m
$ay = 328.209 ;
$gx = ''; // de variabele moet aangemaakt worden vooraleer de functie te gebruiken
$gy = ''; // dito
$result = amersfoort2greenwich($ax, $ay, $gx, $gy);
echo '<div>'. $gx .'</div><div>'. $gy .'</div>';
function amersfoort2greenwich($ax, $ay, &$gx, &$gy){
...
?>
EDIT:
(een beetje off topic)
Heeft Nederland echt zo een eigen coördinatenstelsel?
Wordt dat gebruikt?
Ik (Belg) had er nog nooit van gehoord.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Ja, het rijksdriehoek systeem wordt gebruikt, het is iig de standaard voor natuurwaarnemingen. Ook Belgie heeft een rijksdriehoek grid, maar dat is iets minder slim opgezet dan het Nederlandse. In het Nederlandse grid zijn x en y coordinaten niet te verwarren (x<y oid). Het belgische heeft dat niet.
complegendary schreef op 30.11.2009 14:21:
Ook Belgie heeft een rijksdriehoek grid, maar dat is iets minder slim opgezet dan het Nederlandse...
Hehe, verwondert me niets.
:)
Bovenstaande oplossing werkt, echter gedeeltelijk. Met bovengenoemde coordinaten krijg ik als uitkomst 50.57 en 5.58 en moet zijn:50 56,532251 en 5 57,348197 of iets in die zin. Het lijkt erop dat dat het e.e.a wordt afgerond. Iemand enig idee dit eruit te halen? Het zit hem ergens in de floor... denk ik.
Daarnaast rekent de functie volgens mij kilometer en zou moeten rekenen in meters...
Daarnaast rekent de functie volgens mij kilometer en zou moeten rekenen in meters...
Gewijzigd op 01/01/1970 01:00:00 door bart nukem



