decodePolyline static method
List<LatLngModel>
decodePolyline(
- String encoded
)
Implementation
static List<LatLngModel> decodePolyline(String encoded) {
// Lista para almacenar los puntos decodificados
List<LatLngModel> points = [];
int index = 0, len = encoded.length;
int lat = 0, lng = 0;
// Inicializar constantes BigInt para las operaciones bit a bit
BigInt big0 = BigInt.from(0);
BigInt big0x1f = BigInt.from(0x1f);
BigInt big0x20 = BigInt.from(0x20);
// Bucle a través de la cadena codificada
while (index < len) {
int shift = 0;
BigInt b, result;
result = big0;
// Decodificar la parte del delta de la latitud
do {
b = BigInt.from(encoded.codeUnitAt(index++) - 63);
result |= (b & big0x1f) << shift;
shift += 5;
} while (b >= big0x20);
// Ajustar el resultado para obtener el valor real
BigInt rShifted = result >> 1;
int dLat;
if (result.isOdd) {
dLat = (~rShifted).toInt();
} else {
dLat = rShifted.toInt();
}
lat += dLat;
// Reiniciar las variables para la longitud
shift = 0;
result = big0;
// Decodificar la parte del delta de la longitud
do {
b = BigInt.from(encoded.codeUnitAt(index++) - 63);
result |= (b & big0x1f) << shift;
shift += 5;
} while (b >= big0x20);
// Ajustar el resultado para obtener el valor real
rShifted = result >> 1;
int dLng;
if (result.isOdd) {
dLng = (~rShifted).toInt();
} else {
dLng = rShifted.toInt();
}
lng += dLng;
// Agregar el punto decodificado a la lista
points.add(LatLngModel((lat / 1E5).toDouble(), (lng / 1E5).toDouble()));
}
// Devolver la lista de puntos decodificados
return points;
}