PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Problem mit Geocode-Service von Google (https://www.php-resource.de/forum/php-developer-forum/89727-problem-mit-geocode-service-von-google.html)

Mathis 25-01-2008 22:19

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

dani_o 26-01-2008 09:46

vielleicht könnte es daran liegen das die diese hasunummer nicht gelistet haben? :dontknow:

Mathis 26-01-2008 10:12

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...

Mathis 26-01-2008 10:27

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??

hhcm 26-01-2008 11:03

Du musst die Anfrage UTF-8 kodieren.

Mathis 26-01-2008 11:42

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 :( !

pekka 26-01-2008 12:34

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

Mathis 26-01-2008 12:40

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 :mad:!

hhcm 26-01-2008 18:18

Zitat:

Olwenstra%DFe%202
DAS brauchst du nicht UTF8 Kodieren :P

peterdoo 04-02-2008 17:13

Hallo!
Ich habe dasselbe Problem.
Bei mir hat aber auch diese Schreibweise nicht geholfen:
Zitat:

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

TobiaZ 04-02-2008 17:17

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

Hast du deine Anfrage vernünftig kodiert?

peterdoo 07-02-2008 09:57

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!

Malaga 07-02-2008 10:46

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.

peterdoo 13-02-2008 20:33

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?

TobiaZ 14-02-2008 11:01

Zitat:

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:06 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG