const us_codes = {
"Alabama": {
"id": "AL",
"cc": "US",
"name": "Alabama",
"dataset": 1
},
"Alaska": {
"id": "AK",
"cc": "US",
"name": "Alaska",
"dataset": 1
},
"Arizona": {
"id": "AZ",
"cc": "US",
"name": "Arizona",
"dataset": 1
},
"Arkansas": {
"id": "AR",
"cc": "US",
"name": "Arkansas",
"dataset": 1
},
"California": {
"id": "CA",
"cc": "US",
"name": "California",
"dataset": 1
},
"Colorado": {
"id": "CO",
"cc": "US",
"name": "Colorado",
"dataset": 1
},
"Connecticut": {
"id": "CT",
"cc": "US",
"name": "Connecticut",
"dataset": 1
},
"Delaware": {
"id": "DE",
"cc": "US",
"name": "Delaware",
"dataset": 1
},
"District of Columbia": {
"id": "DC",
"cc": "US",
"name": "District of Columbia",
"dataset": 1
},
"Florida": {
"id": "FL",
"cc": "US",
"name": "Florida",
"dataset": 1
},
"Georgia": {
"id": "GA",
"cc": "US",
"name": "Georgia",
"dataset": 1
},
"Hawaii": {
"id": "HI",
"cc": "US",
"name": "Hawaii",
"dataset": 1
},
"Idaho": {
"id": "ID",
"cc": "US",
"name": "Idaho",
"dataset": 1
},
"Illinois": {
"id": "IL",
"cc": "US",
"name": "Illinois",
"dataset": 1
},
"Indiana": {
"id": "IN",
"cc": "US",
"name": "Indiana",
"dataset": 1
},
"Iowa": {
"id": "IA",
"cc": "US",
"name": "Iowa",
"dataset": 1
},
"Kansas": {
"id": "KS",
"cc": "US",
"name": "Kansas",
"dataset": 1
},
"Kentucky": {
"id": "KY",
"cc": "US",
"name": "Kentucky",
"dataset": 1
},
"Louisiana": {
"id": "LA",
"cc": "US",
"name": "Louisiana",
"dataset": 1
},
"Maine": {
"id": "ME",
"cc": "US",
"name": "Maine",
"dataset": 1
},
"Maryland": {
"id": "MD",
"cc": "US",
"name": "Maryland",
"dataset": 1
},
"Massachusetts": {
"id": "MA",
"cc": "US",
"name": "Massachusetts",
"dataset": 1
},
"Michigan": {
"id": "MI",
"cc": "US",
"name": "Michigan",
"dataset": 1
},
"Minnesota": {
"id": "MN",
"cc": "US",
"name": "Minnesota",
"dataset": 1
},
"Mississippi": {
"id": "MS",
"cc": "US",
"name": "Mississippi",
"dataset": 1
},
"Missouri": {
"id": "MO",
"cc": "US",
"name": "Missouri",
"dataset": 1
},
"Montana": {
"id": "MT",
"cc": "US",
"name": "Montana",
"dataset": 1
},
"Nebraska": {
"id": "NE",
"cc": "US",
"name": "Nebraska",
"dataset": 1
},
"Nevada": {
"id": "NV",
"cc": "US",
"name": "Nevada",
"dataset": 1
},
"New Hampshire": {
"id": "NH",
"cc": "US",
"name": "New Hampshire",
"dataset": 1
},
"New Jersey": {
"id": "NJ",
"cc": "US",
"name": "New Jersey",
"dataset": 1
},
"New Mexico": {
"id": "NM",
"cc": "US",
"name": "New Mexico",
"dataset": 1
},
"New York": {
"id": "NY",
"cc": "US",
"name": "New York",
"dataset": 1
},
"North Carolina": {
"id": "NC",
"cc": "US",
"name": "North Carolina",
"dataset": 1
},
"North Dakota": {
"id": "ND",
"cc": "US",
"name": "North Dakota",
"dataset": 1
},
"Ohio": {
"id": "OH",
"cc": "US",
"name": "Ohio",
"dataset": 1
},
"Oklahoma": {
"id": "OK",
"cc": "US",
"name": "Oklahoma",
"dataset": 1
},
"Oregon": {
"id": "OR",
"cc": "US",
"name": "Oregon",
"dataset": 1
},
"Pennsylvania": {
"id": "PA",
"cc": "US",
"name": "Pennsylvania",
"dataset": 1
},
"Rhode Island": {
"id": "RI",
"cc": "US",
"name": "Rhode Island",
"dataset": 1
},
"South Carolina": {
"id": "SC",
"cc": "US",
"name": "South Carolina",
"dataset": 1
},
"South Dakota": {
"id": "SD",
"cc": "US",
"name": "South Dakota",
"dataset": 1
},
"Tennessee": {
"id": "TN",
"cc": "US",
"name": "Tennessee",
"dataset": 1
},
"Texas": {
"id": "TX",
"cc": "US",
"name": "Texas",
"dataset": 1
},
"Utah": {
"id": "UT",
"cc": "US",
"name": "Utah",
"dataset": 1
},
"Vermont": {
"id": "VT",
"cc": "US",
"name": "Vermont",
"dataset": 1
},
"Virginia": {
"id": "VA",
"cc": "US",
"name": "Virginia",
"dataset": 1
},
"Washington": {
"id": "WA",
"cc": "US",
"name": "Washington",
"dataset": 1
},
"West Virginia": {
"id": "WV",
"cc": "US",
"name": "West Virginia",
"dataset": 1
},
"Wisconsin": {
"id": "WI",
"cc": "US",
"name": "Wisconsin",
"dataset": 1
},
"Wyoming": {
"id": "WY",
"cc": "US",
"name": "Wyoming",
"dataset": 1
},
"Puerto Rico": {
"id": "PR",
"cc": "US",
"name": "Puerto Rico",
"dataset": 1
},
"B.C.": {
"id": "BC",
"cc": "CA",
"name": "British Columbia",
"dataset": 2
},
"Alb.": {
"id": "AB",
"cc": "CA",
"name": "Alberta",
"dataset": 2
},
"Sask.": {
"id": "SK",
"cc": "CA",
"name": "Saskatchewan",
"dataset": 2
},
"Man.": {
"id": "MB",
"cc": "CA",
"name": "Manitoba",
"dataset": 2
},
"Ont.": {
"id": "ON",
"cc": "CA",
"name": "Ontario",
"dataset": 2
},
"Que.": {
"id": "QC",
"cc": "CA",
"name": "Quebec",
"dataset": 2
},
"N.B.": {
"id": "NB",
"cc": "CA",
"name": "New Brunswick",
"dataset": 2
},
"N.S.": {
"id": "NS",
"cc": "CA",
"name": "Nova Scotia",
"dataset": 2
},
"P.E.I.": {
"id": "PE",
"cc": "CA",
"name": "Prince Edward Island",
"dataset": 2
},
"N.L.": {
"id": "NL",
"cc": "CA",
"name": "Newfoundland and Labrador",
"dataset": 2
},
"Nunavut": {
"id": "NU",
"cc": "CA",
"name": "Nunavut",
"dataset": 3
},
"Yukon": {
"id": "YT",
"cc": "CA",
"name": "Yukon",
"dataset": 3
},
"NWT": {
"id": "NT",
"cc": "CA",
"name": "Northwest Territories",
"dataset": 3
},
"Nunavik": {
"id": "NV",
"cc": "CA",
"name": "Nunavik",
"dataset": 3
},
}
function num_from_dollar(str){
return parseFloat(str.replace(',','').replace('$',''));
}
function item_tooltipHTML(dataItem, cc){
var h = `
`;
return h;
}
am4core.useTheme(am4themes_animated);
am4core.options.autoSetClassName = true;
var chart;
var geo_all = {};
for (i in am4geodata_usaLow['features']){
var row = am4geodata_usaLow['features'][i];
if(row['properties']['id'] != 'US-HI'){
geo_all[row['properties']['id']] = row;
}
}
for (i in am4geodata_canadaLow['features']){
var row = am4geodata_canadaLow['features'][i];
geo_all[row['properties']['id']] = row;
}
for (i in am4geodata_ntLow['features']){
var row = am4geodata_ntLow['features'][i];
geo_all[row['properties']['id']] = row;
}
// Set up data source
var nurses_paid_us = [];
var nurses_paid_ca = [];
var nurses_paid_nt = [];
var nurses_paid_all = [];
var chart, polygonTemplateUS, polygonSeriesUS, polygonTemplateCA, polygonSeriesCA, button_cad, button_usd;
var currency;
function set_currency(cur){
currency = cur;
if(cur == 'CAD'){
button_cad.background.defaultState.properties.fill = am4core.color("orange");
button_cad.background.fill = am4core.color("orange");
button_usd.background.defaultState.properties.fill = am4core.color("#d9d9d9");
button_usd.background.fill = am4core.color("#d9d9d9");
for (i in nurses_paid_us){
nurses_paid_us[i]['tt_html'] = nurses_paid_us[i]['tt_html_cad'];
}
for (i in nurses_paid_ca){
nurses_paid_ca[i]['tt_html'] = nurses_paid_ca[i]['tt_html_cad'];
}
}else{
button_cad.background.defaultState.properties.fill = am4core.color("#d9d9d9");
button_cad.background.fill = am4core.color("#d9d9d9");
button_usd.background.defaultState.properties.fill = am4core.color("orange");
button_usd.background.fill = am4core.color("orange");
for (i in nurses_paid_us){
nurses_paid_us[i]['tt_html'] = nurses_paid_us[i]['tt_html_usa'];
}
for (i in nurses_paid_ca){
nurses_paid_ca[i]['tt_html'] = nurses_paid_ca[i]['tt_html_usa'];
}
}
}
function chart_create(){
chart = am4core.create("chartdiv", am4maps.MapChart);
chart.chartContainer.wheelable = false;
chart.chartContainer.paddingLeft = am4core.percent(-10);
chart.chartContainer.wheelable = false;
chart.seriesContainer.draggable = false;
chart.seriesContainer.resizable = false;
//chart.projection = new am4maps.projections.Orthographic();
chart.projection = new am4maps.projections.AzimuthalEqualArea();
chart.deltaLatitude = -40;
chart.deltaLongitude = 100;
// Seies US
polygonSeriesUS = chart.series.push(new am4maps.MapPolygonSeries());
// Configure series
polygonTemplateUS = polygonSeriesUS.mapPolygons.template;
polygonTemplateUS.tooltipHTML = "{tt_html}";
polygonTemplateUS.fill = am4core.color("#74B266");
polygonTemplateUS.stroke = am4core.color("#444");
polygonSeriesUS.geodata = {'type':'FeatureCollection', 'features':nurses_paid_us};
// polygonSeriesUS.exclude = ["US-HI"];
polygonSeriesUS.data = nurses_paid_us;
polygonSeriesUS.tooltip.getFillFromObject = false;
polygonSeriesUS.tooltip.background.fill = am4core.color("#e19200");
polygonSeriesUS.heatRules.push({
"property": "fill",
"target": polygonSeriesUS.mapPolygons.template,
"min": am4core.color("#ffffff"),
"max": am4core.color("#e19200")
});
// Create hover state and set alternative fill color
var hs = polygonTemplateUS.states.create("hover");
hs.properties.fill = am4core.color("yellow");
// Seies CA
polygonSeriesCA = chart.series.push(new am4maps.MapPolygonSeries());
// Configure series
polygonTemplateCA = polygonSeriesCA.mapPolygons.template;
polygonTemplateCA.tooltipHTML = "{tt_html}";
polygonTemplateCA.fill = am4core.color("#2cb8e6");
polygonTemplateCA.stroke = am4core.color("#444");
polygonSeriesCA.geodata = {'type':'FeatureCollection', 'features':nurses_paid_ca};
polygonSeriesCA.data = nurses_paid_ca;
polygonSeriesCA.tooltip.getFillFromObject = false;
polygonSeriesCA.tooltip.background.fill = am4core.color("#2cb8e6");
polygonSeriesCA.heatRules.push({
"property": "fill",
"target": polygonSeriesCA.mapPolygons.template,
"min": am4core.color("#ffffff"),
"max": am4core.color("#2cb8e6")
});
// Create hover state and set alternative fill color
var hs_ca = polygonTemplateCA.states.create("hover");
hs_ca.properties.fill = am4core.color("yellow");
// Add buttons
var buttons = new am4core.Container();
buttons.parent = chart;
buttons.layout = 'horizontal';
buttons.align = 'right';
buttons.cursorOverStyle = am4core.MouseCursorStyle.pointer;
buttons.marginRight = am4core.percent(2);
button_cad = new am4core.Button();
button_cad.parent = buttons;
button_cad.label.text = 'CAD';
button_cad.background.cornerRadiusBottomLeft = 5;
button_cad.background.cornerRadiusTopLeft = 5;
button_cad.background.cornerRadiusBottomRight = 0;
button_cad.background.cornerRadiusTopRight = 0;
button_cad.events.on("hit", function(ev) {
set_currency('CAD');
}, this);
button_usd = new am4core.Button();
button_usd.parent = buttons;
button_usd.label.text = 'USD';
button_usd.background.cornerRadiusBottomLeft = 0;
button_usd.background.cornerRadiusTopLeft = 0;
button_usd.background.cornerRadiusBottomRight = 5;
button_usd.background.cornerRadiusTopRight = 5;
button_usd.events.on("hit", function(ev) {
set_currency('USD');
}, this);
set_currency('CAD');
// Set up heat legend
var heatLegend = chart.createChild(am4maps.HeatLegend);
heatLegend.series = polygonSeriesUS;
heatLegend.align = "right";
heatLegend.valign = "bottom";
heatLegend.width = am4core.percent(20);
heatLegend.marginRight = am4core.percent(2);
heatLegend.valueAxis.logarithmic = false;
heatLegend.valueAxis.renderer.labels.template.fill = am4core.color("#444");
heatLegend.stroke = am4core.color("#444");
heatLegend.id = 'chart_hl';
heatLegend.valueAxis.numberFormatter = new am4core.NumberFormatter();
heatLegend.valueAxis.numberFormatter.numberFormat = "$###,###.##";
//label
var label = chart.createChild(am4core.Label);
label.html = `Data Sources:
`;
label.width = "250px";
label.fill = "#000";
label.align = "left";
label.valign = "bottom";
label.marginLeft = am4core.percent(2);
label.marginBottom = am4core.percent(2);
}
ds = new am4core.DataSource();
ds.url = 'https://uploads-ssl.webflow.com/62e31c14d90ff56f267a3083/63034c2fb6f3cd0494badc4c_nurse_map.csv';
ds.parser = new am4core.CSVParser({});
ds.load();
ds.events.on("parseended", function(ev) {
var csvdata = ev.target.data;
for (i in csvdata){
var row = csvdata[i];
var st_name = row['col0'];
if(st_name in us_codes){
var id = us_codes[st_name]['cc']+'-'+us_codes[st_name]['id'];
if(id in geo_all){
var nr = num_from_dollar(row['col3']);
var tnr = num_from_dollar(row['col1']);
var info_cad = [];
var info_usa = [];
info_cad.push({'name':'Nurse Rate '+row['col3']});
info_usa.push({'name':'Nurse Rate '+row['col4']});
if(tnr > 0){
info_cad.push({'name':'Travel Nurse Rate '+row['col1']});
info_cad.push({'name':'Difference for Travel Nurses '+row['col5']});
info_usa.push({'name':'Travel Nurse Rate '+row['col2']});
info_usa.push({'name':'Difference for Travel Nurses '+row['col5']});
}
var geoitem = geo_all[id];
geoitem['value'] = nr;
geoitem['name'] = geoitem['properties']['name'];
geoitem['country'] = geoitem['properties']['CNTRY'];
geoitem['textitems_cad'] = info_cad;
geoitem['textitems_usa'] = info_usa;
geoitem['tt_html_cad'] = item_tooltipHTML(geoitem, 'CAD');
geoitem['tt_html_usa'] = item_tooltipHTML(geoitem, 'USD');
nurses_paid_all.push(geoitem);
if(us_codes[st_name]['dataset']==1 || us_codes[st_name]['dataset']==3){
nurses_paid_us.push(geoitem);
}
if(us_codes[st_name]['dataset']==2){
nurses_paid_ca.push(geoitem);
}
}
}
}
chart_create();
});