Daten von Openstreetmap auslesen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daten von Openstreetmap auslesen

    Hallo zusammen,

    ich hatte vor langer Zeit ein Programm geschrieben, dass anhand von Längen und Breitengrad bestimmte Objektarten herausfiltert. Ursprünglich hatte ich dafür die folgende Routine benutzt:

    PHP Code:
    require ("useragent.php");
    $agent = new userAgent();
    $browser $agent->generate('chrome');
    $opts = array('http'=>array('header'=>"User-Agent: ".$browser."\r\n"));
    $context stream_context_create($opts);

    $lat=50.991108;
    $lon=6.893529;

    $uk1=$lon-0.04300// 3 KM
    $uk2=$lat-0.02700// 3 KM
    $uk3=$lon+0.04300// 3 KM
    $uk4=$lat+0.02700// 3 KM​

    echo "<br>------------------- Bushaltestelle ---------------------------------<br>";

    $url='https://www.overpass-api.de/api/interpreter?data=[out:json];node[highway="bus_stop"]('.$uk2.','.$uk1.','.$uk4.','.$uk3.');out+999;';
    $e1 file_get_contents($url);
    $e2 json_decode($e1);
    print_r ($e2);

    echo 
    "<br>------------------- Bahnhof ---------------------------------<br>";

    $url='https://www.overpass-api.de/api/interpreter?data=[out:json];node[railway="station"]('.$uk2.','.$uk1.','.$uk4.','.$uk3.');out+999;';
    $f1 file_get_contents($url);
    $f2 json_decode($f1);
    print_r ($f2);

    echo 
    "<br>------------------- Autobahn ---------------------------------<br>";

    $url='https://www.overpass-api.de/api/interpreter?data=[out:json];way[highway="motorway_link"]('.$uk2.','.$uk1.','.$uk4.','.$uk3.');out+999;';
    $g1 file_get_contents($url);
    $g2 json_decode($g1);
    print_r ($g2);​ 

    Das ganze funktionierte bis vor kurzem auch einwandfrei. Nun jedoch erhalte ich keine Daten mehr Oder hat sich die Syntax geändert? Ich finde einfach keine Lösung

    Ich versuche nun, dass ganze mittels "nomination" wie folgt zu ersetzen:

    PHP Code:
    require ("useragent.php");
    $agent = new userAgent();
    $browser $agent->generate('chrome');
    $opts = array('http'=>array('header'=>"User-Agent: ".$browser."\r\n"));
    $context stream_context_create($opts);

    $lat=50.991108;
    $lon=6.893529;

    $uk1=$lon-0.04300// 3 KM
    $uk2=$lat-0.02700// 3 KM
    $uk3=$lon+0.04300// 3 KM
    $uk4=$lat+0.02700// 3 KM​​

    echo "<br>------------------- Bushaltestelle ---------------------------------<br>";

    $b1 file_get_contents('https://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=0&q=Bushaltestelle&limit=999'false$context);
    $b2 json_decode($b1);
    print_r ($b2);

    echo 
    "<br>------------------- Bahnhof ---------------------------------<br>";

    $c1 file_get_contents('https://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=0&q=Bahnhof&limit=999'false$context);
    $c2 json_decode($c1);
    print_r ($c2);

    echo 
    "<br>------------------- Autobahn ---------------------------------<br>";

    $d1 file_get_contents('https://nominatim.openstreetmap.org/search?viewbox='.$uk1.','.$uk2.','.$uk3.','.$uk4.'&bounded=1&format=json&polygon=0&addressdetails=0&q=Autobahn&limit=999'false$context);
    $d2 json_decode($d1);
    print_r ($d2);​ 

    Das ganze scheint auch zu funktionieren. Jedoch erhalte ich beim Thema "Autobahn" nie eine Ausgabe. Dabei habe ich für dieses Beispiel extra eine Stelle mit nahe gelegenen Autobahnzubringern gesucht. Habt Ihr eine Idee oder kennt Ihr eine bessere Lösung?

    Vielen Dank im voraus für Eure Hilfe



  • #2
    Hast du mal die URL's, die du da zusammenbaust, direkt im Browser eingegeben? Vermutlich nicht, denn dann wüsstest du, dass die URL bei den Autobahnen nichts liefert.
    Last edited by scatello; 09-05-2026, 08:25.

    Comment


    • #3
      ok, danke für den Tip

      Comment


      • #4
        Du kannst die OSM-Daten am einfachsten über die Overpass API oder Nominatim als XML oder JSON abrufen und anschließend mit simplexml_load_file() bzw. json_decode() verarbeiten. JSON ist dabei oft deutlich einfacher auszulesen als XML. Achte außerdem darauf, einen gültigen User-Agent zu senden, da OpenStreetMap-Anfragen sonst teilweise blockiert werden.​
        oyostepper.de bietet folgende Produkte online an: NEMA 23 Schrittmotor, integrierter Servomotor usw. und liefert weltweit.

        Comment

        Working...
        X