{
const selectedPoint = vl.selectPoint('selected_point')
.on('mouseover')
.clear('mouseout')
.bind('legend');
const sharedTransforms = [
vl.calculate("geoCentroid(null, datum.geometry)").as('centroid'),
vl.calculate("datum.centroid[0]").as('centroidX'),
vl.calculate("datum.centroid[1]").as('centroidY'),
vl.filter("datum.properties.S_HOOD != 'OOO' && length(trim(datum.properties.S_HOOD)) > 0")];
const seattleNeighborhoodsShape = vl.markGeoshape()
.transform(sharedTransforms)
.params(selectedPoint)
.encode(
vl.color().fieldN('properties.S_HOOD')
.legend({columns: 3, symbolLimit: 100, title: "Neighborhoods"}),
vl.opacity().if(selectedPoint, vl.value(1)).value(0.1)
);
const seattleNeighborhoodsText = vl.markText()
.transform(sharedTransforms.concat(vl.filter(selectedPoint.empty(false))))
.encode(
vl.longitude().fieldQ('centroidX'),
vl.latitude().fieldQ('centroidY'),
vl.text().fieldN('properties.S_HOOD'),
vl.opacity().if(selectedPoint, vl.value(1)).value(0.1)
);
return vl.layer(seattleNeighborhoodsShape, seattleNeighborhoodsText)
.data(vl.topojson(seattleNeighborhoodsTopojson).feature('City_Clerk_Neighborhoods'))
.project(vl.projection('mercator'))
.width(500).height(800).render();
}