Created
June 18, 2025 07:55
-
-
Save youssef22222/351439889c0062ef2e439138bde3702d to your computer and use it in GitHub Desktop.
Speed Violation Map - 6379 XBDMazda (FMC150) - 1750233337
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
<!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: #4285F4; | |
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); | |
} | |
.start-icon { | |
background-color: #00C853; | |
border: 3px solid white; | |
font-size: 14px; | |
font-weight: bold; | |
} | |
.end-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 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-ok { | |
color: #27ae60; | |
font-weight: bold; | |
} | |
.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.267962055555557, 50.154160233333336], 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.211762, 50.196908], | |
[26.190958, 50.18859], | |
[26.191737, 50.187992], | |
[26.180948, 50.182305], | |
[26.219177, 50.196702], | |
[26.24397, 50.197237], | |
[26.25989, 50.190947], | |
[26.268298, 50.187518], | |
[26.211972, 50.1969], | |
[26.185478, 50.18486], | |
[26.18098, 50.182397], | |
[26.223423, 50.195868], | |
[26.250665, 50.196978], | |
[26.254962, 50.194305], | |
[26.267362, 50.18751], | |
[26.29489, 50.16963], | |
[26.342437, 50.179168], | |
[26.344337, 50.179187], | |
[26.362015, 50.17843], | |
[26.352695, 50.178645], | |
[26.32459, 50.179355], | |
[26.30478, 50.173727], | |
[26.292848, 50.157507], | |
[26.292535, 50.159573], | |
[26.294935, 50.168807], | |
[26.248902, 50.197333], | |
[26.24038, 50.195655], | |
[26.190972, 50.188525], | |
[26.181, 50.182327], | |
[26.242163, 50.196583], | |
[26.263048, 50.189312], | |
[26.287595, 50.179247], | |
[26.285593, 50.190567], | |
[26.284083, 50.197635], | |
[26.289135, 50.179728], | |
[26.218447, 50.206795], | |
[26.401038, 49.876102], | |
[26.439738, 49.808028], | |
[26.44426, 49.806635], | |
[26.448748, 49.805287], | |
[26.462198, 49.802023], | |
[26.471323, 49.796882], | |
[26.446115, 49.80572], | |
[26.377565, 50.006978], | |
[26.379453, 50.011797], | |
[26.185202, 50.184722], | |
[26.18903, 50.180217], | |
[26.193585, 50.176403], | |
[26.197963, 50.186728], | |
[26.181127, 50.182328], | |
[26.200733, 50.195773], | |
[26.205037, 50.197487], | |
[26.211422, 50.198363], | |
[26.243175, 50.19702], | |
[26.251568, 50.196462], | |
[26.287597, 50.17922], | |
[26.285772, 50.190228], | |
[26.283578, 50.197477], | |
[26.288322, 50.182857], | |
[26.289155, 50.179672], | |
[26.234987, 50.19443], | |
[26.19114, 50.188632], | |
[26.181042, 50.182362], | |
[26.258355, 50.191928], | |
[26.262543, 50.189833], | |
[26.243187, 50.196792], | |
[26.190967, 50.188593], | |
[26.22232, 50.196007], | |
[26.249578, 50.197283], | |
[26.25732, 50.192645], | |
[26.26839, 50.18755], | |
[26.185468, 50.184843], | |
[26.36197, 50.178468], | |
[26.352383, 50.178618], | |
[26.278002, 50.182885], | |
[26.24917, 50.197208], | |
[26.22222, 50.19573], | |
[26.217515, 50.196272], | |
[26.208438, 50.197273], | |
[26.191023, 50.188378], | |
[26.18276, 50.183318], | |
[26.181013, 50.182327], | |
[26.287612, 50.17926], | |
[26.284008, 50.197683], | |
[26.286817, 50.188015], | |
[26.294692, 50.169872], | |
[26.32331, 50.17958], | |
[26.29915, 50.166695], | |
[26.290312, 50.175797], | |
[26.218227, 50.206982] | |
]; | |
var pathData = [{"latitude": 26.211762, "longitude": 50.196908, "time": "06/16/25,13:40:57", "speed": 67, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.78, "vehicle_direction": 174, "segment_bearing": 180.0, "nearest_segment": [[26.2124636, 50.1968903], [26.2115147, 50.1968901]], "closest_point": [26.211762003761805, 50.196890152124304]}, {"latitude": 26.190958, "longitude": 50.18859, "time": "06/16/25,13:43:10", "speed": 71, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.4, "vehicle_direction": 211, "segment_bearing": 121.5, "nearest_segment": [[26.1913841, 50.1877874], [26.1908701, 50.1887233]], "closest_point": [26.190946713254515, 50.18858380127452]}, {"latitude": 26.191737, "longitude": 50.187992, "time": "06/16/25,16:54:56", "speed": 42, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.99, "vehicle_direction": 31, "segment_bearing": 30.1, "nearest_segment": [[26.1913841, 50.1877874], [26.1918386, 50.1880805]], "closest_point": [26.191726533493583, 50.18800823004833]}, {"latitude": 26.180948, "longitude": 50.182305, "time": "06/16/25,19:00:32", "speed": 52, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.43, "vehicle_direction": 208, "segment_bearing": 129.5, "nearest_segment": [[26.1809944, 50.1823117], [26.1809607, 50.1823573]], "closest_point": [26.180981212027184, 50.182329544853424]}, {"latitude": 26.219177, "longitude": 50.196702, "time": "06/16/25,19:04:22", "speed": 67, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.7, "vehicle_direction": 354, "segment_bearing": 22.4, "nearest_segment": [[26.219068, 50.1966444], [26.2191899, 50.1967004]], "closest_point": [26.21917985495407, 50.19669578537676]}, {"latitude": 26.24397, "longitude": 50.197237, "time": "06/16/25,19:24:38", "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": 3.42, "vehicle_direction": 19, "segment_bearing": 14.6, "nearest_segment": [[26.2428935, 50.1969601], [26.2444024, 50.1973978]], "closest_point": [26.243960536272386, 50.19726962467123]}, {"latitude": 26.25989, "longitude": 50.190947, "time": "06/16/25,19:25:56", "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": 5.5, "vehicle_direction": 324, "segment_bearing": 335.5, "nearest_segment": [[26.2597155, 50.1910962], [26.2606681, 50.1906113]], "closest_point": [26.25991440802247, 50.190994950262336]}, {"latitude": 26.268298, "longitude": 50.187518, "time": "06/16/25,19:27:27", "speed": 65, "speed_limit": 60, "street_name": null, "street_name_ar": "20th Street", "distance_to_segment": 7.32, "vehicle_direction": 339, "segment_bearing": 70.8, "nearest_segment": [[26.2683114, 50.1873379], [26.2685176, 50.1879996]], "closest_point": [26.268361369373014, 50.18749825273581]}, {"latitude": 26.211972, "longitude": 50.1969, "time": "06/16/25,19:40:12", "speed": 66, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.98, "vehicle_direction": 173, "segment_bearing": 180.0, "nearest_segment": [[26.2124636, 50.1968903], [26.2115147, 50.1968901]], "closest_point": [26.21197200206631, 50.19689019638572]}, {"latitude": 26.185478, "longitude": 50.18486, "time": "06/16/25,19:43:42", "speed": 36, "speed_limit": 30, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.21, "vehicle_direction": 210, "segment_bearing": 278.4, "nearest_segment": [[26.1854742, 50.1851091], [26.1855213, 50.1847529]], "closest_point": [26.18550663755088, 50.184863786717145]}, {"latitude": 26.18098, "longitude": 50.182397, "time": "06/17/25,03:28:59", "speed": 94, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.09, "vehicle_direction": 210, "segment_bearing": 104.9, "nearest_segment": [[26.1809607, 50.1823573], [26.1809511, 50.1823976]], "closest_point": [26.18095278713882, 50.18239051753183]}, {"latitude": 26.223423, "longitude": 50.195868, "time": "06/17/25,03:32:35", "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": 7.11, "vehicle_direction": 353, "segment_bearing": 354.3, "nearest_segment": [[26.221408, 50.1961629], [26.2244909, 50.1958212]], "closest_point": [26.223430835588093, 50.1959386945699]}, {"latitude": 26.250665, "longitude": 50.196978, "time": "06/17/25,03:34:20", "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": 0.08, "vehicle_direction": 1, "segment_bearing": 344.6, "nearest_segment": [[26.249619, 50.1973004], [26.25072, 50.1969619]], "closest_point": [26.250665227421397, 50.196978739707404]}, {"latitude": 26.254962, "longitude": 50.194305, "time": "06/17/25,03:34:39", "speed": 111, "speed_limit": 110, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.24, "vehicle_direction": 341, "segment_bearing": 320.0, "nearest_segment": [[26.2543783, 50.1948539], [26.2554333, 50.1938674]], "closest_point": [26.254963546017265, 50.19430665336869]}, {"latitude": 26.267362, "longitude": 50.18751, "time": "06/17/25,03:35:30", "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": 4.64, "vehicle_direction": 338, "segment_bearing": 338.8, "nearest_segment": [[26.2635741, 50.1892005], [26.2679627, 50.1872996]], "closest_point": [26.267380159398794, 50.1875519245292]}, {"latitude": 26.29489, "longitude": 50.16963, "time": "06/17/25,03:39:35", "speed": 54, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 9.28, "vehicle_direction": 306, "segment_bearing": 321.6, "nearest_segment": [[26.2947719, 50.1696163], [26.2952981, 50.1691508]], "closest_point": [26.2948313528218, 50.169563705380945]}, {"latitude": 26.342437, "longitude": 50.179168, "time": "06/17/25,03:43:29", "speed": 94, "speed_limit": 60, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 3.57, "vehicle_direction": 358, "segment_bearing": 358.4, "nearest_segment": [[26.342014, 50.1791449], [26.3443044, 50.1790757]], "closest_point": [26.34243591694014, 50.179132152596814]}, {"latitude": 26.344337, "longitude": 50.179187, "time": "06/17/25,03:43:42", "speed": 79, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.51, "vehicle_direction": 0, "segment_bearing": 64.5, "nearest_segment": [[26.3443044, 50.1790757], [26.34461, 50.1797908]], "closest_point": [26.344349653461492, 50.179181592507575]}, {"latitude": 26.362015, "longitude": 50.17843, "time": "06/17/25,06:28:00", "speed": 72, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 6.22, "vehicle_direction": 359, "segment_bearing": 307.6, "nearest_segment": [[26.3619285, 50.1784775], [26.3619591, 50.1784331]], "closest_point": [26.3619591, 50.1784331]}, {"latitude": 26.352695, "longitude": 50.178645, "time": "06/17/25,06:28:56", "speed": 74, "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": 6.88, "vehicle_direction": 177, "segment_bearing": 178.4, "nearest_segment": [[26.3561771, 50.1784666], [26.3526239, 50.1785782]], "closest_point": [26.352692833922966, 50.178576034902115]}, {"latitude": 26.32459, "longitude": 50.179355, "time": "06/17/25,06:31:01", "speed": 108, "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": 7.54, "vehicle_direction": 178, "segment_bearing": 358.3, "nearest_segment": [[26.3239171, 50.1794536], [26.3271943, 50.179342]], "closest_point": [26.324592574365337, 50.179430597760536]}, {"latitude": 26.30478, "longitude": 50.173727, "time": "06/17/25,06:32:30", "speed": 108, "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": 4.22, "vehicle_direction": 211, "segment_bearing": 31.0, "nearest_segment": [[26.3046136, 50.1736645], [26.3077163, 50.1757469]], "closest_point": [26.304757243018532, 50.17376090707184]}, {"latitude": 26.292848, "longitude": 50.157507, "time": "06/17/25,06:33:52", "speed": 77, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.54, "vehicle_direction": 221, "segment_bearing": 183.2, "nearest_segment": [[26.2929929, 50.1575516], [26.2927938, 50.1575392]], "closest_point": [26.292845792903908, 50.157542438131635]}, {"latitude": 26.292535, "longitude": 50.159573, "time": "06/17/25,06:34:12", "speed": 54, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.6, "vehicle_direction": 56, "segment_bearing": 35.0, "nearest_segment": [[26.2922492, 50.1593304], [26.2925449, 50.1595613]], "closest_point": [26.292544425420505, 50.159560929420344]}, {"latitude": 26.294935, "longitude": 50.168807, "time": "06/17/25,06:35:00", "speed": 84, "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.78, "vehicle_direction": 96, "segment_bearing": 127.9, "nearest_segment": [[26.2952648, 50.1683471], [26.2944474, 50.1695184]], "closest_point": [26.294940955279895, 50.16881115593425]}, {"latitude": 26.248902, "longitude": 50.197333, "time": "06/17/25,06:38:44", "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": 13.57, "vehicle_direction": 156, "segment_bearing": 350.0, "nearest_segment": [[26.248313, 50.1975866], [26.2492008, 50.1974124]], "closest_point": [26.248928079371975, 50.19746591197725]}, {"latitude": 26.24038, "longitude": 50.195655, "time": "06/17/25,06:39:14", "speed": 115, "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.38, "vehicle_direction": 189, "segment_bearing": 199.3, "nearest_segment": [[26.2407109, 50.195685], [26.2392521, 50.1951147]], "closest_point": [26.24041369447945, 50.19556881114041]}, {"latitude": 26.190972, "longitude": 50.188525, "time": "06/17/25,06:43:14", "speed": 66, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.67, "vehicle_direction": 214, "segment_bearing": 121.5, "nearest_segment": [[26.1913841, 50.1877874], [26.1908701, 50.1887233]], "closest_point": [26.190977383384745, 50.1885279565763]}, {"latitude": 26.181, "longitude": 50.182327, "time": "06/17/25,07:01:27", "speed": 82, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.46, "vehicle_direction": 209, "segment_bearing": 129.5, "nearest_segment": [[26.1809944, 50.1823117], [26.1809607, 50.1823573]], "closest_point": [26.180989065105674, 50.182318918729415]}, {"latitude": 26.242163, "longitude": 50.196583, "time": "06/17/25,07:06:16", "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": 7.69, "vehicle_direction": 11, "segment_bearing": 19.9, "nearest_segment": [[26.241577, 50.1964279], [26.2428935, 50.1969601]], "closest_point": [26.242134579515835, 50.19665330358399]}, {"latitude": 26.263048, "longitude": 50.189312, "time": "06/17/25,07:07:42", "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": 9.44, "vehicle_direction": 331, "segment_bearing": 340.1, "nearest_segment": [[26.261549, 50.1900161], [26.2635741, 50.1892005]], "closest_point": [26.26308278682135, 50.189398374193125]}, {"latitude": 26.287595, "longitude": 50.179247, "time": "06/17/25,07:09:36", "speed": 70, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.3, "vehicle_direction": 338, "segment_bearing": 358.5, "nearest_segment": [[26.2874, 50.1792759], [26.2876552, 50.1792683]], "closest_point": [26.287595687106933, 50.17927007232753]}, {"latitude": 26.285593, "longitude": 50.190567, "time": "06/17/25,07:10:42", "speed": 78, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 7.84, "vehicle_direction": 108, "segment_bearing": 107.2, "nearest_segment": [[26.285802, 50.1900779], [26.2855937, 50.1908306]], "closest_point": [26.285661408906797, 50.190585931281106]}, {"latitude": 26.284083, "longitude": 50.197635, "time": "06/17/25,07:18:09", "speed": 65, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.9, "vehicle_direction": 288, "segment_bearing": 287.5, "nearest_segment": [[26.2839493, 50.1979784], [26.2841447, 50.1972868]], "closest_point": [26.28404903331241, 50.19762540328115]}, {"latitude": 26.289135, "longitude": 50.179728, "time": "06/17/25,07:19:45", "speed": 66, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.17, "vehicle_direction": 288, "segment_bearing": 264.3, "nearest_segment": [[26.2891291, 50.1798805], [26.2891134, 50.1797057]], "closest_point": [26.289115559743752, 50.179729746064204]}, {"latitude": 26.218447, "longitude": 50.206795, "time": "06/17/25,07:26:13", "speed": 77, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.31, "vehicle_direction": 83, "segment_bearing": 91.6, "nearest_segment": [[26.218454, 50.2066242], [26.2184355, 50.2073813]], "closest_point": [26.218449824756384, 50.2067950690239]}, {"latitude": 26.401038, "longitude": 49.876102, "time": "06/17/25,09:12:29", "speed": 113, "speed_limit": 90, "street_name": "King Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f", "distance_to_segment": 12.47, "vehicle_direction": 281, "segment_bearing": 280.1, "nearest_segment": [[26.4007857, 49.8769664], [26.4029607, 49.8633828]], "closest_point": [26.400926954362433, 49.87608421942183]}, {"latitude": 26.439738, "longitude": 49.808028, "time": "06/17/25,09:38:23", "speed": 115, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.18, "vehicle_direction": 344, "segment_bearing": 348.2, "nearest_segment": [[26.4391959, 49.8081524], [26.4402755, 49.8079009]], "closest_point": [26.439737583303877, 49.80802621127184]}, {"latitude": 26.44426, "longitude": 49.806635, "time": "06/17/25,09:38:42", "speed": 116, "speed_limit": 45, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.02, "vehicle_direction": 344, "segment_bearing": 342.0, "nearest_segment": [[26.4436531, 49.8068659], [26.4447897, 49.8064535]], "closest_point": [26.444263428937997, 49.80664445036598]}, {"latitude": 26.448748, "longitude": 49.805287, "time": "06/17/25,09:38:56", "speed": 115, "speed_limit": 90, "street_name": "King Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f", "distance_to_segment": 2.94, "vehicle_direction": 344, "segment_bearing": 345.6, "nearest_segment": [[26.4447897, 49.8064535], [26.4492608, 49.8051703]], "closest_point": [26.448756080148858, 49.805315153953835]}, {"latitude": 26.462198, "longitude": 49.802023, "time": "06/17/25,09:39:52", "speed": 96, "speed_limit": 60, "street_name": null, "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0637\u0627\u0631", "distance_to_segment": 5.97, "vehicle_direction": 344, "segment_bearing": 352.7, "nearest_segment": [[26.4618703, 49.8020095], [26.4623204, 49.8019451]], "closest_point": [26.462189533186226, 49.80196382433416]}, {"latitude": 26.471323, "longitude": 49.796882, "time": "06/17/25,09:41:35", "speed": 62, "speed_limit": 20, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.91, "vehicle_direction": 179, "segment_bearing": 166.5, "nearest_segment": [[26.4717559, 49.7967754], [26.4711997, 49.7969244]], "closest_point": [26.471325341860094, 49.796890741896526]}, {"latitude": 26.446115, "longitude": 49.80572, "time": "06/17/25,09:46:21", "speed": 91, "speed_limit": 90, "street_name": "King Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f", "distance_to_segment": 0.7, "vehicle_direction": 163, "segment_bearing": 164.0, "nearest_segment": [[26.4491808, 49.8047327], [26.4438778, 49.8064278]], "closest_point": [26.44611287727741, 49.8057133592131]}, {"latitude": 26.377565, "longitude": 50.006978, "time": "06/17/25,09:59:49", "speed": 98, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.81, "vehicle_direction": 66, "segment_bearing": 57.7, "nearest_segment": [[26.3768967, 50.0058698], [26.3777766, 50.0074226]], "closest_point": [26.377534469093934, 50.00699530045353]}, {"latitude": 26.379453, "longitude": 50.011797, "time": "06/17/25,10:00:11", "speed": 93, "speed_limit": 90, "street_name": "King Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f", "distance_to_segment": 4.7, "vehicle_direction": 66, "segment_bearing": 66.3, "nearest_segment": [[26.3777766, 50.0074226], [26.3797523, 50.0124402]], "closest_point": [26.379492857795817, 50.01178130583403]}, {"latitude": 26.185202, "longitude": 50.184722, "time": "06/17/25,10:19:59", "speed": 73, "speed_limit": 30, "street_name": null, "street_name_ar": null, "distance_to_segment": 7.99, "vehicle_direction": 212, "segment_bearing": 133.6, "nearest_segment": [[26.1852421, 50.1845598], [26.1850235, 50.1848152]], "closest_point": [26.18514501640301, 50.18467322703876]}, {"latitude": 26.18903, "longitude": 50.180217, "time": "06/17/25,10:22:29", "speed": 44, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 7.59, "vehicle_direction": 307, "segment_bearing": 309.2, "nearest_segment": [[26.188826, 50.1803756], [26.1892881, 50.1797453]], "closest_point": [26.188972943993893, 50.18017516979149]}, {"latitude": 26.193585, "longitude": 50.176403, "time": "06/17/25,10:27:49", "speed": 44, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.15, "vehicle_direction": 325, "segment_bearing": 61.0, "nearest_segment": [[26.1935873, 50.1763222], [26.1937409, 50.1766309]], "closest_point": [26.193619069011156, 50.17638604826656]}, {"latitude": 26.197963, "longitude": 50.186728, "time": "06/17/25,10:33:56", "speed": 47, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.9, "vehicle_direction": 130, "segment_bearing": 129.9, "nearest_segment": [[26.1981147, 50.1865711], [26.1976846, 50.1871435]], "closest_point": [26.19798460663913, 50.18674423517731]}, {"latitude": 26.181127, "longitude": 50.182328, "time": "06/17/25,10:36:29", "speed": 87, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.77, "vehicle_direction": 210, "segment_bearing": 219.4, "nearest_segment": [[26.1813499, 50.1825549], [26.1810931, 50.1823198]], "closest_point": [26.181115626655117, 50.18234042311767]}, {"latitude": 26.200733, "longitude": 50.195773, "time": "06/17/25,10:38:37", "speed": 83, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.16, "vehicle_direction": 31, "segment_bearing": 92.3, "nearest_segment": [[26.200727, 50.1956499], [26.2006851, 50.1968162]], "closest_point": [26.20072259099587, 50.19577262605053]}, {"latitude": 26.205037, "longitude": 50.197487, "time": "06/17/25,10:39:08", "speed": 63, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.34, "vehicle_direction": 27, "segment_bearing": 6.9, "nearest_segment": [[26.2049937, 50.1974846], [26.2051133, 50.1975007]], "closest_point": [26.20503654664003, 50.197490367816926]}, {"latitude": 26.211422, "longitude": 50.198363, "time": "06/17/25,10:40:14", "speed": 61, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.78, "vehicle_direction": 358, "segment_bearing": 2.1, "nearest_segment": [[26.2112188, 50.1983169], [26.2118815, 50.1983437]], "closest_point": [26.211423529489068, 50.19832517938782]}, {"latitude": 26.243175, "longitude": 50.19702, "time": "06/17/25,10:58:50", "speed": 121, "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.1, "vehicle_direction": 15, "segment_bearing": 14.6, "nearest_segment": [[26.2428935, 50.1969601], [26.2444024, 50.1973978]], "closest_point": [26.243169178546495, 50.19704006851998]}, {"latitude": 26.251568, "longitude": 50.196462, "time": "06/17/25,10:59:20", "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": 10.72, "vehicle_direction": 357, "segment_bearing": 335.3, "nearest_segment": [[26.2513111, 50.1967119], [26.2522741, 50.1962171]], "closest_point": [26.251615926611475, 50.196555276731715]}, {"latitude": 26.287597, "longitude": 50.17922, "time": "06/17/25,11:01:57", "speed": 68, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.99, "vehicle_direction": 339, "segment_bearing": 358.5, "nearest_segment": [[26.2874, 50.1792759], [26.2876552, 50.1792683]], "closest_point": [26.28759848869749, 50.17926998889459]}, {"latitude": 26.285772, "longitude": 50.190228, "time": "06/17/25,11:02:58", "speed": 74, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.23, "vehicle_direction": 108, "segment_bearing": 107.2, "nearest_segment": [[26.285802, 50.1900779], [26.2855937, 50.1908306]], "closest_point": [26.28576128254368, 50.19022503408243]}, {"latitude": 26.283578, "longitude": 50.197477, "time": "06/17/25,11:03:43", "speed": 62, "speed_limit": 60, "street_name": "Riyadh Street", "street_name_ar": "\u0634\u0627\u0631\u0639 \u0627\u0644\u0631\u064a\u0627\u0636", "distance_to_segment": 2.88, "vehicle_direction": 111, "segment_bearing": 137.2, "nearest_segment": [[26.2836496, 50.197364], [26.2835345, 50.1974828]], "closest_point": [26.283558460606585, 50.19745806915672]}, {"latitude": 26.288322, "longitude": 50.182857, "time": "06/17/25,11:09:27", "speed": 75, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.9, "vehicle_direction": 287, "segment_bearing": 289.5, "nearest_segment": [[26.2878941, 50.1842345], [26.2885052, 50.1823058]], "closest_point": [26.288329774268952, 50.18285946324247]}, {"latitude": 26.289155, "longitude": 50.179672, "time": "06/17/25,11:09:43", "speed": 76, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.24, "vehicle_direction": 288, "segment_bearing": 257.8, "nearest_segment": [[26.2891134, 50.1797057], [26.2890927, 50.1795991]], "closest_point": [26.28910860542145, 50.17968100907857]}, {"latitude": 26.234987, "longitude": 50.19443, "time": "06/17/25,11:57:05", "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": 12.49, "vehicle_direction": 198, "segment_bearing": 182.7, "nearest_segment": [[26.2361726, 50.194368], [26.2348869, 50.1942993]], "closest_point": [26.234993678940683, 50.194305005618126]}, {"latitude": 26.19114, "longitude": 50.188632, "time": "06/17/25,12:00:39", "speed": 70, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 20.93, "vehicle_direction": 211, "segment_bearing": 121.5, "nearest_segment": [[26.1913841, 50.1877874], [26.1908701, 50.1887233]], "closest_point": [26.190971166675425, 50.18853927606707]}, {"latitude": 26.181042, "longitude": 50.182362, "time": "06/17/25,13:15:31", "speed": 77, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.65, "vehicle_direction": 209, "segment_bearing": 196.3, "nearest_segment": [[26.1810931, 50.1823198], [26.1810353, 50.182301]], "closest_point": [26.181059301610055, 50.18230880675206]}, {"latitude": 26.258355, "longitude": 50.191928, "time": "06/17/25,13:22:08", "speed": 78, "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": 0.56, "vehicle_direction": 324, "segment_bearing": 324.4, "nearest_segment": [[26.2578041, 50.1923615], [26.2584696, 50.1918295]], "closest_point": [26.258351640125746, 50.191923796999404]}, {"latitude": 26.262543, "longitude": 50.189833, "time": "06/17/25,13:22:48", "speed": 59, "speed_limit": 40, "street_name": null, "street_name_ar": "26th Street", "distance_to_segment": 4.87, "vehicle_direction": 325, "segment_bearing": 71.0, "nearest_segment": [[26.2625682, 50.1897649], [26.2627837, 50.1904622]], "closest_point": [26.262585214302607, 50.18981995370398]}, {"latitude": 26.243187, "longitude": 50.196792, "time": "06/17/25,13:49:13", "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": 13.06, "vehicle_direction": 178, "segment_bearing": 199.4, "nearest_segment": [[26.2435093, 50.1967798], [26.242216, 50.1962734]], "closest_point": [26.243233987007866, 50.19667199941296]}, {"latitude": 26.190967, "longitude": 50.188593, "time": "06/17/25,13:53:29", "speed": 69, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.41, "vehicle_direction": 212, "segment_bearing": 121.5, "nearest_segment": [[26.1913841, 50.1877874], [26.1908701, 50.1887233]], "closest_point": [26.190947533009147, 50.18858230865124]}, {"latitude": 26.22232, "longitude": 50.196007, "time": "06/17/25,20:08:05", "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": 5.44, "vehicle_direction": 353, "segment_bearing": 354.3, "nearest_segment": [[26.221408, 50.1961629], [26.2244909, 50.1958212]], "closest_point": [26.222326001970984, 50.196061151233096]}, {"latitude": 26.249578, "longitude": 50.197283, "time": "06/17/25,20:09:47", "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": 2.76, "vehicle_direction": 7, "segment_bearing": 346.5, "nearest_segment": [[26.2492008, 50.1974124], [26.249619, 50.1973004]], "closest_point": [26.24958509200767, 50.19730948105008]}, {"latitude": 26.25732, "longitude": 50.192645, "time": "06/17/25,20:10:31", "speed": 82, "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": 9.1, "vehicle_direction": 327, "segment_bearing": 324.3, "nearest_segment": [[26.25704, 50.1929809], [26.2574231, 50.1926741]], "closest_point": [26.25737448372858, 50.19271303362587]}, {"latitude": 26.26839, "longitude": 50.18755, "time": "06/17/25,20:12:05", "speed": 68, "speed_limit": 60, "street_name": null, "street_name_ar": "20th Street", "distance_to_segment": 1.32, "vehicle_direction": 338, "segment_bearing": 70.8, "nearest_segment": [[26.2683114, 50.1873379], [26.2685176, 50.1879996]], "closest_point": [26.268378601794346, 50.18755355192687]}, {"latitude": 26.185468, "longitude": 50.184843, "time": "06/17/25,20:29:39", "speed": 54, "speed_limit": 30, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.55, "vehicle_direction": 213, "segment_bearing": 278.4, "nearest_segment": [[26.1854742, 50.1851091], [26.1855213, 50.1847529]], "closest_point": [26.185508674976578, 50.18484837841493]}, {"latitude": 26.36197, "longitude": 50.178468, "time": "06/18/25,05:48:27", "speed": 84, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.1, "vehicle_direction": 357, "segment_bearing": 307.6, "nearest_segment": [[26.3619285, 50.1784775], [26.3619591, 50.1784331]], "closest_point": [26.36194630295902, 50.17845166825554]}, {"latitude": 26.352383, "longitude": 50.178618, "time": "06/18/25,05:49:20", "speed": 84, "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": 3.26, "vehicle_direction": 178, "segment_bearing": 178.5, "nearest_segment": [[26.3526239, 50.1785782], [26.349042, 50.1786838]], "closest_point": [26.35238203685226, 50.17858533050291]}, {"latitude": 26.278002, "longitude": 50.182885, "time": "06/18/25,05:56:33", "speed": 115, "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.35, "vehicle_direction": 158, "segment_bearing": 158.9, "nearest_segment": [[26.2820518, 50.1810501], [26.2751079, 50.1840428]], "closest_point": [26.27796946703403, 50.18280951443098]}, {"latitude": 26.24917, "longitude": 50.197208, "time": "06/18/25,05:58:28", "speed": 102, "speed_limit": 90, "street_name": null, "street_name_ar": "Southern Street", "distance_to_segment": 7.26, "vehicle_direction": 148, "segment_bearing": 58.6, "nearest_segment": [[26.2491215, 50.1969801], [26.2492719, 50.1972551]], "closest_point": [26.249228609823632, 50.197175945754644]}, {"latitude": 26.22222, "longitude": 50.19573, "time": "06/18/25,06:00:08", "speed": 115, "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": 1.77, "vehicle_direction": 174, "segment_bearing": 174.0, "nearest_segment": [[26.2239462, 50.1955447], [26.2190474, 50.1961212]], "closest_point": [26.222222071052606, 50.195747598738095]}, {"latitude": 26.217515, "longitude": 50.196272, "time": "06/18/25,06:00:27", "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": 0.12, "vehicle_direction": 174, "segment_bearing": 174.1, "nearest_segment": [[26.2182376, 50.1961901], [26.2175131, 50.1962734]], "closest_point": [26.217515134076816, 50.196273166130304]}, {"latitude": 26.208438, "longitude": 50.197273, "time": "06/18/25,06:01:07", "speed": 101, "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": 1.62, "vehicle_direction": 174, "segment_bearing": 177.5, "nearest_segment": [[26.2089591, 50.1972637], [26.2083192, 50.1972951]], "closest_point": [26.208438796476575, 50.19728923138089]}, {"latitude": 26.191023, "longitude": 50.188378, "time": "06/18/25,06:02:44", "speed": 66, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.5, "vehicle_direction": 213, "segment_bearing": 121.5, "nearest_segment": [[26.1913841, 50.1877874], [26.1908701, 50.1887233]], "closest_point": [26.191051226357306, 50.18839350202762]}, {"latitude": 26.18276, "longitude": 50.183318, "time": "06/18/25,06:26:11", "speed": 77, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.0, "vehicle_direction": 210, "segment_bearing": 218.7, "nearest_segment": [[26.183082, 50.1835795], [26.1826004, 50.1831503]], "closest_point": [26.18277264854889, 50.18330380722007]}, {"latitude": 26.181013, "longitude": 50.182327, "time": "06/18/25,06:26:28", "speed": 80, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 1.96, "vehicle_direction": 209, "segment_bearing": 166.8, "nearest_segment": [[26.1810353, 50.182301], [26.1809944, 50.1823117]], "closest_point": [26.18100806224305, 50.182308125770156]}, {"latitude": 26.287612, "longitude": 50.17926, "time": "06/18/25,06:36:28", "speed": 54, "speed_limit": 50, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.96, "vehicle_direction": 337, "segment_bearing": 358.5, "nearest_segment": [[26.2874, 50.1792759], [26.2876552, 50.1792683]], "closest_point": [26.287612285239014, 50.179269578025796]}, {"latitude": 26.284008, "longitude": 50.197683, "time": "06/18/25,06:53:45", "speed": 61, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.63, "vehicle_direction": 288, "segment_bearing": 287.5, "nearest_segment": [[26.2839493, 50.1979784], [26.2841447, 50.1972868]], "closest_point": [26.284030929940453, 50.197689478470735]}, {"latitude": 26.286817, "longitude": 50.188015, "time": "06/18/25,06:54:41", "speed": 68, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.62, "vehicle_direction": 288, "segment_bearing": 287.2, "nearest_segment": [[26.2867507, 50.1884095], [26.2868881, 50.1879157]], "closest_point": [26.286857346025183, 50.188026226293765]}, {"latitude": 26.294692, "longitude": 50.169872, "time": "06/18/25,06:56:21", "speed": 70, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 4.21, "vehicle_direction": 305, "segment_bearing": 298.2, "nearest_segment": [[26.2943865, 50.1704195], [26.2947719, 50.1696163]], "closest_point": [26.294657215899438, 50.169855309521466]}, {"latitude": 26.32331, "longitude": 50.17958, "time": "06/18/25,07:27:11", "speed": 80, "speed_limit": 40, "street_name": null, "street_name_ar": "King Saud Road", "distance_to_segment": 1.31, "vehicle_direction": 358, "segment_bearing": 358.2, "nearest_segment": [[26.3230815, 50.1796011], [26.3238633, 50.1795738]], "closest_point": [26.323310457616635, 50.17959310493357]}, {"latitude": 26.29915, "longitude": 50.166695, "time": "06/18/25,07:31:08", "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": 1.73, "vehicle_direction": 227, "segment_bearing": 235.1, "nearest_segment": [[26.3008662, 50.1694718], [26.298996, 50.1664787]], "closest_point": [26.29913644459203, 50.16670346992215]}, {"latitude": 26.290312, "longitude": 50.175797, "time": "06/18/25,07:33:03", "speed": 91, "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": 7.92, "vehicle_direction": 126, "segment_bearing": 126.3, "nearest_segment": [[26.2911676, 50.1746329], [26.2902271, 50.1760591]], "closest_point": [26.290373288211917, 50.17583741618518]}, {"latitude": 26.218227, "longitude": 50.206982, "time": "06/18/25,07:55:37", "speed": 76, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 6.78, "vehicle_direction": 80, "segment_bearing": 347.9, "nearest_segment": [[26.2181259, 50.2070756], [26.2182606, 50.2070434]], "closest_point": [26.218242700516083, 50.207047678866985]}]; | |
// Add device name to each point's data | |
pathData.forEach(function(data) { | |
data.device_name = "6379 XBDMazda (FMC150)"; | |
}); | |
// Function to create numbered div icons | |
function createNumberedIcon(number, extraClass = '') { | |
return L.divIcon({ | |
className: 'number-icon ' + extraClass, | |
html: number.toString(), | |
iconSize: [24, 24] | |
}); | |
} | |
// Function to create pulsing marker for violation point | |
function createPulsingIcon() { | |
return L.divIcon({ | |
className: 'number-icon end-icon', | |
html: 'V<div class="pulse-ring"></div>', | |
iconSize: [32, 32] | |
}); | |
} | |
// Function to create popup content | |
function createPopupContent(pointNum, data) { | |
var lat = data.latitude; | |
var lon = data.longitude; | |
var isViolation = data.speed && data.speed_limit && (data.speed > data.speed_limit); | |
var speedClass = isViolation ? 'speed-violation' : 'speed-ok'; | |
var html = '<div class="popup-content">'; | |
html += '<div class="popup-title">Point ' + pointNum + '</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 (isViolation) { | |
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 | |
var allBounds = []; | |
for (var i = 0; i < pathData.length; i++) { | |
var data = pathData[i]; | |
var iconClass = ''; | |
var icon; | |
if (i === 0) { | |
icon = createNumberedIcon('S', 'start-icon'); | |
} else if (i === latlngs.length - 1) { | |
icon = createPulsingIcon(); // Use pulsing icon for violation point | |
} else { | |
icon = createNumberedIcon(i + 1); | |
} | |
var popupContent = createPopupContent(i + 1, data); | |
// 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 Point ' + (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: #00C853;"></div><span>Start Point</span></div>'; | |
legendHtml += '<div class="legend-item"><div class="legend-marker" style="background: #4285F4;"></div><span>Path Points</span></div>'; | |
legendHtml += '<div class="legend-item"><div class="legend-marker" style="background: #FF1744;"></div><span>Violation Location</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'); | |
var violationCount = 0; | |
for (var i = 0; i < pathData.length; i++) { | |
var d = pathData[i]; | |
if (d.speed && d.speed_limit && d.speed > d.speed_limit) { | |
violationCount++; | |
} | |
} | |
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 Points:</strong> ' + latlngs.length + '</div>' + | |
'<div><strong>Violations:</strong> ' + violationCount + '</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