Hallo,
ich möchte für eine Umkreissuche Entfernungen im Voraus in einer Tabelle "umkreise" speichern. Dabei existieren bereits 2 Tabellen -> Tabelle "orte" enthält alle Ortschaften mit Geodaten und Tabelle "sehenswuerdigkeiten" alle Sehenswürdigkeiten mit Geodaten. In der Tabelle "umkreise" sollen für jedem Ort (Feld ort_id ist der eindeutige Index) die 20 nächstgelegenen Sehenswürdigkeiten hinterlegt werden (Feld swd_id ist der eindeutige Index) und dazu die Entfernung in km.
Zur Zeit nutze ich folgende Abfrage, um für einen Ort die Entfernungen der 20 nächstgelegenen Sehenswürdigkeiten zu erhalten.
Tabellenaufbau:
Tabelle "orte" mit den Feldern lat, lng (Geokoordinaten), ortsname, plz, ort_id (eindeutige ID)
Tabelle "sehenswuerdigkeiten" mit den Feldern lat, lng (Geokoordinaten), name, swd_id (eindeutige ID)
Tabelle "umkreise" mit den Feldern ort_id, swd_id, entfernung
Dabei werden die Variablen @lat1, @lng1 mit Geodaten von einen entsprechenden Ort befüllt. Das funktioniert auch prima, nur bei vielen gleichzeitigen Anfragen an die Datenbank dauert dies zu lange. So kam die Idee, in einer Tabelle "umkreise" bereits im Vorfeld für jeden Ort alle 20 nächstgelegenen Sehenswürdigkeiten zu hinterlegen. Auch für das Erzeugen der Tabelle "umkreise" gibt es bereits eine Lösung, bei welcher mit java für jeden Ort in einer Schleife die Geodaten ermittelt werden, oben aufgeführte Abfrage ausgeführt wird und das Ergebnis dann in Tabelle "umkreise" gespeichert wird.
Nun zu meinem Anliegen. Mich interessiert, ob die selbe Aufgabe auch ausschließlich in einer mysql-Abfrage (ohne Schleifenkonstrukte) - also ohne Zuhilfenahme einer weiteren Programmiersprache umsetzbar ist. Ich habe schon vieles probiert, doch leider ohne Erfolg. Leider sind meine SQL-Kenntnisse zu gering, um einschätzen zu können, ob eine Abfrage dieser Art simpel realisieren zu können. Wer kann mir hierzu Tipps geben? Geht das überhaupt. Die Abfrage müsste ja zusätzlich zu oben aufgeführter Abfrage alle Städte durchlaufen.
Gruß vom janti
ich möchte für eine Umkreissuche Entfernungen im Voraus in einer Tabelle "umkreise" speichern. Dabei existieren bereits 2 Tabellen -> Tabelle "orte" enthält alle Ortschaften mit Geodaten und Tabelle "sehenswuerdigkeiten" alle Sehenswürdigkeiten mit Geodaten. In der Tabelle "umkreise" sollen für jedem Ort (Feld ort_id ist der eindeutige Index) die 20 nächstgelegenen Sehenswürdigkeiten hinterlegt werden (Feld swd_id ist der eindeutige Index) und dazu die Entfernung in km.
Zur Zeit nutze ich folgende Abfrage, um für einen Ort die Entfernungen der 20 nächstgelegenen Sehenswürdigkeiten zu erhalten.
Tabellenaufbau:
Tabelle "orte" mit den Feldern lat, lng (Geokoordinaten), ortsname, plz, ort_id (eindeutige ID)
Tabelle "sehenswuerdigkeiten" mit den Feldern lat, lng (Geokoordinaten), name, swd_id (eindeutige ID)
Tabelle "umkreise" mit den Feldern ort_id, swd_id, entfernung
PHP-Code:
USE geodaten;
SET @lat1 = 50.756083, @lng1 = 6.105333; #Beispielkoordinaten für einen Ort
SELECT sehenswuerdigkeiten.swd_id ,
ROUND(6378.16 * ACOS(((SIN(@lat1 / 57.2958) * SIN(sehenswuerdigkeiten.lat / 57.2958))
+ ((COS(@lat1 / 57.2958) * COS(sehenswuerdigkeiten.lat / 57.2958))
* COS((sehenswuerdigkeiten.lng / 57.2958) - (@lng1 / 57.2958))))),2) AS `entf_km`
FROM sehenswuerdigkeiten
ORDER BY entf_km asc
LIMIT 20;
Nun zu meinem Anliegen. Mich interessiert, ob die selbe Aufgabe auch ausschließlich in einer mysql-Abfrage (ohne Schleifenkonstrukte) - also ohne Zuhilfenahme einer weiteren Programmiersprache umsetzbar ist. Ich habe schon vieles probiert, doch leider ohne Erfolg. Leider sind meine SQL-Kenntnisse zu gering, um einschätzen zu können, ob eine Abfrage dieser Art simpel realisieren zu können. Wer kann mir hierzu Tipps geben? Geht das überhaupt. Die Abfrage müsste ja zusätzlich zu oben aufgeführter Abfrage alle Städte durchlaufen.
Gruß vom janti
Kommentar