Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Umkreissuche Access SQL

Begonnen von Adrjan, April 01, 2016, 16:40:30

⏪ vorheriges - nächstes ⏩

Adrjan

Nein im Feld Distanz werden nur "0"en angezeigt.
Wahrscheinlich stimmt hier tatsächlich etwas mit der Formel nicht.

MzKlMu

Hallo,
dann solltest Du natürlich erst mal sicher sein, dass die Formel korrekte Werte ermittelt. Erst dann kannst Du mal über das Filtern nachdenken.
Gruß Klaus

Adrjan

Ich schaue mir morgen nochmal die Formel an.
Das liegt garantiert an der fktDist-Funktion.

Vielen Dank Dir und auch den anderen für Deine (Eure) Hilfe.
Das hat mir schon enorm weitergeholfen. :-)

LG & noch einen schönen Abend

Beaker s.a.

Hallo Ardjan,
Zitatdann solltest Du natürlich erst mal sicher sein, dass die Formel korrekte Werte ermittelt. Erst dann kannst Du mal über das Filtern nachdenken.
Und besonders hilfreich ist dabei die Methode .Print des Debug-Objekts (siehe OH).
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

bahasu

Hallo,

im Rahmen einer Geocache-Datenbank hatte ich die folgenden Zeilen eingesetzt.
Vielleicht helfen die.

Harald

Option Compare Database
Option Explicit

    Const PI = 3.14159265


Public Function Entfernung(ByVal Breite_1, ByVal Laenge_1, ByVal Breite_2, ByVal Laenge_2 As String) As Double
    Const ErdUmfang = 6378
    Const Polarradius = 6357
    Const Exzentrizitaet = 0.081082     'Exzentrizität sqrt(1 - b^2/a^2)    a:Erdumfang, b:Polarradius

    Dim Breite_A, Breite_B, Laenge_A, Laenge_B As Double    'Koordinaten für zwei Punkte
    Dim Distanz As Double
    Dim ErdRadius  As Double
   

    Breite_A = Umwandeln(Breite_1)
    Laenge_A = Umwandeln(Laenge_1)
   
    Breite_B = Umwandeln(Breite_2)
    Laenge_B = Umwandeln(Laenge_2)
   
    ErdRadius = ErdUmfang * (1 - Exzentrizitaet ^ 2) / (1 - Exzentrizitaet ^ 2 * (Sin(Breite_A - (Breite_A - Breite_B) / 2)) ^ 2) ^ (3 / 2)

    'http://www.kompf.de/gps/distcalc.html
    Entfernung = ErdRadius * ArcCos(Sin(Breite_A) * Sin(Breite_B) + Cos(Breite_A) * Cos(Breite_B) * Cos(Laenge_B - Laenge_A))
End Function


Public Function Umwandeln(ByVal Eingabe As String) As Double
    Dim I As Byte
    Dim X As String
    Dim Nachkomma As Double
   
    Eingabe = Replace(Eingabe, "N", "")
    Eingabe = Replace(Eingabe, "E", "")
    Eingabe = LTrim(Eingabe)
   
    X = ""
    I = 1
    Do While IsNumeric(Mid(Eingabe, I, 1))
        X = X & Mid(Eingabe, I, 1)
        I = I + 1
    Loop

    Umwandeln = (Val(X) + Val(Mid(Eingabe, I + 1)) / 60) * PI / 180
End Function


Private Function ArcCos(X As Double) As Double
    'Arkuskosinus(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
    'ArcCos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)


    'http://dbwiki.net/wiki/VBA_Tipp:_Arcussinus_und_Arcuscosinus
    If X = 1 Then
        ArcCos = 0
    Else
        If X = -1 Then
            ArcCos = PI
        Else
            If X < 1 And X > -1 Then
                ArcCos = Atn(-X / Sqr((-X * X) + 1)) + PI / 2
            End If
        End If
    End If
End Function


Private Function ArcSin(X As Double) As Double
    'Arkussinus(X) = Atn(X / Sqr(-X * X + 1))
    ArcSin = Atn(X / Sqr(-X * X + 1))
End Function


Servus