PLZ Geokoordinaten

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

  • #31
    in der example.phps findest du folgendes:
    PHP-Code:
    /**
    * Suche nach Ortsnamen
    */
    $search 'wuppertal%'// Ortsname (MySQL-Wildcards möglich)
    $matches $geodb->findGeoObject($search);
    print_r($matches); // <= füg das mal ein 
    damit ermittelst du die geodaten des eigenen standortes. das ganze steht in einem array. werden mehrere treffer gefunden, muss der standort halt genauer gewählt werden. das übergibst du per $_POST, gibt es nur einen treffer, kannst du die daten direkt weiterverarbeiten.

    die adress-db für der händler erweiterst du nun um die geodaten für deren standort (abgleich geodb-tab mit händler-tab). jedesmal, wenn ein neuer eintrag kommt, holst du auch die geodaten dazu.

    die 2. abfrage (umkreissuche) sucht nun in der händler-tabelle. die anweisungen/zuordnungen musst du in der geoclass.php anpassen. oder du machst dir ein umbenanntes duplikat der klasse und arbeitest mit dem. welche tabelle abgefragt wird, muss ja in der klasse definiert werden.

    mehr sollte es nicht sein.
    Kissolino.com

    Kommentar


    • #32
      Hi Leutz,
      das Thema Geo-Datenbank ist bei mir leider immer noch nicht abgehakt. Jetzt habe ich auch noch die blöde Idee, die jeweiligen Vorwahlen mit einzubinden. Da diese bei der OpenGeo- Datenbank nicht dabei sind, wäre ein weitere Datenquelle nützlich. Kennt jemand eine?

      Hat jemand von euch eine Ahnung, wo ich diese Daten auch für die Schweiz und Österreich herbekomme?
      Zuletzt geändert von Pkolb; 15.09.2003, 17:19.

      Kommentar


      • #33
        Hallo,

        also was die Unkreissuche angeht kann ich euch helfen

        "SELECT * FROM ".PLZ_DATA_TABLE." WHERE SQRT(POW(".$phi."-Phi,2)*6400 + POW(".$theta."-Theta,2)*12100) < 10";

        wobei $phi der Längengrad und $theat der Breitengrad ist

        spuckt alles aus was in 10 km Entfernung so zu finden ist !

        R

        Kommentar


        • #34
          sieht nicht schlecht aus!!!

          Kommentar


          • #35
            Hallo,

            ich kann noch einen draufsetzen!

            "SELECT PLZ, Ort, SQRT(POW(".$phi."-Phi,2)*6400 + POW(".$theta."-Theta,2)*12100) AS Distance FROM ".PLZ_DATA_TABLE." WHERE SQRT(POW(".$phi."-Phi,2)*6400 + POW(".$theta."-Theta,2)*12100) < 10 ORDER BY Distance";

            sortiert das Ganze noch so, dass die nächsten PLZ-Gebiete am Anfang kommen und die Distanz auch noch mit rauskommt.

            R

            Kommentar


            • #36
              hast du das ganze irgendwo on air, dass man mal testen kann?

              Kommentar


              • #37
                Nee bin ja gerade dabei, aber es geht.

                Und wenn Du meinst die Erde sei eine Kugel und keine Scheibe (die Deutsche Post nimmt das an)

                dann sieht das so aus

                $phi = deg2rad(11.5583); // zum Test
                $theta = deg2rad(48.1627); // zum Test
                $radius = 6367.46; // Mittelwert zwichen Äquator und Polradius
                $umkreis = 25;

                "SELECT PLZ, Ort, ".$radius."*SQRT(2*(1-cos(Theta)*cos(".$theta.")*(sin(Phi)*sin(".$phi.")+cos(Phi)*cos(".$phi."))-sin(Theta)*sin(".$theta."))) AS Distance FROM ".PLZ_DATA_TABLE." WHERE ".$radius."*SQRT(2*(1-cos(Theta)*cos(".$theta.")*(sin(Phi)*sin(".$phi.")+cos(Phi)*cos(".$phi."))-sin(Theta)*sin(".$theta."))) <= ".$umkreis." ORDER BY Distance";

                wobei theta und phi in rad anzugeben sind !!! Auch in der Datenbank

                deg2rad() leistet da gute Dienste beim konvertieren


                Der arme SQL Parser :-)

                Kommentar


                • #38
                  Hallo,

                  ist jetzt was zum Testen da

                  Umkreissuche

                  eure PLZ eingeben und umkreis

                  R

                  Zuletzt geändert von RGummi; 24.09.2003, 23:15.

                  Kommentar


                  • #39
                    Nicht schlecht. Ist das mit der OpenGeoDB gemacht oder wo hast du die Daten her?

                    Und warum wird der eingegebene Ort in der Ausgabe mitaufgelistet (mit einer Entfernung, was ja gar nicht sein dürfte )?
                    Zuletzt geändert von Pkolb; 25.09.2003, 10:18.

                    Kommentar


                    • #40
                      41068 Mönchengladbach 0.000095
                      naja, n bisschen schwund ist immer. die erde ist ja wie gesagt keine scheibe und dadurch werden vermutlich kleine differenzen auftreten.

                      Kommentar


                      • #41
                        Selbstkritik !!!!

                        Was ich da auf die Schnelle gemacht habe war ja ganz nett. Es werden auch die Punkte genau auf die Kugel projeziert aber die Distanz berücksichtigt immer noch keine Erdkrümmung!!!

                        Ich kümmere mich darum, aber für den Hausgebrauch ist es ok.

                        Natürlich kommt der eigen PLZ-Bereich zurück. Es werden ja alle mit einer Distanz kleiner 10 km gesucht! Und da gehört das eigen Viertel ja auch dazu. Abweichungen beruhen wohl auf Rundungsfehlern.

                        R

                        Kommentar


                        • #42
                          naja, den eigenen ort kann man ja ggf rausfiltern ( >0 oder != PLZ)

                          Aber die korrekte Entfernung wäre nicht schlecht.

                          Kommentar


                          • #43
                            Sorry, dass ich störe, aber man muss doch nur die PLZ aus der opengeodb holen und dann mit den zugehörigen Daten ein neues GeoObject erstellen, oder liege ich falsch?

                            PHP-Code:
                            <?php
                            require_once("./GeoClass.php");
                            $geodb = new GeoDB(DB_NAMEDB_USERDB_PASS'geo_locations''ort''breite''laenge''plzs');

                            $radius 20// aus der Form lesen
                            $maxHits 50// aus der Form lesen

                            $myHome = new GeoObject('Königstein im Taunus'50.183338.46667);
                            // myhome mit einer PLZ-Query festlegen ( vorher aus der Form lesen )

                            $matches $geodb->findCloseByGeoObjects($myHome$radius$maxHits);
                            if (
                            count($matches)) {
                                echo 
                            'Im Umkreis von <b>'.$radius.'</b> km um <b>'.$myHome->name.'</b> wurden folgende Orte gefunden:<br>';
                                echo 
                            '<ul>';
                                foreach (
                            $matches as $object) {
                                    echo 
                            '<li>'.$myHome->getDistanceString($object).' ';
                                    echo 
                            '('$myHome->getOrientation($objectGEO_ORIENTATION_SHORT).') ';
                                    echo 
                            '- <b>'.$object->name.'</b></li>';
                                }
                                echo 
                            '</ul>';
                            }
                            ?>
                            Probiert das mal.
                            PHP
                            MySQL
                            Jetzt klicken & reich werden

                            Kommentar


                            • #44
                              Hallo

                              Hab es jetzt korrigiert!

                              SELECT PLZ, Ort, ".$radius."*ACOS(cos(Theta)*cos(".$theta.")*(sin(Phi)*sin(".$phi.")+cos(Phi)*cos(".$phi."))+sin(Thet a)*sin(".$theta.")) AS Distance FROM ".PLZ_DATA_TABLE." WHERE ".$radius."*ACOS(cos(Theta)*cos(".$theta.")*(sin(Phi)*sin(".$phi.")+cos(Phi)*cos(".$phi."))+sin(Thet a)*sin(".$theta.")) <= ".$umkreis." ORDER BY Distance";

                              Zu sehen und zu Testen unter



                              Umkreissuche

                              1. Wenn man GeoClass.php hat ja. Aber es ging wohl um das Prinzip was dahinter steckt!

                              2. Ich spare mir halt das foreach und den Traffic von der Datenbank in das script. Frei nach dem Motto was die Datenbank kann (mit einem SQL Aufruf)soll sie auch tun (weil sie es viel schneller kann). Angeblich gibt es SQL Statements die über mehrere DIN A4 Seiten gehn !!!

                              3. War für mich auch neu als ich mit SQL angefangen hat, aber mir hat ein profi gesagt "man filtert nichts per Hand" wenn da ne leistungsfähige Datenbank werkelt", der zweite Kommentar war dann "Was machst Du bei 10 Millionen Datensätzen" ??? Nun ja die PLZ Datenbank hat nur gute 8000 Einträge.

                              R

                              Kommentar


                              • #45
                                kann jetzt in der seite keine veränderung sehen ?

                                zu 1: hattest du erwähnt, auf welchen daten deine db basiert?

                                zu 2: so ist es auch vollkommen richtig

                                Kommentar

                                Lädt...
                                X