BIGEMPA Js API示例中心
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf8"> <script src="http://www.bigemap.com/Public/js/d3.min.js"></script> <title>地图</title> </head> <style> </style> <body> <div class="fxmap"> </div> </body> <script type="text/javascript"> var width = 1000, height = 800; // 定义SVG宽高 var color = d3.scaleOrdinal(d3.schemeCategory10) //添加画布 var svg = d3.select("body div.fxmap") .append("svg") .attr("width", width) .attr("height", height) .style("background", "#000") .style('opacity', '.7'); gmap = svg.append("g").attr("id", "map").attr("stroke", "white").attr("stroke-width", 1); mline = svg.append("g").attr("id", "moveto").attr("stroke", "#FFF").attr("stroke-width", 1.5).attr("fill", "#FFF"); button = svg.append("g").attr("id", "button").attr("stroke", "white").attr("stroke-width", 1).attr("fill", "white"); var projection = d3.geoEquirectangular() .center([465, 395]) // 指定投影中心,注意[]中的是经纬度 .scale(height) .translate([width / 2, height / 2]); //地图路径设置 var path = d3.geoPath().projection(projection); //添加标记点 marker = svg.append("defs") .append("marker") .append("marker") .attr("id", "pointer") .attr("viewBox", "0 0 12 12") // 可见范围 .attr("markerWidth", "12") // 标记宽度 .attr("markerHeight", "12") // 标记高度 .attr("orient", "auto") // .attr("markerUnits", "strokeWidth") // 随连接线宽度进行缩放 .attr("refX", "6") // 连接点坐标 .attr("refY", "6") // 绘制标记中心圆 marker.append("circle") .attr("cx", "6") .attr("cy", "6") .attr("r", "3") .attr("fill", "white"); // 绘制标记外圆,之后在timer()中添加闪烁效果 marker.append("circle") .attr("id", "markerC") .attr("cx", "6") .attr("cy", "6") .attr("r", "5") .attr("fill-opacity", "0") .attr("stroke-width", "1") .attr("stroke", "white"); // 记录长沙坐标 var changsha = projection([112.59, 28.12]); // 读取地图数据,并绘制中国地图 mapdata = []; d3.json('/Public/d3json/sichuan.json').then(function (data) { console.log(data); // 读取地图数据 mapdata = data.features; console.log(mapdata); // 绘制地图 gmap.selectAll("path") .data(mapdata) .enter() .append("path") .attr("d", path) .attr('fill', (d, i) => color(i)); // 标记长沙 起始点 gmap.append("circle").attr("id", "changsha") .attr("cx", changsha[0]) .attr("cy", changsha[1]) .attr("r", "6") .attr("fill", "yellow") gmap.append("circle").attr("id", "changshaC") .attr("cx", changsha[0]) .attr("cy", changsha[1]) .attr("r", "10") .attr("stroke-width", "2") .attr("fill-opacity", "0"); // 创建对象,保存每个城市的物流记录数量 var citylist = new Object(); // 创建方法,输入data坐标,绘制发射线 var moveto = function (city, data) { var pf = { x: projection([112.59, 28.12])[0], y: projection([112.59, 28.12])[1] }; var pt = { x: projection(data)[0], y: projection(data)[1] }; var distance = Math.sqrt((pt.x - pf.x) ** 2 + (pt.y - pf.y) ** 2); if (city in citylist) { citylist[city]++; } else { mline.append("line") .attr("x1", pf.x) .attr("y1", pf.y) .attr("x2", pt.x) .attr("y2", pt.y) .attr('fill', 'red') .attr("marker-end", "url(#pointer)") .style("stroke-dasharray", " " + distance + ", " + distance + " ") .transition() .duration(distance * 30) .styleTween("stroke-dashoffset", function () { return d3.interpolateNumber(distance, 0); }); citylist[city] = 1; }; mline.append("circle") .attr("cx", pf.x) .attr("cy", pf.y) .attr("r", 3) .attr('fill', 'red') .transition() .duration(distance * 30) .attr("transform", "translate(" + (pt.x - pf.x) + "," + (pt.y - pf.y) + ")") .remove(); }; var scale = d3.scaleLinear(); scale.domain([0, 1000, 2000]) .range([0, 1, 0]); var start = Date.now(); d3.timer(function () { var s1 = scale((Date.now() - start) % 2000); // console.log(s1); gmap.select("circle#changshaC") .attr("stroke-opacity", s1); marker.select("circle#markerC") .attr("stroke-opacity", s1); }); var cityordinate = { '哈尔滨': [126.5416150000, 45.8088260000], '石家庄': [116.46, 39.92], '北京': [116.39564503787867, 39.92998577808024], '上海': [121.480539, 31.235929], '广州': [113.271431, 23.135336], '重庆': [106.558434, 29.568996], '青岛': [120.38442818368189, 36.10521490127382], '福州': [119.30347, 26.080429], '兰州': [103.840521, 36.067235], '贵阳': [106.636577, 26.653325], '成都': [104.081534, 30.655822], '西安': [108.946466, 34.347269], '长春': [125.3306020000, 43.8219540000], '台湾': [120.961454, 23.80406], '呼和浩特': [111.7555090000, 40.8484230000], '澳门': [113.5494640000, 22.1929190000], '武汉': [114.3115820000, 30.5984670000], '昆明': [102.71460113878045, 25.049153100453159], '乌鲁木齐': [87.56498774111579, 43.84038034721766], '益阳': [112.36654664522563, 28.58808777988717], '南京': [118.77807440802562, 32.05723550180587], '武昌': [114.35362228468498, 30.56486029278519], }; // 随机获得目标城市 var cityname = [], total = 0; for (var key in cityordinate) { cityname[total++] = key; }; //定时器开始生产点 setInterval(() => { var _index = ~~(Math.random() * total); moveto(cityname[_index], cityordinate[cityname[_index]]); }, 1000); }); </script> </html