Rolf B: Ausführen eines SQL-Befehls, um ein Script zum Laufen zu bringen

Beitrag lesen

Hallo Verzweifelt,

ist das ganze Unterfangen für die Tonne. Bei mir läuft Php 7 und wie Rolf B bereits ausführte, sind einige Funktionen abgeschaltet.

Nein, nur weil die mysql-Funktionen nicht mehr existieren, sind die Script nicht für den Eimer. Das ist sehr schnell auf mysqli umgestellt.

Etwas programmieren musst Du ohnehin, um eine Umkreissuche auf deiner Seite einzubauen.

Was mir nur auffiel - und was ich wegen der Löschung nicht mehr speichern konnte: Die Formel im SQL und die Formel auf deren Supportseite stimmen nicht überein. Auf der Supportseite steht die Orthodrome-Formel, die man auch in der Wikipedia findet. Das ist der Arcuscosinus des Öffnungswinkels zwischen den beiden Punkten. Im SQL steht aber irgendwas mit Wurzel und überhaupt kein Arcuscosinus, das scheint eine Näherungsformel zu sein. Dabei hat mysql eine ACOS-Funktion, aber vielleicht ist sie ihnen zu langsam.

Abgesehen davon kommt mir das SQL sehr ineffizient vor. Wenn man effizienter sein will, dann sollte man nicht eine Näherungsformel für den Arcuscosinus verwenden, sondern

  • sin/cos der eingegebenen Länge und Breite vorab berechnen und als Literal ins SQL einsetzen
  • sin/cos von latitude und longitude vorberechnet in die Tabelle einsetzen. Dann steht da nicht mehr SIN(RADIANS(geodb.longitude)), sondern geodb.sin_long. Erweitere die plz_de Tabelle um vier float-Spalten: sin_long, cos_long, sin_lat, cos_lat, und mach einen Update-Befehl, der diese 4 Inhalte aus latitude und longitude berechnet.
  • Ein Prefixing mit geodb ist übrigens auch nicht nötig, wenn man nur eine Tabelle verwendet, und es passt bei Dir auch nicht, weil deine Tabelle gar nicht geodb heißt, sondern plz_de.

Es hilft auch, zwei SELECTs zu schachteln. Der innere berechet die Abstände, der äußere filtert, dann muss man die Abstandsformel nur einmal notieren.

Im SQL wird's dann deutlich übersichtlicher. Ich verwende jetzt die Orthodrome-Formel aus der Wikipedia statt der Näherungsformel.

In $sinLong, $sinLat, $cosLong und $cosLat stehen die vorberechneten Sin-/Cos-Werte der Bezugs-PLZ.

SELECT p.plz,
       p.ort, 
       p.abstand
FROM (SELECT plz, ort,
             6367.41 * ACOS( sin_lat * $sinLat 
                           + cos_lat * $cosLat 
                              * COS(RADIANS($long - longitude))
                           ) AS abstand
      FROM plz_de) p
WHERE p.abstand < $radius

Eine echte Cosinusberechnung ist noch nötig. Es sei denn, du machst es wie im Beispiescript und verwendest das Additionstheorem für cos(a-b)=cosa cosb + sina sinb - dann kannst Du weiter die vorberechneten Werte verwenden. Könnte schneller sein, muss man einfach mal messen.

Wenn Dir das zu wüst wird, ok, dann solltest Du mit dem Support von plz_umkreis zusammenarbeiten. Die lassen sich ja auf ihrer Homepage für ihren Support feiern.

Rolf

--
sumpsi - posui - obstruxi
0 40

Ausführen eines SQL-Befehls, um ein Script zum Laufen zu bringen

Verzweifelt von A bis zu den Umlauten
  • sql
  1. 0
    Tabellenkalk
  2. 0
    dedlfix
  3. 0
    klawischnigg
    1. 0
      Verzweifelt von A bis zu den Umlauten
      1. 0
        klawischnigg
        1. 0
          Verzweifelt von A bis zu den Umlauten
          1. 0
            klawischnigg
            1. 0
              Verzweifelt von A bis zu den Umlauten
              1. 0
                klawischnigg
                1. 0
                  Verzweifelt von A bis zu den Umlauten
                2. 0
                  Verzweifelt von A bis zu den Umlauten
                  1. 0
                    klawischnigg
                    1. 0
                      Rolf B
                      1. 0
                        klawischnigg
                  2. 0
                    Rolf B
                    1. 0
                      Verzweifelt von A bis zu den Umlauten
  4. 0
    Raketenwissenschaftler
    1. 0

      Installationsanleitung für opengeodb

      Raketenwissenschaftler
      1. 0

        OpenGeoDB - Umkreissuche

        Raketenwissenschaftler
      2. 0
        Rolf B
      3. 0
        Verzweifelt von A bis zu den Umlauten
        1. 0
          Raketenwilli
          1. 0
            Raketenwilli
            1. 0
              Verzweifelt von A bis zu den Umlauten
              1. 0
                Tabellenkalk
                • browser
                • csv
                • sql
                1. 0
                  Raktenwissenschaftler
              2. 0
                Raketenwissenschaftler
                1. 0
                  Tabellenkalk
                  1. 0

                    In der reinen Lehre

                    Raketenwilli
                    • humor
              3. 0
                Opengeodb PLZ-Koordinaten als sqlite3-Datei
                1. 0

                  Hinweis eines Moderators

                  JürgenB
                  • moderation
                  1. 0
                    Raketengenauheimer
                2. 0

                  Aktualisierte Datei

                  Raketenwissenschaftler
                  1. 0

                    Software für sqlite3

                    Raketenprogrammdirektor
                  2. 0
                    Raketeningrid
          2. 0
            Verzweifelt von A bis zu den Umlauten
            1. 1

              Umkreissuche

              Raketenwissenschaftler
              1. 0

                Umkreissuche - die nächsten Schritte

                Raketensignalmaat
              2. 0

                Fürchterlich komplizieter Umkreissuche

                Rolf B