Last active
December 11, 2017 12:33
-
-
Save Koenvh1/5ea54fcc3e7ee17aa2012e38c7b3613a to your computer and use it in GitHub Desktop.
The logic behind Flitsmelder (https://koenvh.nl/flitsmelder), a system that notifies you when a mobile radar is on your route. This is just the logic to check whether a radar is in range.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Class FlitsLogic | |
* | |
* Class to get radars from flitsservice.nl, and parse the points to check whether they are within a certain distance. | |
* | |
* @author Koen van Hove | |
* @license MIT | |
* (Though it would be really nice if you left a message if you decided to use this, and perhaps even credited me) | |
*/ | |
class FlitsLogic | |
{ | |
var $client = null; | |
/** | |
* @var float Distance in kilometres, 50m in this case. | |
*/ | |
var $distance = 0.05; //0.0008; | |
function __construct() | |
{ | |
$this->client = new SoapClient("http://fcm.flitsservice.nl/FlitsNavV2.asmx?wsdl"); | |
} | |
/** | |
* Get all mobile radars in NL and BE | |
* @param int $tries Amount of tries for getting the data, this in case the server malfunctions for a second | |
* @return array | |
*/ | |
public function getRadars($tries = 1) | |
{ | |
try { | |
$obj = [ | |
"username" => "Misbruik?", | |
"password" => "Bedankt!", | |
"UniqueID" => "", | |
"lat" => "0.0", | |
"lon" => "0.0", | |
"snelheid" => "0", | |
"rijrichting" => "0", | |
"Versie" => "", | |
"OS" => "" | |
]; | |
//Get FlitsNavNL object | |
$resultNL = $this->client->FlitsNavNL($obj); | |
//Parse XML and convert to array | |
$xmlNL = simplexml_load_string($resultNL->FlitsNavNLResult->any); | |
$jsonNL = json_encode($xmlNL); | |
$arrayNL = json_decode($jsonNL, true); | |
if (count($arrayNL) == 0) { | |
$arrayNL = [ | |
"NewDataSet" => [ | |
"stdTabel" => [] | |
] | |
]; | |
} | |
//Get FlitsNavBE object | |
$resultBE = $this->client->FlitsNavBE($obj); | |
//Parse XML and convert to array | |
$xmlBE = simplexml_load_string($resultBE->FlitsNavBEResult->any); | |
$jsonBE = json_encode($xmlBE); | |
$arrayBE = json_decode($jsonBE, true); | |
if (count($arrayBE) == 0) { | |
$arrayBE = [ | |
"NewDataSet" => [ | |
"stdTabel" => [] | |
] | |
]; | |
} | |
//var_dump($arrayNL); | |
//var_dump($arrayBE); | |
$radars = array_merge($arrayNL["NewDataSet"]["stdTabel"], $arrayBE["NewDataSet"]["stdTabel"]); | |
return $radars; | |
} catch (Exception $exception) { | |
if($tries == 5) { | |
return []; | |
} else { | |
return $this->getRadars($tries + 1); | |
} | |
} | |
} | |
/** | |
* Get all stationary cameras in NL and BE. | |
* @return array | |
*/ | |
public function getStationaryRadars() | |
{ | |
$obj = [ | |
"username" => "Misbruik?", | |
"password" => "Bedankt!", | |
"UniqueID" => "", | |
"lat" => "0.0", | |
"lon" => "0.0", | |
"snelheid" => "0", | |
"rijrichting" => "0", | |
"Versie" => "", | |
"OS" => "" | |
]; | |
$resultFlitspaal = $this->client->Flitspalen($obj); | |
$xmlFlitspaal = simplexml_load_string($resultFlitspaal->FlitspalenResult->any); | |
$jsonFlitspaal = json_encode($xmlFlitspaal); | |
$arrayFlitspaal = json_decode($jsonFlitspaal, true); | |
if (count($arrayFlitspaal) == 0) { | |
$arrayFlitspaal = [ | |
"NewDataSet" => [ | |
"stdTabel" => [] | |
] | |
]; | |
} | |
return array_map(function($item) { | |
return [ | |
"Latitude" => $item["latitude"], | |
"Longitude" => $item["longitude"], | |
"melding" => "Vaste camera", | |
"type" => $item["type"], | |
"vmax" => array_key_exists("vmax", $item) ? $item["vmax"] : "" | |
]; | |
}, $arrayFlitspaal["NewDataSet"]["stdTabel"]); | |
} | |
/** | |
* Get all traject controles (average speed limit cameras) | |
* @return array | |
*/ | |
public function getTrajectControles() | |
{ | |
$obj = [ | |
"username" => "Misbruik?", | |
"password" => "Bedankt!", | |
"UniqueID" => "", | |
"lat" => "0.0", | |
"lon" => "0.0", | |
"snelheid" => "0", | |
"rijrichting" => "0", | |
"Versie" => "", | |
"OS" => "" | |
]; | |
$resultTraject = $this->client->Trajectcontroles($obj); | |
$xmlTraject = simplexml_load_string($resultTraject->TrajectcontrolesResult->any); | |
$jsonTraject = json_encode($xmlTraject); | |
$arrayTraject = json_decode($jsonTraject, true); | |
if (count($arrayTraject) == 0) { | |
$arrayTraject = [ | |
"NewDataSet" => [ | |
"stdTabel" => [] | |
] | |
]; | |
} | |
$trajectControles = []; | |
foreach ($arrayTraject["NewDataSet"]["stdTabel"] as $item) { | |
$coordinates = explode(";", $item["portalen"]); | |
$coordinatesA = explode(",", $coordinates[0]); | |
$coordinatesB = explode(",", $coordinates[1]); | |
$trajectControles[] = [ | |
"melding" => $item["naam"], | |
"Latitude" => $coordinatesA[0], | |
"Longitude" => $coordinatesA[1] | |
]; | |
$trajectControles[] = [ | |
"melding" => $item["naam"], | |
"Latitude" => $coordinatesB[0], | |
"Longitude" => $coordinatesB[1] | |
]; | |
} | |
return $trajectControles; | |
} | |
/** | |
* Convert array of points to formulas | |
*/ | |
public function convertWaypointsToFormulas($points) | |
{ | |
/** | |
* Convert the waypoints into formulas | |
* | |
* lat = y, lon = x | |
*/ | |
$formulas = []; | |
for ($i = 0; $i < count($points) - 1; $i++) { | |
$formulas[] = [ | |
"lon1" => $points[$i]["lon"], | |
"lat1" => $points[$i]["lat"], | |
"lon2" => $points[$i + 1]["lon"], | |
"lat2" => $points[$i + 1]["lat"], | |
"boundaries" => [ | |
"latLower" => min([$points[$i + 1]["lat"], $points[$i]["lat"]]), | |
"latUpper" => max([$points[$i + 1]["lat"], $points[$i]["lat"]]), | |
"lonLower" => min([$points[$i + 1]["lon"], $points[$i]["lon"]]), | |
"lonUpper" => max([$points[$i + 1]["lon"], $points[$i]["lon"]]) | |
] | |
]; | |
} | |
return $formulas; | |
} | |
public function findProjectionPointOnLineSegment($x, $y, $x1, $y1, $x2, $y2) | |
{ | |
/** | |
* Calculate the vectors relative to the base (x1,y1), ie. make (x1,y1) (0,0) | |
*/ | |
$a = $x - $x1; | |
$b = $y - $y1; | |
$c = $x2 - $x1; | |
$d = $y2 - $y1; | |
/** | |
* Calculate the dot product to find the point where the line from to (x,y) projects onto the line (x2,y2), | |
* because that point will be the point from where the distance from the line to (x,y) will be the shortest. | |
*/ | |
$dot = $a * $c + $b * $d; | |
/** | |
* Calculate A² + B² = C², so the length of the line to (x2,y2) squared | |
*/ | |
$len_sq = pow($c, 2) + pow($d, 2); | |
if ($len_sq != 0) { | |
/** | |
* The ratio between the dot projection and the length squared | |
*/ | |
$param = $dot / $len_sq; | |
} else { | |
return -1; | |
} | |
$xx = null; | |
$yy = null; | |
if ($param < 0) { | |
/** | |
* It is smaller than 0, so the dot product must have been negative, so the angle must have been over 90 deg. | |
* The shortest distance is on a part of the line that is outside the line segment (on the left side), so | |
* in that case, the shortest distance to the line segment is just the distance between (x1,y1) and (x,y) | |
*/ | |
$xx = $x1; | |
$yy = $y1; | |
} elseif ($param > 1) { | |
/** | |
* Similarly to above, only now it project to the line outside the line segment on the right side, in which | |
* case it is just the distance to the right outer most part. | |
*/ | |
$xx = $x2; | |
$yy = $y2; | |
} else { | |
/** | |
* So it does project within our line segment, in that case it projects to the ratio times the length, | |
* plus the initial offset, which will yield the point where (x,y) projects on the line. | |
*/ | |
$xx = $x1 + $param * $c; | |
$yy = $y1 + $param * $d; | |
} | |
return [ | |
"lon" => $xx, | |
"lat" => $yy | |
]; | |
} | |
function coordinatesToKilometres($lat1, $lon1, $lat2, $lon2) | |
{ | |
$earthRadius = 6371; | |
$dLat = deg2rad($lat2 - $lat1); | |
$dLon = deg2rad($lon2 - $lon1); | |
$lat1 = deg2rad($lat1); | |
$lat2 = deg2rad($lat2); | |
$a = sin($dLat / 2) * sin($dLat / 2) + sin($dLon / 2) * sin($dLon / 2) * cos($lat1) * cos($lat2); | |
$c = 2 * atan2(sqrt($a), sqrt(1 - $a)); | |
return abs($earthRadius * $c); | |
} | |
public function getRadarsOnRoute($formulas, $radars) | |
{ | |
$radarsOnRoute = []; | |
$radarsMaybeOnRoute = []; //All radars within the rectangles | |
$distance = $this->distance; | |
$distanceCoordinates = $distance / 50; //Convert meters to coordinates, with margin (actual amount is 111.111km per coordinate) | |
foreach ($radars as $radar) { | |
/** | |
* Filter all points that are not in range, ie. their limits are not within range. | |
* Add the distance to the limits, because the point can be outside the box while still being smaller than the distance. | |
* It can never be outside the box + distance though (because the shortest route is perpendicular) | |
*/ | |
$filteredPoints = array_filter($formulas, function($formula) use ($radar, $distanceCoordinates){ | |
return ( | |
(($radar["Latitude"]) > (($formula["boundaries"]["latLower"]) - $distanceCoordinates)) && | |
(($radar["Latitude"]) < (($formula["boundaries"]["latUpper"]) + $distanceCoordinates)) && | |
($radar["Longitude"] > ($formula["boundaries"]["lonLower"] - $distanceCoordinates)) && | |
($radar["Longitude"] < ($formula["boundaries"]["lonUpper"] + $distanceCoordinates)) | |
); | |
}); | |
foreach ($filteredPoints as $filteredPoint) { | |
$projectionPoint = $this->findProjectionPointOnLineSegment( | |
$radar["Longitude"], $radar["Latitude"], | |
$filteredPoint["lon1"], $filteredPoint["lat1"], | |
$filteredPoint["lon2"], $filteredPoint["lat2"] | |
); | |
$distanceToPoint = $this->coordinatesToKilometres($projectionPoint["lat"], $projectionPoint["lon"], | |
$radar["Latitude"], $radar["Longitude"]); | |
if($distanceToPoint < $distance) { | |
$radarsOnRoute[] = $radar; | |
break; | |
} else { | |
//var_dump([$radar["melding"], $distanceToPoint]); | |
} | |
$radarsMaybeOnRoute[] = $radar; | |
} | |
} | |
//$radarsOnRoute = @array_diff($radarsMaybeOnRoute, $radarsOnRoute); //Radars *not* on route | |
return $radarsOnRoute; | |
} | |
/** | |
* Get mock data for radars to ease testing | |
* @return array | |
*/ | |
public function getMockRadars() | |
{ | |
return array ( | |
0 => | |
array ( | |
'ID' => '247595', | |
'Soort' => 'Laser', | |
'melding' => 'laser nh in santpoort-noord op de santpoortse dreef bij parking station', | |
'Latitude' => '52.4327050006942', | |
'Longitude' => '4.63284230245335', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => 'Li', | |
'plaats' => 'santpoort-noord', | |
'straat' => 'santpoortse dreef', | |
'tijd' => '16:16:00', | |
), | |
1 => | |
array ( | |
'ID' => '247594', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov n765 ens ri kampen op de frieseweg thv hmp 15.2 bij nesweg', | |
'Latitude' => '52.5760164038448', | |
'Longitude' => '5.90216573013608', | |
'snelweg' => 'OB1', | |
'hmp' => '15.2', | |
'regioweg' => 'N765', | |
'Wegnummer' => '765', | |
'ReLi' => '<>', | |
'plaats' => 'kampen', | |
'straat' => 'frieseweg', | |
'tijd' => '16:37:41', | |
), | |
2 => | |
array ( | |
'ID' => '247593', | |
'Soort' => 'Radar', | |
'melding' => 'radar ge n812 babberich ri beek op de beekseweg thv hmp 1.6', | |
'Latitude' => '51.9055632391286', | |
'Longitude' => '6.14032395437207', | |
'snelweg' => 'OB1', | |
'hmp' => '1.6', | |
'regioweg' => 'N812', | |
'Wegnummer' => '812', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'beekseweg', | |
'tijd' => '16:21:30', | |
), | |
3 => | |
array ( | |
'ID' => '247592', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov a1 hengelo ri duitse grens thv hmp 168.1 bij viaduct', | |
'Latitude' => '52.2927975811381', | |
'Longitude' => '6.90467332162857', | |
'snelweg' => 'A1', | |
'hmp' => '168.1', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '1', | |
'ReLi' => 'Re', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '16:18:43', | |
), | |
4 => | |
array ( | |
'ID' => '247591', | |
'Soort' => 'Radar', | |
'melding' => 'radar nh s103 in amsterdam op de haarlemmerweg thv de molen', | |
'Latitude' => '52.3851477043836', | |
'Longitude' => '4.85978722572327', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'amsterdam', | |
'straat' => 'haarlemmerweg', | |
'tijd' => '15:52:00', | |
), | |
5 => | |
array ( | |
'ID' => '247590', | |
'Soort' => 'Laser', | |
'melding' => 'laser ge in uddel op de aardhuisweg', | |
'Latitude' => '52.2569592697414', | |
'Longitude' => '5.792316198349', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'uddel', | |
'straat' => 'aardhuisweg', | |
'tijd' => '15:58:27', | |
), | |
6 => | |
array ( | |
'ID' => '247589', | |
'Soort' => 'Radar', | |
'melding' => 'radar nh a27 utrecht ri almere thv hmp 91.7 na wildviaduct', | |
'Latitude' => '52.1890723512313', | |
'Longitude' => '5.18567497995356', | |
'snelweg' => 'A27', | |
'hmp' => '91.7', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '27', | |
'ReLi' => 'Re', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '15:49:24', | |
), | |
7 => | |
array ( | |
'ID' => '247588', | |
'Soort' => 'Radar', | |
'melding' => 'radar zh in rotterdam op de straatweg thv lommerrijk', | |
'Latitude' => '51.947681', | |
'Longitude' => '4.485459', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'rotterdam', | |
'straat' => 'straatweg', | |
'tijd' => '14:39:46', | |
), | |
8 => | |
array ( | |
'ID' => '247587', | |
'Soort' => 'Radar', | |
'melding' => 'radar nh s111 in amsterdam op de muntbergweg thv praxis', | |
'Latitude' => '52.297513', | |
'Longitude' => '4.94914', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'amsterdam', | |
'straat' => 'muntbergweg', | |
'tijd' => '14:45:00', | |
), | |
9 => | |
array ( | |
'ID' => '247586', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb a67 venlo ri eindhoven thv hmp 35.5 bij shell tankstation', | |
'Latitude' => '51.423572150988', | |
'Longitude' => '5.66953157387602', | |
'snelweg' => 'A67', | |
'hmp' => '35.5', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '67', | |
'ReLi' => 'Li', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '15:04:38', | |
), | |
10 => | |
array ( | |
'ID' => '247585', | |
'Soort' => 'Radar', | |
'melding' => 'radar ut a2 den bosch ri utrecht thv hmp 72.0 bij afslag vianen', | |
'Latitude' => '51.9937362169232', | |
'Longitude' => '5.08016024765732', | |
'snelweg' => 'A2', | |
'hmp' => '72.0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '2', | |
'ReLi' => 'Li', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '14:53:00', | |
), | |
11 => | |
array ( | |
'ID' => '247584', | |
'Soort' => 'Radar', | |
'melding' => 'radar zh in den haag op de lozerlaan', | |
'Latitude' => '52.048294216449', | |
'Longitude' => '4.23162460327148', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'den haag', | |
'straat' => 'lozerlaan', | |
'tijd' => '15:12:44', | |
), | |
12 => | |
array ( | |
'ID' => '247583', | |
'Soort' => 'Radar', | |
'melding' => 'radar ge in nijmegen op de griftdijk thv de terracottastraat', | |
'Latitude' => '51.878637', | |
'Longitude' => '5.849619', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'nijmegen', | |
'straat' => 'griftdijk', | |
'tijd' => '14:54:00', | |
), | |
13 => | |
array ( | |
'ID' => '247582', | |
'Soort' => 'Radar', | |
'melding' => 'radar ge n308 oldebroek ri wezep op de zuiderzeestraatweg thv hmp 60.5', | |
'Latitude' => '52.4700451746945', | |
'Longitude' => '5.98435221701961', | |
'snelweg' => 'OB1', | |
'hmp' => '60.5', | |
'regioweg' => 'N308', | |
'Wegnummer' => '308', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'zuiderzeestraatweg', | |
'tijd' => '15:15:37', | |
), | |
14 => | |
array ( | |
'ID' => '247581', | |
'Soort' => 'Radar', | |
'melding' => 'radar li a73 venray ri roermond thv hmp 40.8 bij afslag venlo-zuid achter het geluidsscherm', | |
'Latitude' => '51.3540509704587', | |
'Longitude' => '6.14901366931858', | |
'snelweg' => 'A73', | |
'hmp' => '40.8', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '73', | |
'ReLi' => 'Li', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '15:15:29', | |
), | |
15 => | |
array ( | |
'ID' => '247580', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb in oosterhout op de bovensteweg thv afslag centerum-west', | |
'Latitude' => '51.6545071536012', | |
'Longitude' => '4.8569655418396', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'oosterhout', | |
'straat' => 'bovensteweg', | |
'tijd' => '15:12:22', | |
), | |
16 => | |
array ( | |
'ID' => '247578', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb n321 grave ri cuijk thv hmp 5.5 bij esso tankstation', | |
'Latitude' => '51.7430742519087', | |
'Longitude' => '5.77935230077662', | |
'snelweg' => 'OB1', | |
'hmp' => '5.5', | |
'regioweg' => 'N321', | |
'Wegnummer' => '321', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'maasveld', | |
'tijd' => '15:07:20', | |
), | |
17 => | |
array ( | |
'ID' => '247576', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb budel ri maarheeze op de randweg-oost bij de kuikensvensdijk', | |
'Latitude' => '51.2871648169005', | |
'Longitude' => '5.62276840209961', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'budel', | |
'straat' => 'randweg-oost', | |
'tijd' => '14:41:00', | |
), | |
18 => | |
array ( | |
'ID' => '247571', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb in den bosch op de rietveldenweg thv heineken / bmw dealer', | |
'Latitude' => '51.6998131488141', | |
'Longitude' => '5.27775049209595', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'den bosch', | |
'straat' => 'rietveldenweg', | |
'tijd' => '14:10:47', | |
), | |
19 => | |
array ( | |
'ID' => '247570', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb in valkenswaard op de maastrichterweg thv de taamvenhoeve', | |
'Latitude' => '51.3206407343094', | |
'Longitude' => '5.46396732319408', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'valkenswaard', | |
'straat' => 'maastrichterweg', | |
'tijd' => '14:10:24', | |
), | |
20 => | |
array ( | |
'ID' => '247569', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb helvoirt ri haaren op de helvoirtseweg thv kapelletje', | |
'Latitude' => '51.6157782132957', | |
'Longitude' => '5.23477077484131', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'helvoirtseweg', | |
'tijd' => '14:10:19', | |
), | |
21 => | |
array ( | |
'ID' => '247566', | |
'Soort' => 'Radar', | |
'melding' => 'radar fl a6 lelystad ri almere thv hmp 61.2 bij afslag almere buiten-oost achter viaduct', | |
'Latitude' => '52.3987008648837', | |
'Longitude' => '5.34332800977721', | |
'snelweg' => 'A6', | |
'hmp' => '61.2', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '6', | |
'ReLi' => 'Li', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '14:06:34', | |
), | |
22 => | |
array ( | |
'ID' => '247565', | |
'Soort' => 'Radar', | |
'melding' => 'radar ge n310 elspeet ri nunspeet thv hmp 89.6', | |
'Latitude' => '52.3104340761472', | |
'Longitude' => '5.78812712291184', | |
'snelweg' => 'OB1', | |
'hmp' => '89.6', | |
'regioweg' => 'N310', | |
'Wegnummer' => '310', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '13:19:00', | |
), | |
23 => | |
array ( | |
'ID' => '247563', | |
'Soort' => 'Radar', | |
'melding' => 'radar ge n784 deelen ri arnhem op de apeldoornseweg thv hmp 2.8', | |
'Latitude' => '52.0107848134246', | |
'Longitude' => '5.92580759128937', | |
'snelweg' => 'OB1', | |
'hmp' => '2.8', | |
'regioweg' => 'N784', | |
'Wegnummer' => '784', | |
'ReLi' => 'Li', | |
'plaats' => 'arnhem', | |
'straat' => 'apeldoornseweg', | |
'tijd' => '13:19:09', | |
), | |
24 => | |
array ( | |
'ID' => '247561', | |
'Soort' => 'Radar', | |
'melding' => 'radar nh in purmerend op de burgemeester kooimanweg thv aalscholverstraat door blauwe vw transporter', | |
'Latitude' => '52.5230952489175', | |
'Longitude' => '4.95736598968506', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'purmerend', | |
'straat' => 'burgemeester kooimanweg', | |
'tijd' => '13:15:51', | |
), | |
25 => | |
array ( | |
'ID' => '247560', | |
'Soort' => 'Radar', | |
'melding' => 'radar ze philippine ri zandstraat op de zandstraat', | |
'Latitude' => '51.2710445648805', | |
'Longitude' => '3.78418922424316', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'zandstraat', | |
'straat' => 'zandstraat', | |
'tijd' => '13:16:38', | |
), | |
26 => | |
array ( | |
'ID' => '247559', | |
'Soort' => 'Radar', | |
'melding' => 'radar nh in alkmaar op de zeswielen', | |
'Latitude' => '52.64126', | |
'Longitude' => '4.76181', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'alkmaar', | |
'straat' => 'zeswielen', | |
'tijd' => '12:54:46', | |
), | |
27 => | |
array ( | |
'ID' => '247558', | |
'Soort' => 'Radar', | |
'melding' => 'radar zh in katwijk op de parklaan', | |
'Latitude' => '52.19829', | |
'Longitude' => '4.39675', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'katwijk', | |
'straat' => 'parklaan', | |
'tijd' => '12:52:42', | |
), | |
28 => | |
array ( | |
'ID' => '247555', | |
'Soort' => 'Radar', | |
'melding' => 'radar li n562 helden ri roggel thv hmp 20.7 nabij buitenhof de leistert', | |
'Latitude' => '51.2797892620189', | |
'Longitude' => '5.94104468822479', | |
'snelweg' => 'OB1', | |
'hmp' => '20.7', | |
'regioweg' => 'N562', | |
'Wegnummer' => '562', | |
'ReLi' => '<>', | |
'plaats' => 'roggel', | |
'straat' => 'heldensedijk', | |
'tijd' => '12:13:33', | |
), | |
29 => | |
array ( | |
'ID' => '247554', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov hengelo op de deldenerstraat door zwarte transpoter', | |
'Latitude' => '52.2660825671391', | |
'Longitude' => '6.78300619125366', | |
'snelweg' => 'OB1', | |
'hmp' => '0', | |
'regioweg' => 'OB2', | |
'Wegnummer' => '999', | |
'ReLi' => '<>', | |
'plaats' => 'hengelo', | |
'straat' => 'deldenerstraat', | |
'tijd' => '12:19:25', | |
), | |
30 => | |
array ( | |
'ID' => '247553', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov n337 deventer ri zwolle thv hmp 4.1', | |
'Latitude' => '52.2813485967867', | |
'Longitude' => '6.12834201375257', | |
'snelweg' => 'OB1', | |
'hmp' => '4.1', | |
'regioweg' => 'N337', | |
'Wegnummer' => '337', | |
'ReLi' => '<>', | |
'plaats' => 'OB3', | |
'straat' => 'OB4', | |
'tijd' => '12:13:24', | |
), | |
31 => | |
array ( | |
'ID' => '247552', | |
'Soort' => 'Radar', | |
'melding' => 'radar nb n625 empel ri `t wild thv hmp 3.8 bij roode wetering', | |
'Latitude' => '51.7517592311247', | |
'Longitude' => '5.36397415973555', | |
'snelweg' => 'OB1', | |
'hmp' => '3.8', | |
'regioweg' => 'N625', | |
'Wegnummer' => '625', | |
'ReLi' => '<>', | |
'plaats' => 'maren-kessel', | |
'straat' => 'hustenweg', | |
'tijd' => '12:19:08', | |
), | |
32 => | |
array ( | |
'ID' => '247551', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov n18 in haaksbergen op de enschedesestraat thv hmp 8.0', | |
'Latitude' => '52.1642101159593', | |
'Longitude' => '6.76302491724461', | |
'snelweg' => 'OB1', | |
'hmp' => '8.0', | |
'regioweg' => 'N18', | |
'Wegnummer' => '18', | |
'ReLi' => '<>', | |
'plaats' => 'haaksbergen', | |
'straat' => 'enschedesestraat', | |
'tijd' => '12:13:10', | |
), | |
33 => | |
array ( | |
'ID' => '247550', | |
'Soort' => 'Radar', | |
'melding' => 'radar ov n347 in sint isidorushoeve op de goorsestraat bij hmp 1.4 thv autobedrijf aktief', | |
'Latitude' => '52.1769641909906', | |
'Longitude' => '6.70105332203954', | |
'snelweg' => 'OB1', | |
'hmp' => '1.4', | |
'regioweg' => 'N347', | |
'Wegnummer' => '347', | |
'ReLi' => '<>', | |
'plaats' => 'sint isidorushoeve', | |
'straat' => 'goorsestraat', | |
'tijd' => '12:13:27', | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment