On Mon, Oct 3, 2022 at 2:35 PM Luca Bertoncello <lucabert@lucabert.de> wrote:
Hallo Leute!

Irgendwie habe ich jetzt eine Denkfehler und komme nicht weiter...

Also, sagen wir, dass ich eine Tabelle "airports" habe, mit u.a. die
Koordinaten (Latitude und Longitude) der Flugplätzen.
Ich will den nächstgelegen Flugplatz einem Punkt suchen, von dem ich
ebenso die Koordinaten habe.

Mir ist klar, dass um richtig genau zu sein, die Datenbank Funktionen
enthalten muss, die die Entfernung zwischen zwei Punkte berechnen, und
das haben die meisten DB-Engines nicht. Sicherlich nicht SQLite auf
Android...

Aber für meine Zwecke würde es reichen, wenn ich den Flugplatz finde,
bei dem die Differenz zwischen den eigenen Koordinaten und den
Punktkoordinaten am kleinsten ist.

Irgendwie komme ich aber nicht klar...

Mit dieser Anfrage hole ich die Flugplatzdaten zusammen mit den
Koordinatendifferenzen:

SELECT *,
       ABS(latitude - 51.04952025) AS latdiff,
       ABS(longitude - 13.68193347) AS lngdiff
FROM airports;

Nun will ich den Datensatz finden, bei dem latdiff = MIN(latdiff) und
lngdiff = MIN(lngdiff).
So wäre meine Anfrage:

SELECT *,
       ABS(latitude - 51.04952025) AS latdiff,
       ABS(longitude - 13.68193347) AS lngdiff
FROM airports
GROUP BY id
HAVING latdiff = min(latdiff) AND lngdiff = min(lngdiff);

Aber das gibt mir völlig flasche Ergebnisse, denn die Koordinaten, die
ich hier nutze, sind in Dresden Cotta und der Flughafen Aachen ist
deutlich weiter als den Flughafen Dresden, von mir gesehen...

Kann jemand mir sagen, wo mein Denkfehler liegt?

Schau mal, vielleicht hilft dir das hier:
https://git.osuv.de/m/dotfiles/src/branch/master/mariadb/distance.sql
https://git.osuv.de/m/dotfiles/src/branch/master/mariadb/deg2rad.sql

Ob sqlite auch funktionen kann wie mariadb etc, ...keine ahnung.
 

Danke
Luca Bertoncello
(lucabert@lucabert.de)