{
const regionSelector = vl.selectPoint('selected_region')
.fields('Region')
.on('mouseover')
.clear('mousehover')
.nearest('true');
const teamLocations = vl.markPoint()
.params(regionSelector)
.encode(
vl.longitude().fieldQ('Long'),
vl.latitude().fieldQ('AdjustedLat'),
vl.color().fieldN('Region'),
vl.opacity().if(regionSelector, vl.value(0.9)).value(0.1),
vl.size().fieldQ('City Population')
);
const teamLabel = vl.markText({align: 'left', dx:5, dy:5})
.encode(
vl.longitude().fieldQ('Long'),
vl.latitude().fieldQ('AdjustedLat'),
vl.text().fieldN('Team')
);
const teamLogos = vl.markImage({width:'25', height:'20'})
.transform(
vl.lookup('Team').from(vl.data(nbaColorsAndLogos).key('Team').fields(['LogoSvgUrl']))
).encode(
vl.longitude().fieldQ('Long'),
vl.latitude().fieldQ('AdjustedLat'),
vl.url().fieldN('LogoSvgUrl')
)
const usaOutline = vl.markGeoshape({fill: '#d3d3d3', stroke: '#a9a9a9'})
.data(vl.topojson(usBoundaries).feature('states'))
return vl.layer(usaOutline, teamLocations, teamLabel)
.data(nbaLocations)
.project(vl.projection('albersUsa'))
.width(700).height(700)
.render()
}