echarts如何在json地图上设置多种颜色的点位和自定义背景弹出框

效果图
在这里插入图片描述

1.引入echarts.js和jquery.min.js文件

 <script type="text/javascript" src="/js/jquery.min.js"></script> 
<script type="text/javascript" src="/js/echarts.js">< /script > 

2.html内容

<div id="main" style="height: 92%;width: 88%;padding: 0;"></div>

3.获取不同颜色点位的数组

var myChart = echarts.init(document.getElementById('main'));

var result= new Array();
var checked= new Array();
var noChecked= new Array();

function  loadData(){
	if(result.length!=0){
		result.length=0;
		noChecked.length=0;
		checked.length=0;
	}
	  var _url=path()+"/getArr.do";
	    $.ajax({
	        async: false,
	        type:'POST',
	        data:{},
	        url:_url,
	        dataType:'json',
	        success:function(data){
	        if(data!=null && data!=''){
                $.each(data,function(i,c) {
                    var a = new Object();
                    var b = [];
                    a.id= c.id
                    a.name = c.name;
                    var gg_pos = bd09togcj02(c.lon, c.lat)//将点位转化为地图坐标系
                    b[0] = gg_pos[0];
                    b[1] = gg_pos[1];
                    a.value = b;
                    if (i < 11) {
                        checked[i] = a//一种颜色的数组
                    } else {
                        noChecked[i - 1] = a//另外一种颜色的数组
                    }
                })
	        }
                result.push(checked)
                result.push(noChecked)
                loadJsonMap("zhejiang","浙江省")
	        },
	        error:function(){ 
	        } 
	    });
} 

4.加载json地图并自定义背景图片

function loadJsonMap(mapCode, mapName) {
	 var width=$('#main').width();
	 var width1=width*0.8;
	 var height=$('#main').height()*0.8;
	var data2 = result;
	var max = 0;
	console.log(result)
  $.getJSON('/js/china-main-city/' + mapCode + '.json', function (data) {//获取地图json数据
      //转为腾讯坐标系
      console.log(data.features[0].geometry.coordinates[0][0][0][0])
      var ps=data.features[0].geometry.coordinates[0][0][0];
      for(var j=0;j<ps.length;j++){
          var gg_pos = bd09togcj02(ps[j][0], ps[j][1])
          ps[j][0]=gg_pos[0]
          ps[j][1]=gg_pos[1]
      }
	     if (data) {
		     echarts.registerMap(mapName, data);
					  option = {
							tooltip: {
							    show:true,
								trigger: 'item',
								// formatter: '{b}',
                                extraCssText: "width:282px;height:250px;background: url(imagesSwyt/maptck.png) no-repeat;z-index:99",//设置弹窗的背景图片
                                position: function (pos, params, dom, rect, size) {
                                  var datas=params.data;
                                  var _html="";
                                    _html+="<div style='position: relative;width:260px;height:230px;'>"
                                    _html+="<h1 style='width:230px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;color: #fff;font-size: 18px;margin: 0px 0px 0px 22px;position: relative;height: 30px;top:20px;'>"+datas.name+"</h1>"
                                    _html+="</div></div></div>"
                                        $(dom).html(_html);//设置弹窗的内容
                                        
                                    var objs={left:pos[0]-(size.contentSize[0]/2),top:pos[1]-(size.contentSize[1])}
                                     return objs;//固定浮框的位置 显示在点位的正上方
                                },
                                triggerOn: 'click'//设置触发点位的方式为点击
                            },
							  geo: {
                                map: mapName,
                                left:"5%",
                                top:0,
                                width:width1,
                                height:height,
                                  hoverAnimation:false,
                                  avoidLabelOverlap: false,
                                  silent:true,//设置地图鼠标浮动上去不显示高亮选中
                                label: {
                                	normal: {
            							show: true,
            							 textStyle: {
                                             fontSize: 15,
                                             color: 'white'
                                         }
            						},
                                    emphasis: {
                                        show: true,
                                        textStyle: {
                                            fontSize: 15,
                                            color: 'white'
                                        }
                                    },
                                },
                                itemStyle:{
                                	   normal: {
                                           areaColor: '#096dd9'
                                       },
                                       emphasis: {
                                           areaColor: '#red'
                                       }
            					},
                            },
							    series : [
							          {
							                  name: 'noChecked',
							                  type: 'effectScatter',
									          coordinateSystem: 'geo',
                                          hoverAnimation:false,
                                          avoidLabelOverlap: false,
                                          emphasis: {
                                              itemStyle: {
                                                  areaColor: '#096dd9'
                                              }
                                          },
							                  data: data2[1],
							                  symbolSize: 8,
									            label: {
									                normal: {
									                    formatter: '{b}',
									                    position: 'right',
									                    show: false
									                }
									            },
									            itemStyle: {
									                normal: {
									                    color: '#83C686',
									                    shadowBlur: 5,
									                    shadowColor: '#fff'
									                }
									            },
							              },
							        {
							        	name: 'checked',
							            type: 'effectScatter',
							            coordinateSystem: 'geo',
                                        hoverAnimation:false,
                                        avoidLabelOverlap: false,
                                        emphasis: {

                                            itemStyle: {

                                                areaColor: '#096dd9'

                                            }

                                        },
							            data:data2[0],
							            symbolSize: 10,
							            label: {
							                normal: {
							                    formatter: '{b}',
							                    position: 'right',
							                    show: false
							                }
							            },
							            itemStyle: {
							                normal: {
							                    color: 'red',
							                    shadowBlur: 10,
							                    shadowColor: '#fff'
							                }
							            },
							            zlevel: 1
							        }

							    ]
							};

					 myChart.setOption(option); 
				 } else { 
		             alert('无法加载该地图'); 
				 } 
			}); 
}

坐标转换函数

/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
 * 即 百度 转 谷歌、高德
 * @param bd_lon
 * @param bd_lat
 * @returns {*[]}
 */
function bd09togcj02(bd_lon, bd_lat) {
    var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    var x = bd_lon - 0.0065;
    var y = bd_lat - 0.006;
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
    var gg_lng = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    return [gg_lng, gg_lat]
}

/**
 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
 * 即谷歌、高德 转 百度
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02tobd09(lng, lat) {
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
    var bd_lng = z * Math.cos(theta) + 0.0065;
    var bd_lat = z * Math.sin(theta) + 0.006;
    return [bd_lng, bd_lat]
}
 
/**
 * WGS84转GCj02
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function wgs84togcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
    }
}
 
/**
 * GCJ02 转换为 WGS84
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02towgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        mglat = lat + dlat;
        mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值