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-else
statement
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: