Sub MapsDecodePolyline(encoded As String) 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
Dim poly As List
poly.Initialize
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 ll As LatLng
'll.Initialize(fLat/100000, fLng/100000)
ll.Initialize(lat / 100000, lng / 100000)
poly.Add(ll)
'Dim mpiCurrent As MapsPointItem
'mpiCurrent.Initialize
'mpiCurrent.iPassed = 0
'mpiCurrent.dLatitude = fLat / 100000
'mpiCurrent.dLongitude = fLng / 100000
'poly.add(mpiCurrent)
'NavigationPoints.Add(ll)
Loop
Return poly
End Sub