AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Entfernung mittels einer Stored Procedure
Thema durchsuchen
Ansicht
Themen-Optionen

Entfernung mittels einer Stored Procedure

Ein Thema von Dumpfbacke · begonnen am 13. Feb 2016 · letzter Beitrag vom 15. Feb 2016
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Entfernung mittels einer Stored Procedure

  Alt 13. Feb 2016, 14:21
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Hallo Leute,
ich hab ein Problem bei dem ich nicht weiß wie ich es lösen kann. Ich habe eine Datenbank mit Koordinaten zu Standorten. Die Daten sind als Standort, Rechtswert und Hochwert hinterlegt. Nun möchte ich ein Standort übergeben und dann alle Standorte zurückhaben welche im Umkreis von z.B. 5 Km (Luftline) liegen. Die Berehnung ist einfach da man ja aus den Koordinaten ein rechtwinkliges Dreieck bilden kann und so die Entfernung berechnen kann.
Kann ich so etwas irgendwie in einer Stored Procedure für Firebird lösen ?

Tanja
Tanja

Geändert von TBx (13. Feb 2016 um 15:14 Uhr) Grund: ein paar Tipselfehler gemopst
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Entfernung mittesl einer Stored Procedure

  Alt 13. Feb 2016, 14:43
http://www.synaptica.info/2016/01/22...-wgs84-points/
Markus Kinzler
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Entfernung mittesl einer Stored Procedure

  Alt 15. Feb 2016, 05:29
Danke für den Link das bringt mich schon mal ein wenig weiter. Mein Problem ist nur wie kann ich die Datensätze auswählen welche in der gewünschten Entfernung liegen ? Ein größer oder kleiner Rechtswert / Hochwert geht ja nicht.

Tanja
Tanja
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Entfernung mittels einer Stored Procedure

  Alt 15. Feb 2016, 05:44
Guten Morgen,

das kommt darauf an....

Wenn es eine überschaubare Menge an Standorten sind, dann würde ich die bei Bedarf holen und im Client bearbeiten. Wenn es zu viele sind oder die sich oft ändern, dann würde ich in einer StoredProcedure erst mal alle die Standorte selektieren, bei denen die Differenz beim Rechts- und Hochwert kleiner oder gleich der Umkreissuche ist. Für diese Punkte kannst Du dann wiederum genau berechnen ob dieser wirklich im Suchradius liegt.

Was ich jetzt nicht verstehe: Du sprichst explizit von Rechts- und Hochwert, die so im GK- oder UMTS-Systemen Verwendung finden, der Link von MKinzler zeigt die Berechnung mit geografischen Koordinaten - das ist ein "winzig" kleiner Unterschied....
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Entfernung mittels einer Stored Procedure

  Alt 15. Feb 2016, 05:54
Das es dort ein Unterschied gibt ist mir bewusst. Mir war bis jetzt noch nicht bewusst das ich ein einer Stored Procedure auch mit Variablen rechnen kann.

Guten Morgen,

dann würde ich in einer StoredProcedure erst mal alle die Standorte selektieren, bei denen die Differenz beim Rechts- und Hochwert kleiner oder gleich der Umkreissuche ist. Für diese Punkte kannst Du dann wiederum genau berechnen ob dieser wirklich im Suchradius liegt.
Wie kann ich das denn machen ? Die beiden werte sind doch von einander abhängig. Wenn der Rechtswert kleiner ist kann der HOchwert größer sein und es liegt doch noch im Radius.
Tanja
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Entfernung mittels einer Stored Procedure

  Alt 15. Feb 2016, 06:23
Wie kann ich das denn machen ? Die beiden werte sind doch von einander abhängig. Wenn der Rechtswert kleiner ist kann der HOchwert größer sein und es liegt doch noch im Radius.
???? Bitte nochmal nachdenken...

Du suchst im Umkreis vom 5 km. Somit suchst Du alle Punkte, die einen maximale (absolute!) Differenz von 5 km von deinem Standort haben. Somit ergeben sich folgende Fälle:

dR=5, dH=0 -> ergibt 5 km Entfernung
dR=5, dH=5 -> ergibt 5 km Entfernung
dR=5, dH=4 -> ergibt 6,4 km
dR=6, dh=0 -> ergibt 6 km (weniger als 0 geht halt nun mal nicht - um negative Differenzen brauchen wir uns nicht gesondert zu kümmern)
....

Du schneidest aus deiner Punktwolke also ein Quadrat um deinen Suchstandort aus mit einer Seitenlänge 5km [edit] ist natürlich falsch, das Quadrat hat 10km Seitenlänge[/edit], das den Suchkreis einschließt. Du führst hier also erst eine Grobselektion, dann eine Feinselektion aus.

Nachtrag: Wobei sich die Ausführung immer auf ein kartesisches Koordinatensystem - in einem geografischen System ist das vermutlich etwas komplexer, so weit reicht meine Denkmaschine heute morgen aber noch nicht....

Geändert von Lemmy (15. Feb 2016 um 07:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Entfernung mittels einer Stored Procedure

  Alt 15. Feb 2016, 07:09
Hallo,

Ist doch ganz einfach:
Code:
SELECT
  *
FROM standort
LEFT JOIN sp_get_entfernung(standort.lon, standort.lat, :mittelpunkt_lon, :mittelpunkt_lat)
WHERE sp_get_entfernung.entfernung <= 5000
Das ist natürlich Pseudocode aber sollte wenn man Felder/Tabellennamen anpasst so passen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (15. Feb 2016 um 07:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz