{
const regionSelector = vl.selectPoint()
.fields('Region')
.on('mouseover')
.clear('mousehover')
.nearest(true)
const teamLocations = vl.markPoint()
.encode(
vl.longitude().fieldQ('Long'),
vl.latitude().fieldQ('AdjustedLat'),
vl.size().fieldQ('City Population'),
vl.color().fieldN('Region'),
);
const teamLablels = vl.markText({align: 'left', dx: 5, dy: 5})
.params(regionSelector)
.encode(
vl.longitude().fieldQ('Long'),
vl.latitude().fieldQ('AdjustedLat'),
vl.text().fieldN('Team'),
vl.color().fieldN('Region').scale({scheme: 'category10'}),
vl.opacity().if(regionSelector, vl.value(1.0)).value(0.2)
);
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 teamMap = vl.markGeoshape({fill: '#d3d3d3', stroke: '#A9A9A9'})
.data(vl.topojson(usBoundaries).feature('states'))
return vl.layer(teamMap, teamLablels, teamLogos)
.data(nbaLocations)
.project(vl.projection('albersUSA'))
.width(700)
.height(700)
.render()
}