需求:用户在地图上单击选点,页面获取到具体坐标并返回。

首先比较重要的是Vue中的$nextTick,因为vue是异步更新的,如果是想打开Dialog或者是其他操作dom后才加载地图,使用nextTick可以保证在dom加载之后进行加载。

this.$nextTick(() => {
this.loadMap();
})

如果直接加载地图,这时dom还没有全部更新完毕,无法加载。

接下来是初始化容器与加载地图(这里不仅仅是地图,也可以加载其他svg)

此部分为d3.js的应用,绘制矢量图,选定容器,增加内容。

var svg = d3.select("#container").append("svg").attr("id", "svgRoot")
.attr("width", width)
.attr("height", height )
.append("g")
.attr("transform", "translate(10px)")
.call(zoom);

加载地图(从服务器获取,url为服务器中svg的url)

d3.xml(url).mimeType("image/svg+xml")

可以加入Promise来判断是否加载成功,成功后再执行之后的函数。

return new Promise(function(resolve, reject) {
d3.xml(url).mimeType("image/svg+xml").get(function(err, xml) {
if (err || !xml) {
return reject(false);
}
return resolve();
})
})

最后是选点并且获取坐标的部分。d3中有多个监听函数,分成鼠标,键盘,触屏这几个部分。此次完成的是鼠标点击。

container = svg.append("g").attr("id", "sub-root");
drawPoint(points, xy_num) {
container.append('circle').attr({
cx: points.x,
cy: points.y,
r: 5,
class: "XY" + xy_num
}).style({
fill: color,
stroke: color,
'stroke-width': 2,
'fill-opacity': .5
});
}//点击时出现的圆点样式
svg.on("click", function() {
if (d3.event.defaultPrevented)
return;
var coords = d3.mouse(this);
var transform = (container.attr('transform')) ? container.attr('transform').split(')') : "";
var translate = (transform && transform[0].includes('translate(')) ? transform[0].replace('translate(', '').split(',').map(val => parseFloat(val)) : [0, 0];
var scale = (transform && transform[1].includes('scale(')) ? parseFloat(transform[1].replace('scale(', '')) : 1;
coords[0] = (coords[0] - translate[0]) / scale;
coords[1] = (coords[1] - translate[1]) / scale;
drawPoint({ x: coords[0], y: coords[1] }, 1);
});//加入点击事件并获取坐标

最新文章

  1. 基于ntp的多服务器时间同步脚本
  2. sqlserver自定义函数的创建与调用
  3. redhat enterprixe 5.0 下DHCP服务器rpm安装配置及其测试
  4. Machine Learning for hackers读书笔记_一句很重要的话
  5. 【教训】rm -fr ./* 教训
  6. nagios 实现Mysql 主从同步状态的监控
  7. UESTC_Frozen Rose-Heads CDOJ 791
  8. Thinking in C++: 静态指针与指向静态类型的指针
  9. Linux入门之常用命令(11)复制cp及scp
  10. Web服务,XFire的一个例子
  11. Hexo博客搭建
  12. Android中监控USB的插拔
  13. wifi破解基础及工具的使用
  14. Linux中FTP的一点理解
  15. Xamarin iOS教程之视图显示图像
  16. python 时间字符串和时间戳之间的转换
  17. 早停法(Early Stopping)
  18. vue setTimeout--延迟操作
  19. bootStrap中Tab页签切换
  20. spring aop的两种写法aspect和advisor

热门文章

  1. 如何在Linux系统上安装nginx
  2. 从 ASP.NET Core 3.1 迁移到 5.0
  3. springboot使用swagger2创建文档
  4. Building Applications with Force.com and VisualForce(Dev401)(十三):Implementing Business Processes:Automating Business Processes Part II
  5. 用卷积神经网络和自注意力机制实现QANet(问答网络)
  6. TensorFlow系列专题(十四): 手把手带你搭建卷积神经网络实现冰山图像分类
  7. iOS sign in with Apple 苹果ID登录
  8. 模块 random 随机
  9. ftp 无法显示远程文件夹
  10. 数据结构与算法复习-----leetcodeOJ题解