第十六章 Cesium 和echar的标注

效果

数据格式

getNationContractSum2: {
	"msg": "操作成功",
	"total": 55,
	"flag": true,
	"rows": [{
		"num": 133,
		"value": 11,
		"name": "名称",
		"longitude": 9.58529417191,
		"latitude": 8.09232859829,
		"countrycode": "101",
		"yearcomplete": 6.11,
		"totalcomplete": 56.11,
		"monthcomplete": 0.11,
		"rmb": 11.11
	}, {
		"num": 25,
		"value": 11,
		"name": "名称",
		"longitude": -6.26551634282,
		"latitude": 34.8255499213,
		"countrycode": "133",
		"yearcomplete": 2.11,
		"totalcomplete": 7.11,
		"monthcomplete": 0.11,
		"rmb": 11.11
	}],
	"status": "C00000"
},

1.获取数据

// 所有数据标注数据接口
	getDate2: function() {
		var options = new Object();
		options.url = "/manage-api/getNationContractSum";
		options.type = "GET";
		options.data = ak_gjhtje_jwxm.temp2;
		options.errorback = akglobe_config.errBack;
	 
			options.callback = function(data) {
				ak_gjhtje_jwxm.callBackGET2(data);
			}
			// 如果是测试环境 使用假数据
			if(parent.typep002==2){
				ak_gjhtje_jwxm.callBackGET2(ak_ztqg.getNationContractSum2);
			}else{
				akglobe_config.ajaxQuery(options);
			}
		
		},
		
		callBackGET2:function(data){
			if (!data) return;
			// parent.ak_left_click1.top4CallBack(data.rows, ak_gjhtje_jwxm.type); // 初始化三维标注
			parent.initZl.initZl(data);
		},

 因点击事件后需要先初始化右侧页面,在初始化标注,所以这里不是直接调用的方法,而是父级的方法

 parent.initZl.initZl(data);

2.进行标注

initZl: function(data) {
		
		var rows = data.rows;
		var data = [];
		var geoCoordMap = {};
		for(var i = 0;i < rows.length;i++){
			var name1 = rows[i].name;
			var value1 = rows[i].value;
			var object = {
				name:name1,
				value:value1,
				countrycode:rows[i].countrycode
			};
			data.push(object);
			var arr = [];
			var name = rows[i].name;
			arr[0] = rows[i].latitude;
			arr[1] = rows[i].longitude;
			var obj = {};
			obj = {
				[name]:arr
			}
			geoCoordMap = {...geoCoordMap,...obj}
		}
		for (var i = 0; i <= data.length - 1; i++) {
			for (var j = 0; j < data.length - i - 1; j++) {
				// 数据库中有坐标数据之后        
				if (data[j].value > data[j + 1].value) {
					var temp = data[j];
					data[j] = data[j + 1];
					data[j + 1] = temp;
				}
			}
		}
		data.reverse();
		var num = data.length/3;
		for(var i = 0;i < data.length;i++){
			if(i<num){
				data[i].value = 180
			}else if(i>num && i<2*num){
				data[i].value = 150
			}else{
				data[i].value = 100
			}
		}
		console.log(data);
		console.log(geoCoordMap);
		
		var  tgas=this;
		tgas.circleArr=[];
	
		var convertData = function(data) {
			var res = [];
			for (var i = 0; i < data.length; i++) {
				var geoCoord = geoCoordMap[data[i].name];
				if (geoCoord) {
					res.push({
						name: data[i].name,
						countrycode: data[i].countrycode,
						value: geoCoord.concat(data[i].value)
					});
				}
			}
			return res;
		};
		
		
		
		 var arrColor = ["rgb(15,176,255)", "rgb(18,76,154)", "#40C4E4", "#42B2BE", "rgb(51,176,204)", "#8CB7E5", "rgb(0,244,188)", "#139FF0"]

		  var color= Cesium.Color.LAWNGREEN.withAlpha(0.01);
		  var material=ak_marker.getFenceMaterial("", color);
		 
		  var result=convertData(data);
		  for(var i=0;i< result.length;i++){
		  	var  id=Number((new Date()).getTime() + "" + Number(Math.random() * 1000).toFixed(0));
			var db = result[i];
			var name=db.name;
			var jwd=db.value;
			var  obj=new Object();
			obj.id=id;
			obj.name=db.name;
			obj.address=db.address;
			
			obj.lat=jwd[0];
			obj.lng=jwd[1];
			
			obj.z=60;
			obj.tag=1;
			obj.code=db.countrycode;
			obj.addtypemarker=config.addtypemarker.ceccGjFJ;

			obj.attributes=obj;//  设置属性
			obj.radius=100000;//设置半径
			obj.color=new Cesium.Color(1.0, 1.0, 0.0, 0.02);
			var tt=new geo_circle(obj);
			 tt.draw();
		  	tgas.circleArr.push(tt);
		
		}
	
		option = {
			animation: false,
			GLMap: {
	
			},
			title: {
				text: '', //全国主要城市空气质量
				//subtext: 'data from PM25.in',
				// sublink: 'http://www.pm25.in',
				left: 'center',
				textStyle: {
					color: '#fff'
				}
			},
			tooltip: {
				trigger: 'item'
			},
			legend: {
				orient: 'vertical',
				y: 'bottom',
				x: 'right',
				data: ['pm2.5'],
				textStyle: {
					color: '#fff'
				}
			},
			series: [{
					name: '业绩分布',
					type: 'scatter',
					coordinateSystem: 'GLMap',
					data: convertData(data),
					symbolSize: function(val) {
						return val[2] / 10;
					},
					label: {
						normal: {
							formatter: '{b}',
							position: 'right',
							show: false
						},
						emphasis: {
							show: true
						}
					},
					itemStyle: {
						normal: {
							color: '#0ff'
						}
					}
				},
				{
					name: 'Top 5',
					type: 'scatter',
					coordinateSystem: 'GLMap',
					data: convertData(data.sort(function(a, b) {
						return b.value - a.value;
					}).slice(0, data.length/3)),
					symbolSize: function(val) {
						return val[2] / 10;
					},
					label: {
						normal: {
							formatter: '{b}',
							position: 'right',
							show: false
						},
						emphasis: {
							show: true
						}
					},
					itemStyle: {
						normal: {
							color: '#ddb926'
						}
					}
				},
				{
					name: 'Top 5',
					type: 'effectScatter',
					coordinateSystem: 'GLMap',
					data: convertData(data.sort(function(a, b) {
						return b.value - a.value;
					}).slice(0, 6)),
					symbolSize: function(val) {
						return val[2] / 10;
					},
					showEffectOn: 'render',
					rippleEffect: {
						brushType: 'stroke'
					},
					hoverAnimation: true,
					label: {
						normal: {
							formatter: '{b}',
							position: 'right',
							show: true
						}
					},
					itemStyle: {
						normal: {
							color: '#f46653',
							shadowBlur: 10,
							shadowColor: '#333'
						}
					},
					zlevel: 1
				}
			]
		};
		impMap(viewer, option);
	},

因这个标注不能点击,所以在这个标注最下面我们放置了一个透明的圆,用于识别点击

获取数据,然后放入id一些信息用于识别点击

 var result=convertData(data);
          for(var i=0;i< result.length;i++){
              var  id=Number((new Date()).getTime() + "" + Number(Math.random() * 1000).toFixed(0));
            var db = result[i];
            var name=db.name;
            var jwd=db.value;
            var  obj=new Object();
            obj.id=id;
            obj.name=db.name;
            obj.address=db.address;
            
            obj.lat=jwd[0];
            obj.lng=jwd[1];
            
            obj.z=60;
            obj.tag=1;
            obj.code=db.countrycode;
            obj.addtypemarker=config.addtypemarker.ceccGjFJ;

            obj.attributes=obj;//  设置属性
            obj.radius=100000;//设置半径
            obj.color=new Cesium.Color(1.0, 1.0, 0.0, 0.02);
            var tt=new geo_circle(obj);
             tt.draw();
              tgas.circleArr.push(tt);
        
        }

这是封装echarts的样式

var rows = data.rows;
        var data = [];
        var geoCoordMap = {};
        for(var i = 0;i < rows.length;i++){
            var name1 = rows[i].name;
            var value1 = rows[i].value;
            var object = {
                name:name1,
                value:value1,
                countrycode:rows[i].countrycode
            };
            data.push(object);
            var arr = [];
            var name = rows[i].name;
            arr[0] = rows[i].latitude;
            arr[1] = rows[i].longitude;
            var obj = {};
            obj = {
                [name]:arr
            }
            geoCoordMap = {...geoCoordMap,...obj}
        }
        for (var i = 0; i <= data.length - 1; i++) {
            for (var j = 0; j < data.length - i - 1; j++) {
                // 数据库中有坐标数据之后        
                if (data[j].value > data[j + 1].value) {
                    var temp = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = temp;
                }
            }
        }
        data.reverse();
        var num = data.length/3;
        for(var i = 0;i < data.length;i++){
            if(i<num){
                data[i].value = 180
            }else if(i>num && i<2*num){
                data[i].value = 150
            }else{
                data[i].value = 100
            }
        }
        console.log(data);
        console.log(geoCoordMap);
        
        var  tgas=this;
        tgas.circleArr=[];
   
        var convertData = function(data) {
            var res = [];
            for (var i = 0; i < data.length; i++) {
                var geoCoord = geoCoordMap[data[i].name];
                if (geoCoord) {
                    res.push({
                        name: data[i].name,
                        countrycode: data[i].countrycode,
                        value: geoCoord.concat(data[i].value)
                    });
                }
            }
            return res;
        };
        

3.清除

3.1这是清除透明圆点

clearCircle:function(){
		var circleArr=this.circleArr;
		for(var i = 0;i<circleArr.length;i++){
		   var towerItem = circleArr[i];
		   towerItem.destroy();
	   }
	},

3.2清除echarts 

3.2.1第一步在nav.js调用清除所有方法

 3.2.2第二步在清除所有方法中有释放所有事件的方法,释放所有事件的方法中有清除echarts的方法

3.2.3第三步 清除echarts

echarts本质上在一个div上面写的,所以我们清除div中的内容即可

disableAllEcharts: function() { 
			var oid = document.getElementById('echarts_div');
			if (oid) {
				viewer.container.removeChild(oid);
			}
		
		},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

akglobe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值