diff --git a/addons/mymach_fleet_intelligence/static/src/js/dashboard.js b/addons/mymach_fleet_intelligence/static/src/js/dashboard.js index ce92f5f..45aa822 100644 --- a/addons/mymach_fleet_intelligence/static/src/js/dashboard.js +++ b/addons/mymach_fleet_intelligence/static/src/js/dashboard.js @@ -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 @@ '' + vehicle.license_plate + ' (' + vehicle.name + ')' + '' + '' + - vehicle.label_score + ' ' + vehicle.score + + (vehicle.label_score || 'Puan:') + ' ' + (vehicle.score || 100) + '' + '' + '