Skip to content

Instantly share code, notes, and snippets.

@youssef22222
Created June 24, 2025 05:43
Show Gist options
  • Save youssef22222/31882515d42391cf38d6ba145753ab47 to your computer and use it in GitHub Desktop.
Save youssef22222/31882515d42391cf38d6ba145753ab47 to your computer and use it in GitHub Desktop.
Speed Violation Map - 6379 XBDMazda (FMC150) - 1750743815
<!DOCTYPE html>
<html>
<head>
<title>Speed Violation Path - 6379 XBDMazda (FMC150)</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif;
}
#map {
height: 100%;
position: relative;
}
/* Enhanced marker styles */
.number-icon {
background-color: #FF1744;
border: 2px solid white;
border-radius: 50%;
color: white;
font-weight: bold;
text-align: center;
font-size: 12px;
line-height: 20px;
width: 24px;
height: 24px;
margin-left: -12px;
margin-top: -12px;
box-shadow: 0 2px 5px rgba(0,0,0,0.3);
}
.violation-icon {
background-color: #FF1744;
border: 3px solid white;
width: 32px;
height: 32px;
line-height: 26px;
font-size: 16px;
font-weight: bold;
margin-left: -16px;
margin-top: -16px;
position: relative;
}
/* Pulsing animation for last violation point */
.pulse-ring {
border: 3px solid #FF1744;
border-radius: 50%;
height: 50px;
width: 50px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
animation: pulsate 2s ease-out;
animation-iteration-count: infinite;
opacity: 0;
}
@keyframes pulsate {
0% {
transform: translate(-50%, -50%) scale(0.1, 0.1);
opacity: 0;
}
50% {
opacity: 1;
}
100% {
transform: translate(-50%, -50%) scale(1.2, 1.2);
opacity: 0;
}
}
/* Enhanced popup styles */
.popup-content {
min-width: 280px;
font-family: inherit;
}
.popup-content table {
width: 100%;
border-collapse: collapse;
}
.popup-content td {
padding: 4px 8px;
border-bottom: 1px solid #eee;
font-size: 13px;
}
.popup-content td:first-child {
font-weight: 600;
width: 45%;
color: #555;
}
.popup-content td:last-child {
color: #2c3e50;
}
.popup-title {
font-weight: 600;
color: #2c3e50;
margin-bottom: 8px;
padding-bottom: 8px;
border-bottom: 2px solid #e9ecef;
font-size: 16px;
}
.speed-violation {
color: #e74c3c;
font-weight: bold;
}
/* Enhanced legend styles */
.legend {
position: absolute;
bottom: 20px;
right: 20px;
background: white;
padding: 15px 20px;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
font-size: 13px;
z-index: 1000;
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
transform: translateX(0);
min-width: 200px;
}
.legend.collapsed {
transform: translateX(calc(100% + 20px));
}
.legend-toggle-btn {
position: absolute;
left: -35px;
top: 50%;
width: 35px;
height: 50px;
background-color: #3498db;
color: white;
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
transition: all 0.3s ease;
z-index: 1001;
border-radius: 8px 0 0 8px;
transform: translateY(-50%);
}
.legend-toggle-btn:hover {
background-color: #2980b9;
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}
.legend-toggle-btn i {
transition: transform 0.3s ease;
}
.legend.collapsed .legend-toggle-btn i {
transform: rotate(180deg);
}
.legend-title {
font-weight: 600;
margin-bottom: 12px;
color: #2c3e50;
font-size: 14px;
}
.legend-item {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 8px;
font-size: 12px;
}
.legend-item:last-child {
margin-bottom: 0;
}
.legend-marker {
width: 18px;
height: 18px;
border-radius: 50%;
border: 2px solid white;
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
flex-shrink: 0;
}
.legend-line {
width: 25px;
height: 4px;
border-radius: 2px;
flex-shrink: 0;
}
.legend-arrow {
width: 25px;
height: 4px;
background: #3498db;
position: relative;
flex-shrink: 0;
}
.legend-arrow::after {
content: '';
position: absolute;
right: 0;
top: -3px;
width: 0;
height: 0;
border-left: 8px solid #3498db;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
}
/* Info control styles */
.info-control {
min-width: 200px;
position: absolute;
top: 20px;
left: 20px;
background: rgba(255,255,255,0.95);
padding: 15px;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
font-size: 14px;
z-index: 1000;
}
.info-control h4 {
margin: 0 0 8px 0;
color: #2c3e50;
font-size: 16px;
}
.info-control div {
margin: 3px 0;
}
/* Enhanced leaflet popup */
.leaflet-popup-content {
margin: 13px 19px;
font-size: 14px;
line-height: 1.5;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script src="https://unpkg.com/leaflet-polylinedecorator@1.6.0/dist/leaflet.polylineDecorator.js"></script>
<script>
// Initialize the map
var map = L.map('map').setView([26.266810011363646, 50.16903926136366], 14);
// Add OpenStreetMap tile layer
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Define the coordinates and the detailed path data
var latlngs = [
[26.414945, 50.100758],
[26.291895, 50.173475],
[26.25849, 50.191772],
[26.243777, 50.196963],
[26.220972, 50.195948],
[26.216337, 50.19647],
[26.211635, 50.197023],
[26.341878, 50.179105],
[26.346603, 50.184645],
[26.36123, 50.178463],
[26.352682, 50.178615],
[26.29282, 50.171893],
[26.273518, 50.184727],
[26.241112, 50.195882],
[26.215413, 50.196618],
[26.181058, 50.182332],
[26.223673, 50.195855],
[26.26686, 50.187773],
[26.284925, 50.193497],
[26.28543, 50.192782],
[26.288358, 50.183153],
[26.218443, 50.206807],
[26.209582, 50.197942],
[26.282758, 50.200117],
[26.286148, 50.190297],
[26.225782, 50.195437],
[26.212025, 50.197018],
[26.181332, 50.182495],
[26.217132, 50.18759],
[26.217792, 50.1315],
[26.21932, 50.115833],
[26.257832, 49.997607],
[26.262155, 49.994293],
[26.284288, 49.964182],
[26.278535, 49.955007],
[26.249498, 49.977122],
[26.21375, 50.170395],
[26.217312, 50.17989],
[26.208178, 50.1976],
[26.20165, 50.195492],
[26.287135, 50.187197],
[26.289152, 50.179772],
[26.274358, 50.184473],
[26.20856, 50.197003],
[26.208785, 50.190845],
[26.354277, 50.17887],
[26.352625, 50.178657],
[26.329542, 50.179217],
[26.301598, 50.170608],
[26.268913, 50.186763],
[26.239875, 50.195422],
[26.21702, 50.196427],
[26.21237, 50.196992],
[26.181037, 50.182342],
[26.304628, 50.173928],
[26.287032, 50.187528],
[26.289117, 50.179723],
[26.269433, 50.18652],
[26.205142, 50.197233],
[26.241533, 50.196312],
[26.261843, 50.189937],
[26.306938, 50.175437],
[26.337717, 50.179153],
[26.342232, 50.179115],
[26.362, 50.178407],
[26.35285, 50.178557],
[26.329658, 50.179148],
[26.292887, 50.171913],
[26.207858, 50.197338],
[26.284525, 50.195293],
[26.280392, 50.20987],
[26.322667, 50.228127],
[26.347598, 50.2071],
[26.348887, 50.206807],
[26.286223, 50.206227],
[26.28714, 50.18732],
[26.288523, 50.182365],
[26.274555, 50.184303],
[26.218357, 50.125717],
[26.219395, 50.115463],
[26.254888, 49.999983],
[26.265342, 49.991863],
[26.21846, 50.206062],
[26.181188, 50.182417],
[26.18215, 50.18306],
[26.280343, 50.21046],
[26.28128, 50.206778],
[26.28413, 50.19703]
];
var pathData = [{"latitude": 26.414945, "longitude": 50.100758, "time": "06/18/25,18:19:50", "speed": 73, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.29, "vehicle_direction": 317, "segment_bearing": 318.5, "nearest_segment": [[26.414706, 50.1010118], [26.4151274, 50.1005948]], "closest_point": [26.414952521479808, 50.10076785258696]}, {"latitude": 26.291895, "longitude": 50.173475, "time": "06/18/25,18:38:58", "speed": 88, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 2.93, "vehicle_direction": 125, "segment_bearing": 126.1, "nearest_segment": [[26.2921171, 50.1730856], [26.2916041, 50.1738709]], "closest_point": [26.291875975026826, 50.17345471428528]}, {"latitude": 26.25849, "longitude": 50.191772, "time": "06/18/25,20:26:12", "speed": 80, "speed_limit": 60, "street_name": null, "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f \u0627\u0644\u0641\u0631\u0639\u064a", "distance_to_segment": 3.37, "vehicle_direction": 324, "segment_bearing": 324.7, "nearest_segment": [[26.2584696, 50.1918295], [26.2587105, 50.1916395]], "closest_point": [26.258508492507847, 50.191798825122014]}, {"latitude": 26.243777, "longitude": 50.196963, "time": "06/18/25,20:40:51", "speed": 117, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 12.52, "vehicle_direction": 194, "segment_bearing": 192.0, "nearest_segment": [[26.2446286, 50.1970457], [26.2435093, 50.1967798]], "closest_point": [26.24375884903155, 50.196839080562434]}, {"latitude": 26.220972, "longitude": 50.195948, "time": "06/18/25,20:42:17", "speed": 118, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 5.52, "vehicle_direction": 174, "segment_bearing": 174.0, "nearest_segment": [[26.2239462, 50.1955447], [26.2190474, 50.1961212]], "closest_point": [26.220953033987122, 50.195896903569924]}, {"latitude": 26.216337, "longitude": 50.19647, "time": "06/18/25,20:42:33", "speed": 119, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 5.29, "vehicle_direction": 174, "segment_bearing": 173.7, "nearest_segment": [[26.2175131, 50.1962734], [26.2161644, 50.1964401]], "closest_point": [26.216318660361527, 50.196421032128576]}, {"latitude": 26.211635, "longitude": 50.197023, "time": "06/18/25,20:42:50", "speed": 117, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 4.61, "vehicle_direction": 173, "segment_bearing": 174.5, "nearest_segment": [[26.2124636, 50.1968903], [26.2089591, 50.1972637]], "closest_point": [26.211619398550393, 50.19698023347207]}, {"latitude": 26.341878, "longitude": 50.179105, "time": "06/19/25,03:44:45", "speed": 85, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 4.66, "vehicle_direction": 358, "segment_bearing": 358.3, "nearest_segment": [[26.3414148, 50.1791649], [26.342014, 50.1791449]], "closest_point": [26.341892183090938, 50.179148965557275]}, {"latitude": 26.346603, "longitude": 50.184645, "time": "06/19/25,03:46:08", "speed": 45, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.22, "vehicle_direction": 65, "segment_bearing": 66.1, "nearest_segment": [[26.346444, 50.1841434], [26.3466943, 50.1847745]], "closest_point": [26.34664051785803, 50.18463889477558]}, {"latitude": 26.36123, "longitude": 50.178463, "time": "06/19/25,06:06:24", "speed": 94, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.55, "vehicle_direction": 359, "segment_bearing": 358.7, "nearest_segment": [[26.3611317, 50.1785184], [26.361875, 50.1784997]], "closest_point": [26.361246686187595, 50.17851550663199]}, {"latitude": 26.352682, "longitude": 50.178615, "time": "06/19/25,06:07:33", "speed": 96, "speed_limit": 60, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 4.05, "vehicle_direction": 178, "segment_bearing": 178.4, "nearest_segment": [[26.3561771, 50.1784666], [26.3526239, 50.1785782]], "closest_point": [26.352669706331714, 50.17857676011639]}, {"latitude": 26.29282, "longitude": 50.171893, "time": "06/19/25,06:13:15", "speed": 90, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 6.91, "vehicle_direction": 129, "segment_bearing": 126.1, "nearest_segment": [[26.2944474, 50.1695184], [26.2921171, 50.1730856]], "closest_point": [26.292864902141282, 50.1719408785184]}, {"latitude": 26.273518, "longitude": 50.184727, "time": "06/19/25,06:14:43", "speed": 113, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 0.95, "vehicle_direction": 159, "segment_bearing": 159.2, "nearest_segment": [[26.2751079, 50.1840428], [26.2634782, 50.1889746]], "closest_point": [26.27351365292669, 50.184718807568544]}, {"latitude": 26.241112, "longitude": 50.195882, "time": "06/19/25,06:16:52", "speed": 118, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 4.06, "vehicle_direction": 186, "segment_bearing": 199.3, "nearest_segment": [[26.242216, 50.1962734], [26.2407109, 50.195685]], "closest_point": [26.241110677825688, 50.19584128327084]}, {"latitude": 26.215413, "longitude": 50.196618, "time": "06/19/25,06:18:27", "speed": 112, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 8.88, "vehicle_direction": 173, "segment_bearing": 173.4, "nearest_segment": [[26.2157716, 50.1964861], [26.2135156, 50.1967749]], "closest_point": [26.215382070588568, 50.196535960531186]}, {"latitude": 26.181058, "longitude": 50.182332, "time": "06/19/25,06:39:05", "speed": 82, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.43, "vehicle_direction": 210, "segment_bearing": 196.3, "nearest_segment": [[26.1810931, 50.1823198], [26.1810353, 50.182301]], "closest_point": [26.181056014052757, 50.182307737434755]}, {"latitude": 26.223673, "longitude": 50.195855, "time": "06/19/25,06:42:45", "speed": 113, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 5.89, "vehicle_direction": 353, "segment_bearing": 354.3, "nearest_segment": [[26.221408, 50.1961629], [26.2244909, 50.1958212]], "closest_point": [26.223693060473813, 50.195909618097026]}, {"latitude": 26.26686, "longitude": 50.187773, "time": "06/19/25,06:45:38", "speed": 114, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 0.4, "vehicle_direction": 340, "segment_bearing": 338.8, "nearest_segment": [[26.2635741, 50.1892005], [26.2679627, 50.1872996]], "closest_point": [26.266861830637357, 50.18777642185928]}, {"latitude": 26.284925, "longitude": 50.193497, "time": "06/19/25,06:48:43", "speed": 97, "speed_limit": 80, "street_name": "Custodian of the Two Holy Mosques Road", "street_name_ar": "\u0637\u0631\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 4.41, "vehicle_direction": 110, "segment_bearing": 108.1, "nearest_segment": [[26.2860426, 50.1898255], [26.2848734, 50.1938096]], "closest_point": [26.284957845296088, 50.193521850960586]}, {"latitude": 26.28543, "longitude": 50.192782, "time": "06/19/25,06:59:22", "speed": 61, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.82, "vehicle_direction": 287, "segment_bearing": 287.9, "nearest_segment": [[26.2854571, 50.1928395], [26.2855764, 50.1924283]], "closest_point": [26.28546592944857, 50.19280906691799]}, {"latitude": 26.288358, "longitude": 50.183153, "time": "06/19/25,07:00:18", "speed": 67, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.51, "vehicle_direction": 288, "segment_bearing": 291.2, "nearest_segment": [[26.2880199, 50.1841939], [26.2886242, 50.182454]], "closest_point": [26.288376290082425, 50.183167783522826]}, {"latitude": 26.218443, "longitude": 50.206807, "time": "06/19/25,07:07:24", "speed": 75, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.78, "vehicle_direction": 84, "segment_bearing": 91.6, "nearest_segment": [[26.218454, 50.2066242], [26.2184355, 50.2073813]], "closest_point": [26.218449460354652, 50.20680998194038]}, {"latitude": 26.209582, "longitude": 50.197942, "time": "06/19/25,11:46:23", "speed": 61, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.28, "vehicle_direction": 12, "segment_bearing": 359.1, "nearest_segment": [[26.2091175, 50.1979283], [26.2097614, 50.1979172]], "closest_point": [26.20957525492087, 50.19792040826063]}, {"latitude": 26.282758, "longitude": 50.200117, "time": "06/19/25,12:14:55", "speed": 74, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 8.52, "vehicle_direction": 110, "segment_bearing": 108.4, "nearest_segment": [[26.2829269, 50.1998118], [26.2825731, 50.2009957]], "closest_point": [26.282821284844616, 50.20016521429913]}, {"latitude": 26.286148, "longitude": 50.190297, "time": "06/19/25,12:24:39", "speed": 65, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 9.56, "vehicle_direction": 287, "segment_bearing": 288.7, "nearest_segment": [[26.2859796, 50.1911389], [26.2862459, 50.1902622]], "closest_point": [26.286218834281826, 50.19035130458461]}, {"latitude": 26.225782, "longitude": 50.195437, "time": "06/19/25,12:41:23", "speed": 114, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 13.17, "vehicle_direction": 173, "segment_bearing": 173.4, "nearest_segment": [[26.2272339, 50.1951233], [26.2239462, 50.1955447]], "closest_point": [26.225736090376905, 50.195315263775086]}, {"latitude": 26.212025, "longitude": 50.197018, "time": "06/19/25,12:42:16", "speed": 105, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 8.39, "vehicle_direction": 173, "segment_bearing": 174.5, "nearest_segment": [[26.2124636, 50.1968903], [26.2089591, 50.1972637]], "closest_point": [26.211996564499177, 50.19694005248905]}, {"latitude": 26.181332, "longitude": 50.182495, "time": "06/19/25,13:33:22", "speed": 94, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.43, "vehicle_direction": 210, "segment_bearing": 219.4, "nearest_segment": [[26.1813499, 50.1825549], [26.1810931, 50.1823198]], "closest_point": [26.181317713717135, 50.18252543339613]}, {"latitude": 26.217132, "longitude": 50.18759, "time": "06/19/25,13:38:43", "speed": 90, "speed_limit": 80, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.99, "vehicle_direction": 266, "segment_bearing": 263.5, "nearest_segment": [[26.2172075, 50.188167], [26.2169617, 50.1857525]], "closest_point": [26.21714928683668, 50.18759516952822]}, {"latitude": 26.217792, "longitude": 50.1315, "time": "06/19/25,13:41:39", "speed": 122, "speed_limit": 120, "street_name": "Cooperative Council Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0645\u062c\u0644\u0633 \u0627\u0644\u062a\u0639\u0627\u0648\u0646", "distance_to_segment": 0.53, "vehicle_direction": 276, "segment_bearing": 276.8, "nearest_segment": [[26.2174994, 50.134296], [26.2184665, 50.1251947]], "closest_point": [26.217796251548958, 50.13150236861977]}, {"latitude": 26.21932, "longitude": 50.115833, "time": "06/19/25,13:42:27", "speed": 116, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.23, "vehicle_direction": 276, "segment_bearing": 277.2, "nearest_segment": [[26.219155, 50.1173814], [26.2195289, 50.1140818]], "closest_point": [26.219329830544257, 50.11583855438331]}, {"latitude": 26.257832, "longitude": 49.997607, "time": "06/19/25,13:54:44", "speed": 81, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.42, "vehicle_direction": 324, "segment_bearing": 325.2, "nearest_segment": [[26.2560406, 49.9990618], [26.2614426, 49.9948741]], "closest_point": [26.25786153934081, 49.99765017823049]}, {"latitude": 26.262155, "longitude": 49.994293, "time": "06/19/25,13:55:14", "speed": 53, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.55, "vehicle_direction": 324, "segment_bearing": 325.3, "nearest_segment": [[26.2619339, 49.9944948], [26.268064, 49.9897618]], "closest_point": [26.262168900383198, 49.99431335679235]}, {"latitude": 26.284288, "longitude": 49.964182, "time": "06/19/25,13:59:35", "speed": 80, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.67, "vehicle_direction": 231, "segment_bearing": 232.5, "nearest_segment": [[26.2863981, 49.9672197], [26.2840583, 49.9638209]], "closest_point": [26.2843002576006, 49.964172358066186]}, {"latitude": 26.278535, "longitude": 49.955007, "time": "06/19/25,14:20:12", "speed": 45, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.9, "vehicle_direction": 234, "segment_bearing": 233.8, "nearest_segment": [[26.280305, 49.9577375], [26.2784532, 49.9549145]], "closest_point": [26.2785205674665, 49.95501719669487]}, {"latitude": 26.249498, "longitude": 49.977122, "time": "06/19/25,14:24:38", "speed": 64, "speed_limit": 40, "street_name": null, "street_name_ar": "Makkah Road", "distance_to_segment": 9.81, "vehicle_direction": 144, "segment_bearing": 145.1, "nearest_segment": [[26.2506437, 49.9761095], [26.2473998, 49.9786367]], "closest_point": [26.24944439503153, 49.977043830991434]}, {"latitude": 26.21375, "longitude": 50.170395, "time": "06/19/25,14:48:11", "speed": 94, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.84, "vehicle_direction": 96, "segment_bearing": 96.2, "nearest_segment": [[26.2140034, 50.1677301], [26.2137416, 50.170408]], "closest_point": [26.21374323323633, 50.17039129398535]}, {"latitude": 26.217312, "longitude": 50.17989, "time": "06/19/25,14:50:17", "speed": 41, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.21, "vehicle_direction": 84, "segment_bearing": 89.3, "nearest_segment": [[26.2173139, 50.1791633], [26.217323, 50.1799679]], "closest_point": [26.217322166921388, 50.17989424119794]}, {"latitude": 26.208178, "longitude": 50.1976, "time": "06/20/25,16:12:05", "speed": 74, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 14.59, "vehicle_direction": 17, "segment_bearing": 4.1, "nearest_segment": [[26.2078054, 50.197708], [26.2082451, 50.1977434]], "closest_point": [26.208213451057144, 50.19774085185372]}, {"latitude": 26.20165, "longitude": 50.195492, "time": "06/20/25,16:15:50", "speed": 63, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.36, "vehicle_direction": 200, "segment_bearing": 202.8, "nearest_segment": [[26.2019565, 50.1956113], [26.2016263, 50.1954569]], "closest_point": [26.201650704571342, 50.19546831137819]}, {"latitude": 26.287135, "longitude": 50.187197, "time": "06/21/25,15:36:43", "speed": 82, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.47, "vehicle_direction": 287, "segment_bearing": 288.3, "nearest_segment": [[26.2869967, 50.1876501], [26.2875276, 50.185855]], "closest_point": [26.287131491791378, 50.18719433783181]}, {"latitude": 26.289152, "longitude": 50.179772, "time": "06/21/25,15:37:20", "speed": 81, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 9.41, "vehicle_direction": 287, "segment_bearing": 288.6, "nearest_segment": [[26.2888942, 50.1803403], [26.2891766, 50.1794067]], "closest_point": [26.289082250726256, 50.17971861425811]}, {"latitude": 26.274358, "longitude": 50.184473, "time": "06/21/25,15:38:28", "speed": 112, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 10.61, "vehicle_direction": 158, "segment_bearing": 159.2, "nearest_segment": [[26.2751079, 50.1840428], [26.2634782, 50.1889746]], "closest_point": [26.274309389992315, 50.184381389153444]}, {"latitude": 26.20856, "longitude": 50.197003, "time": "06/21/25,15:43:04", "speed": 75, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 7.13, "vehicle_direction": 176, "segment_bearing": 176.3, "nearest_segment": [[26.2089988, 50.1969028], [26.2085299, 50.1969368]], "closest_point": [26.208536973874786, 50.19693628704948]}, {"latitude": 26.208785, "longitude": 50.190845, "time": "06/21/25,15:44:05", "speed": 42, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 11.17, "vehicle_direction": 271, "segment_bearing": 272.1, "nearest_segment": [[26.2086842, 50.1910494], [26.2086939, 50.1907591]], "closest_point": [26.208692489176286, 50.19080132290229]}, {"latitude": 26.354277, "longitude": 50.17887, "time": "06/22/25,07:44:30", "speed": 71, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 2.6, "vehicle_direction": 359, "segment_bearing": 357.0, "nearest_segment": [[26.3536596, 50.1788809], [26.3551329, 50.1787954]], "closest_point": [26.35426875415506, 50.17884554520579]}, {"latitude": 26.352625, "longitude": 50.178657, "time": "06/22/25,07:46:01", "speed": 98, "speed_limit": 60, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 7.85, "vehicle_direction": 178, "segment_bearing": 178.4, "nearest_segment": [[26.3561771, 50.1784666], [26.3526239, 50.1785782]], "closest_point": [26.3526239, 50.1785782]}, {"latitude": 26.329542, "longitude": 50.179217, "time": "06/22/25,07:47:35", "speed": 101, "speed_limit": 100, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 6.62, "vehicle_direction": 178, "segment_bearing": 179.6, "nearest_segment": [[26.3296989, 50.1791528], [26.3288999, 50.1791591]], "closest_point": [26.329522699943624, 50.179154188480865]}, {"latitude": 26.301598, "longitude": 50.170608, "time": "06/22/25,07:49:40", "speed": 95, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 6.85, "vehicle_direction": 210, "segment_bearing": 218.6, "nearest_segment": [[26.3020699, 50.1709763], [26.3016596, 50.1706105]], "closest_point": [26.3016596, 50.1706105]}, {"latitude": 26.268913, "longitude": 50.186763, "time": "06/22/25,07:53:19", "speed": 111, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 8.82, "vehicle_direction": 158, "segment_bearing": 159.2, "nearest_segment": [[26.2751079, 50.1840428], [26.2634782, 50.1889746]], "closest_point": [26.26887259905321, 50.18668686615111]}, {"latitude": 26.239875, "longitude": 50.195422, "time": "06/22/25,07:55:12", "speed": 122, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 6.45, "vehicle_direction": 192, "segment_bearing": 199.3, "nearest_segment": [[26.2407109, 50.195685], [26.2392521, 50.1951147]], "closest_point": [26.23987290358482, 50.19535738983405]}, {"latitude": 26.21702, "longitude": 50.196427, "time": "06/22/25,07:56:36", "speed": 113, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 9.57, "vehicle_direction": 174, "segment_bearing": 173.7, "nearest_segment": [[26.2175131, 50.1962734], [26.2161644, 50.1964401]], "closest_point": [26.216986833938204, 50.196338443901304]}, {"latitude": 26.21237, "longitude": 50.196992, "time": "06/22/25,07:56:53", "speed": 116, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 9.51, "vehicle_direction": 173, "segment_bearing": 174.5, "nearest_segment": [[26.2124636, 50.1968903], [26.2089591, 50.1972637]], "closest_point": [26.212337788819518, 50.196903702159865]}, {"latitude": 26.181037, "longitude": 50.182342, "time": "06/22/25,15:10:16", "speed": 67, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.1, "vehicle_direction": 209, "segment_bearing": 196.3, "nearest_segment": [[26.1810931, 50.1823198], [26.1810353, 50.182301]], "closest_point": [26.1810353, 50.182301]}, {"latitude": 26.304628, "longitude": 50.173928, "time": "06/22/25,15:21:19", "speed": 73, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 4.77, "vehicle_direction": 41, "segment_bearing": 30.5, "nearest_segment": [[26.3045735, 50.1738394], [26.3068764, 50.1753545]], "closest_point": [26.30463716417289, 50.17388128337137]}, {"latitude": 26.287032, "longitude": 50.187528, "time": "06/22/25,19:39:05", "speed": 79, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.09, "vehicle_direction": 287, "segment_bearing": 288.3, "nearest_segment": [[26.2869967, 50.1876501], [26.2875276, 50.185855]], "closest_point": [26.287032662458675, 50.187528502700424]}, {"latitude": 26.289117, "longitude": 50.179723, "time": "06/22/25,19:39:40", "speed": 81, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 3.95, "vehicle_direction": 289, "segment_bearing": 288.6, "nearest_segment": [[26.2888942, 50.1803403], [26.2891766, 50.1794067]], "closest_point": [26.2890877062092, 50.179700578698395]}, {"latitude": 26.269433, "longitude": 50.18652, "time": "06/22/25,19:41:08", "speed": 112, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 6.69, "vehicle_direction": 158, "segment_bearing": 159.2, "nearest_segment": [[26.2751079, 50.1840428], [26.2634782, 50.1889746]], "closest_point": [26.269402338467785, 50.18646221921402]}, {"latitude": 26.205142, "longitude": 50.197233, "time": "06/23/25,03:40:19", "speed": 103, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 3.67, "vehicle_direction": 27, "segment_bearing": 12.4, "nearest_segment": [[26.2044242, 50.1970916], [26.2055322, 50.1973641]], "closest_point": [26.205147098381975, 50.19726938591982]}, {"latitude": 26.241533, "longitude": 50.196312, "time": "06/23/25,03:42:45", "speed": 112, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 9.76, "vehicle_direction": 9, "segment_bearing": 20.6, "nearest_segment": [[26.2396139, 50.1956039], [26.241577, 50.1964279]], "closest_point": [26.241533949471037, 50.19640982885617]}, {"latitude": 26.261843, "longitude": 50.189937, "time": "06/23/25,03:44:09", "speed": 101, "speed_limit": 60, "street_name": null, "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f \u0627\u0644\u0641\u0631\u0639\u064a", "distance_to_segment": 13.35, "vehicle_direction": 325, "segment_bearing": 338.8, "nearest_segment": [[26.261564, 50.1901992], [26.2625682, 50.1897649]], "closest_point": [26.26190446508327, 50.19005195355982]}, {"latitude": 26.306938, "longitude": 50.175437, "time": "06/23/25,03:53:17", "speed": 90, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 3.83, "vehicle_direction": 37, "segment_bearing": 30.3, "nearest_segment": [[26.3068764, 50.1753545], [26.3071679, 50.1755448]], "closest_point": [26.306945192378503, 50.175399409538045]}, {"latitude": 26.337717, "longitude": 50.179153, "time": "06/23/25,03:55:30", "speed": 110, "speed_limit": 100, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 3.62, "vehicle_direction": 359, "segment_bearing": 356.9, "nearest_segment": [[26.3371406, 50.1791532], [26.3384175, 50.179076]], "closest_point": [26.337705504372675, 50.179119043625626]}, {"latitude": 26.342232, "longitude": 50.179115, "time": "06/23/25,03:55:53", "speed": 80, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 2.44, "vehicle_direction": 359, "segment_bearing": 358.4, "nearest_segment": [[26.342014, 50.1791449], [26.3443044, 50.1790757]], "closest_point": [26.342239404378716, 50.179138086407434]}, {"latitude": 26.362, "longitude": 50.178407, "time": "06/23/25,05:53:41", "speed": 89, "speed_limit": 60, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 14.89, "vehicle_direction": 359, "segment_bearing": 178.7, "nearest_segment": [[26.3628901, 50.178242], [26.3619415, 50.1782665]], "closest_point": [26.3619551811118, 50.17826614655571]}, {"latitude": 26.35285, "longitude": 50.178557, "time": "06/23/25,05:54:31", "speed": 90, "speed_limit": 60, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 1.48, "vehicle_direction": 178, "segment_bearing": 178.4, "nearest_segment": [[26.3561771, 50.1784666], [26.3526239, 50.1785782]], "closest_point": [26.352854485409654, 50.17857095205517]}, {"latitude": 26.329658, "longitude": 50.179148, "time": "06/23/25,05:56:00", "speed": 107, "speed_limit": 100, "street_name": "King Saud Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0633\u0639\u0648\u062f", "distance_to_segment": 0.54, "vehicle_direction": 179, "segment_bearing": 179.6, "nearest_segment": [[26.3296989, 50.1791528], [26.3288999, 50.1791591]], "closest_point": [26.32965957010844, 50.17915310988422]}, {"latitude": 26.292887, "longitude": 50.171913, "time": "06/23/25,06:00:14", "speed": 89, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 0.35, "vehicle_direction": 128, "segment_bearing": 126.1, "nearest_segment": [[26.2944474, 50.1695184], [26.2921171, 50.1730856]], "closest_point": [26.29288470951195, 50.17191055768265]}, {"latitude": 26.207858, "longitude": 50.197338, "time": "06/23/25,06:06:05", "speed": 105, "speed_limit": 100, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 5.22, "vehicle_direction": 175, "segment_bearing": 180.7, "nearest_segment": [[26.2083192, 50.1972951], [26.2078076, 50.1972877]], "closest_point": [26.207843409209286, 50.19728821782726]}, {"latitude": 26.284525, "longitude": 50.195293, "time": "06/23/25,06:39:28", "speed": 81, "speed_limit": 80, "street_name": "Custodian of the Two Holy Mosques Road", "street_name_ar": "\u0637\u0631\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 10.33, "vehicle_direction": 103, "segment_bearing": 108.4, "nearest_segment": [[26.2848734, 50.1938096], [26.2820237, 50.2033607]], "closest_point": [26.28444824956569, 50.19523456288006]}, {"latitude": 26.280392, "longitude": 50.20987, "time": "06/23/25,06:40:36", "speed": 82, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 3.48, "vehicle_direction": 109, "segment_bearing": 100.1, "nearest_segment": [[26.2805038, 50.2089851], [26.2801219, 50.2113675]], "closest_point": [26.280364663614755, 50.20985307360331]}, {"latitude": 26.322667, "longitude": 50.228127, "time": "06/23/25,07:08:38", "speed": 63, "speed_limit": 60, "street_name": null, "street_name_ar": "\u0634\u0627\u0631\u0639 \u0627\u0644\u062d\u0627\u0641\u0638 \u0627\u0644\u0627\u0645\u0648\u064a", "distance_to_segment": 1.87, "vehicle_direction": 349, "segment_bearing": 347.9, "nearest_segment": [[26.3226609, 50.2281095], [26.324167, 50.2277501]], "closest_point": [26.3226609, 50.2281095]}, {"latitude": 26.347598, "longitude": 50.2071, "time": "06/23/25,07:14:39", "speed": 47, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 6.05, "vehicle_direction": 350, "segment_bearing": 346.1, "nearest_segment": [[26.3461429, 50.2074417], [26.3479456, 50.2069429]], "closest_point": [26.34757326394716, 50.20704592112259]}, {"latitude": 26.348887, "longitude": 50.206807, "time": "06/23/25,07:14:56", "speed": 42, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 9.57, "vehicle_direction": 345, "segment_bearing": 168.9, "nearest_segment": [[26.3488291, 50.206736], [26.3482376, 50.2068656]], "closest_point": [26.3488291, 50.206736]}, {"latitude": 26.286223, "longitude": 50.206227, "time": "06/23/25,07:59:34", "speed": 68, "speed_limit": 60, "street_name": "King Fahd Rd EB", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f \u0627\u0644\u0641\u0631\u0639\u064a", "distance_to_segment": 5.5, "vehicle_direction": 190, "segment_bearing": 189.3, "nearest_segment": [[26.2866009, 50.2062442], [26.2862093, 50.2061723]], "closest_point": [26.28621304266598, 50.20617298716149]}, {"latitude": 26.28714, "longitude": 50.18732, "time": "06/23/25,08:01:59", "speed": 75, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.02, "vehicle_direction": 287, "segment_bearing": 288.3, "nearest_segment": [[26.2869967, 50.1876501], [26.2875276, 50.185855]], "closest_point": [26.287102698632992, 50.18729169421388]}, {"latitude": 26.288523, "longitude": 50.182365, "time": "06/23/25,08:02:25", "speed": 77, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.98, "vehicle_direction": 288, "segment_bearing": 289.5, "nearest_segment": [[26.2878941, 50.1842345], [26.2885052, 50.1823058]], "closest_point": [26.288493681886756, 50.18234215258975]}, {"latitude": 26.274555, "longitude": 50.184303, "time": "06/23/25,08:03:48", "speed": 120, "speed_limit": 110, "street_name": "King Khaled Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u062e\u0627\u0644\u062f", "distance_to_segment": 2.44, "vehicle_direction": 158, "segment_bearing": 159.2, "nearest_segment": [[26.2751079, 50.1840428], [26.2634782, 50.1889746]], "closest_point": [26.274543843456524, 50.18428197421745]}, {"latitude": 26.218357, "longitude": 50.125717, "time": "06/23/25,08:23:46", "speed": 121, "speed_limit": 120, "street_name": "Cooperative Council Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0645\u062c\u0644\u0633 \u0627\u0644\u062a\u0639\u0627\u0648\u0646", "distance_to_segment": 6.34, "vehicle_direction": 276, "segment_bearing": 276.8, "nearest_segment": [[26.2174994, 50.134296], [26.2184665, 50.1251947]], "closest_point": [26.218407983097496, 50.125745401738435]}, {"latitude": 26.219395, "longitude": 50.115463, "time": "06/23/25,08:24:19", "speed": 112, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.65, "vehicle_direction": 275, "segment_bearing": 277.2, "nearest_segment": [[26.219155, 50.1173814], [26.2195289, 50.1140818]], "closest_point": [26.219373747820445, 50.11545099229038]}, {"latitude": 26.254888, "longitude": 49.999983, "time": "06/23/25,08:36:25", "speed": 43, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.33, "vehicle_direction": 315, "segment_bearing": 325.2, "nearest_segment": [[26.2531318, 50.0013149], [26.2560406, 49.9990618]], "closest_point": [26.25487529411325, 49.999964421388654]}, {"latitude": 26.265342, "longitude": 49.991863, "time": "06/23/25,08:37:44", "speed": 74, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.03, "vehicle_direction": 324, "segment_bearing": 325.3, "nearest_segment": [[26.2619339, 49.9944948], [26.268064, 49.9897618]], "closest_point": [26.265342189998847, 49.99186327826179]}, {"latitude": 26.21846, "longitude": 50.206062, "time": "06/23/25,09:21:33", "speed": 72, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.1, "vehicle_direction": 84, "segment_bearing": 90.6, "nearest_segment": [[26.2184652, 50.2054113], [26.218454, 50.2066242]], "closest_point": [26.218459194686734, 50.2060616432844]}, {"latitude": 26.181188, "longitude": 50.182417, "time": "06/23/25,11:42:15", "speed": 85, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.81, "vehicle_direction": 210, "segment_bearing": 219.4, "nearest_segment": [[26.1813499, 50.1825549], [26.1810931, 50.1823198]], "closest_point": [26.181191388141887, 50.182409782399326]}, {"latitude": 26.18215, "longitude": 50.18306, "time": "06/24/25,05:19:42", "speed": 91, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.28, "vehicle_direction": 209, "segment_bearing": 207.6, "nearest_segment": [[26.1822474, 50.1830818], [26.1815841, 50.1826953]], "closest_point": [26.18215420226103, 50.1830274936956]}, {"latitude": 26.280343, "longitude": 50.21046, "time": "06/24/25,05:31:42", "speed": 81, "speed_limit": 80, "street_name": "Custodian of the Two Holly Mosques Road", "street_name_ar": "\u0637\u0631\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 8.75, "vehicle_direction": 108, "segment_bearing": 100.1, "nearest_segment": [[26.2805038, 50.2089851], [26.2801219, 50.2113675]], "closest_point": [26.280274201704444, 50.2104174005897]}, {"latitude": 26.28128, "longitude": 50.206778, "time": "06/24/25,05:42:47", "speed": 67, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 7.12, "vehicle_direction": 282, "segment_bearing": 292.7, "nearest_segment": [[26.2812478, 50.2070436], [26.2813593, 50.2067461]], "closest_point": [26.281331309048422, 50.206820784413395]}, {"latitude": 26.28413, "longitude": 50.19703, "time": "06/24/25,05:43:34", "speed": 84, "speed_limit": 80, "street_name": "Custodian of the Two Holy Mosques Road", "street_name_ar": "\u0637\u0631\u0642 \u062e\u0627\u062f\u0645 \u0627\u0644\u062d\u0631\u0645\u064a\u0646 \u0627\u0644\u0634\u0631\u064a\u0641\u064a\u0646", "distance_to_segment": 6.13, "vehicle_direction": 288, "segment_bearing": 288.3, "nearest_segment": [[26.2840469, 50.1971219], [26.2850094, 50.19388]], "closest_point": [26.28408445993941, 50.19699539106246]}];
// Add device name to each point's data
pathData.forEach(function(data) {
data.device_name = "6379 XBDMazda (FMC150)";
});
// Function to create numbered div icons for violations
function createNumberedIcon(number, isLast = false) {
if (isLast) {
return L.divIcon({
className: 'number-icon violation-icon',
html: 'V<div class="pulse-ring"></div>',
iconSize: [32, 32]
});
} else {
return L.divIcon({
className: 'number-icon',
html: number.toString(),
iconSize: [24, 24]
});
}
}
// Function to create popup content
function createPopupContent(pointNum, data, isLast) {
var lat = data.latitude;
var lon = data.longitude;
var speedClass = 'speed-violation';
var html = '<div class="popup-content">';
html += '<div class="popup-title">Violation Point ' + pointNum + (isLast ? ' (Latest)' : '') + '</div>';
html += '<table>';
html += '<tr><td>Latitude:</td><td>' + lat.toFixed(6) + '</td></tr>';
html += '<tr><td>Longitude:</td><td>' + lon.toFixed(6) + '</td></tr>';
if (data.time) {
html += '<tr><td>Time:</td><td>' + data.time + '</td></tr>';
}
if (data.device_name) {
html += '<tr><td>Vehicle:</td><td>' + data.device_name + '</td></tr>';
}
if (data.street_name_ar) {
html += '<tr><td>Street (AR):</td><td style="direction: rtl;">' + data.street_name_ar + '</td></tr>';
}
if (data.street_name) {
html += '<tr><td>Street (EN):</td><td>' + data.street_name + '</td></tr>';
}
if (data.distance_to_segment !== undefined) {
html += '<tr><td>Dist to street:</td><td>' + data.distance_to_segment.toFixed(2) + ' m</td></tr>';
}
if (data.vehicle_direction !== undefined) {
html += '<tr><td>Vehicle Dir:</td><td>' + data.vehicle_direction.toFixed(1) + '°</td></tr>';
}
if (data.segment_bearing !== undefined) {
html += '<tr><td>Street Bearing:</td><td>' + data.segment_bearing.toFixed(1) + '°</td></tr>';
}
if (data.speed_limit) {
html += '<tr><td>Speed Limit:</td><td>' + data.speed_limit + ' km/h</td></tr>';
}
if (data.speed) {
html += '<tr><td>Vehicle Speed:</td><td class="' + speedClass + '">' + data.speed + ' km/h</td></tr>';
}
if (data.speed && data.speed_limit) {
var overSpeed = data.speed - data.speed_limit;
html += '<tr><td>Over Speed:</td><td class="speed-violation">+' + overSpeed + ' km/h</td></tr>';
}
html += '</table>';
html += '</div>';
return html;
}
// Function to create direction arrow from point
function createDirectionArrow(lat, lon, direction) {
if (direction === undefined || direction === null) return null;
var arrowLength = 0.0002; // Length of arrow in degrees
var radians = direction * Math.PI / 180;
var endLat = lat + arrowLength * Math.cos(radians);
var endLon = lon + arrowLength * Math.sin(radians);
var arrow = L.polyline([[lat, lon], [endLat, endLon]], {
color: '#3498db',
weight: 3,
opacity: 0.8
});
var decorator = L.polylineDecorator(arrow, {
patterns: [{
offset: '100%',
repeat: 0,
symbol: L.Symbol.arrowHead({
pixelSize: 12,
polygon: false,
pathOptions: {
stroke: true,
color: '#3498db',
weight: 2,
opacity: 0.9
}
})
}]
});
return { arrow: arrow, decorator: decorator };
}
// Add markers for all points - all are violation points
var allBounds = [];
for (var i = 0; i < pathData.length; i++) {
var data = pathData[i];
var isLast = (i === latlngs.length - 1);
var icon = createNumberedIcon(i + 1, isLast);
var popupContent = createPopupContent(i + 1, data, isLast);
// Add marker to map
var vehicleMarker = L.marker([data.latitude, data.longitude], {icon: icon})
.addTo(map)
.bindPopup(popupContent);
allBounds.push([data.latitude, data.longitude]);
// Add direction arrow for each point
if (data.vehicle_direction !== undefined && data.vehicle_direction !== null) {
var directionArrowData = createDirectionArrow(data.latitude, data.longitude, data.vehicle_direction);
if (directionArrowData) {
directionArrowData.arrow.addTo(map);
directionArrowData.decorator.addTo(map);
}
}
// Draw the nearest street segment for each point if available
if (data.nearest_segment && data.nearest_segment.length === 2) {
var segmentPolyline = L.polyline(data.nearest_segment, {
color: '#9b59b6',
weight: 8,
opacity: 0.8
}).addTo(map).bindPopup('Nearest Street Segment for Violation ' + (i + 1));
// Add enhanced start and end circles for the segment
L.circleMarker(data.nearest_segment[0], {
radius: 6,
color: '#8e44ad',
fillColor: '#9b59b6',
fillOpacity: 1,
weight: 2
}).addTo(map);
L.circleMarker(data.nearest_segment[1], {
radius: 6,
color: '#8e44ad',
fillColor: '#9b59b6',
fillOpacity: 1,
weight: 2
}).addTo(map);
}
// Draw the closest point on the segment and a line to it
if (data.closest_point && data.closest_point.length === 2) {
// Enhanced closest point marker
L.circleMarker(data.closest_point, {
radius: 8,
color: '#e67e22',
fillColor: '#f39c12',
fillOpacity: 1,
weight: 3
}).addTo(map).bindPopup('Closest Point on Street<br>Distance: ' + (data.distance_to_segment ? data.distance_to_segment.toFixed(2) + ' m' : 'N/A'));
// Enhanced dashed line from vehicle to closest point
var lineToClosest = [
[data.latitude, data.longitude],
data.closest_point
];
L.polyline(lineToClosest, {
color: '#3498db',
weight: 3,
opacity: 0.7,
dashArray: '8, 8'
}).addTo(map);
}
}
// Fit the map to show all points
if (allBounds.length > 0) {
var bounds = L.latLngBounds(allBounds);
map.fitBounds(bounds.pad(0.1));
}
// Add enhanced legend with toggle functionality
var legendHtml = '<button class="legend-toggle-btn" onclick="toggleLegend()"><i class="fas fa-chevron-right"></i></button>';
legendHtml += '<div class="legend-title">Map Legend</div>';
legendHtml += '<div class="legend-item"><div class="legend-marker" style="background: #FF1744;"></div><span>Violation Points</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-marker" style="background: #FF1744; width: 24px; height: 24px;"></div><span>Latest Violation</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-arrow"></div><span>Vehicle Direction</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-line" style="background: #9b59b6; height: 6px;"></div><span>Nearest Street Segment</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-marker" style="background: #f39c12;"></div><span>Closest Point</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-line" style="background: #3498db; border: 2px dashed #3498db; height: 2px;"></div><span>Distance Line</span></div>';
var legendControl = L.control({position: 'bottomright'});
legendControl.onAdd = function (map) {
var div = L.DomUtil.create('div', 'legend');
div.id = 'mapLegend';
div.innerHTML = legendHtml;
return div;
};
legendControl.addTo(map);
// Toggle legend function
function toggleLegend() {
var legend = document.getElementById('mapLegend');
legend.classList.toggle('collapsed');
}
// Add info control
var infoControl = L.control({position: 'topleft'});
infoControl.onAdd = function (map) {
var div = L.DomUtil.create('div', 'info-control');
div.innerHTML = '<h4><i class="fas fa-car" style="margin-right: 8px; color: #3498db;"></i>Vehicle Path Analysis</h4>' +
'<div><strong>Vehicle:</strong> 6379 XBDMazda (FMC150)</div>' +
'<div><strong>Total Violations:</strong> ' + latlngs.length + '</div>';
return div;
};
infoControl.addTo(map);
// Add zoom control to top right
L.control.zoom({position: 'topright'}).addTo(map);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment