Guten Abend, ich habe heute meine erste udf geschrieben und muss sagen das geht ja alles recht einfach.
Leider funktioniert es nicht so wie es soll.
Meine funktion soll Die Distanz zwischen 2 Punkten berechnen (GPS-Koordinaten)
Hier die FKT in Delphi:
Delphi-Quellcode:
library DIST;
uses
Math, SysUtils;
{$APPTYPE CONSOLE}
function GPSDIST(var lat1:Double; long1:Double; lat2:Double; long2:Double):Double; cdecl; export;
var x,y,z, phi1, phi2, eta1, eta2, entf,R:Double;
begin
R:=6371; //Radius der erde (als kugel)
phi1:=lat1*Pi/180;
eta1:=long1*Pi/180;
phi2:=lat2*Pi/180;
eta2:=long2*Pi/180;
x:=cos(eta1)*sin(phi1)-cos(eta2)*sin(phi2); //Die Differenzen bilden
y:=sin(phi1)*sin(eta1)-sin(phi2)*sin(eta2);
z:=cos(phi1)-cos(phi2);
entf:=R*sqrt(power(x,2)+power(y,2)+power(z,2)); //entfernung als norm berechnen
result:=entf;
end;
exports
GPSDIST;
begin
end.
Jetzt habe ich z.b. eine tabelle mit unterschiedlichen orten und ich will gleichzeitig angezeigt bekommen, welche entfernung jeder von denen zu einem bestimmten punkt hat. das mache ich so:
SQL-Code:
SELECT GPSDIST(13.7705057, 51.0223236790861, PLZ.LAT, PLZ.LANG ) AS DIST,
PLZ.LAT, PLZ.LANG
FROM PLZ
So. Alles schön und gut, aber komischerweise ist die Entfernung von jedem ort zum punkt immer gleich. (geschweige von GANZ FALSCH
)
(so siehts aus:
http://pilaf.ath.cx/pub/shared_pics/DIST.jpg )
nun. da sitze ich ratlos.
Die funktion habe ich separat (also in einem extra
gui-fomular) schon getestet. da gabs keine größeren Abweichungen. (ausser dass ich die Erde als kugel statt Ellipse modelliert hab)
mfg