Problem mit Geocode-Service von Google

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

  • Problem mit Geocode-Service von Google

    Hallo!

    Ich versuche gerade ein Script zu schreiben, das die vollständigen Adressdaten (Ort,PLZ etc.) anhand einer eingegeben Staße und Hausnummer ermittelt. Dazu verwende ich den Geocode-Service von Google (Google Maps API).

    Folgende Funktion soll diese Adressdaten ermitteln:
    PHP-Code:
    function DoGoogleRequest ()
    {
        global 
    $key$googleurl$str$hnr;
        
    $url $googleurl '?output=xml&key=' $key '&q=';
        if (!empty(
    $str)) {
            
    $url .= urlencode($str) . '+';
        }
        if (!empty(
    $hnr)) {
            
    $url .= urlencode($hnr);
        }
        
    $page = @file_get_contents($url);
        try {
            
    $xml = @new SimpleXMLElement ($page);
        }
        catch (
    Exception $e) {
            return 
    false;
        }
        if (
    get_class($xml)=='SimpleXMLElement') {
            return 
    $xml
        }
        else {
            return 
    false;
        }

    In der Globalen $key steht der Key, der benötigt wird, um die Google-Maps-Api verwenden zu können. In $googleurl steht 'http://maps.google.com/maps/geo', in $str die zu suchende Straße und in $hnr die entsprechende Hausnummer.
    Das funktioniert auch schon ganz wunderbar. Nur eben leider nicht bei allen Adressen. Setze ich beispielsweise $str='Wilhemsruher Damm' und $hnr=168 so wird alles richtig zurück gegeben. Nehme ich $str='Olwenstraße' und $hnr=2 so funktioniert es nicht. Lasse ich mir aber für diesen Fall die Variable $url vor dem Aufruf mit @file_get_contents() ausgeben, kopiere die in meinen Browser und drücke Enter, so erscheint das gewünschte Ergebnis. Lasse ich mir die Rückgabe von @file_get_contents() in diesem Beispiel ausgeben, so erkenne ich, dass Google die Adresse offensichtlich nicht findet (code=602).

    Ich bin echt am Verzweifeln, weil ich keine Ahnung mehr habe, woran das liegen könnte und würd mich daher echt über nen Tipp freuen!

    Gruß
    Mathis
    Zuletzt geändert von Mathis; 26.01.2008, 10:13.

  • #2
    vielleicht könnte es daran liegen das die diese hasunummer nicht gelistet haben?
    Signatur-Text ...

    Kommentar


    • #3
      Eigentlich nicht, da es ja funktioniert, wenn ich die URL, die mein Script generiert vor dem file_get_contents() abfange (ausgeben lasse) und einfach in den Browser kopiere...

      Kommentar


      • #4
        OK, jetzt bin ich völlig am Verzweifeln! Ich habe jetzt einfach mal folgendes Script laufen lassen:

        PHP-Code:
        $url 'http://maps.google.com/maps/geo?q=Olwenstra%DFe%202
        &key=ABQIAAAAT1meRREuwrSVllzytK6lTBSlpozHAAsnZweSkaVxx
        DrUpxKhNhSnY1nm_8mlrAhwsAYluCilVnBx6w&output=xml'
        ;
        echo (
        file_get_contents($url)); 
        Die verwendete URL habe ich original aus der Adresszeile meines Browsers kopiert. Im Browser bekomme ich eine vollständige Geocode-Ausgabe. Dieses Script gibt nur

        <?xml version="1.0" encoding="UTF-8"?>
        <kml xmlns="http://earth.google.com/kml/2.0">
        <Response>
        <name>Olwenstra�e 2</name>
        <Status>
        <code>602</code>
        <request>geocode</request>
        </Status>
        </Response>
        </kml>

        zurück (code=602) bedeutet nicht gefunden. Mich wundert unter anderem auch, dass das 'ß' aus 'straße' durch ein '�' ersetzt wird. Irgendwie habe ich mittlerweile das Gefühl, dass php mit url-encodierten Sonderzeichen nicht klar kommt... Oder die Funktion file_get_contents wandelt die URL noch irgendwie wieder um. Ich bräuchte als ne Funktion, die quasie dasselbe macht, wie ein Browser, ohne die URL noch irgendwie zu bearbeiten! Hat da jemand nen Tipp??
        Zuletzt geändert von Mathis; 26.01.2008, 10:36.

        Kommentar


        • #5
          Du musst die Anfrage UTF-8 kodieren.
          gruss Chris

          [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

          Kommentar


          • #6
            PHP-Code:
            $url 'http://maps.google.com/maps/geo?q=Olwenstra%DFe%202
            &key=ABQIAAAAT1meRREuwrSVllzytK6lTBSlpozHAAsnZweSkaVxxDr
            UpxKhNhSnY1nm_8mlrAhwsAYluCilVnBx6w&output=xml'
            ;
            $url utf8_encode($url);
            echo (
            file_get_contents($url)); 
            Resultat: Problem bleibt !
            Zuletzt geändert von Mathis; 26.01.2008, 12:41.

            Kommentar


            • #7
              Bevor du mit der Fehlersuche anfängst, solltest du noch Ort und Land in die Query setzen, oder?

              Kommentar


              • #8
                Nein, brauch ich eigentlich nicht. Er gibt, wenn die angegebene Straße mehrmals existiert, einfach alle Möglichkeiten zurück.
                Ich möchte es nur einfach erstmal hinbekommen, dass er mir auch bei einer Query mit Sonderzeichen was vernünftiges zurück gibt und nicht nen Fehlercode ausgibt, der meiner Meinung nach darauf beruht, dass eben die Sonderzeichen bei ihm nicht richtig ankommen.
                Denn wie schon gesagt: Wenn ich im Browser eingebe: [...]&q=Olwenstraße 2, dann bekomme ich ein ordentliches Ergebnis. Nur mit PHP bekomme ich das noch nicht hin !

                Kommentar


                • #9
                  Olwenstra%DFe%202
                  DAS brauchst du nicht UTF8 Kodieren :P
                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar


                  • #10
                    Hallo!
                    Ich habe dasselbe Problem.
                    Bei mir hat aber auch diese Schreibweise nicht geholfen:
                    Original geschrieben von hhcm
                    DAS brauchst du nicht UTF8 Kodieren :P
                    Olwenstra%DFe%202
                    Bei dir etwa Mathis???

                    Alle Adressen mit Umlauten oder einem ß (sz) werden mit dem Fehlercode 602 zurückgewiesen. Wenn ich diese Adressen jedoch direkt über den Browser eingebe, sind sie alle auffindbar.

                    Ich bin echt am Verzweifeln!
                    Würde mich über Eure Hilfe freuen.....

                    Gruß
                    Peter

                    Kommentar


                    • #11
                      Dann vergleich doch einfach mal mit dem gesendeten Header im Browser...

                      Hast du deine Anfrage vernünftig kodiert?

                      Kommentar


                      • #12
                        Danke für deine Antwort!
                        PHP-Code:
                        $address $street.' '.$hnr.' '.$zip.' '.$city.' Germany';
                        $address_encoded urlencode($address_encoded);

                        $base_url "http://" MAPS_HOST "/maps/geo?output=xml" "&key=" KEY;
                        $request_url $base_url "&q=" $address_encoded
                        MAPS_HOST und KEY habe ich zuvor definiert.

                        Dieser Code funktioniert auch soweit ganz gut, dass er sich die Geokoordinaten zu allen Adressen holen kann, welche nicht das Wort "straße" oder Umlaute etc. enthalten.

                        Als Beispiel gebe ich hier einfach mal diese Adresse an:
                        Hafenstraße 140 20309 Hamburg
                        Die generierte Anfrage dafür lautet:
                        Code:
                        http://maps.google.com/maps/geo?output=xml&key=MEINKEY&q=Hafenstra%DFe+140+20309+Hamburg+Germany
                        Ohne urlencoding sieht es natürlich so aus:
                        Code:
                        http://maps.google.com/maps/geo?output=xml&key=MEINKEY&q=Hafenstraße 140 20309 Hamburg Germany
                        Aber dies funktioniert auch nicht.
                        Lediglich, wenn ich diese Zeile in den Browser kopiere, habe ich Zugriff auf die XML-Daten von Google.

                        Wenn jemand diese Adresse per Code geocoden kann, bitte lasst es mich wissen!

                        Kommentar


                        • #13
                          Hi,

                          wenn du dich als Browser ausgibst dann gehts.

                          PHP-Code:

                          $_browser 
                          = new browser();
                          $_browser->user_agent="Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.7.6) Gecko/20050309 Firefox/1.0.1";
                          $_browser->language="de-de,de;q=0.5";
                          $_browser->charset="ISO-8859-1,utf-8;q=0.7,*;q=0.7";
                          $_browser->accept="text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
                          $_site $_browser->site("http://maps.google.com/maps/geo?q=20309+Hafenstraße+140&key=AB...w&output=xml");
                          $_site->get();
                          print 
                          $_site->get_content(); 
                          Ergebnis:

                          20309 Hafenstraße 140200geocodeHafenstraße 140, 27576 Bremerhaven, GermanyDEBremenBremerhavenBremerhavenHafenstraße 140275768.585871,53.559532,0Hafenstraße 140, 45356 Vogelheim, Essen, GermanyDENordrhein-WestfalenEssenEssenVogelheimHafenstraße 140453566.980397,51.490424,0Hafenstraße 140, 59067 Hamm, GermanyDENordrhein-WestfalenHammHammHafenstraße 140590677.767900,51.675784,0Hafenstrasse 140, 5224 Hafen, Linn, SwitzerlandCHAargauBruggLinnHafenHafenstrasse 14052248.171434,47.483818,0Hafenstraße 140, 12357 Rudow, Berlin, GermanyDEBerlinBerlinBerlinRudowHafenstraße 1401235713.507248,52.427926,0

                          Es ist sicher noch nicht das optimale Ergebnis, aber vielleicht hilft es dir weiter.

                          Kommentar


                          • #14
                            danke für deine mühe malaga!

                            ich habe es auf deine weise probiert mich als browser auszugeben.
                            habe dafür die "Simple HTTP browser" class verwendet.
                            anstatt xml daten, liefert mir der post aber die google maps startseite!

                            PHP-Code:
                            include "test_http.lib.php";
                            $Browser=new http('http://maps.google.com/maps/geo?output=xml&key=KEY&q=Hafenstraße+140+20309+Hamburg');
                            var_dump($Browser->get('/'));
                            $Browser->post('somepage',$Data); 
                            gibt es nicht eine elegantere lösung, um die adressen mit umlauten etc auszutricksen?

                            Kommentar


                            • #15
                              gibt es nicht eine elegantere lösung, um die adressen mit umlauten etc auszutricksen?
                              urlencode()?

                              Kommentar

                              Lädt...
                              X