def trajectory_point_to_str(data, index, with_address=True):
    coords = "%s, %s" % tuple(data[index][1:])
    if with_address:
        geocoder = Geocoder()
        address = geocoder.reverse(coords, exactly_one = True).address
    else:
        address = None
    tz = pytz.timezone('US/Pacific')
    date = num2date(data[index][0], tz=tz)
    try:
        dt = (num2date(data[index+1][0]) - date).total_seconds()
        dist = distance(data[index], data[index+1])
        v = ms_to_mph*dist/dt if dt!=0 else 0
        if dt < 60:
            dt_str = "%ds" % dt
        elif dt < 60*60:
            dt_str = "%dmin" % (dt/60,)
        else:
            dt_str = "%.1fh" % (dt/60/60,)
        metrics = "%s; %.2fm; %.fmph" % (dt_str, dist, v)
    except IndexError:
        metrics = "NO DATA"

    return "Index:%s; Date:%s; Address:%s; Coords: %s; dt,ds,v:%s" % \
        (index, date, address, coords, metrics)