上一章说了如何制作一个线路图,当然上一章是手写的JSON数据,当然手写的json数据有非常多的好处,例如可以应对客户的各种BT需求,但是大多数情况下我们都是使用地铁公司现成的JSON文件,话不多说我们先看一下百度官方线路图。
创新互联是一家集网站建设,藁城企业网站建设,藁城品牌网站建设,网站定制,藁城网站建设报价,网络营销,网络优化,藁城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。就是这样的,今天我们就来完成它的大部分需求,以及地铁公司爸爸提出来的需求。
需求如下:
1.按照不同颜色显示地铁各线路,显示对应站点。
2.用户可以点击手势缩放和平移(此项目为安卓开发)。
3.用户在线路menu里点击线路,对应线路平移值屏幕中心并高亮。
4.根据后台数据,渲染问题路段。
5.点击问题路段站点,显示问题详情。
大致需求就是这些,下面看看看代码
1.定义一些常量和变量
const dataset = subwayData; //线路图数据源 let subway = new Subway(dataset); //线路图的类文件 let baseScale = 2; //基础缩放倍率 let deviceScale = 1400 / 2640; //设备与画布宽度比率 let width = 2640; //画布宽 let height = 1760; //画布高 let transX = 1320 + 260; //地图X轴平移(将画布原点X轴平移) let transY = 580; //地图X轴平移(将画布原点Y轴平移) let scaleExtent = [0.8, 4]; //缩放倍率限制 let currentScale = 2; //当前缩放值 let currentX = 0; //当前画布X轴平移量 let currentY = 0; //当前画布Y轴平移量 let selected = false; //线路是否被选中(在右上角的线路菜单被选中) let scaleStep = 0.5; //点击缩放按钮缩放步长默认0.5倍 let tooltip = d3.select('#tooltip'); //提示框 let bugArray = []; //问题路段数组 let svg = d3.select('#sw').append('svg'); //画布 let group = svg.append('g').attr('transform', `translate(${transX}, ${transY}) scale(1)`);//定义组并平移 let whole = group.append('g').attr('class', 'whole-line') //虚拟线路(用于点击右上角响应线路可以定位当视野中心,方法不唯一) let path = group.append('g').attr('class', 'path'); //定义线路 let point = group.append('g').attr('class', 'point'); //定义站点 const zoom = d3.zoom().scaleExtent(scaleExtent).on("zoom", zoomed); //定义缩放事件