展开菜单
欧洲杯分组可视化:交互式地图,展示所有球队的分组情况

欧洲杯分组可视化:交互式地图,展示所有球队的分组情况

【发布时间】:2024-07-07 04:54:36

欧洲杯分组可视化:交互式地图,展示所有球队的分组情况视频直播
交互式地图 <script> // 数据const data = {"groups": [{"name": "A 组","countries": ["土耳其", "意大利", "威尔士", "瑞士"]},{"name": "B 组","countries": ["丹麦", "芬兰", "比利时", "俄罗斯"]},{"name": "C 组","countries": ["荷兰", "乌克兰", "奥地利", "北马其顿"]},{"name": "D 组","countries": ["英格兰", "克罗地亚", "苏格兰","捷克共和国"]},{"name": "E 组","countries": ["波兰", "斯洛伐克", "西班牙", "瑞典"]},{"name": "F 组","countries": ["匈牙利", "葡萄牙", "法国", "德国"]}]};// 地图投影const projection = d3.geoMercator().center([15, 52]).scale(600);// 路径生成器const path = d3.geoPath().projection(projection);// SVG 元素const svg = d3.select("map").append("svg").attr("width", "100%").attr("height", "100%");// 加载拓扑数据d3.json("europe.json").then(function(topoData) {// 加入国家路径svg.append("g").selectAll("path").data(topojson.feature(topoData, topoData.objects.europe).features).enter().append("path").attr("class", "country").attr("d", path);// 加入分组区域svg.append("g").selectAll("path").data(data.groups).enter().append("path").attr("class", "group").attr("d", function(d) {return path(d3.geoBounds(topojson.feature(topoData, topoData.objects.europe).features.filter(function(f) {return d.countries.includes(f.properties.name);})));});// Tooltipconst tooltip = d3.select("body").append("div").attr("class", "tooltip");// Tooltip 鼠标事件svg.selectAll(".country").on("mouseover", function(d) {tooltip.html(d.properties.name).style("visibility", "visible");}).on("mousemove", function(d){tooltip.style("top", (d3.event.pageY - 10) + "px").style("left", (d3.event.pageX + 10) + "px");}).on("mouseout", function(d) {tooltip.style("visibility", "hidden");});}); </script>