code: private List<GeoLocation> decodePolyLine(String poly) {
  		int len = poly.length();
  		int index = 0;
  		List<GeoLocation> decoded = new ArrayList<>();
  		int lat = 0;
  		int lng = 0;
  
  		while (index < len) {
  			int b;
  			int shift = 0;
  			int result = 0;
  			do {
  				b = poly.charAt(index++) - 63;
  				result |= (b & 0x1f) << shift;
  				shift += 5;
  			} while (b >= 0x20);
  			int dlat = (result & 1) != 0 ? ~(result >> 1) : (result >> 1);
  			lat += dlat;
  
  			shift = 0;
  			result = 0;
  			do {
  				b = poly.charAt(index++) - 63;
  				result |= (b & 0x1f) << shift;
  				shift += 5;
  			} while (b >= 0x20);
  			int dlng = (result & 1) != 0 ? ~(result >> 1) : (result >> 1);
  			lng += dlng;
  
  			decoded.add(new GeoLocation(lat / 1E5, lng / 1E5));
  		}
  
  		return decoded;
  	}
docs: Decode a polyline string into a list of GeoLocations. From
  https://developers.google.com/maps/documentation/directions/?hl=es#Limits
  
  @param poly polyline encoded string to decode.
  @return the list of GeoLocations represented by this polystring.