![]() |
Datenbank: ib6 • Version: 6 • Zugriff über: sql
UDF macht mist.
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. :wall: Meine funktion soll Die Distanz zwischen 2 Punkten berechnen (GPS-Koordinaten) Hier die FKT in Delphi:
Delphi-Quellcode:
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:
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.
SQL-Code:
So. Alles schön und gut, aber komischerweise ist die Entfernung von jedem ort zum punkt immer gleich. (geschweige von GANZ FALSCH :-( )
SELECT GPSDIST(13.7705057, 51.0223236790861, PLZ.LAT, PLZ.LANG ) AS DIST,
PLZ.LAT, PLZ.LANG FROM PLZ (so siehts aus: ![]() :-( 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 |
Re: UDF macht mist.
Warum übergibst du den 1. Parameter as var?
|
Re: UDF macht mist.
Hi Mojo,
damit die UDF funktioniert musst du alle Eingabeparameter als VAR übergeben.
Delphi-Quellcode:
viel Spaß mit Deiner neuen UDF :thumb:
function GPSDIST(var lat1, long1, lat2, long2:Double):Double; cdecl; export;
|
Re: UDF macht mist.
:dancer2:
olé!!! funktioniert! DANKEEE!!!!! |
Re: UDF macht mist.
aber noch eine frage vorweg. da wir schon bei dem thema sind.
was passiert mit der db , wenn ich sie auf einen anderen pc kopieren? ich habe vorher immer firebird embeded benutzt und da werden ja die daten mit in das verzeichnis kopiert. soll dann meine DIST.dll mit in das verzeichnis, wo die exe ausgeführt wird? :-) mfg |
Re: UDF macht mist.
Besser du kopierst deine DIST.DLL in das UDF Verzeichnis der Interbase-Installation auf der Zielmaschine.
marabu |
Re: UDF macht mist.
ok. :-)
danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz