fix: polyline decoding bug with large bounds and fix ulys API toll pricing precision

This commit is contained in:
ElPoyo
2026-06-04 16:40:50 +02:00
parent 555629760d
commit 0744665fe2
4 changed files with 91 additions and 35 deletions
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:em2rp/models/route_result_model.dart';
import '../../../utils/polyline_utils.dart';
/// Affiche 1 ou 2 itinéraires sur une carte OpenStreetMap.
/// Route TOLL = bleu, Route TOLL_FREE = vert.
@@ -15,41 +16,8 @@ class RouteMapWidget extends StatelessWidget {
this.selectedRoute,
});
/// Décode une polyline Google encodée en liste de LatLng.
List<LatLng> _decode(String encoded) {
if (encoded.isEmpty) return [];
try {
final result = <LatLng>[];
int index = 0, lat = 0, lng = 0;
final len = encoded.length;
while (index < len) {
int shift = 0, result0 = 0;
int b;
do {
b = encoded.codeUnitAt(index++) - 63;
result0 |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
final dlat = (result0 & 1) != 0 ? ~(result0 >> 1) : (result0 >> 1);
lat += dlat;
shift = 0;
result0 = 0;
do {
b = encoded.codeUnitAt(index++) - 63;
result0 |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
final dlng = (result0 & 1) != 0 ? ~(result0 >> 1) : (result0 >> 1);
lng += dlng;
result.add(LatLng(lat / 1e5, lng / 1e5));
}
return result;
} catch (e) {
return [];
}
return safeDecodePolyline(encoded);
}
LatLngBounds? _computeBounds(List<List<LatLng>> allPoints) {