d3地图遇到的问题
来源:互联网 发布:河南省考行测成绩算法 编辑:程序博客网 时间:2024/05/17 03:26
同事最近遇到一个问题,就是用d3画出地图,然后在地图上画散点图,画完之后经过缩放,发现散点也跟着放大缩小,这样很难看,她希望能跟eharts一样能地图变大,散点不变,或者看似对于地图变小,于是我就开动,研究了一下这个问题,下面贴出问题解决代码:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>d3地图</title> <style type="text/css"> .province{ stroke: black; stroke-width:1px; } .overlay{ fill:none; pointer-events: all; } </style></head><body> <script type="text/javascript" src = "http://d3js.org/d3.v3.min.js"></script> <script type="text/javascript"> var width = 1000; var height = 800; var svg = d3.select("body") .append("svg") .attr("width",width) .attr("height",height); //定义投影函数 var projection = d3.geo.mercator() .center([107,31]) .scale(600) .translate([width/2,height/2]); //使用投影定义函数定义地理路径生成器 var path = d3.geo.path() .projection(projection); var color = d3.scale.category20(); //以北京的经纬度作为投影的参数,得到北京的像素坐标 var peking = [116.3,39.9]; var proPeking = projection(peking); var initTran = projection.translate(); var initScale = projection.scale(); //用上面得到的像素坐标绘制一个圆,该圆就正好位于北京的位置 d3.json("d3Province/china.json",function(error,toporoot){ if(error) return console.error(error); console.log(toporoot); var zoom = d3.behavior.zoom() .scaleExtent([1,10]) .on("zoom",function(d){ d3.select("g").attr("transform","translate(" + d3.event.translate + ")" + "scale(" + d3.event.scale + ")"); d3.select("circle").attr("r",8/d3.event.scale); }) //////////////////////////////// var groups = svg.append("g").call(zoom) var countries = groups.selectAll("path") .data(toporoot.features) .enter() .append("path") .attr("class","province") .attr("d",path) .style("fill",function(d,i){ return color(i); }) .call(zoom) var circle = groups.append("circle") .attr("class","point") .attr("cx",proPeking[0]) .attr("cy",proPeking[1]) .attr("r",8) .attr("fill","yellow") }) </script></body></html>
这里用北京的经纬度,经过定义的投影函数,转换成画布上的图标,然后用缩放用于缩放地图,解决办法就是这一行代码
d3.select("circle").attr("r",8/d3.event.scale);
当地图跟着缩放的时候,散点跟着相反的以相同的比例缩放,也就是说地图变大,散点圆的半径变小,地图缩小,散点圆的半径变大,这就是解决办法,下面贴出效果图
上下两个图对比非常明显
阅读全文
0 0
- d3地图遇到的问题
- d3.js在坐标轴遇到的问题
- 在地图上画正六边形时出现的问题(d3)
- 百度地图遇到的问题
- 百度地图应用开发遇到的问题
- 百度地图,实际应用遇到的问题。
- 使用百度地图API遇到的问题
- 集成百度地图遇到的问题汇总
- 百度地图遇到的一些问题
- 百度地图开发中遇到的问题
- 百度地图开发中遇到的问题
- android 开发百度地图遇到的问题
- android 开发百度地图遇到的问题
- d3.js学习9----地图的制作
- 百度地图初学三:百度地图开发遇到的问题
- d3.js实现移动 推点 以及开发中遇到的问题
- d3之画地图
- 制作地图d3.js
- JDBC Unit03 JDBC高级编程 、 DAO
- c语言计算机二叉树中各节点中最大元素的值
- Spark on yarn client 和cluster模式运行序列图
- JavaWeb学习总结
- 如何u盘装系统win10 64位?
- d3地图遇到的问题
- docker下修改mysql配置文件
- 将最小化或者挡住的窗体置为最前及ShowWindow、SetForegroundWindow用法
- nexus权限管理
- 34 dht12单总线方式的Linux驱动及解决H3丢失中断的问题
- wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。 这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有
- Unity编写雷霆战机流程(二)
- Android TextView 属性 textsize 的单位是什么?
- Warning: mkdir() [function.mkdir]:Permission denied in