You are here
Home > Uncategorized > Marin Transit Service Adjustments: North San Rafael and Novato

Marin Transit Service Adjustments: North San Rafael and Novato

Now that the service adjustments are coming, I would like to bring up my ideas on how to further improve the transit operations in north San Rafael and Novato so that adequate levels of service can be provided at all times. The routes involved in this discussion include:

Golden Gate Transit Routes:

  • Route 54 (San Francisco Financial District – San Marin via Novato Blvd)
  • Route 70 (San Francisco Civic Center – Downtown Novato via US-101 bus pads, Marin City)
  • Route 101 (San Francisco Civic Center – Santa Rosa via US-101, limited stops)

Local Bus Routes:

  • Route 35 (Canal – Downtown Novato via Northgate Mall, US-101 bus pads)
  • Route 49 (San Rafael – Downtown Novato via Northgate Mall, Hamilton)
  • Route 71 (Sausalito – Downtown Novato via US-101 bus pads, limited stops)

Community Shuttle Routes:

  • Route 228 (San Rafael – Fairfax Manor via Sir Francis Drake)
  • Route 245 (San Rafael – Smith Ranch Road via Kaiser)
  • Route 251 (San Marin – Hamilton via Downtown Novato, Vintage Oaks)
  • Route 257 (San Rafael – Indian Valley Campus via Los Ranchitos, Hamilton)
  • Route 259 (San Rafael – Downtown Novato via Northgate Mall, Marinwood)
Based on the upcoming changes, there are a few, major routing and service adjustments:

  • Reviving a one-ride service between the Canal District in San Rafael and Novato
  • Shuttle line adjustments in Marinwood, Smith Ranch Road, and Marin County Employment Development Department
  • Increasing frequency on the San Rafael-Novato corridor, especially on both freeway and local services

Highway 101 Corridor

The backbone of Marin County, US-101 sees frequent transit service with three routes spanning between Novato and Sausalito. The main bus lines using US-101 for most of their service include:

  • Golden Gate Transit Route 70
  • Marin Transit Route 71
  • Golden Gate Transit Route 101

Additional bus lines that also use US-101 operate as commuter services only (like Route 54).

#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line.scrollable .scrollArrow-left,
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-170fcdcb-c025-4f31-b38b-095420bdd2a1 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Routes 70 and 71
  • Route 101
  • Commuter Services
<
>
Notes:

  • Select trips on Route 70 begin or end their trips in San Rafael.
  • For trips from Novato, the first Route 70 bus leaves at around 5am daily.
  • Route deviations on Route 70 are as follows:

    • A few early morning and late night trips operate via Lincoln Avenue in San Rafael.
    • Trips leaving Novato at and after 7pm weekdays (6:30pm weekends and holidays) operate via Sausalito.
    • Evening trips leaving San Francisco after 7pm weekdays (6:45pm weekends and holidays) alternate service between Bridgeway in Sausalito and Spencer Avenue and Monte Mar Drive bus pads at US-101.
Weekday Services:

#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table-wrapper {
padding: 20px 0;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 25%;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table.style-top tr:first-child td,
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table.style-top tr:first-child td .paragraph,
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table tr:last-child td {
border-bottom: none;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table td:last-of-type {
border-right: none;
}
#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route and Direction
First Trip
Number of Trips
Last Trip
70 to San Francisco
4:00am
24
10:58pm
71 to Marin City
6:46am
17
5:54pm
70 to Novato
4:53am
29
12:48am
71 to Novato
6:03am
14
7:36pm

function setupElement701796056120957954() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.1”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4}],”columns”:4,”rows”:5,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “701796056120957954”;
_Element.prototype.element_id = “e994b685-7ce0-4c67-8824-bf71c2b1ec2d”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.1/assets/”;
new _Element({
el: ‘#element-e994b685-7ce0-4c67-8824-bf71c2b1ec2d’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement701796056120957954();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement701796056120957954, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement701796056120957954();
}
});
}

​Saturday Services:

#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table-wrapper {
padding: 20px 0;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 25%;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table.style-top tr:first-child td,
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table.style-top tr:first-child td .paragraph,
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table tr:last-child td {
border-bottom: none;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table td:last-of-type {
border-right: none;
}
#element-5600626f-3222-496e-aa7b-f9b3d545d61f .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route and Direction
First Trip
Number of Trips
Last Trip
70 to San Francisco
4:00am
36
11:29pm
71 to Marin City
7:54am
4
1:54pm
70 to Novato
5:24am
38
1:16am
71 to Novato
11:32am
3
4:32pm

function setupElement303411597443609582() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.1”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4}],”columns”:4,”rows”:5,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “303411597443609582”;
_Element.prototype.element_id = “5600626f-3222-496e-aa7b-f9b3d545d61f”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.1/assets/”;
new _Element({
el: ‘#element-5600626f-3222-496e-aa7b-f9b3d545d61f’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement303411597443609582();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement303411597443609582, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement303411597443609582();
}
});
}

Sunday and Holiday Services:

#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table-wrapper {
padding: 20px 0;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 25%;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table.style-top tr:first-child td,
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table.style-top tr:first-child td .paragraph,
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table tr:last-child td {
border-bottom: none;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table td:last-of-type {
border-right: none;
}
#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route and Direction
First Trip
Number of Trips
Last Trip
70 to San Francisco
4:00am
36
11:28pm
71 to Marin City
7:54am
4
1:54pm
70 to Novato
5:24am
38
1:13am
71 to Novato
3:32pm
3
6:32pm

function setupElement192375622577506042() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.1”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4}],”columns”:4,”rows”:5,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[25,25,24,25]});
_Element.prototype.settings.page_element_id = “192375622577506042”;
_Element.prototype.element_id = “df5038b8-7c46-4ab6-8ffd-7ee63e1c337b”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.1/assets/”;
new _Element({
el: ‘#element-df5038b8-7c46-4ab6-8ffd-7ee63e1c337b’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement192375622577506042();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement192375622577506042, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement192375622577506042();
}
});
}

Commuter services between Novato and San Rafael are available on the following routes:

  • Route 54 (between Alameda del Prado bus pads and San Marin via S Novato Blvd, with select services operating to Marinwood, Lucas Valley, Terra Linda, and N San Pedro bus pads)
    • AM peak between 4:30am and 9:45am
    • PM peak between 2:30pm and 8:30pm
  • Route 56 (between Rowland Blvd Park-and-Ride and Novato Blvd & 7th Street via San Marin)
  • Route 58 (between Redwood & Olive and Terra Linda bus pads via Hamilton, Marinwood, and Lucas Valley)

function setupElement322417751279128487() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.2”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
var tabs = this.$(‘.tabbed-box-tab’);
var content = this.$(‘.tabbed-box-content’);
// optimization
this.scrollArrowLeft = this.$(‘.scrollArrow-left’);
this.scrollArrowRight = this.$(‘.scrollArrow-right’);
this.scrollTabsBar = this.$(‘.tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.$(‘.tabbed-box-tab-group’).scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘.tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘.’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft != 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass('active');
} else {
this.scrollArrowRight.removeClass('active');
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass('active');
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft == 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass('active');
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it's not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we're going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it's out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) == 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta != 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1},{“tabs_index”:2}],”activeTabIndexInternal_each”:[{“activeTabIndexInternal_index”:0},{“activeTabIndexInternal_index”:1}],”theme”:”standard”,”tabs”:3,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:2});
_Element.prototype.settings.page_element_id = “322417751279128487”;
_Element.prototype.element_id = “170fcdcb-c025-4f31-b38b-095420bdd2a1”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.2/assets/”;
new _Element({
el: ‘#element-170fcdcb-c025-4f31-b38b-095420bdd2a1’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement322417751279128487();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement322417751279128487, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement322417751279128487();
}
});
}

Local services that run up and down 101 include Routes 70 and 71, with the following frequencies:

  • On weekdays, the two routes operate a combined frequency of every 30 minutes. During the peaks, Route 70 runs more frequently, in which Route 71 supplements the 70 on select trips.
  • On weekends and holidays, Route 70 carries the heavy weight of US-101 corridor service, with service every 30 minutes most of the day. Route 71, on the other hand, operates as a supplement to the 70 with up to three trips per direction per day instead of every hour.

Route 101, on the other hand, operates as a limited-stop service in Marin County, with the full trip doing Santa Rosa to San Francisco. It operates hourly most of the day, with every 30 minutes on the following times:

  • Afternoon peaks: northbound only
  • Midday on weekends and holidays: both directions
From June 2016, service on the US-101 bus pads will increase significantly as two routes will be adjusted. Route 35, currently operating to the Canal District in San Rafael, will be extended to Northgate Mall and Downtown Novato. While service to the Canal will remain operating from 5am to 2am daily, the extension to Novato will operate from 6am to 9:30pm on weekdays, and from 7am to 8:30pm weekends and holidays. This extension will replace the following services:

  • Routes 45 and 45K (eliminated)
  • Route 71 (readjusted)

A comparison between the current setup (Routes 35, 45, and 45K) and the future setup (combined Route 35) can be seen below. The big green point is San Rafael Transit Center,

​Current setup:

Picture

Picture

The revised Route 35 map can be seen below:
It will run with the same service levels as Routes 35 and 45 today, operating every 30 minutes. However, there will be slight operational time differences:

Weekdays (except holidays)

#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table-wrapper {
padding: 20px 0;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table.style-top tr:first-child td,
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table.style-top tr:first-child td .paragraph,
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table tr:last-child td {
border-bottom: none;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table td:last-of-type {
border-right: none;
}
#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Direction
Canal-San Rafael TC
San Rafael TC-Novato
Northbound
5:11am-2:11am
​7:00am-8:30pm
Southbound
5:00am-2:00am
6:00am-7:00pm

function setupElement390170544371132016() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.1”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:3,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “390170544371132016”;
_Element.prototype.element_id = “92c78fb4-afd2-400b-83f5-19eb49d1a7e5”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.1/assets/”;
new _Element({
el: ‘#element-92c78fb4-afd2-400b-83f5-19eb49d1a7e5’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement390170544371132016();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement390170544371132016, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement390170544371132016();
}
});
}

​Weekends and Holidays:

#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table-wrapper {
padding: 20px 0;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table.style-top tr:first-child td,
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table.style-top tr:first-child td .paragraph,
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table tr:last-child td {
border-bottom: none;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table td:last-of-type {
border-right: none;
}
#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Direction
Canal-San Rafael TC
San Rafael TC-Novato
Northbound
5:11am-2:11am
7:00am-7:30pm
Southbound
5:00am-2:00am
7:00am-7:00pm

function setupElement447900511416311006() {
var elementRequire = require || _wAMD.require;
elementRequire([
‘jquery’,
‘underscore’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
$,
_,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.1”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:3,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “447900511416311006”;
_Element.prototype.element_id = “86c4f8f3-f7cf-47ad-a33b-740e9a8111d7”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.1/assets/”;
new _Element({
el: ‘#element-86c4f8f3-f7cf-47ad-a33b-740e9a8111d7’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement447900511416311006();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement447900511416311006, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement447900511416311006();
}
});
}


Route 71, on the other hand, will become a limited-stop (semi-express) service as it will stop less often along US-101. Rebranded as Route 71X​, it will be extended further south to Sausalito to join Route 17. However, it will be downgraded as a weekday-only service as it already has a very limited weekend service, and Golden Gate Transit will fill the void when it launches Route 30, a service between San Francisco and San Rafael Transit Center via Sausalito. Route 71 will bypass certain bus pads along the way, including (and I mention alternate bus routes):

  • Alameda del Prado (Routes 35, 70)
  • Marinwood (Routes 35, 49, 70)
  • Lucas Valley/Smith Ranch Road (Routes 35, 49, 70)
  • Terra Linda/Freitas Parkway (Route 70)
  • North San Pedro Road (Routes 70, 245)
  • Lucky Drive (Routes 17, 27, 30, 36, 70)
  • Corte Madera/Tamalpais Drive (Routes 17, 27, 30, 36, 70)


All services will still stop at San Rafael Transit Center.

Picture

Picture


Localized Services

Picture

Picture

Routes 49 and 259, operating with nearly the same alignments, will see service adjustments. Come June 2016, the 259 will be discontinued and the 49 will see service expansion.

More details here.

​Fortunately, I saw the service adjustment plan early enough that I wrote a detailed email to Robert Betts, explaining to him that cutting service along South Novato Boulevard would be a mistake because there is a sizable ridership along that corridor. Furthermore, I told him that over the years, Marin Transit has been shortchanging bus services to and from Novato, in which I had to remember the hardships of riders having to go along the corridor throughout the day, especially when schools are in session and at night.

With the elimination of Route 259, an existing route will see service adjustments while a new route will be implemented at the same time.

Route 245 will be a brand new service, operating every day as a semi-express service between San Rafael Transit Center and Contempo Marin on Smith Ranch Road. This will serve North San Pedro Road bus pads, Kaiser Hospital, Scotty’s Market, and Marin County EDD, providing quicker access for residents living in northern San Rafael and Terra Linda. It will operate between 7am and 7pm, with hourly departures from San Rafael Transit Center, and it will use the 20-seater cutaway van similar to the ones used by Routes 257 and 259.

​A map of the new service can be seen below.

Picture

Picture

On the other hand, as a result of the introduction of Route 245 and the elimination of Route 259, Route 257 will be rerouted to serve Miller Creek Road and Marinwood (also Miller Creek Middle School). With this realignment, the area between US-101 at Miller Creek and Las Gallinas & Lucas Valley Road will see a service downgrade from daily service to weekday-only service. Also, this route will no longer serve Smith Ranch Road and the Marin County EDD directly, forcing riders from Novato and Marinwood to walk once again to and from the Lucas Valley and Smith Ranch Road bus pads. And this route will serve Kaiser Hospital and Scotty’s Market directly for the first time, maintaining weekday service between southern Novato and Terra Linda.

In addition, Route 257 will see an adjustment in its operating times, in which there will be more trips all day:

  • Northbound: first trip at 7:30am (before 6:30am) and last trip at 8:30pm (before 5:30pm)
  • Southbound: first trip at 6:30am and last trip at 9:30pm (before 6:30pm)
  • In this case, the last trip from Northgate Mall to: 
    • Ignacio via Hamilton will leave at 8:50pm
    • San Rafael Transit Center will leave at 10:10pm
Route 251 will see a slight routing adjustment as it will serve two additional stops southbound before reaching Hamilton Theatre Park-and-Ride, namely:

  • N Hamilton Parkway at Marin Airporter
  • N Hamilton Parkway at Chapel Hill Road

This route will also see a reduction in service, especially at nighttime, wherein the following adjustments will be made:

  • Weekdays: eliminate three southbound trips leaving after 6:18pm from Redwood & Grant.
  • Weekends and holidays: later service to San Marin will be provided (last trip from Hamilton at 7:05pm), and last trip from Redwood & Grant will leave at 9:16pm instead of 10:16pm. All trips will end at Hamilton Theatre Park-and-Ride.
  • The interlining service on southbound Route 251 with Route 259, operating from Downtown Novato to San Rafael Transit Center via Vintage Oaks, Ignacio, Hamilton, Marinwood, Kaiser, and Northgate Mall at nighttime, will be eliminated from 12 June 2016.

No significant changes on Route 233 ​will be made. 

Just a Suggestion

Perhaps, if I were to redesign one of those routes to better serve communities in San Rafael, I would redo Route 245 and interline it with Route 228, a service that operates between San Rafael Transit Center and Fairfax Manor via Larkspur Landing, Greenbrae, College of Marin, and San Anselmo. Major timetable adjustments will need to be made in order for the two routes to be operated properly out of San Rafael Transit Center, and based on my analysis, it will require three shuttle vans to operate this interlined service.

Leave a Reply

Top