California’s 45th Congressional District
skip to main content
California’s 45th Congressional District
I’m at home, use my phone/computer’s location
Senators
Each state elects two senators to the United States Senate for staggered 6-year terms. Senators represent the entire state. California’s senators are:

Dianne Feinstein
Senior Senator for California
Since Nov 10, 1992 (Next Election in 2018)
Democrat
@SenFeinstein
Official Website
202-224-3841
View Legislative Profile & Get Alerts »

Kamala Harris
Junior Senator for California
Since Jan 3, 2017 (Next Election in 2022)
Democrat
@SenKamalaHarris
Official Website
202-224-3553
View Legislative Profile & Get Alerts »
Representative
The United States is divided into 435 congressional districts, each with a population of about 710,000 individuals. Each district elects a representative to the U.S. House of Representatives for a two-year term. Representatives are also called congressmen/congresswomen.

Mimi Walters
Representative for California's 45th congressional district
Since Jan 6, 2015 (Next Election in 2018)
Republican
@RepMimiWalters
Official Website
202-225-5611
View Legislative Profile & Get Alerts »
Check the map below to make sure we’ve located your address accurately.
Use this HTML code:
<iframe width="425" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"
src="https://www.govtrack.us/congress/members/embed/mapframe?state=ca&district=45&bounds="></iframe>
ga('create', 'UAu002D1190841u002D1');
ga('set', 'dimension1', the_user ? "Logged In" : "Anonymous");
ga('set', 'dimension2', the_segment);
ga('send', 'pageview');
if (the_user)
$('#nav_track_start').find('a').text("Add a Tracker");
$('#nav_track_lists').show();
$('#nav_track_positions').show();
$('#nav_login').find('a').text('Your Account').attr('title', the_user.email).attr('href', '/accounts/profile');
$('#nav_logout').show();
var win_loc_hash = window.location.hash; // may change between now and ()'s execution
$(function()
setTimeout(function() , 750)
);
function show_followus(flags)
// only show this modal once
if (flags.follow_us) return false;
flags.follow_us = true;
$('#followus_modal').modal();
// add twitter async script
!function(d,s,id)var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id))js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);(document,"script","twitter-wjs");
return true;
function show_usergroup(flags)
// only show this modal once
if (flags.hits <= 10) return false;
if (flags.usergroup) return false;
flags.usergroup = true;
$('#usergroup_modal').modal();
ga('send', 'event', "user group signup", "modal shown");
return true;
#usergroup_modal label
display: block;
$(function()
function update_next_enabled()
($('#usergroup_modal .step-two').is(":visible")
&& !/w/.test($('#usergroup_modal .step-two input').val()))
)
// Show hide corresponding next paragraph.
var first_checked_group = $('#usergroup_modal input:checked').first().attr('id');
$('#usergroup_modal .step-two p[data-for]').each(function()
$(this).toggle($(this).attr('data-for') == first_checked_group);
);
$('#usergroup_modal input').click(update_next_enabled);
$('#usergroup_modal input').keyup(update_next_enabled);
$('#usergroup_modal input').change(update_next_enabled);
$('#usergroup_modal input').click(function()
ga('send', 'event', "user group signup", $(this).attr('id').substring("usergroup_modal_".length));
);
update_next_enabled();
$('#usergroup_modal .btn-primary').click(function()
if (!$('#usergroup_modal .step-two').is(":visible"))
$('#usergroup_modal .step-two').slideDown();
$('#usergroup_modal .step-two input').focus();
update_next_enabled();
else if (!$('#usergroup_modal .step-three').is(":visible"))
// submit!
$('#usergroup_modal .step-three').slideDown();
$('#usergroup_modal .btn-default').fadeOut();
$('#usergroup_modal .btn-primary').text("Close");
var groups = ;
$('#usergroup_modal input:checked').each(function()
groups.push($(this).attr('id').substring("usergroup_modal_".length));
);
$.ajax(
method: "POST",
url: "/user-group-signup",
data:
groups: groups.join(","),
email: $('#usergroup_modal .step-two input').val()
);
ga('send', 'event', "user group signup", "submit");
else
// close
$('#usergroup_modal').modal('hide');
);
)
(function(d, s, id)
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.11';
fjs.parentNode.insertBefore(js, fjs);
(document, 'script', 'facebook-jssdk'));
// Mapbox configuration
var accessToken = 'pk.eyJ1IjoiZ292dHJhY2siLCJhIjoiY2lua2J1cmwzMHhyNnVrbHl3bmx4ZnZneiJ9.Wld_AdbKwOgmF2ZXn2SPmw';
var styleURL = 'mapbox://styles/govtrack/ciwuoqjiv00aq2qo75yducni3';
var mapId = 'govtrack.cdu002D115u002D2016';
var state = "CA";
var district = parseInt("45");
if (district < 10) district = "0" + district; else district = "" + district;
var bbox;
if (state && district)
bbox = bboxes[state + district]
else if (state)
bbox = bboxes[state];
else
bbox = [-128.8, 23.6, -65.4, 50.2]; // United States
var viewport = geoViewport.viewport(bbox, [window.innerWidth/2, window.innerHeight/2])
// hold markers until map is loaded
window._map_markers = ;
window._map_marker_count = 0;
function addMapMarker(lnglat)
_map_markers.push(lnglat);
// Checks for support of Mapbox GL. Works with most modern browsers.
if (mapboxgl.supported( failIfMajorPerformanceCaveat: true ))
// Initialize the map
mapboxgl.accessToken = accessToken;
var map = new mapboxgl.Map(
container: 'map',
style: styleURL,
center: viewport.center,
zoom: viewport.zoom
);
// Once map is fully loaded...
map.on('load', function()
// set controls
map.addControl(new mapboxgl.NavigationControl(), 'top-left');
map.touchZoomRotate.disableRotation();
// Fetch the built-in filters that determine the color assignments
// for layers, which we have to preserve when we add additional
// filters for state & district.
var layer_base_names = ["districts-labels-", "districts-borders-", "districts-fill-"];
var layer_base_filters = ;
for (var i = 1; i <= 5; i++)
for (var j = 0; j < 3; j++)
var layer = layer_base_names[j] + i;
layer_base_filters[layer] = map.getFilter(layer);
// Create a filter to show only the selected state and district. For
// layers that have a color filter already applied, we have to put it
// back.
var filter = ['all'];
if (state) filter.push(['==', 'state', state]);
if (district) filter.push(['==', 'number', district]);
for (var i = 1; i <= 5; i++)
for (var j = 0; j 0)
callback(resp.features[0].center);
return;
alert("Could not find that address.");
);
function latlng_to_district(lngLat, callback)
// Note that, from the Mapbox API docs:
// "Use of this endpoint is rate limited to 600 requests per minute."
$.ajax(
url: 'https://api.mapbox.com/v4/' + mapId + '/tilequery/' + lngLat.lng + ',' + lngLat.lat + '.json?radius=0&access_token=' + accessToken,
method: 'GET',
success: function(resp)
if (resp.type == "FeatureCollection" && resp.features.length > 0)
callback(resp.features[0].properties);
return;
callback(null); // failed
);
map.on("moveend", update_embed_code_bounds);
function update_embed_code_bounds()
var b = map.getBounds();
$("#embedbounds").text(Math.round(b.getWest()*1000)/1000 + "," + Math.round(b.getNorth()*1000)/1000 + "," + Math.round(b.getEast()*1000)/1000 + "," + Math.round(b.getSouth()*1000)/1000);
update_embed_code_bounds(); // initialize
if ($(window).width() > 768)
var input = $('#user-address');
var w = $('#user-address').parents("form").innerWidth();
$('#user-address').parents("form").find("button").each(function()
w -= $(this).outerWidth();
)
input.width(w-50);
function go_to_point(pt, q)
// Query Mapbox API to get what district is at this location.
latlng_to_district(
lat: pt[1],
lng: pt[0], function(district)
if (!district)
alert("That location does not seem to be in a United States Congressional District.");
return;
if (district.number != "00")
// URLs don't use zero-padding
var path = "/congress/members/" + district.state + "/" + parseInt(district.number);
var fragment = "#q=" + encodeURIComponent(q) + "&marker_lng=" + pt[0] + "&marker_lat=" + pt[1];
if (path == window.location.pathname)
// The page won't reload. Just add a marker & alert.
addMapMarker(pt);
alert("That address is in the same congressional district.");
window.location = path + fragment;
else
// There is no district page for at-large districts. Redirect to the state page.
window.location = "/congress/members/" + district.state;
);
function do_address(addr)
if (!addr)
addr = $("#user-address").val();
if (addr == "")
window.location = "/congress/members/map";
return;
if (addr == "my location")
do_by_current_location();
return;
address_to_latlng(addr, function (pt) go_to_point(pt, addr); );
function do_by_current_location()
if ("geolocation" in navigator)
navigator.geolocation.getCurrentPosition(function(position)
go_to_point([position.coords.longitude, position.coords.latitude], "");
);
// utility function
function parse_qs(qs)
// Parse something that looks like a query string. Based on
// http://stackoverflow.com/a/2880929/125992.
var match,
pl = /+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) return decodeURIComponent(s.replace(pl, " ")); ,
ret = ;
while (match = search.exec(qs))
ret[decode(match[1])] = decode(match[2]);
return ret;
var q = parse_qs(window.location.hash.substring(1));
if (q.address)
do_address(q.address);
else if (q.my_location)
do_by_current_location();
if (q.q)
$('#user-address').val(q.q);
if (q.marker_lat)
addMapMarker([parseFloat(q.marker_lng), parseFloat(q.marker_lat)]);
var _qevents = _qevents || ;
(function()
var elem = document.createElement('script');
elem.src = (document.location.protocol == "https:" ? "https://secure" : "http://edge") + ".quantserve.com/quant.js";
elem.async = true;
elem.type = "text/javascript";
var scpt = document.getElementsByTagName('script')[0];
scpt.parentNode.insertBefore(elem, scpt);
)();
_qevents.push(
qacct:"p-NscxJMTcyb6nu"
);


Clash Royale CLAN TAG