效果图如下:

实现大致思路:

引入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. Java连接数据库 #06# SQL与代码分离(精化版本)

    索引 DAO层依赖关系草图 应用示例 接Java连接数据库#05#,对代码进行改进. DAO层依赖关系草图 应用示例(只需3步!) 1.首先定义接口类: package org.sample.shop ...

  2. nginx ssl 卸载功能 第八章

    一 .证书自签发和给web 服务签发证书 .ssl 证书加密文件 ****************************** 建立私有CA openCA openssl 证书申请及签署步骤 .生成证 ...

  3. Docker Kubernetes Volume 网络数据卷

    Docker Kubernetes Volume 网络数据卷 由于支持网络数据卷众多 今天只拿nfs作为案例. 支持网络数据卷 nfs iscsi glusterfs awsElasticBlockS ...

  4. Linux 进程管理、系统状态查询

    1.内存给进程一段空间让他启动,让内核通过cpu来管理它. 2.ps命令查看命令信息. 用户.pid号.使用cpu.使用内存.虚拟内存.真实内存.控制台.状态.启动时间.运行时间.名 USER PID ...

  5. kvm日常维护

    1.列出物理机器上安装的虚拟[root@localhost ~]# virsh list --all Id Name State------------------------------------ ...

  6. python 运算/赋值/循环

    python3 中只有一个InputPython2 中的raw_input与python3中的input一模一样python3中input输出字符串类型int,float=数字类型//地板除 % 取余 ...

  7. 【Python66--checkbutton&】

    一.定义:Checkbutton组件用于实现是否选择的按钮 二.作用:使用Checkbutton,必须创建一个tkinter变量用于存放按钮的状态:v=IntVar() from tkinter im ...

  8. 手游折扣app排行榜前10名_2018哪个折扣app最低最好

    2018游戏圈白皮书发布,PC端游的份额继续下降,页游的比例也在下降,但手游的比例持续3年上升.以渠道为阵营,逐渐小的平台和公会被逐渐淘汰.流量集中在少数几个大的平台.但是这样带来的问题是,平台越来越 ...

  9. js 数组元素排序

    字母排序 <html> <body> <script type="text/javascript"> ) arr[] = "Georg ...

  10. Hive和HBase区别

    1. 两者分别是什么? Apache Hive是一个构建在Hadoop基础设施之上的数据仓库.通过Hive可以使用HQL语言查询存放在HDFS上的数据.HQL是一种类SQL语言,这种语言最终被转化为M ...