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

首先比较重要的是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);
});//加入点击事件并获取坐标

Vue + d3.js实现在地图上选点的更多相关文章

  1. D3.js 制作中国地图 .net 公共基础类

    D3.js 制作中国地图 from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding ...

  2. 利用d3.js绘制中国地图

    d3.js是一个比較强的数据可视化js工具. 利用它画了一幅中国地图,例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3ZhcDE=/ ...

  3. GIS(一)——在js版搜索地图上加入Marker标记

    因为我们做的是有关于旅游方面的项目,所以涉及到了地图功能.我接到的当中一个任务就是,在地图上显示指定的几个景点,并在地图上加上标记. 我们项目用的是搜狗地图.使用的是js版本号.大家有兴趣的话,能够參 ...

  4. D3.js 制作中国地图

    from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding a variety of ...

  5. vue中使用echarts,地图上的涟漪特效大小设置

    在使用echarts进行开发大屏时,使用到了地图这个组件 我们会根据返回的值来决定涟漪的大小 这时则使用 其它的value为返回的数组,一般格式为[经度,维度,值] 这样就能动态设置效果的大小了

  6. 在Vue项目里面使用d3.js

    之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.js的方法,npm 上面的D3相对来说 可以说是很不人性化了 完全没有说 在webpac ...

  7. D3.js中国地图下钻

    使用d3.js实现中国地图及中国地图下钻到省市区 在可视化开发中,地图是很重要的一个环节,很多时候需要展现的不仅是国家地图,还需要能从国家进入到省市,看到区这样的下钻过程,今天我们就来实现这个效果. ...

  8. c# 进行AE开发时,如何在地图上定位出一个点

    一.文本形式的气泡提示框 由于本人是初学,所以具体的含义尚未弄清楚,直接给出代码吧!

  9. springboot2.0+Neo4j+d3.js构建知识图谱

    Welcome to the Neo4j wiki! 初衷这是一个知识图谱构建工具,最开始是对产品和领导为了做ppt临时要求配合做图谱展示的不厌其烦,做着做着就抽出一个目前看着还算通用的小工具 技术栈 ...

随机推荐

  1. Django HttpResponse笔记

    HttpResponse 概述:给浏览器返回数据 HttpRequest对象是由django创建的,HttpResponse对象由程序员创建 用法 1:不调用模板,直接返回数据. 例: def get ...

  2. 如何利用python实现为每行添加行数编号

    可能还有更好的方法,在这里我是这么写的,针对小文件可以,但是如果文件内容太多,这种方法感觉不太好 先把所有的数据读取出来,然后利用W覆盖写入模式打开文件进行写入 遍历枚举类型数据后,默认是从0开始,然 ...

  3. Linux下段错误(C语言)

    问题描述:在Linux下编程有时会出现段错误的提醒,出现这种错误有可能是因为以下几种原因 1.数组越界:如果在初始化或者接收输入时内容超过了定义好的数组元素个数时会出现段错误,Linux的数组越界检查 ...

  4. 一、配置Ubuntu网络设置大纲

    root@ubuntu:为我的Ubuntu系统,即 用户名@主机名: 1.改主机名 ifconfig查询本机IP地址vim  /etc/hostname进入i编辑更改,改完按esc键 然后:wq!保存 ...

  5. 开源APP

    仿微信 https://github.com/zhengwenming/WeChat 电台韵律 https://github.com/DaMingShen 运动App https://github.c ...

  6. tkinter gui控件回调和grid布局优化

    0.引子 Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序.由于 Tkinter 是内置到 python 的安装包中.只要安装 ...

  7. MATLAB——元胞数组

    一. 1.元胞数组的创建 >> a={;ones(,),:} a = ] [2x3 ;ones(,),:} >> b=[{};{ones(,)},{:}] b = ] [2x3 ...

  8. lly的数列询问(最小生成树 + 思维)

    lly的数列询问 Description 这个问题很简单,lly lly lly给你一些提示,让你试着确定长度为n n n的数列A [1] A [2] ... A [n]的值,但是他想尽一切办法为大家 ...

  9. Light of future-冲刺Day 5

    目录 1.SCRUM部分: 每个成员进度 SCRUM 会议的照片 签入记录 代码运行截图 用户浏览界面 订单详情界面 管理员浏览界面 新增后台界面 2.PM 报告: 时间表 燃尽图 任务总量变化曲线 ...

  10. 在vue项目中使用md5加密 sirai

    1.安装模块 npm install js-md5 -D 2.在项目中引入模块 import md5 from 'js-md5' 3.把你需要加密的信息进行前期处理 CalcuMD5 = functi ...