Sub MapsDecodePolyline(encoded As String, poly As List)
Dim index As Int
Dim lat As Int
Dim lng As Int
Dim fLat As Float
Dim fLng As Float
Dim b As Int
Dim shift As Int
Dim result As Int
Dim dlat As Int
Dim dlng As Int
index = 0 : lat = 0 : lng = 0
Do While index < encoded.Length
shift = 0 : result = 0
Do While True
b = Asc(encoded.SubString2(index, index + 1)) - 63 : index = index + 1
result = Bit.Or(result, Bit.ShiftLeft(Bit.And(b, 0x1f), shift))
shift = shift + 5
If b < 0x20 Then Exit
Loop
If Bit.And(result, 1) = 1 Then
dlat = Bit.Not(Bit.ShiftRight(result, 1))
Else
dlat = Bit.ShiftRight(result, 1)
End If
lat = lat + dlat
shift = 0 : result = 0
Do While True
b = Asc(encoded.SubString2(index, index + 1)) - 63 : index = index + 1
result = Bit.Or(result, Bit.ShiftLeft(Bit.And(b, 0x1f), shift))
shift = shift + 5
If b < 0x20 Then Exit
Loop
If Bit.And(result, 1) = 1 Then
dlng = Bit.Not(Bit.ShiftRight(result, 1))
Else
dlng = Bit.ShiftRight(result, 1)
End If
lng = lng + dlng
fLat = lat
fLng = lng
Dim mpiCurrent As MapsPointItem
mpiCurrent.Initialize
mpiCurrent.iPassed = 0
mpiCurrent.dLatitude = fLat / 100000
mpiCurrent.dLongitude = fLng / 100000
poly.add(mpiCurrent)
Loop
End Sub