本文介绍了使用D3。js创建物流地图的示例代码,分享给大家,具体如下:
示例图
<>强制作思路强>
-
<李>需要绘制一张中国地图,做为背景。李>
<李>需要主要城市的经纬坐标,以绘制路张起点和终点。李>
<李>接收到物流单的城市,绘制一个闪烁的标记。李>
<李>已经有过物流单的目标城市,不再绘制路线。李>
<李>每次新产生一笔物流单,都有一个标记沿路线移向目标的动画效果。李>
<李>绘制结束后的数据,需要清理掉,以减少对浏览器的资源占用。李>
<强>开始撸码强>
<强> 1。创建网页模板强>
加载D3JS,为了方便调试,直接下载d3。js文件在本地,实际使用的时候,可以换成加载路径。注意,使用的是V4版的D3,和V3版有差异。
创建一个DIV块,准备绘图。
& lt; !DOCTYPE html> & lt; html lang=癳n”比; & lt; head> & lt;元charset=皍se utf8”比; & lt;脚本type=" text/javascript " src=" https://www.yisu.com/static/d3/d3.js "祝辞& lt;/script> & lt; title>地图& lt;/title> & lt;/head> & lt; body> & lt; div类=癴xmap”比; & lt;/div> & lt;/body> & lt;脚本type=" text/javascript祝辞& lt;/script> & lt;/html>
创建SVG以下所有代码放在& lt; script> & lt;/script>中
var宽度=1000,高度=800;//定义SVG宽高 svg var=d3。选择(“身体div.fxmap”) .append (svg) .attr(“宽度”、“宽) .attr(“高度”,高度) .style(“背景”、“000 #”);//>之前创建SVG图形分组,以备调用
<李> gmp、保存背景地图和起点标记。李> <李> mline,保存起点和目标之间的连线,以及目标点。李> <李> buttion、测试用的按钮李>
gmap=svg.append (“g”)。attr (“id”、“地图”)。attr(“中风”,“白色”).attr(“笔划宽度",1); mline=svg.append (“g”)。attr (“id”、“函数”)。attr(“中风”,“# FFF”)。attr(笔划宽度,1.5).attr(“填满”,“# FFF”); 按钮=svg.append (“g”)。attr (“id”、“按钮”)。attr(“中风”,“白色”)。attr(“笔划宽度”,1).attr(“填满”,“白色”); >之前<>强创建投影函数强>
<李>经纬度不能直接用来绘图,需要转换成平面坐标.d3js提供了比较丰富的投影方法,本例中使用了geoEquirectangular()方法。李> <李>投影是将经纬度转换为平面坐标的方法李> <李>路径是将经纬度转换为连线绘制点坐标的方法(省得自己再写函数构造道路路径)李>
var=d3.geoEquirectangular投影() .center([465395])//指定投影中心,注意[]中的是经纬度 .scale(高度) .translate((宽/2,高/2)); var=d3.geoPath路径().projection(投影);<>强创建标记标记,以便多个连线终点调用强>
<李>由于会有多个物流连线的终点,所以都放在一个标志标记中调用。李> <李>这个标记是由中间的圆形+外圈构成。外圈的闪烁效果另外创建。李>
标志=svg.append (“def”) .append(“标记”) .append(“标记”) .attr (“id”、“指针”) .attr (“viewBox”、“0 0 12 12”)//可见范围 .attr (“markerWidth”、“12”)//标记宽度 .attr (“markerHeight”、“12”)//标记高度 .attr(“东方”、“汽车”)//.attr (“markerUnits”、“strokeWidth”)//随连接线宽度进行缩放 .attr (“refX”,“6”)//连接点坐标 .attr (“refY”,“6”)//绘制标记中心圆 marker.append(“圈”) .attr (“cx”,“6”) .attr (“cy”,“6”) .attr (“r”、“3”) .attr(“填满”,“白色”);//绘制标记外圆,之后在计时器()中添加闪烁效果 marker.append(“圈”) .attr (“id”、“markerC”) .attr (“cx”,“6”) .attr (“cy”,“6”) .attr (“r”,“5”) .attr(“填充不透明度”,“0”) .attr(“笔划宽度”,“1”) .attr(“中风”,“白色”);使用D3.js创建物流地图的示例代码