Skip to content

Instantly share code, notes, and snippets.

@youssef22222
Created June 23, 2025 17:39
Show Gist options
  • Save youssef22222/149868dbf443579cb3ee615accf7398a to your computer and use it in GitHub Desktop.
Save youssef22222/149868dbf443579cb3ee615accf7398a to your computer and use it in GitHub Desktop.
Speed Violation Map - 6631 LSB - 1750700386
<!DOCTYPE html>
<html>
<head>
<title>Speed Violation Path - 6631 LSB</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;
}
.legend-path-arrow {
width: 25px;
height: 4px;
background: #000000;
position: relative;
flex-shrink: 0;
}
.legend-path-arrow::after {
content: '';
position: absolute;
right: 0;
top: -3px;
width: 0;
height: 0;
border-left: 8px solid #000000;
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.374528181818178, 50.06488927272728], 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.254453, 49.966883],
[26.284917, 49.965407],
[26.354408, 50.029383],
[26.354852, 50.030408],
[26.370178, 50.055323],
[26.385227, 50.109635],
[26.4008, 50.118327],
[26.41562, 50.109488],
[26.4276, 50.110452],
[26.433803, 50.111848],
[26.437952, 50.106628]
];
var pathData = [{"latitude": 26.254453, "longitude": 49.966883, "time": "06/23/25,20:02:42", "speed": 161, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.64, "vehicle_direction": 54, "segment_bearing": 54.9, "nearest_segment": [[26.2533959, 49.9652667], [26.2570816, 49.9711229]], "closest_point": [26.25442465190788, 49.966901223279415]}, {"latitude": 26.284917, "longitude": 49.965407, "time": "06/23/25,20:11:01", "speed": 167, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 6.05, "vehicle_direction": 53, "segment_bearing": 52.8, "nearest_segment": [[26.2838406, 49.9639272], [26.2865401, 49.9678897]], "closest_point": [26.284872210245663, 49.9654414291084]}, {"latitude": 26.354408, "longitude": 50.029383, "time": "06/23/25,20:21:05", "speed": 184, "speed_limit": 120, "street_name": null, "street_name_ar": null, "distance_to_segment": 3.11, "vehicle_direction": 64, "segment_bearing": 60.1, "nearest_segment": [[26.3541076, 50.0287396], [26.3546922, 50.0298722]], "closest_point": [26.354434328243592, 50.02937259898779]}, {"latitude": 26.354852, "longitude": 50.030408, "time": "06/23/25,20:22:23", "speed": 184, "speed_limit": 140, "street_name": "Dammam Riyadh Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u062f\u0645\u0627\u0645 \u0627\u0644\u0631\u064a\u0627\u0636 \u0627\u0644\u0633\u0631\u064a\u0639", "distance_to_segment": 5.29, "vehicle_direction": 64, "segment_bearing": 66.4, "nearest_segment": [[26.3546922, 50.0298722], [26.3550238, 50.0307191]], "closest_point": [26.354899139018325, 50.03040071749253]}, {"latitude": 26.370178, "longitude": 50.055323, "time": "06/23/25,20:23:11", "speed": 199, "speed_limit": 60, "street_name": "King Abdullah Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0639\u0628\u062f\u0627\u0644\u0644\u0647", "distance_to_segment": 3.25, "vehicle_direction": 56, "segment_bearing": 55.8, "nearest_segment": [[26.3694131, 50.0540115], [26.3711377, 50.0568387]], "closest_point": [26.370203720001292, 50.055307576246676]}, {"latitude": 26.385227, "longitude": 50.109635, "time": "06/23/25,20:27:18", "speed": 196, "speed_limit": 60, "street_name": "King Abdullah Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0639\u0628\u062f\u0627\u0644\u0644\u0647", "distance_to_segment": 0.87, "vehicle_direction": 56, "segment_bearing": 56.9, "nearest_segment": [[26.3847989, 50.1088873], [26.3853502, 50.1098297]], "closest_point": [26.385234059386022, 50.10963116646173]}, {"latitude": 26.4008, "longitude": 50.118327, "time": "06/23/25,20:29:23", "speed": 152, "speed_limit": 60, "street_name": null, "street_name_ar": null, "distance_to_segment": 5.16, "vehicle_direction": 298, "segment_bearing": 300.1, "nearest_segment": [[26.4004464, 50.1189073], [26.4012689, 50.1173209]], "closest_point": [26.400764813383493, 50.11829316043384]}, {"latitude": 26.41562, "longitude": 50.109488, "time": "06/23/25,20:31:41", "speed": 173, "speed_limit": 80, "street_name": "Prince Mohammed Bin Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0623\u0645\u064a\u0631 \u0645\u062d\u0645\u062f \u0628\u0646 \u0641\u0647\u062f", "distance_to_segment": 1.22, "vehicle_direction": 13, "segment_bearing": 18.4, "nearest_segment": [[26.4156046, 50.1094943], [26.4159915, 50.1096378]], "closest_point": [26.4156206102651, 50.10950023809284]}, {"latitude": 26.4276, "longitude": 50.110452, "time": "06/23/25,20:35:38", "speed": 149, "speed_limit": 80, "street_name": "King Fahd Road", "street_name_ar": "\u0637\u0631\u064a\u0642 \u0627\u0644\u0645\u0644\u0643 \u0641\u0647\u062f", "distance_to_segment": 11.56, "vehicle_direction": 298, "segment_bearing": 299.8, "nearest_segment": [[26.4273539, 50.110702], [26.4278318, 50.1097714]], "closest_point": [26.427521106636682, 50.11037640413011]}, {"latitude": 26.433803, "longitude": 50.111848, "time": "06/23/25,20:37:56", "speed": 125, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 0.63, "vehicle_direction": 326, "segment_bearing": 319.9, "nearest_segment": [[26.4337864, 50.1118718], [26.4338616, 50.1118012]], "closest_point": [26.433806600803337, 50.11185283488468]}, {"latitude": 26.437952, "longitude": 50.106628, "time": "06/23/25,20:39:39", "speed": 107, "speed_limit": 40, "street_name": null, "street_name_ar": null, "distance_to_segment": 2.16, "vehicle_direction": 256, "segment_bearing": 268.3, "nearest_segment": [[26.4379709, 50.1066606], [26.437953, 50.1059765]], "closest_point": [26.437970238762063, 50.10663532888593]}];
var fullPathCoordinates = [[26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.254426, 49.966904], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.257082, 49.971123], [26.255706, 49.972188], [26.255706, 49.972188], [26.255706, 49.972188], [26.255706, 49.972188], [26.255706, 49.972188], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.248172, 49.971395], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.252027, 49.966332], [26.252027, 49.966332], [26.252027, 49.966332], [26.252027, 49.966332], [26.253396, 49.965267], [26.252027, 49.966332], [26.257082, 49.971123], [26.253396, 49.965267], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.251503, 49.970293], [26.253396, 49.965267], [26.257082, 49.971123], [26.255706, 49.972188], [26.255706, 49.972188], [26.255706, 49.972188], [26.257082, 49.971123], [26.253653, 49.96892], [26.253653, 49.96892], [26.255706, 49.972188], [26.255706, 49.972188], [26.253653, 49.96892], [26.253653, 49.96892], [26.252027, 49.966332], [26.252027, 49.966332], [26.253396, 49.965267], [26.253396, 49.965267], [26.252027, 49.966332], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.254453, 49.966883], [26.252027, 49.966332], [26.253396, 49.965267], [26.253396, 49.965267], [26.254426, 49.966904], [26.257082, 49.971123], [26.255706, 49.972188], [26.255706, 49.972188], [26.255706, 49.972188], [26.253653, 49.96892], [26.253653, 49.96892], [26.252027, 49.966332], [26.252027, 49.966332], [26.252027, 49.966332], [26.253396, 49.965267], [26.253396, 49.965267], [26.253396, 49.965267], [26.255052, 49.967822], [26.255052, 49.967822], [26.255052, 49.967822], [26.255052, 49.967822], [26.25502, 49.967847], [26.257082, 49.971123], [26.25502, 49.967847], [26.255706, 49.972188], [26.253653, 49.96892], [26.252027, 49.966332], [26.253396, 49.965267], [26.253396, 49.965267], [26.252027, 49.966332], [26.257082, 49.971123], [26.257082, 49.971123], [26.255706, 49.972188], [26.255706, 49.972188], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255555, 49.968698], [26.255706, 49.972188], [26.253653, 49.96892], [26.253653, 49.96892], [26.253653, 49.96892], [26.252027, 49.966332], [26.252027, 49.966332], [26.253396, 49.965267], [26.253396, 49.965267], [26.256972, 49.970948], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.256168, 49.96959], [26.255555, 49.968698], [26.252027, 49.966332], [26.257082, 49.971123], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.257053, 49.970885], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.284917, 49.965407], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354408, 50.029383], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.354852, 50.030408], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.370178, 50.055323], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.387042, 50.079918], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.385227, 50.109635], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.4008, 50.118327], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.41562, 50.109488], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.421328, 50.112818], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.4276, 50.110452], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.433803, 50.111848], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628], [26.437952, 50.106628]];
// Add device name to each point's data
pathData.forEach(function(data) {
data.device_name = "6631 LSB";
});
// Global variable to store path decorators for zoom-based updates
var pathDecorators = [];
// Function to calculate arrow spacing based on zoom level
function getArrowSpacing(zoomLevel) {
if (zoomLevel >= 16) return '50px'; // Close zoom: many arrows
if (zoomLevel >= 14) return '100px'; // Medium zoom: moderate arrows
if (zoomLevel >= 12) return '150px'; // Far zoom: fewer arrows
return '200px'; // Very far zoom: minimal arrows
}
// Function to update path arrows based on zoom level
function updatePathArrows() {
var currentZoom = map.getZoom();
var spacing = getArrowSpacing(currentZoom);
// Remove existing decorators
pathDecorators.forEach(function(decorator) {
map.removeLayer(decorator);
});
pathDecorators = [];
// Re-add decorators with new spacing if path exists
if (window.vehiclePath) {
var decorator = L.polylineDecorator(window.vehiclePath, {
patterns: [{
offset: '25px',
repeat: spacing,
symbol: L.Symbol.arrowHead({
pixelSize: 12,
polygon: false,
pathOptions: {
stroke: true,
color: '#000000',
weight: 2,
opacity: 0.8
}
})
}]
});
decorator.addTo(map);
pathDecorators.push(decorator);
}
}
// 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 };
}
// Draw the vehicle path with directional arrows if full_path is provided
if (fullPathCoordinates && fullPathCoordinates.length > 1) {
// Create the main path line in black
window.vehiclePath = L.polyline(fullPathCoordinates, {
color: '#000000',
weight: 4,
opacity: 0.8,
smoothFactor: 1
}).addTo(map);
// Add initial arrows
updatePathArrows();
// Update arrows when zoom changes
map.on('zoomend', updatePathArrows);
}
// 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);
}
}
// Include full path coordinates in bounds if available
if (fullPathCoordinates) {
fullPathCoordinates.forEach(function(coord) {
allBounds.push(coord);
});
}
// 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-line" style="background: #000000; height: 6px;"></div><span>Vehicle Path</span></div>';
legendHtml += '<div class="legend-item"><div class="legend-path-arrow"></div><span>Path Direction</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 pathInfo = fullPathCoordinates ? '<div><strong>Path Points:</strong> ' + fullPathCoordinates.length + '</div>' : '';
div.innerHTML = '<h4><i class="fas fa-car" style="margin-right: 8px; color: #3498db;"></i>Vehicle Path Analysis</h4>' +
'<div><strong>Vehicle:</strong> 6631 LSB</div>' +
'<div><strong>Total Violations:</strong> ' + latlngs.length + '</div>' +
pathInfo;
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