nächstliegende Geodaten aus Datenbank

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • nächstliegende Geodaten aus Datenbank

    Liebes Forum,

    ich habe eine Datenbank mit Orten und deren Koordinaten. Nun möchte ich z.B. die 5 nächstliegenden Orte eines Ortes aus der Datenbank holen.

    Ist es möglich dies mit nur einer einzigen Datenbank-Abfrage zu tun? Wenn ja wie sähe dann so eine Abfrage aus (sortiert von der geringsten zur größten Entfernung)?

    Die Daten liegen wie folgt vor:

    LAT: 70.50000000
    LON:-149.08638888

    Danke und liebe Grüße
    RON

  • #2
    Re: nächstliegende Geodaten aus Datenbank

    SELECT (Berechnung der Entfernung) AS Entfernung FROM ... ORDER BY Entfernung ASC LIMIT 5
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für Deine Antwort, aber irendwie verstehe ich das nicht.

      Warum kann ich denn nicht einfach eine Abfrage starten mit den nächstliegenden Koordinaten und die Entfernung erst berechnen nachdem ich das Ergebniss habe?

      Beispiel:
      PHP-Code:
      SELECT from db WHERE latitude nah dran AND longitude nach dran LIMIT 0,
      Ich kenne leider keinen Ausdruck mit dem dies zu bewerkstelligen ist. Ich habe das schon mit min() und max() probiert, konnte aber keine klares Ergebniss erhalten.

      Kenn Ihr vielleicht einen Ausdruck um den oder die am nächsten liegenden Werte zu erhalten?

      GRUß RON

      Kommentar


      • #4
        Original geschrieben von rlebek

        PHP-Code:
        SELECT from db WHERE latitude nah dran AND longitude nach dran LIMIT 0,
        Das ist einfach eine andere Form der Berechnung des Abstands.

        Code:
        Auswahl in einem Quadrat (00-Norm, maximum-Norm):
        Select * from db WHERE latitude between 'gegebenLa'-0.005 and 'gegebenLa'+0.005 
        and longitude between 'gegebenLo'-0.005 and 'gegebenLo'+0.005 limit 5
        
        Auswahl in einem Rhombus (1-Norm):
        Select * from db WHERE abs(latitude-'gegebenLa') + abs(longitude-'gegebenLo')<=0.010 
        limit 5
        
        Auswahl in einem Kreis (2-Norm, übliche Distanz):
        Select * from db WHERE (latitude-'gegebenLa')^2 + (longitude-'gegebenLo')^2<=0.005^2 
        limit 5
        Viel Erfolg!

        Kommentar


        • #5
          noch was genaueres

          Code:
          Auswahl in einem Quadrat (00-Norm, maximum-Norm):
          Select *, max(abs(latitude - 'gegebenLa'),abs(longitude -'gegebenLo')) as distanz 
          from db order by distanz asc limit 5
          
          Auswahl in einem Rhombus (1-Norm):
          Select * ,abs(latitude-'gegebenLa') + abs(longitude-'gegebenLo') as distanz
           from db order by distanz asc limit 5
          
          Auswahl in einem Kreis (2-Norm, übliche Distanz):
          Select * , (latitude-'gegebenLa')^2 + (longitude-'gegebenLo')^2 as distanzquadrat
          from db order by distanzquadrat asc limit 5

          Kommentar


          • #6
            Original geschrieben von rlebek
            Danke für Deine Antwort, aber irendwie verstehe ich das nicht.

            Warum kann ich denn nicht einfach eine Abfrage starten mit den nächstliegenden Koordinaten und die Entfernung erst berechnen nachdem ich das Ergebniss habe?

            Beispiel:
            PHP-Code:
            SELECT from db WHERE latitude nah dran AND longitude nach dran LIMIT 0,
            "nach dran" in welche richtung?
            die nächte naha stehende latitude kann die weiteste longitude haben und 150 km von Nordpol liegen.
            Slava
            bituniverse.com

            Kommentar


            • #7
              Original geschrieben von Slava
              die nächte naha stehende latitude kann die weiteste longitude haben und 150 km von Nordpol liegen.
              Eben, deshalb beide Werte betrachten und in irgendeine Art von Relation setzen.
              Wenn man beispielsweise davon ausgehen würde (!), dass latitude und longitude auf einem nahezu quadratischen Grundraster gemessen werden, könnte man das Produkt der Quadrate der beiden betrachten ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Original geschrieben von wahsaga
                Eben, deshalb beide Werte betrachten und in irgendeine Art von Relation setzen.
                Wenn man beispielsweise davon ausgehen würde (!), dass latitude und longitude auf einem nahezu quadratischen Grundraster gemessen werden, könnte man das Produkt der Quadrate der beiden betrachten ...
                Code:
                in sql (mysql):
                latitude^2 * longitude^2 as distanz
                Das 'davon ausgehen' hat seine Berechtigung. In der Nähe der Pole und der Datumslinie gehen die Formeln nicht auf diese Art. Aber gerade kürzlich war eine ähnliche anfrage hier, wo die sightseeing Distanz in km ausgerechnet wurde, mit einer langwierigen Formel.

                Nachtrag, auch bezüglich slava: es ist sinnvoll, den Längenabstand mit cos(Breite) zu gewichten sowie den Längenabstand in den Bereich -180 Grad, +180 Grad zu bringen.
                Zuletzt geändert von mäander_; 10.07.2006, 21:42.

                Kommentar

                Lädt...
                X