Beitrag von Norbert (177 Beiträge) am Dienstag, 18.Juni.2002, 17:38. WWW: www.kadek.de
Berechnung aus Feldinhalten
Hallo!
Ich hab mal 'ne ganz dumme Frage: ist es möglich, abhängig vom Feldinhalt eine bestimmte Suchabfrage zu ERRECHNEN?
Also: ich hab 'ne Datenbank, die Reisziele enthält. Der User kann ganz normal über Suchmaske nach Kriterien auswählen, z.B. Land, Ort, Sehenswürdigkeit usw.
Jeder Datensatz enthält die GPS-Koordinaten des jeweiligen Reiseziels. Ist ein Ziel gefunden und ausgewählt, möchte ich abhängig von diesen Werten alle weiteren gespeicherten Ziele (Sehenswürdigkeiten) im Umkreis von 100km ausgeben können.
Beispiel: der User befindet sich auf der Infoseite des Eiffelturmes und drückt auf den Link "Suche in der Umgebung". Mit drücken des Links werden die GPS Koordinaten des Turmes aus der DB gelesen (sagen wir x1 und y1). Es erscheint eine modifizierte Suchmaske (wie die normale) die die Datenbank anhand der eingetragenen Werte UND einer Entfernungsabhängigkeit durchsucht.
Die Entfernung wird berechnet anhand folgender Formel.
d = wurzel aus ((x1 - x2)² + (y1 - y2)²)
wobei x2 und y2 für jeden Eintrag aus der DB gelesen werden müssen.
Ausgegeben werden sollen die Felder bei denen d < 0,9 (entspricht 100km) ist.
Ist das machbar? Heute sicher nicht, dafür ist es wirklich zu heiß, aber mir fehlt echt ein Ansatzpunkt.
Danke,
Norbert
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 18.Juni.2002, 20:02.
Re: Berechnung aus Feldinhalten
Ach das geht schon noch heute, ist doch jetzt Abend ;-)
Es geht so: 1. Datensatz des Eiffelturms holen, 2. d berechnen 3. Alle Datensätze mit d < 0,9 holen... Sieht ungefähr so aus:
<perl>
get "Name==$Name"; # oder wie immer deine abfrage für den eiffelturm aussieht
$mx1=$x1; $my1=$y1; # müssen wir uns merken weil das in der folgenden schleife überschrieben wird
get "Id==*";
while(get_next)
{
$d=sqrt(($mx1 - $x1)**2 + ($my1 - $y1)**2);
if($d<0.9)
{
out "$Name... und was auch immer...";
}
}
</perl>
Schöne Formel übrigens, kann bestimmt mal jemand anderes gebrauchen: was für die bib? ;-)
Antworten
Beitrag von Norbert (177 Beiträge) am Dienstag, 18.Juni.2002, 21:54. WWW: www.kadek.de
Re: Berechnung aus Feldinhalten
Danke erst mal, werd ich mich mal ransetzen und probieren. Wenn alles sauber funktioniert, werd ich die DB publizieren.
Gruss, Norbert
Antworten
Beitrag von JmJm (60 Beiträge) am Mittwoch, 19.Juni.2002, 00:15.
Re: Berechnung aus Feldinhalten
Hallo,
mal eine bescheidene Frage, wo sind denn die Variablen x2 und y2 geblieben und warum wandelt man $mx1=$x1; $my1=$y1 um
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 19.Juni.2002, 14:11.
Re: Berechnung aus Feldinhalten
"x1" und "y1" sind Felder der DB, d.h. die werden bei jedem "get" neu gesetzt. Deshalb müssen wir uns nach dem 1. get, das ja den Hauptstandort (Eiffelturm) holt diese Werte (in $mx1 und $my1) merken, weil bei dem 2. get, das alle anderen Orte holt, $x1 und $y1 jeweils die Punkte für den entsprechenden anderen Ort zugewiesen bekommen.
Ich hab die Formel also umgewandelt (x1 -> mx1, y1 -> my1, x2 -> x1, y2 -> y1):
d = wurzel aus ((mx1 - x1)² + (my1 - y1)²)
klarer?
Antworten
Beitrag von JmJm (60 Beiträge) am Mittwoch, 19.Juni.2002, 15:42.
Re: Berechnung aus Feldinhalten
Hallo Herr Bergmann,
ich versuche das mal an einen Beispiel zu erfragen Eifelturm x1=10 y1=20 diese Koordinaten sind fest sowie Sehenswürdigkeiten x2=20 y2=40 und jetzt möchte ich das Ergebnis ausgeben. Warum schreibe ich Daten nach dem get wieder zurück
"Ihr Ausführungen werden schon richtig sein, ich verstehe es aber leider nicht"
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Mittwoch, 19.Juni.2002, 18:13.
Re: Berechnung aus Feldinhalten
Warum so förmlich, hier im Forum duzen wir uns eigentlich ,-)
Also:
$x1=10; $y1=10; # koordinaten eiffelturm - das wird im obigen prg. in der zeile: get "Name==$Name"; gesetzt...
$mx1=$x1; $my1=$y1; # das ist die 2. zeile des prgs. $mx1 hat nun den wert von $x1 und $my1 den wert von $y1
$x1=20; $y1=40; # das entspricht x2=20; y2=40, aber beim get, bzw. get_next im obigen Prg. werden eben $x1 und $y1 gesetzt (und nicht $x2 und $y2), weil das die Namen der Felder sind...
$d=sqrt(($mx1 - $x1)**2 + ($my1 - $y1)**2); # oder mit eingesetzten werten: $d=sqrt((10-20)**2 + (10-40)**2); -> $d=sqrt(100 + 900) -> $d=31.6227766016838
klarer?
Antworten
Beitrag von JmJm (60 Beiträge) am Donnerstag, 20.Juni.2002, 07:44.
Re: Berechnung aus Feldinhalten
Hallo Herr Bergmann,
sagen Sie mir doch bitte, wie würde zu diesem Beispiel die Datenbank aussehen. Was steht denn in der Variablen $Name.
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Donnerstag, 20.Juni.2002, 13:13.
Re: Berechnung aus Feldinhalten
z.b. so:
"Name" - Name eines Ortes (z.b. "Eiffelturm", "Place de la Concorde", "Champs Elysée"...)
"x1" - Teil 1 der GPS-Koordinate
"y1" - Teil 2 der GPS-Koordinate
das hat Norbert in seinem ursprünglichen Posting so beschrieben...
Antworten