效果图如下:

实现大致思路:

引入echarts最新版本,还有china.json,以及地级市坐标,(因为产品需求中不考虑省份,只考虑各个地级市),echarts官网已经不让下载地图了,网上很多地级市坐标不全,格式又不是想要的,没办法只能自己整理了;地级市坐标会放在下一篇文章中;

var bg_echarts_map = echarts.init(document.getElementById('bg_echarts_map')); //地图
//获取地图相关数据
function getMapData(){
$.ajax({
url: '/assets/statuserpercity',
type: 'get',
data: { },
success: function (res) {
var res = typeof res == 'object' ? res : JSON.parse(res);
if (res.result == 1) {
var arr = [];
if(res.data){
   var cityData = res.data.data.statUserPerCity;
   for(var i in cityData){
       arr.push({
                                        name: cityData[i].city.replace(/市/g, '').replace(/辖区/g, '').replace(/地区/g, ''),
                                        value: cityData[i].uv,
id: cityData[i].cityId,
                                    });
                                }
setMap(arr);
cityAllData = arr;
                             }
}
},
error: function (res) {
console.log(res);
}
})
}
 
//地图
            function setMap(data) {
             var cityObj = [];
var sum = 0;
             for(var i in cityJson ){
             cityObj.push({name: cityJson[i].properties.name ,cp: cityJson[i].properties.cp});
             }
for (var i = 0; i < data.length; i++) {
for(var j = 0; j < cityObj.length; j++){
if(data[i].name == cityObj[j].name){
sum += data[i].value;
}
}
}
var convertData = function (data) {
var res = [];
for (var i = 0; i < data.length; i++) {
for(var j = 0; j < cityObj.length; j++){
if(data[i].name == cityObj[j].name){
var geoCoord = cityObj[j].cp;
if (geoCoord) {
res.push({
name: data[i].name,
value: geoCoord.concat(data[i].value),
});
}
}
}
}
return res;
};
var optionMap = {
tooltip:{
padding: 0,
enterable:true,
transitionDuration:1,
textStyle : {
color: '#000',
decoration: 'none',
},
formatter: function () {
var tipHtml = '';
if(tootilpData.probeRtUserInfo){
tipHtml = ' <div class="tooltip" style="word-wrap:break-word; white-space:pre-wrap !important;">'+
'<div class="horn">'+
'<div class="lt"></div>'+
'<div class="rb"></div>'+
'</div>'+
'<div class="phoneData">'+'用户'+tootilpData.probeRtUserInfo.phone+'在'+tootilpData.probeRtUserInfo.address+'联网成功</div>'+
'</div>';
}
if(tootilpData.wiproRtUserInfo){
tipHtml = ' <div class="tooltip">'+
'<div class="horn">'+
'<div class="lt"></div>'+
'<div class="rb"></div>'+
'</div>'+
'<div class="imgData">'+
'<img class="tooltip_img" src='+tootilpData.wiproRtUserInfo.picId+'>'+
' <div class="tooltip_text">'+
'<span class="tooltip_text_span"><i>'+tootilpData.wiproRtUserInfo.gender+'</i>,<i>'+tootilpData.wiproRtUserInfo.age+'岁</i></span>'+
'<span class="tooltip_text_span2">到达'+tootilpData.wiproRtUserInfo.city+'的'+tootilpData.wiproRtUserInfo.shopName+'</span>'+
'</div>'+
'</div>'+
'</div>';
}
return tipHtml;
}
},
geo: {
map: 'china',
show: true,
roam: false,
layoutCenter: ['50%','50%'],
layoutSize: '127%',
label: {
emphasis: {
show: false
}
},
itemStyle: {
normal: {
areaColor: 'transparent',
borderColor: '#0266b4',
shadowColor: '#0266b4',
shadowBlur: 20
},
},
emphasis: {
itemStyle: {
areaColor: 'transparent',
}
},
},
series: [
{
name: '前30',
type: 'effectScatter',
coordinateSystem: 'geo',
hoverAnimation: false,
legendHoverLink: false,
data: convertData(data.sort(function (a, b) {
return b.value - a.value;
}).slice(0, 31)),
symbolSize: function (val) {
return val[2] / sum * 300
},
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
itemStyle: {
normal: {
color: '#2fb6a5',
shadowBlur: 10,
shadowColor: '#31b8a6'
},
emphasis: {
show: false,
color: '#03FCDE'
}
},
zlevel: 0,
silent: true,
},
{
name: '城市',
type: 'scatter',
coordinateSystem: 'geo',
zoom: 2,
data: convertData(data),
legendHoverLink: false,
symbolSize: function (val) {
var a = val[2] / sum * 300;
if(a < 5){
a=5;
}
return a;
},
itemStyle: {
normal: {
color: '#2fb6a5',
},
emphasis: {
show: false,
color: '#03FCDE'
}
},
zlevel: 1,
silent: true,
},
]
};
bg_echarts_map.setOption(optionMap, true);
 
            }
 
//获取弹框气泡数据
function getAlertData (data){
$.ajax({
url: '/assets/wiprortuserinfo',
type: 'get',
async: false,
data: { },
success: function (res) {
var res = typeof res == 'object' ? res : JSON.parse(res);
if (res.result == 1) {
var apData = res.data;
if(apData){
if(apData.data.probeRtUserInfo){
apData.data.probeRtUserInfo.phone = apData.data.probeRtUserInfo.phone ? apData.data.probeRtUserInfo.phone.substr(0,3)+"****"+apData.data.probeRtUserInfo.phone.substr(7) : apData.data.probeRtUserInfo.phone;
apData.data.probeRtUserInfo.address = apData.data.probeRtUserInfo.city+'的'+apData.data.probeRtUserInfo.shopName;
apData.data.probeRtUserInfo.address = apData.data.probeRtUserInfo.address.length > 19 ? apData.data.probeRtUserInfo.address.substring(0,19)+'...' : apData.data.probeRtUserInfo.address;
tootilpData = apData.data;
}
if(apData.data.wiproRtUserInfo){
apData.data.wiproRtUserInfo.gender = apData.data.wiproRtUserInfo.gender == 'f' ? '女' : '男';
tootilpData = apData.data;
}
for(var i in data){
if(apData.data.probeRtUserInfo){
if(data[i].id == apData.data.probeRtUserInfo.cityId){
dataIndex = i;
}
}
if(apData.data.wiproRtUserInfo){
if(data[i].id == apData.data.wiproRtUserInfo.cityId){
dataIndex = i;
}
}
}
if(dataIndex !== null){
bg_echarts_map.dispatchAction({
type: 'downplay',
seriesIndex: 1,
});
bg_echarts_map.dispatchAction({
type: 'highlight',
seriesIndex: 1,
dataIndex: dataIndex
});
bg_echarts_map.dispatchAction({
type: 'hideTip',
seriesIndex: 1,
});
bg_echarts_map.dispatchAction({
type: 'showTip',
seriesIndex: 1,
dataIndex: dataIndex
});
}
}else{
bg_echarts_map.dispatchAction({
type: 'downplay',
seriesIndex: 1,
});
bg_echarts_map.dispatchAction({
type: 'hideTip',
seriesIndex: 1,
});
}
}
},
error: function (res) {
console.log("error...");
}
})
}

echarts地图散点高亮弹框制作的更多相关文章

  1. 3.0+百度地图在地图初始化的时候就弹框展示一个信息框,而不是用户点击poi时才弹出

    有些时候我们会有这样的业务:当用户根据地址跳转到地图后,希望能够立即弹框展示该poi的地址信息. 实现方法: 百度地图3.0+的类BaiduMap中提供了一个方法showInfoWindow(Info ...

  2. 弹框内画echarts图dom元素无法获取的问题

    弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...

  3. 【04】openlayers 地图弹框

    效果: 创建地图: //创建地图 var map = new ol.Map({ //设置显示地图的视图 view: new ol.View({ projection: 'EPSG:4326', //投 ...

  4. Unity3D之Ugui 制作弹框

    创建一个UI控件. 这里通过按钮的点击取控制弹框的显示或者隐藏.给按钮Button绑定一个脚本. 将Panel初始化设置为隐藏.就可以实现了. using UnityEngine; using Sys ...

  5. onload + setTimeout 用法,制作广告弹框效果

    一般来说,只有 <body>,<img>, <link>, <script>,<frame>, <frameset>, < ...

  6. 十四、制作优美的div弹框

    功能描述:确认[调整按钮]弹出精美div弹框 1.jsp页面:perfectAlertDiv.jsp <%@ page contentType="text/html;charset=U ...

  7. 制作一个简单的toast弹框

    toast弹框的作用 toast弹框顾名思义,就是为了弹出一个提示框,效果如图: 使用toast弹框可以可用户带来更好的交互体验 toast弹框的使用 Toast组件 制做出toast的样式以及出现的 ...

  8. popover带箭头弹框

    我们先来看一下效果吧: 分析:这个带箭头的弹框其实是一个控制器,通过Modal方式展现,但跟传统模态方式效果不一样,我们一眼就能看出. Xib方式实现popover: 1.segue的时候选择Pres ...

  9. Echarts 地图(map)插件之 鼠标HOVER和tooltip自定义数据

    在项目开发中,有需要用到地图的地方,百度的echarts地图插件就是个不错的选择, 这里总结一下地图自定义鼠标HOVER时的事件和自定义tooltip数据: 一.鼠标HOVER时的事件: 参照官方文档 ...

随机推荐

  1. phpstorm2018激活方法

    直接用浏览器打开 http://idea.lanyus.com/点击页面中的“获得注册码”,然后在注册时切换至Activation Code选项,输入获得的注册码一长串字符串如果提示红字体信息,那么先 ...

  2. 基于PI+QT实现OpenCV图像处理操作(基本环境搭建)

    这篇博客就是在PI上直接写出来的!cheers!! PI3的性能已经非常强劲,而作为一个能够独立运行的运算单元,使用它来做图像处理,将是非常适合的.为了挖掘机器的最大潜能,我没有采用比较常见的pyth ...

  3. 【Bilinear interpolation】双线性插值详解(转)

           最近在做视频拼接的项目,里面用到了图像的单应性矩阵变换,在最后的图像重映射,由于目标图像的坐标是非整数的,所以需要用到插值的方法,用的就是双线性插值,下面的博文主要是查看了前辈的博客对双 ...

  4. 初始Vue

    渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 走进Vue what -- 什么是Vue 可以独立完成前后 ...

  5. js的点滴2

    博客: 1.大牛博客:每一篇博客都需要仔细的看.http://blog.csdn.net/hongchh/article/details/54744318 2.layui:的作者 贤心的博客:http ...

  6. 如何使用 Deepfakes 换脸

    如何使用 Deepfakes 换脸 1. 获取deepfakes工具包 git clone https://github.com/deepfakes/faceswap.git 2. 补齐依赖包: pi ...

  7. 浅谈awk命令

    简介 awk是一个强大的文本分析工具,相对于grep.sed命令,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,然后将每行切片,再对切开的部分进行处理. awk有 ...

  8. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  9. Centos7 多网卡抓包可以抓到UDP但程序recvfrom不到

    问题: Centos7多网卡,抓包时发现某网卡上有UDP包,但是用程序recvfrom无法接收到消息. 解决步骤: 1.确认防火墙是否关闭: 已关闭 2.确认网卡是否开启过滤:cat /proc/sy ...

  10. 【框架】selenium网页端的基本自动化框架(四)