Staumeldungen

Leider nicht. Alternativ versuche ich gerade die Seite des WDR , der immerhin die ganze BRD letztlich anzeigt, zu analysiern… ist leider kei RSS

WDR Verkehrslage

Gruß Rolf

Hallo,

bin kein Programmierer aber die Idee TMC Daten zu nutzen bekam ich nach dem ich die Seite des WDR gesehen habe.

Wobei ich keine Deutschlandweite TMC Seite gefunden (gesucht) habe bin ich aber auf folgendes gestoßen. Wenn man die Daten wirklich nur Lokal nutzen möchte, also morgen früher wecken lassen, kann man die Daten aus dem Radio nutzen TMC.

http://www.gpsonline.de/download/USB-TMC-Modul.pdf

Etwas für die Hardware Gemeinde…

Gruß, für bessere Ideen zu warm heute

Hi …

Ich habe mich gestern mal drangemacht, das Script von spaceguy in eine Funktion umzubauen, wo dann entsprechende Filter mitgegeben werden. Ein typischer Funktionsaufruf wäre z.B.

GetTraffic("A3","Frankfurt","Köln",false,array("Idstein","Niedernhausen","Medenbach","Wiesbadener Kreuz"));

und würde nur Staus liefern, die auf der A3, Frankfurt Richtung Köln liegen und einen Namen aus dem Array in der Beschreibung haben, also z.B. „A3 - Frankfurt Richtung Köln - Zwischen Bad Camberg und Niedernhausen 4 Km Stau“. Somit kann man sich dann nur die Meldungen anzeigen lassen, die auf dem Weg zur Arbeit liegen, oder sich in einem bestimmten Bereich befinden. Aufrufe wie

GetTraffic("A3","","",false,array())

sind auch möglich und liefern alle Staus auf der A3.

Das Script dazu werde ich demnächst hier veröffentlichen, würde aber gerne bis dahin noch das Problem mit den veralteten Meldungen von Antenne Bayern beseitigt haben …

Hat jemand schon einen aktuelleren und zuverlässigeren Feed? Vielleicht kann man auch eine WebSite parsen (z.B. HIT RADIO FFH - Mobil - Verkehr), die aber nur die Meldungen im Rhein-Main-Gebiet beinhalten (würde mir persönlich ausreichen ;)) … ich hab aber keine Ahnung davon, wie man so etwas vernünftig parst und - ähnlich wie das Script von spaceguy - in ein Array bringt …

Viele Grüße …

Die FFH Seite müsste genaus geparst werden wie ein normaler RSS Feed, schließlich ist HTML nichts anderes als XML.
Interessant dürften dann die Nodes <td class=„stautext“> sein.
Beim Komma trennen und man hat die Fahrtrichtung, Strasse und eine Zeile weiter den Text.
Machbar sollte das schon sein.

Vielleicht würde es auch Sinn machen mehrere solcher Seiten anzuzapfen, um die Genauigkeit zu erhöhen.

Deine Funktion hört sich interessant an. Kannst du sie mal posten?

Viele Grüße
Chris

Hi …

hier meine Lösung in Form einer Funktion. Ist bestimmt kein Meisterwerk des geschickten PHP-Designes, aber es funktioniert :slight_smile: … wer mag, kann Optimierungen durchführen und den Code zurückposten …

Geparsed wird die Mobile-Seite von Hitradio FFH … das ist ein Radio-Sender in Hessen, demnach sind die Meldungen lokal auf Hessen und Grenzbereiche anliegender Bundesländer begrenzt …

Beispiele für den Funktionsaufruf:

GetTraffic(„A3“,„Frankfurt“,„Köln“,false,array(„Mönchhof-Dreieck“,„Wiesbadener Kreuz“,„Medenbach“,„Niedernhausen“,„Idstein“);
… liefert Staus auf der A3, Frankfurt Richtung Köln, mit den im Array übermittelten Strings in der Beschreibung, also typisch: Frankfurt - Köln, A66, Zwischen Idstein und Wiesbadener Kreuz 4 KM Stau.

GetTraffic(„A3“,"Frankfurt,„Köln“,true,array());
… liefert alle Staus auf der A3 im Streckenabschnitt Frankfurt Richtung Köln und Köln Richtung Frankfurt.

GetTraffic(„A3“,"","",true,array());
… liefert alle Staus auf der A3 aus allen Streckenabschnitten

GetTraffic("","","",true,array());
… liefert alle Staus in ganz Hessen (alles was FFH veröffentlicht)

Rückgabe ist ein Array und kann weiterverarbeitet werden, einfach mal mit print_r ausgeben.

Hier die Funktion, die in eigene Skripte includet werden kann …

<?
	function GetTraffic($streetNumber,$spare1,$spare2,$bothDirections,$keyWords)
	//$streetNumber = string der Autobahnbezeichnung (z.B. "A3")
	//$spare1 = Bereichsbeginn (z.B. Frankfurt)
	//$spare2 = Bereichsende (z.B. Köln)
	//$bothDirections = false{nur von $spare1 nach $spare2}, true{von $spare1 nach $spare2 und $spare2 nach $spare1}
	//$keyWords = array{Autobahnanschluss1, Autobahnanschluss2, usw.}
	//
	//Beispiel 1:  GetTraffic("A3","Frankfurt","Köln",true,array("Idstein","Niedernhausen","Medenbach","Wiesbadener Kreuz");
	//Beispiel 2:  GetTraffic("A5","","",true,array());
	{
		//WebSite mit Staumeldungen von FFH laden
		$doc = new DOMDocument();
		$doc->loadHTMLFile('http://mobile.ffh.de/verkehr.php');
		$returnValue = array();
		$tags = $doc->getElementsByTagName('td'); //Liest Staumeldungen zwischen HTML-Tags aus
		foreach ($tags as $tag)
		{
			//Formatierung der Meldung, Entfernen von Umbrüchen, Leerzeichen, usw.
			$out = utf8_decode($tag->getAttribute('class="Stautext"').$tag->nodeValue);
			$out = str_replace(chr(9),"",$out);
			$out = substr($out,2,500);
			$splitTD = explode(chr(13).chr(10),$out);
			
			//Wenn es sich um eine Staumeldung handelt und nicht um eine polizeiliche Suchmeldung ...
			if(($splitTD[0] != "") and (strpos($splitTD[0]," - ")))
			{
				if(strpos($splitTD[0],"Autofahrer")) //Gefahrenmeldungen beginnen immer mit "Achtung Autofahrer" ...
				{
					$reduced = str_replace("Achtung Autofahrer auf der ","",$splitTD[0]);
					$reduced = str_replace("Achtung Autofahrer, auf der ","",$reduced);
					//Zerlegen der Meldung in ein Array und Zuweisen in Variablen
					$splitBA = explode(", ",$reduced);
					$split2B = explode(" - ",$splitBA[1]);
					$sn = $splitBA[0];
					$sp1 = trim($split2B[0]);
					$sp2 = trim($split2B[1]);
					$description = $splitTD[1];
					$time = date("d.m.Y, H:i")." Uhr";
					//$html baut die Meldung gleich in ein HTML-String ($description) in gelb, da Gefahrenmeldung
					$html = "<font size=\"+1\">".$sn."</font>, <strong>".$sp1."</strong> - <strong>".$sp2."</strong><br><font color=\"yellow\">".$description."</font> (".$time.")<p>";				}
				else
				{
					//Normale Staumeldungen, i.d.R. im Format "Frankfurt - Wiesbaden, A66" oder auch manchmal "Frankfurt  -  Wiesbaden, A66"
					$splitBA = explode(", ",$splitTD[0]);
					$split2B = explode(" - ",$splitBA[0]);
					$sn = $splitBA[1];	
					$sp1 = trim($split2B[0]);
					$sp2 = trim($split2B[1]);
					$description = $splitTD[1];
					$time = date("d.m.Y, H:i")." Uhr";
					$html = "<font size=\"+1\">".$sn."</font>, <strong>".$sp1."</strong> - <strong>".$sp2."</strong><br>".$description." (".$time.")<p>";
				}

				//Überführen der Hilfs-Variablen in ein Array
				$itemArray = array('title' => $sn.", ".$sp1." - ".$sp2,'description' => $description,'time' => $time,'html' => $html);

				//Wenn im Funktionsaufruf keine Autobahn und kein Streckenabschnitte angegeben wurden, werden alle Staus ungefiltert zurückgegeben ...
				if(!$streetNumber and !$spare1 and !$spare2)
				{
					array_push($returnValue,$itemArray);
				}
				//... ansonsten die komplette angegebene Autobahn
				elseif($streetNumber == $sn and !$spare1 and !$spare2)
				{
					array_push($returnValue,$itemArray);
				}
				else
				{
					//... Streckenabschnitt zurückgeben in beide Richtungen
					if($bothDirections)
					{
				      if($streetNumber == $sn and (($spare1 == $sp1 and $spare2 == $sp2) or ($spare2 == $sp1 and $spare1 == $sp2)))
				      {
							if(count($keyWords) == 0)
							{
								array_push($returnValue,$itemArray);
							}
							//Wenn KeyWords im Array angegeben sind, wird die Beschreibung nach diesen Worten druchsucht
							else
							{
							   foreach($keyWords as $i)
							   {
							      if(strpos($description,$i))
							      {
		     							array_push($returnValue,$itemArray);
		     							break;
	            				}
								}
							}
						}
					}
					else
				   {
						//... Streckenabschnitt nur in eine Richtung durchsuchen
						if($streetNumber == $sn and $spare1 == $sp1 and $spare2 == $sp2)
				      {
							if(count($keyWords) == 0)
							{
								array_push($returnValue,$itemArray);
							}
							else
							{
							   foreach($keyWords as $i)
							   {
							      if(strpos($description,$i))
							      {
		     							array_push($returnValue,$itemArray);
		     							break;
	            				}
								}
							}
						}
					}
				}
			}
		}
		if(count($returnValue) < 1) $returnValue = false; //Wenn keine Staumeldungen für den Filter vorliegen, Rückgabewert: false
		
		//...Ansonsten ist der Rückgabewert ein Array, welches im Skript weiter verarbeitet werden kann (z.B. der HTML-Teil direkt in eine String-Variable mit ~HTMLBox)
		return $returnValue;
	}
?>

Viel Erfolg :wink:

Hallo zusammen,

das sieht doch schon wirklich gut aus Squeezer.
Ich werde am Wochenende mal versuchen dein Script hiermit zu verheiraten.

Dann sollte doch schon eine Routenberechnung mit Stauanzeige möglich sein.
Router umberechnen bei Stau usw. wäre sicher dann noch nice to have, könnte aber wirklich schwierig werden.

Viele Grüße
Chris

… wir müssen’s ja nicht übertreiben :wink:

ich habe mir das ganze so eingebaut, dass - wenn morgens zwischen 6 und 9 Uhr ein Stau auf meiner Strecke liegt, ich diesen automatisch per Sprachausgabe vorgelesen bekomme … Nachmittags zwischen 15 und 18 Uhr bekomme ich Meldungen per E-Mail auf mein Smartphone :wink:

Aber eine grafische Anzeige wäre schon klasse :wink:

Ich habe dann die Hitze mal genutzt, um dem WDR die Verkehrmeldungen Bundesweit zu entlocken.

Am Ende wird eine HTML-Seite mit einer Tabelle aller bundesweiten Verkehrsmeldungen aus dem Array $stau ausgegeben.

Man verzeihe mit den „Spaghetti-PHP-Code“, bin nur Laie. Die vielen auskommentierten echo-Anweisungen rühren noch aus dem Ausprobieren her.

Gruß Rolf


<? 
 
$stau=array();

$z=-1;

$bundesland=array('Nordrhein-Westfalen','Bayern','Hessen','Bremen','Schleswig-Holstein','Mecklenburg-

Vorpommern','Brandenburg','Berlin','sachsen-anhalt','Sachsen','Niedersachsen','Rheinland-Pfalz','Hamburg','Baden-

Wuerttemberg','Saarland');

for ($land = 0; $land <= 14; $land++) {  



$content = @file_get_contents('http://www.wdr.de/verkehrslage/'.$bundesland[$land]);

//echo '<p> *******************'.$bundesland[$land].' *******************<p>';

$raus= 'style="display: none"';

$content=str_replace($raus,'', $content);

$del='<li class="cell1">';
$del='<a name="';


$zarr=explode($del,$content);



unset($content);
$i=1;  
foreach ($zarr as $teil) {
 if ($i > 1) {
  $pos=strpos($teil,' ');
  if ($pos>0) {

   $pos=strpos($teil,'"');
   $bahn=substr($teil,0,$pos);
   $len=strlen($teil);
   $teil=substr($teil,$pos,$len-$pos);

   //echo '<p>****'.$bahn.'*****<p>';


   $pos=strpos($teil,$bahn.' <br');
   $len=strlen($teil);
   $teil=substr($teil,$pos,$len-$pos);



   $meldung=explode('&nbsp',$teil);
   foreach ($meldung as $analyse) {
     if (strpos($analyse,'[nach oben]') === false) {
	if (strpos($analyse,'<li>Quelle:') !== false) {
	  //echo '<p><p>##################</p></p>ab hier:#<br>';
	  //echo $bundesland[$land].'<br>';

	  schneiden($bahn.' <br />');

          
	  $x = schneiden('</p>'); // <br />
	  // echo '>>>vvv'.$x.'vvv<<< <br>';

	  $zeilen=explode('<br />',$x);
	  $nr=0;
	  foreach ($zeilen as $zeile) {
  		$nr=$nr+1;
  		//echo '>>>'.$nr.' >>>'.$zeile.'<<< <br>';
  		if ($nr==1) {
		  $z=$z+1;
		  $stau[$z]['Land']=$bundesland[$land];
		  $stau[$z]['BAB']=trim($zeile);
  		}elseif ($nr==2){
		  $stau[$z]['Richtung']=trim($zeile);
  		}elseif ($nr==3){
		  $stau[$z]['Zwischen']=trim($zeile);
  		}else{
		  $m='Info'.strval($nr-3);
		  $stau[$z][$m]=trim($zeile);
  		}
	  }
	  if ($nr<5) {
  	    $stau[$z]['Info2']='';
	  }

	  schneiden('Quelle:'); // <br />
	  $x=schneiden('</li>');

	  $x=str_replace('Quelle: ','', $x);
	  //echo '>>>'.$x.'<<< <br>';

	  $stau[$z]['Quelle']=$x;

	  schneiden('Aktualisiert'); // <br />
	  $x=schneiden('</li>');

	  $x = substr($x, -5);
	  //echo '>>>'.$x.'<<< ZEIT<br>';

	  $stau[$z]['Zeit']=$x;

	  $x=schneiden('<li class="cell3">');
	  if (strpos($x,'keine Sperrung') !== false) {
  		//echo '>>>Keine Sperrung<<< <br>';
  		$stau[$z]['Sperrung']='';
	  }else{
  		//echo '>>>Sperrung<<< <br>';
  		$stau[$z]['Sperrung']='JA';
	  }

	  $x=schneiden('<li class="cell4">');
	  if (strpos($x,'GROWING') !== false) {
  		//echo '>>>Zunehmend<<< <br>';
  		$stau[$z]['Tendenz']='+';
	  }else{
  		if (strpos($x,'SHRINKING') !== false) {
    			//echo '>>>Abnehmend<<< <br>';
    			$stau[$z]['Tendenz']='-';
  		}else{
    			//echo '>>>Keine Tendenz<<< <br>';
    			$stau[$z]['Tendenz']='';
  		}
	  }


	  if (strpos($analyse,'Kein Stau</span>') !== false) {
  		//echo '>>>Kein Stau<<< <br>';
  		$stau[$z]['Typ']='Kein Stau';
  		$stau[$z]['Km']='';
  		$stau[$z]['Info3']='';
	  }elseif (strpos($analyse,'Gefahr') !== false) {
  		//echo '>>>Gefahr<<< <br>';
  		$stau[$z]['Typ']='Gefahr';
  		$stau[$z]['Km']='';
  		$stau[$z]['Info3']='';
	  }else{
  		$stau[$z]['Typ']='Stau';
  		schneiden('<span class="gross">');
  		$xy=schneiden('</span>');
  		$xy=strip_tags($xy);
  		$xy=trim($xy);
  		//echo '>>>'.$xy.'<<<(kilometer) <br>';
  		if ($xy=='*Fehler*') {
    			$xy='k.A.'; // Angabe eines Staus aber ohne Kilometerangabe
  		}
  		$stau[$z]['Km']=$xy;
  		schneiden('<br />');

   		$analyse=strip_tags($analyse);
   		$analyse=trim($analyse);
   		//echo '>>>'.$analyse.'<<< <br>';

   		$stau[$z]['Info3']=$analyse;

	  }

	  // echo $analyse;

	  //echo '<br>#bis hier<p><p>##################</p></p>';
	}
     }
   }

 
   //echo '<p>****'.$bahn.'*****<p>';
   //'A2"'; 
   //'A555 <br />';
   //echo $teil;
   //echo '<p><p>*** '.$i.' ********************************************</p></p>';
  }
 }
  $i=$i+1;
}


//echo '<p>letzte Nr'.$i;

} // Ende Schleife Bundesländer abfragen


function schneiden($bis) {
  global $analyse;
  $pos=strpos($analyse,$bis);
  if ($pos!==false) {
    $res=substr($analyse,0,$pos);
    $len=strlen($analyse);
    $analyse=substr($analyse,$pos,$len-$pos);
  }else{
    $res='*Fehler*';
  }

  return $res;
}


?>

Nachdem das Array eingelesen wurde, hier eine HTML-Seite, welche die Verkehrsmeldungen in einer Tabelle ausgibt:



<html><head><title>Verkehrsmeldungen</title>
<meta name="robots" content="noindex" />
</head>
<body bgcolor="#F0E2C6" TEXT="#000000">
<P>
<DIV ALIGN=center>
<FONT SIZE=+1 FACE="ARIAL,HELVETICA">
Verkehrsmeldungen
</FONT>

<?
echo " am ".strftime("%d.%m.%y %H:%M:%S");

echo '<p>'; 


echo '<table border=5>';
echo '<tr><th>Land</th><th>BAB</th><th>Richtung</th><th>Zwischen</th><th>Info 1</th><th>Info 2</th><th>Info 

3</th><th>Sperrung</th><th>Typ</th><th>Km</th><th>Trend</th><th>Zeit</th><th>Quelle</th></tr>';

$i=0;
$zahl=count($stau);

for ($i = 0; $i < $zahl; $i++) { 

echo '<tr>';

echo '<td>'.$stau[$i]['Land'].'</td>';
echo '<td>'.$stau[$i]['BAB'].'</td>';
echo '<td>'.$stau[$i]['Richtung'].'</td>';
echo '<td>'.$stau[$i]['Zwischen'].'</td>';
echo '<td>'.$stau[$i]['Info1'].'</td>';
echo '<td>'.$stau[$i]['Info2'].'</td>';
echo '<td>'.$stau[$i]['Info3'].'</td>';
echo '<td>'.$stau[$i]['Sperrung'].'</td>';
echo '<td>'.$stau[$i]['Typ'].'</td>';
echo '<td>'.$stau[$i]['Km'].'</td>';
echo '<td>'.$stau[$i]['Tendenz'].'</td>';
echo '<td>'.$stau[$i]['Zeit'].'</td>';
echo '<td>'.$stau[$i]['Quelle'].'</td>';

echo '</tr>';

}
echo '</table>';

?> 

</body></html>



Funktioniert gut! Wie könnte ich nun einen Filter zB nur für Meldungen von der A2 machen? Am besten wäre ein Filter Array zb

$bab=array('A1','A2','B1');

so könnte man sich dann seine eigenen Routen abfragen :wink:

Autobahnfilter ist kein Problem. Richtungsfilter muss man darauf achten, wie der WDR die Richtungen angibt. Habe als Beispiel mal das Stück A1 vom Autobahnkreuz Wuppertal bis zum kamener Kreuz und dann weiter A2 Richtung Hannover, aber nur bis Beckum hier:



$zahl=count($stau);

$erstez='<table border=5><tr><th>Land</th><th>BAB</th><th>Richtung</th><th>Zwischen</th><th>Info 1</th><th>Info 2</th><th>Info 3</th><th>Sperrung</th><th>Typ</th><th>Km</th><th>Trend</th><th>Zeit</th><th>Quelle</th></tr>';

$a2_abschnitt=array('Kamener Kreuz','Kolberg','Bönen','Hamm','Rhynern','Im Großen Klei','Im Sundern','Hamm-Uentrop','Stettin','Beckum');


$a1_abschnitt=array('Wuppertal-Nord','Bruchmühle','Klosterholz','Gevelsberg','Volmarstein','Eichenkamp','Funckenhausen','Hagen-West','Vorhalle','Hagen-Nord','Lennhof','Westhofener Kreuz','Schwerte','Lichtendorf','Dortmund/Unna','Unna','Kamen-Zentrum','Kamener Kreuz');

echo '<p>Als Beispiel A1 AK Wuppertal bis Kamener kreuz und A2 Dortmund Richtung Hannover zwischen Kamener Kreuz und Beckum'.$erstez;

$i=0;
for ($i = 0; $i < $zahl; $i++) { 

 if ($stau[$i]['BAB']=='A2') {
  if ($stau[$i]['Richtung']=='Dortmund Richtung Hannover' or $stau[$i]['Richtung']=='Hannover - Dortmund in beiden Richtungen') {
    foreach ($a2_abschnitt as $vgl) {
	if ( strpos($stau[$i]['Zwischen'],$vgl) > 0) {
    	  zeige($i);
          break;
        }
    }
  }
 }elseif ($stau[$i]['BAB']=='A1') {
  if ($stau[$i]['Richtung']=='Köln Richtung Dortmund' or $stau[$i]['Richtung']=='Köln Richtung Münster'or $stau[$i]['Richtung']=='Dortmund Richtung Münster') {
    foreach ($a1_abschnitt as $vgl) {
	if ( strpos($stau[$i]['Zwischen'],$vgl) > 0) {
	  zeige($i);
	  break;
        }
    }
   }
 }
}



echo '</table>';

function zeige($i) {
global $stau;
echo '<tr>';
echo '<td>'.$stau[$i]['Land'].'</td>';
echo '<td>'.$stau[$i]['BAB'].'</td>';
echo '<td>'.$stau[$i]['Richtung'].'</td>';
echo '<td>'.$stau[$i]['Zwischen'].'</td>';
echo '<td>'.$stau[$i]['Info1'].'</td>';
echo '<td>'.$stau[$i]['Info2'].'</td>';
echo '<td>'.$stau[$i]['Info3'].'</td>';
echo '<td>'.$stau[$i]['Sperrung'].'</td>';
echo '<td>'.$stau[$i]['Typ'].'</td>';
echo '<td>'.$stau[$i]['Km'].'</td>';
echo '<td>'.$stau[$i]['Tendenz'].'</td>';
echo '<td>'.$stau[$i]['Zeit'].'</td>';
echo '<td>'.$stau[$i]['Quelle'].'</td>';
echo '</tr>';
}

Die Namen der Anschlussstellen finden sich auf der Verkehrsseite des WDR („Streckenverlauf“).

Die Ausgabe eines Staus erfolgt dann nur, wenn die Bedingungen erfüllt sind
in der Unterfunktion „zeige“ .

Gruß Rolf

cool, aber könnte man das nicht so programmieren, dass die Reihenfolge der Streckenabschnitte im Array sozusagen die Richtung vorgibt?
Wie der WDR nun die Richtung angibt , zB Dortmund Richtung Hannover, lässt sich nirgendwo nachlesen, oder?
Gibt es sonst noch Meldungen, bei denen zB gar keine Abfahrten genannt werden?

Dann müsste man sich nur mal die Mühe machen und die Streckenabschnitte aller Autobahnen zu kopieren und zB eine XML Datei davon zu machen…

Hallo,

ich bin gerade auf dieses Script gestossen und wollte es bei mir einbauen, aber irgendwie kommt nix raus :rolleyes:.

Bei einer ersten Überlegung wo es dran scheitern könnte, bin ich auf diese Stelle gestossen, die nicht gefunden wird.

if(strpos($splitTD[0],"Autofahrer")) //Gefahrenmeldungen beginnen immer mit "Achtung Autofahrer" ...

Bevor ich jetzt anfange, das Script komplett durchzugehen und ggf. Anpassungen vornehme, wollte ich fragen, ob das Script bei Dir/Euch noch läuft oder ob es eventuell schon eine aktuellere Version gibt.

Danke & Gruß
Thorsten

on my machine it works :wink:

Hello Frank,

on my machine it is working also. Perhaps my brain was a little „matschig“ yesterday or i misspelled some parameters with my „dabbische“ finger.

Now, everything is working great :D.

Have a „guudee“ day.

Gruß
Thorsten

Hey, so ne Mail mit Bitte um Einloggen und Passwortabfrage habe ich die Tage auch bekommen.

Ich weiß nicht mehr den kompletten Wortlaut aber ein Teil war:

es ist verry wichtig für Sie

:smiley:

Moin zusammen,

ich will diesen alten Thread noch mal aufmachen weil ich gerade selbst auf der Suche nach einer solchen Lösung bin. Vielleicht ist meine Lösung auch für andere interessant.

Ich wollte gerne, um mich rechtzeitig von IPS wecken zu lassen, die aktuelle Fahrzeit von A nach B ermitteln können. Natürlich unter Berücksichtigung der gegebenen Verkehrslage. Google Maps zeigt einem das ja auch schön an und die Werte sind meistens realistisch. Leider kann man die Fahrzeit mit Verkehr nur per API auslesen, wenn man „Maps for Work“-Kunde ist…

Darum habe ich nach einer Alternative gesucht und bei HERE Maps (Nokia / Navteq) gefunden. Die bieten eine REST-Api an mit der man die bereinigte Fahrzeit abfragen kann. Benötigt wird ein kostenloser API-KEY, den man direkt über ein Formular anfordern kann.

Weitere Infos gibt es hier.

HTH!

Und hast Du schon ein Skript in petto? Habe mal kurz rauf geschaut. Wäre eine Überlegung wert. Mein Skript funktioniert eigentlich ganz gut.

Noch nichts abschliessend fertiges, aber das abfragen der aktuellen Fahrtzeit funktioniert schon mal:


<?php
// HERE Maps API credentials
define("app_code", "xxxx");
define("app_id","xxxx");
define("HOME", "geo!51.9,10.8");

// Example:
$dest = geocode_dest('Beispielweg 1, Hamburg');
$travel_time = get_travel_time($dest);


function geocode_dest($destination) {
	// Returns coordinates of an address
    $url  = "http://geocoder.api.here.com/6.2/geocode.json?app_id=".app_id."&app_code=".app_code."&gen=7";
	$url .= "&searchtext=".urlencode($destination);
	$res = json_decode(file_get_contents($url));
	return "geo!".$res->Response->View[0]->Result[0]->Location->DisplayPosition->Latitude.",".$res->Response->View[0]->Result[0]->Location->DisplayPosition->Longitude;
}

function get_travel_time($dest) {
	$url = "http://route.api.here.com/routing/7.2/calculateroute.json?app_id=".app_id."&app_code=".app_code;
	$url .= "&mode=fastest;car;traffic:enabled";
	$url .= "&waypoint0=" . HOME . "&waypoint1=".$dest;

	$res = json_decode(file_get_contents($url));

	// Returns seconds!
	return intval($res->response->route[0]->summary->travelTime);
}
?>

Alles weitere inkl. Fehlerhandling fehlt noch.

Hi,

welche Application platform und Solution muss ich bei dem API Formular angeben?

Grüße

Ich glaube ich habe „other“ und „web experiences“ ausgewählt.

Ob das irgendwas ausmacht? Keine Ahnung. Vermutlich ist die Angabe eh nur für deren Statistik.