Time to Leaflet the markers go, and use circleMarkers!¶
The blue Leaflet markers are pretty ICONic to us now (pun intended). While we can change the markers to other icons, instead we will use circle markers because this allows us to have nice colorful markers without finding icons.
More about circleMarkers?
Circle markers are essentially SVG graphics that are drawn onto the map. If you add a lot of them, like over 100,000 they could start to slow down the browser. You can learn more about circleMarkers on the official documentation here: https://leafletjs.com/reference.html#circlemarker.
Adding circleMarkers¶
The format for adding circleMarkers in Leaflet looks like this:
L.circleMarker(<LatLng>, <CircleMarker options>)
The latlng is pretty familiar now, but the options for circleMarkers are a bit unexplored, except that one time I mentioned them when covering objects.
let circleOptions = {
radius: 4,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
}
Add the above circleOptions above our code in the variable declaration area in the global namespace and change the L.marker to L.circleMarker as follows:
let circleOptions = {
radius: 4,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
}
// ... other variables ...
function addMarker(data){
if(data['Have you been vaccinated?'] == "Yes"){
vaccinated.addLayer(L.circleMarker([data.lat,data.lng],circleOptions).bindPopup(`<h2>Vaccinated</h2>`))
createButtons(data.lat,data.lng,data['What zip code do you live in?'])
}
else{
nonVaccinated.addLayer(L.circleMarker([data.lat,data.lng],circleOptions).bindPopup(`<h2>Non-Vaccinated</h2>`))
createButtons(data.lat,data.lng,data['What zip code do you live in?'])
}
return data
}
Awesome! We got circleMarkers! But wait.. They are all the same..
Now this is where we need to consider design:
-
Be intentional in our design and choose colors to represent well.
-
Change the colors based on our
if-elsestatement
Let’s make red for Vaccinated and blue for No.
Since circleOptions is an object, we can change it’s property value for fillColor when we are in the if-else statement.
This should go in the if(data['Have you been vaccinated?'] == "Yes") scope:
And this should go in the else scope:
Your final colorful addMarker function should look like this:
function addMarker(data){
if(data['Have you been vaccinated?'] == "Yes"){
circleOptions.fillColor = "red"
vaccinated.addLayer(L.circleMarker([data.lat,data.lng],circleOptions).bindPopup(`<h2>Vaccinated</h2>`))
createButtons(data.lat,data.lng,data['What zip code do you live in?'])
}
else{
circleOptions.fillColor = "blue"
nonVaccinated.addLayer(L.circleMarker([data.lat,data.lng],circleOptions).bindPopup(`<h2>Non-Vaccinated</h2>`))
createButtons(data.lat,data.lng,data['What zip code do you live in?'])
}
return data
}
🏁Check point¶
Before moving on, check to see if your JavaScript looks like the following: