Laufzeitfehler beim Auslesen von Bushaltestellen

Hi,

ich habe hier ein seltsames Phänomen, welches ich mir nicht erklären kann. Mein nachfolgender Script, liest verschiedene Json Daten aus. Unter anderen auch, welche Bushaltestellen es in der Umgebung gibt. Wenn ich den Script unter PHP 5.2.6 laufen lasse, wird das Ergebnis nach ungefähr 30 Sekunden angezeigt. Unter PHP 5.3.6, hängt sich die Routine auf. Ersetze ich den Suchparameter “bushaltestelle” z.B. durch “tankstelle”, funktioniert der Script auch unter PHP 5.3.6 und läuft bedeutend schneller durch als unter PHP 5.2.6.

Wo liegt der Fehler? Hoffe, Ihr könnt mir helfen :slight_smile:


<?php
$lat=51.238706;
$lon=6.77433;
$uk1=$lon-0.04300;
$uk2=$lat-0.02700;
$uk3=$lon+0.04200;
$uk4=$lat+0.02700;
$uk5=$lon-0.00570;
$uk6=$lat-0.00360;
$uk7=$lon+0.00570;
$uk8=$lat+0.00360;
$ja1 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=Arzt&limit=999');
$jb1 = json_decode($ja1);
$ja2 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=restaurant&limit=999');
$jb2 = json_decode($ja2);
$ja3 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=supermarkt&limit=999');
$jb3 = json_decode($ja3);
$ja4 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=0&q=naherholungsgebiet&limit=999');
$jb4 = json_decode($ja4);
$ja5 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk5.','.$uk6.','.$uk7.','.$uk8.'&bounded=1&format=json&polygon=0&addressdetails=0&q=bushaltestelle&limit=999');
$jb5 = json_decode($ja5);
$ja6 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=1&q=bahnhof&limit=999');
$jb6 = json_decode($ja6);
?>

Hi, noch kein kleiner Hinweis: Wenn man in der Variable

“$ja5” das “bounded=1” gegen ein “bounded=0”

ersetzt, läuft der script. Leider liefert er dann im Ergebnis nicht die Daten des mit viewbox ausgewählten Bereiches :confused:

Urgh, ich komme einfach nicht weiter. Hat einer eine Idee? Ich bin am verzeifeln :frowning:

Hallo joergie2012,

Warum verwendest du denn nicht die Overpass-API für eine solche Abfrage?

MfG Georg V. (OSM=user_5359)

Jau, danke für den Tip.

Leider verstehe ich nicht ganz, wie ich den script anpassen kann bzw. wie ich eine JSON Ausgabe erstellen kann.

Kannst Du mir evtl. helfen?

Wäre Dir echt dankbar :sunglasses:

Du könntest doch auch genauso gut XML parsen. php hat SimpleXML i.d.R. einkompiliert, damit geht das i.A. ausreichend.

Wäre zwar möglich. Aber ich würde doch lieber bei JSON bleiben.

Was mich am meisten ärgert ist die Tatsache, das die Routinen einwandfrei funktionieren. Nur mit dem Wort “bushaltestelle” gibt es Probleme. Keine Ahnung warum.

Aber wie erzeuge ich mit der vorgeschlagenen API eine JSON (oder zur Not auch XML) Ausgabe, die die gleichen Parameter wie die bisherige API beinhaltet?

Ein Beispiel wäre suuupäär. Bevor ich wieder die ganze Nacht am compi verbringe :roll_eyes:

http://wiki.openstreetmap.org/wiki/Overpass_API/Language_Guide
da gibts gaaaaaaanz viele beispiele (auch json) … such dir was passendes aus :wink:

jau,

danke für Eure Antworten. Aber anscheinend bin ich einfach zu blöd, das ganze umzusetzen.

Der folgende Codeschnipsel ist wahrscheinlich komplett falsch, oder? (auf jedenfall gibt es keine Ausgabe)! :frowning:


$ja5 = file_get_contents('http://www.overpass-api.de/api/xapi?query=bushaltestelle;bbox=7.1,51.2,7.2,51.3;out=json');

Gibt es nicht die Möglichkeit, mir die richtige Umsetzung für


$ja5 = file_get_contents('http://nominatim.openstreetmap.org/search?viewbox='.$uk5.','.$uk6.','.$uk7.','.$uk8.'&bounded=1&format=json&polygon=0&addressdetails=0&q=bushaltestelle&limit=999');

zu nennen. Meine Lobpreisungen wären ihm sicher :sunglasses:

Hallo,

toc-rox hat ein Perl-Script geschrieben, bei dem man den Querystring einfach als Kommandozeile übergeben kann.

Den wahrscheinlichen Denkfehler, den Du übrigens gerade aufsitzt, basiert auf der Tatsache das nominatim noch eine Schlüsselwort Übersetzungsliste beinhaltet. In Deinem Fall Bushaltetelle in has-kv k=“highway” v=“busstop”. Habe ich übrigens aus der Anleitung bei Negation entnommen.

Wenn Du noch etwas Zeit hast, kann ich Dir später per PM noch ein PHP-Script rüberschicken, mit dem ich z.B. die Spielplatzdaten in Münster, die Altstoffbehälter in Wien oder die administrativen Grenzen Deutschlands regelmäßig abziehe. Das sollte relativ einfach auf Deine Bedürfnisse anpassbar sein.

MfG Georg V. (OSM=user_5359)

Hi Georg,

jau, das wäre super. Dann könnte ich das Problem bestimmt lösen :slight_smile: