Ankündigung

Einklappen
Keine Ankündigung bisher.

Mittels PLZ das Bundesland/Stadt ermittteln

Einklappen

Neue Werbung 2019

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

  • Mittels PLZ das Bundesland/Stadt ermittteln

    Hallo Community))

    könnt Ihr mir Ansätze sagen wie mittels einer vorgegebenen Postleitzahl ein Bundesland, Stadt und Koordinaten am besten ermitteln kann?

    Vorab ich habe noch ein Problem Arrays über Funktionen ein/auszulesen

    1)
    Mein erster Ansatz war eine PHP Datei von OpenGeoDB runterzuladen (da sind Arrays mit den PLZ, Stadt und Koordinaten)
    http://www-coding.de/postleitzahl-zu-stadt-und-umgekehrt-in-php/

    PHP-Code:
      <?php
    $plzToCity 
    = array( 
    '01067' => array('Dresden'51.060033646337913.7210676148814),
    '01069' => array('Dresden'51.03955887608313.7389066401609),
    '01097' => array('Dresden'51.066745241203713.7439674110642),
    '01099' => array('Dresden'51.092619304708413.8289798683304),
    );
    ?>
      // usw


    Wie würde eine Funktion aussehen wenn ich mit Eingabe der PLZ die Längen- und Breitengrade rausziehen will
    $plz=30455;
    z.B. ermitteleStadt($plz);
    und sie in Variablen abspeichern will
    $stadt, $breitengrad, $laengengrad, $bundesland // Bundesland aus einer anderen Datei etc



    2)
    API ist für mich hoch interessant .... wo/wie könnte ich mit übergabe einer PLZ ermitteln welches Bundesland das ist


    3)
    Was hättet Ihr für Ansätze?


    PS: Texte sind schön und gut, bevorzügen würde ich (als Anfänger) einen Code ^^



  • #2
    Zitat von dustinator Beitrag anzeigen
    PS: Texte sind schön und gut, bevorzügen würde ich (als Anfänger) einen Code ^^
    Ach ja den wollen wir alle haben

    deine funktion wird doch im Blog genau erklärt du musst nur die Logik dort aus dem Block in eine Funktion verpacken und statt einem echo ein return machen

    wegen Bundeland da musst du in einer anderen Tabelle dir die Daten angucken http://www.fa-technik.adfc.de/code/opengeodb/ da hast du DE.tab da drin stehen die Bundesländer verknüpft über loc_id aus der PLZ.tab

    bau dir doch eine Funktion wie du diese Beiden Dateien einliest und in ein Array umwandelst das wäre schon mal ein Anfang
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

    Kommentar


    • #3
      Eine Funktion macht hier keinen Sinn, da ja auch wieder ein Array als Rückgabe geliefert werden muss.

      einfach mal so probieren
      PHP-Code:
      <?php
      $postcodes 
      = array(
      '01067' => array('Dresden'51.060033646337913.7210676148814),
      '01069' => array('Dresden'51.03955887608313.7389066401609),
      '01097' => array('Dresden'51.066745241203713.7439674110642),
      '01099' => array('Dresden'51.092619304708413.8289798683304),
      );

      $search '01097';

      $city      $postcodes[$search][0];
      $latitude  $postcodes[$search][1];
      $longitude $postcodes[$search][2];

      echo 
      'Stadt: '       $city      "<br>\n";
      echo 
      'Breitengrad: ' $latitude  "<br>\n";
      echo 
      'Längengrad: '  $longitude "<br>\n";
      ?>
      https://www.php.net/manual/en/language.types.array.php

      Kommentar


      • #4
        Zitat von protestix Beitrag anzeigen
        Eine Funktion macht hier keinen Sinn, da ja auch wieder ein Array als Rückgabe geliefert werden muss.

        einfach mal so probieren
        PHP-Code:
        <?php
        $postcodes 
        = array(
        '01067' => array('Dresden'51.060033646337913.7210676148814),
        '01069' => array('Dresden'51.03955887608313.7389066401609),
        '01097' => array('Dresden'51.066745241203713.7439674110642),
        '01099' => array('Dresden'51.092619304708413.8289798683304),
        );

        $search '01097';

        $city $postcodes[$search][0];
        $latitude $postcodes[$search][1];
        $longitude $postcodes[$search][2];

        echo 
        'Stadt: ' $city "<br>\n";
        echo 
        'Breitengrad: ' $latitude "<br>\n";
        echo 
        'Längengrad: ' $longitude "<br>\n";
        ?>
        https://www.php.net/manual/en/language.types.array.php
        in php 7.4 kann man dann sowas
        PHP-Code:
        [$city,$latitude,$longitude] = $postcodes[$search];  //short form von list() 
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

        Kommentar


        • #5
          cool.............. doch so einfach .... (nur bis ich anfange zu programmieren, dann giibt es wieder Probleme^^)

          Kommentar


          • #6
            Die Grundlagen einer Sprache sollte man schon beherrschen, daher ist Lernen angesagt.
            https://www.php.net/manual/de/langref.php

            Kommentar


            • #7
              Bin ja dabei ))
              manchmal fehlt jedoch nur ein kleiner Klaps auf den Hinterkopf (irgendei Wegweise) um dann richtig durchzustarten ^^
              Wenn man den fertigen Code sieht, dann schlägt man selbst die Hände vors Gesicht wie es doch so einfach ist ^^


              Übrigens gibt es in diesem Bereicht was man mit API's machen kann?
              (z.B. einen Wert/PLZ übergeben und anderen Wert/Bundesland zurückbekommen)

              Oder aus fremden HTML-Seiten was rauslesen - und auf seiner Seite es vergleichen/zuordnen kann

              Kommentar


              • #8
                Du solltest deine Texte vor dem Abschicken noch mal durchlesen. Mir wird nicht klar was du vorhast oder was du wissen willst. Hast du Google schon befragt?

                Kommentar


                • #9
                  Zitat von dustinator Beitrag anzeigen
                  Bin ja dabei ))
                  manchmal fehlt jedoch nur ein kleiner Klaps auf den Hinterkopf (irgendei Wegweise) um dann richtig durchzustarten ^^
                  Wenn man den fertigen Code sieht, dann schlägt man selbst die Hände vors Gesicht wie es doch so einfach ist ^^


                  Übrigens gibt es in diesem Bereicht was man mit API's machen kann?
                  (z.B. einen Wert/PLZ übergeben und anderen Wert/Bundesland zurückbekommen)

                  Oder aus fremden HTML-Seiten was rauslesen - und auf seiner Seite es vergleichen/zuordnen kann
                  http://www.fa-technik.adfc.de/code/opengeodb/ habe ich doch gesagt, hier bit es eine DE.tab Datei und PLZ.tab Datei die brauchst du einfach nur herunterzuladen bzw noch besser die .sql Dateien herunterladen und dann die Tabellen in deiner Datenbank im PHPMyADmin importieren


                  PHP-Code:
                  <?php

                  $plzFile 
                  = new SplFileObject(__DIR__.'/plz.tab'); //plz tab von der Seite einlesen

                  $plzFile->fgetcsv("\t"); //erste Zeile ein mal einlesen weil header information

                  $locations = [];
                  while(
                  $row $plzFile->fgetcsv("\t")){
                   list(
                  $locationId,$plz,$lon,$lat,$location) = $row//einzelne Array Werte in eine Variable abspeichern
                   
                  $locations[$locationId] = [
                       
                  'plz' => $plz,
                       
                  'lon'=>$lon,
                       
                  'lat'=>$lat,
                       
                  'location'=>$location
                   
                  ];
                  }

                  var_dump($locations); //alle locations aus der tab Datei in einem Array
                  apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                  Kommentar


                  • #10
                    Übrigens gibt es in diesem Bereicht was man mit API's machen kann?
                    Du kannst um die GeoDB ja deine eigene API bauen.
                    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

                    Kommentar


                    • #11


                      Danke BlackScorp das muss ich mir gleich noch mal reinziehen
                      Du würdest wahrscheinlich auch sagen, besser mittels SQL ?
                      Gibt es Vorteile wie ich es gerade noch mache - mit einer heruntergeladenen PHP Datei wo (fast) alle Postlitezahlen drinne stehen?

                      _________


                      chorn ... hmmm ... das heißt wieder eine ganze Nacht surfen und PHP Videos reinziehen )) ... ja muss ich machen ^^

                      _________


                      Kurze Frage noch zu meiner vorherigen Richtung

                      Ich habe jetzt rausgefunden das in meiner plzToCity.php Datei nicht alle Postleitzahlen angegeben sind
                      Nun wollte ich vorab eine Prüfung machen ( mit in_array ? ) ob die $plzToCity überhaupt eine bestimmte PLZ hat
                      Mir ist nämlich aufgefallen das z.B. die PLZ 10117 fehlt (Ausgerechnet die PLZ vom Brandenburger Tor)

                      So mein Code sieht jetzt folgendermassen aus - jedoch ist meine 3te Abfrage in der If-Anweisung falsch (das ab in_array)
                      Das Programm soll nur in die If-Anweisung gehen, wenn die PLZ 5-stellig ist (persönliche Eingabe, nur für Deutschland)
                      sowie die PLZ dann auch in der plzToCity.php Datei zu finden ist (dafür die 3te Abfrage)
                      eigentlich sind die 2 ersten Abfragen überflüssig, aber ich wollte nicht das auch bei 4steligen PLZ (Österreich usw) dan die sehr lange plzToCity.php unnötig abgefragt wird
                      PHP-Code:
                      if($plz 9999 && $plz 100000 && in_array($plz,$plzToCity)){
                                 if (
                      $stadt == "")
                                       { 
                      $stadt $plzToCity[$plz][0];
                                       }
                                 if (
                      $gr_breiten == "" && $gr_laengen == "")
                                      { 
                      $gr_breiten $plzToCity[$plz][1];
                                        
                      $gr_laengen $plzToCity[$plz][2];                      }

                      Bei diesem Code gibt das Programm 3 Fehlermeldungen aus
                      Ohne in_array($plz,$plzToCity) funktioniert es - aber nur solange es eine gültige PLZ in plzToCity.php findet

                      Kommentar


                      • #12
                        1. Fehlermeldung lesen
                        2. Fehlermeldung verstehen
                        3. Ins Handbuch schauen was in_array macht (https://www.php.net/manual/de/function.in-array.php)
                        4. Überlegen was du benötigst um die PLZ zu vergleichen
                        5. Diese Funktion anschauen => https://www.php.net/manual/de/function.array-keys.php

                        Kommentar


                        • #13
                          Die Seite hat das Datum vom März 2017. Die Datenbasis ist wahrscheinlich noch etwas älter, d.h. dass alle Änderungen der Postleitzahlen nach diesen Datum nicht drin stehen und du diese händisch korrigieren musst.

                          Du kannst durchaus eine Datei nehmen. Der Umfang ist ja nicht so gross als dass man die nicht komplett in den Speicher laden könnte. Vor- oder Nachteile sehe ich keine ggü. einer DB, wenn es denn nur dabei bleibt was du beschrieben hast.

                          Kommentar


                          • #14
                            Danke jonas, array_key_exists($plz,$plzToCity)war meine Lösung für dieses Problem

                            Thx protestix, dieses Projekt ist für mich vorwiegend zum erlernen, daher wollte ich auch so viele verschiedene Varianten/Wege/etc wie möglich einbauen (API, SQL, CSV usw)

                            Kommentar

                            Lädt...
                            X