Implement OSRM route matching and fix undefined strings

This commit is contained in:
cerenX9
2026-07-24 15:51:06 +03:00
parent 7163eedda2
commit 8327188722
2 changed files with 38 additions and 6 deletions

View File

@@ -188,6 +188,38 @@
if (greenPts.length > 0) {
var polyGreen = L.polyline(greenPts, { color: '#10b981', weight: 8, opacity: 0.95, lineCap: 'round', lineJoin: 'round' }).addTo(map);
activePolylines.push(polyGreen);
// OSRM Map Matching (Pürüzsüz Rota Çizimi)
if (greenPts.length >= 2) {
// Sadece son 80 noktayı al ki OSRM URL limiti aşılmasın
var validPts = greenPts.length > 80 ? greenPts.slice(-80) : greenPts;
var coords = validPts.map(function(p) { return p[1] + ',' + p[0]; });
var osrmUrl = 'https://router.project-osrm.org/route/v1/driving/' + coords.join(';') + '?overview=full&geometries=geojson';
fetch(osrmUrl)
.then(function(res) { return res.json(); })
.then(function(data) {
if (data && data.routes && data.routes.length > 0) {
// Ham (kırık) çizgiyi haritadan ve diziden kaldır
map.removeLayer(polyGreen);
var index = activePolylines.indexOf(polyGreen);
if (index > -1) activePolylines.splice(index, 1);
// OSRM'den gelen pürüzsüz rotayı GeoJSON olarak çiz
var snappedPoly = L.geoJSON(data.routes[0].geometry, {
style: { color: '#10b981', weight: 8, opacity: 0.95, lineCap: 'round', lineJoin: 'round' }
}).addTo(map);
activePolylines.push(snappedPoly);
// Yeni çizilen pürüzsüz rotaya göre kamerayı odakla
var group = new L.featureGroup(activePolylines);
map.fitBounds(group.getBounds(), { padding: [50, 50] });
}
})
.catch(function(err) {
console.log('OSRM Yönlendirme Hatası, ham çizgi bırakıldı:', err);
});
}
}
// 3. Kırmızı 1 km+ Sapma Çizgisi
@@ -224,8 +256,8 @@
var badgeBorder = vehicle.is_violation ? '#ef4444' : (vehicle.is_manager_approved ? '#38bdf8' : '#10b981');
var badgeText = vehicle.is_violation ? '#ef4444' : (vehicle.is_manager_approved ? '#38bdf8' : '#10b981');
var badgeTitle = vehicle.is_violation
? vehicle.badge_violation
: (vehicle.is_manager_approved ? vehicle.badge_approved : vehicle.badge_ok);
? (vehicle.badge_violation || 'KURAL İHLALİ')
: (vehicle.is_manager_approved ? (vehicle.badge_approved || 'YÖNETİCİ ONAYLI') : (vehicle.badge_ok || 'GÜVENLİ SÜRÜŞ'));
overlayEl.style.display = 'block';
overlayEl.innerHTML =
@@ -235,7 +267,7 @@
'<span style="color: #94a3b8; font-size: 12px;">' + vehicle.license_plate + ' (' + vehicle.name + ')</span>' +
'</div>' +
'<span style="background: ' + badgeBg + '; border: 1px solid ' + badgeBorder + '; color: ' + badgeText + '; font-size: 11px; font-weight: bold; padding: 4px 8px; border-radius: 12px;">' +
vehicle.label_score + ' ' + vehicle.score +
(vehicle.label_score || 'Puan:') + ' ' + (vehicle.score || 100) +
'</span>' +
'</div>' +
'<div style="background: ' + badgeBg + '; border: 1px solid ' + badgeBorder + '; border-radius: 8px; padding: 8px; margin-bottom: 12px; font-size: 11px; font-weight: bold; color: ' + badgeText + '; text-align: center;">' +
@@ -260,7 +292,7 @@
'</div>' +
'<div style="display: flex; justify-content: space-between; margin-bottom: 4px;">' +
'<span style="color: #94a3b8;">Rota Sapma Durumu:</span>' +
'<strong style="color: ' + (vehicle.is_violation ? '#ef4444' : (vehicle.is_manager_approved ? '#38bdf8' : '#10b981')) + ';">' + vehicle.deviation_label + '</strong>' +
'<strong style="color: ' + (vehicle.is_violation ? '#ef4444' : (vehicle.is_manager_approved ? '#38bdf8' : '#10b981')) + ';">' + (vehicle.deviation_label || 'Rotada İlerliyor') + '</strong>' +
'</div>' +
'<div style="display: flex; justify-content: space-between; margin-bottom: 4px;">' +
'<span style="color: #94a3b8;">Şirket Politikası:</span>' +
@@ -312,7 +344,7 @@
: (v.is_manager_approved
? 'background: rgba(56, 189, 248, 0.2); color: #38bdf8; border: 1px solid rgba(56, 189, 248, 0.4);'
: 'background: rgba(16, 185, 129, 0.2); color: #10b981; border: 1px solid rgba(16, 185, 129, 0.4);');
var statusLabel = isRev ? (v.badge_violation) : (v.is_manager_approved ? v.badge_approved : v.badge_ok);
var statusLabel = isRev ? (v.badge_violation || 'İHLAL') : (v.is_manager_approved ? (v.badge_approved || 'ONAYLI') : (v.badge_ok || 'GÜVENLİ'));
tr.innerHTML =
'<td style="padding: 10px;">' +

View File

@@ -270,7 +270,7 @@
style="display: none;"/>
<!-- Harita ve Tablo İşleme Kodları (Statik Dosyadan Yüklenir - QWeb Çakışmalarını Önler) -->
<script type="text/javascript" src="/mymach_fleet_intelligence/static/src/js/dashboard.js?v=6"></script>
<script type="text/javascript" src="/mymach_fleet_intelligence/static/src/js/dashboard.js?v=7"></script>
</body>
</html>
</template>