Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UDF macht mist. (https://www.delphipraxis.net/69622-udf-macht-mist.html)

mojo777 17. Mai 2006 23:36

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:
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

mkinzler 18. Mai 2006 05:53

Re: UDF macht mist.
 
Warum übergibst du den 1. Parameter as var?

MarcoWarm 18. Mai 2006 07:07

Re: UDF macht mist.
 
Hi Mojo,

damit die UDF funktioniert musst du alle Eingabeparameter als VAR übergeben.

Delphi-Quellcode:
function GPSDIST(var lat1, long1, lat2, long2:Double):Double; cdecl; export;
viel Spaß mit Deiner neuen UDF :thumb:

mojo777 18. Mai 2006 09:22

Re: UDF macht mist.
 
:dancer2:

olé!!!
funktioniert!
DANKEEE!!!!!

mojo777 18. Mai 2006 11:03

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

marabu 18. Mai 2006 11:17

Re: UDF macht mist.
 
Besser du kopierst deine DIST.DLL in das UDF Verzeichnis der Interbase-Installation auf der Zielmaschine.

marabu

mojo777 18. Mai 2006 12:31

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