|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>California Social Vulnerability Index Map</title> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" /> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.5.3/MarkerCluster.css" /> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.5.3/MarkerCluster.Default.css" /> |
|
<style> |
|
body { margin: 0; padding: 0; } |
|
#map { height: 100vh; } |
|
#search { |
|
position: absolute; |
|
top: 10px; |
|
left: 50px; |
|
z-index: 1000; |
|
background: white; |
|
padding: 10px; |
|
border-radius: 5px; |
|
} |
|
#legend { |
|
position: absolute; |
|
bottom: 30px; |
|
right: 10px; |
|
z-index: 1000; |
|
background: white; |
|
padding: 10px; |
|
border-radius: 5px; |
|
} |
|
.legend-color { |
|
width: 20px; |
|
height: 20px; |
|
display: inline-block; |
|
margin-right: 5px; |
|
} |
|
</style> |
|
</head> |
|
<body> |
|
<div id="search"> |
|
<input type="text" id="location-input" placeholder="Enter ZIP code or City"> |
|
<button onclick="searchLocation()">Search</button> |
|
</div> |
|
<div id="map"></div> |
|
<div id="legend"> |
|
<h4>SVI Score</h4> |
|
<div><span class="legend-color" style="background-color: #FFEDA0;"></span> 0.0 - 0.2</div> |
|
<div><span class="legend-color" style="background-color: #FC4E2A;"></span> 0.2 - 0.4</div> |
|
<div><span class="legend-color" style="background-color: #E31A1C;"></span> 0.4 - 0.6</div> |
|
<div><span class="legend-color" style="background-color: #BD0026;"></span> 0.6 - 0.8</div> |
|
<div><span class="legend-color" style="background-color: #800026;"></span> 0.8 - 1.0</div> |
|
</div> |
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.5.3/leaflet.markercluster.js"></script> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/5.3.0/papaparse.min.js"></script> |
|
<script> |
|
var map = L.map('map').setView([36.7783, -119.4179], 6); |
|
var markers = L.markerClusterGroup(); |
|
|
|
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { |
|
maxZoom: 19, |
|
attribution: '© OpenStreetMap contributors' |
|
}).addTo(map); |
|
|
|
function getColor(svi) { |
|
return svi > 0.8 ? '#800026' : |
|
svi > 0.6 ? '#BD0026' : |
|
svi > 0.4 ? '#E31A1C' : |
|
svi > 0.2 ? '#FC4E2A' : |
|
'#FFEDA0'; |
|
} |
|
|
|
|
|
var mockData = `ZIP,City,State,Latitude,Longitude,SVI |
|
90210,Beverly Hills,CA,34.0901,-118.4065,0.2 |
|
90001,Los Angeles,CA,33.9731,-118.2479,0.8 |
|
94102,San Francisco,CA,37.7795,-122.4194,0.6 |
|
95814,Sacramento,CA,38.5816,-121.4944,0.5 |
|
92101,San Diego,CA,32.7157,-117.1611,0.4 |
|
93721,Fresno,CA,36.7378,-119.7871,0.7 |
|
95350,Modesto,CA,37.6391,-120.9969,0.5 |
|
93301,Bakersfield,CA,35.3733,-119.0187,0.6 |
|
95050,Santa Clara,CA,37.3541,-121.9552,0.3 |
|
92507,Riverside,CA,33.9806,-117.3755,0.5`; |
|
|
|
Papa.parse(mockData, { |
|
header: true, |
|
complete: function(results) { |
|
results.data.forEach(function(row) { |
|
if (row.Latitude && row.Longitude) { |
|
var marker = L.circleMarker([row.Latitude, row.Longitude], { |
|
radius: 8, |
|
fillColor: getColor(parseFloat(row.SVI)), |
|
color: "#000", |
|
weight: 1, |
|
opacity: 1, |
|
fillOpacity: 0.8 |
|
}); |
|
|
|
marker.bindPopup(` |
|
<strong>${row.City}, ${row.State}</strong><br> |
|
ZIP: ${row.ZIP}<br> |
|
SVI Score: ${parseFloat(row.SVI).toFixed(2)} |
|
`); |
|
|
|
markers.addLayer(marker); |
|
} |
|
}); |
|
|
|
map.addLayer(markers); |
|
} |
|
}); |
|
|
|
function searchLocation() { |
|
var location = document.getElementById('location-input').value.toUpperCase(); |
|
var found = false; |
|
|
|
markers.eachLayer(function(layer) { |
|
var popupContent = layer.getPopup().getContent(); |
|
if (popupContent.toUpperCase().includes(location)) { |
|
map.setView(layer.getLatLng(), 10); |
|
layer.openPopup(); |
|
found = true; |
|
return false; |
|
} |
|
}); |
|
|
|
if (!found) { |
|
alert("Location not found. Please try another search."); |
|
} |
|
} |
|
|
|
|
|
fetch('https://eric.clst.org/assets/wiki/uploads/Stuff/gz_2010_us_040_00_500k.json') |
|
.then(response => response.json()) |
|
.then(statesData => { |
|
L.geoJSON(statesData, { |
|
style: { |
|
color: "#000", |
|
weight: 2, |
|
fillOpacity: 0, |
|
}, |
|
filter: function(feature) { |
|
return feature.properties.NAME === "California"; |
|
} |
|
}).addTo(map); |
|
}); |
|
</script> |
|
</body> |
|
</html> |