![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Entfernung mittels einer Stored Procedure
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 |
AW: Entfernung mittesl einer Stored Procedure
|
AW: Entfernung mittesl einer Stored Procedure
Zitat:
Tanja |
AW: Entfernung mittels einer Stored Procedure
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.... |
AW: Entfernung mittels einer Stored Procedure
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.
Zitat:
|
AW: Entfernung mittels einer Stored Procedure
Zitat:
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.... |
AW: Entfernung mittels einer Stored Procedure
Hallo,
Ist doch ganz einfach:
Code:
Das ist natürlich Pseudocode aber sollte wenn man Felder/Tabellennamen anpasst so passen.
SELECT
* FROM standort LEFT JOIN sp_get_entfernung(standort.lon, standort.lat, :mittelpunkt_lon, :mittelpunkt_lat) WHERE sp_get_entfernung.entfernung <= 5000 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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