echarts label固定位置_ECharts+百度地图网络拓扑应用

前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图、ECharts和HT for Web三者结合起来也做一个类似空气质量报告的报表+拓扑图应用,于是有了下面的Demo:

abb224564b3aa1c7ab75f6f9ccddb9ec.gif

在这个Demo中,将GraphView拓扑图组件添加到百度地图组件中,覆盖在百度地图组件之上,并且在百度地图组件上和GraphView拓扑图组件上分别添加事件监听,相互同步经纬度和屏幕位置信息,从而来控制拓扑图上的组件位置固定在地图上,并在节点和节点之间的连线上加上了流动属性。右下角的图标框是采用HT for Web的Panel面板组件结合ECharts图表组件完成的。

接下来我们来看看具体的代码实现:

1.百度地图是如何与HT for Web组件结合的;

map = new BMap.Map("map");

var view = graphView.getView();

view.className = 'graphView';

var mapDiv = document.getElementById('map');

mapDiv.firstChild.firstChild.appendChild(view);

首先需要在body中存在id为map的div,再通过百度地图的api来创建一个map地图对象,然后创建GraphView拓扑图组件,并获取GraphView组件中的view,最后将view添加到id为map的div的第二代孩子节点中。这时候问题就来了,为什么要将view添加到map的第二代孩子节点中呢,当你审查元素时你会发现这个div是百度地图的遮罩层,将view添加到上面,会使view会是在地图的顶层可见,不会被地图所遮挡。

2.百度地图和GraphView的事件监听;

map.addEventListener('moveend', function(e){

resetPosition();

});

map.addEventListener('dragend', function(e){

resetPosition();

});

map.addEventListener('zoomend', function(e){

resetPosition();

});

graphView.handleScroll = function(){};

graphView.handlePinch = function(){};

function resetPosition(e){

graphView.tx(0);

graphView.ty(0);

dataModel.each(function(data){

var lonLat, position;

if(data instanceof ht.HtmlNode){

if(data.getId() != 'chartTotal') {

position = data.getHost().getPosition();

position = {x: position.x + 168, y: position.y + 158};

data.setPosition(position.x, position.y);

}

} else if(data instanceof ht.Node){

lonLat = data.lonLat;

position = map.pointToPixel(lonLat);

data.setPosition(position.x,position.y);

}

});

}

首先监听map的三个事件:moveend、 dragend、 zoomend,这三个事件做了同一件事--修改DataModel中所有data的position属性,让其在屏幕上的坐标与地图同步,然后将GraphView的Scroll和Pinch两个事件的执行函数设置为空函数,就是当监听到Scroll或者Pinch事件时不做任何的处理,将这两个事件交给map来处理。

在resetPosition函数中,做的事情很简单:遍历DataModel中的data,根据它们各自在地图上的经纬度来换算成屏幕坐标,并将坐标设置到相应的data中,从而达到GraphView中的节点能够固定在地图上的效果。

b2005049dd18834d551a31b9c72acca0.gif
658f4bbc2895c56876316ae989eec15e.gif

3.创建右下角的图表组件:

ht.Chart = function(option){

var self = this,

view = self._view = document.createElement('div');

view.style.position = 'absolute';

view.style.setProperty('box-sizing', 'border-box', null);

self._option = option;

self._chart = echarts.init(self.getView());

if(option)

self._chart.setOption(option);

self._FIRST = true;

};

ht.Default.def('ht.Chart', Object, {

ms_v: 1,

ms_fire: 1,

ms_ac: ['chart', 'option', 'isFirst', 'view'],

validateImpl: function(){

var self = this,

chart = self._chart;

chart.resize();

if(self._FIRST){

self._FIRST = false;

chart.restore();

}

},

setSize: function(w, h){

var view = this._view;

view.style.width = w + 'px';

view.style.height = h + 'px';

}

});

function createPanel(title, width, height){

chart = new ht.Chart(option);

var c = chart.getChart();

c.on(echarts.config.EVENT.LEGEND_SELECTED, legendSelectedFun);

var chartPanel = new ht.widget.Panel({

title: title,

restoreToolTip: "Overview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三年Java开发,你连基础的JVM运行时内存布局都忘了

面:为什么要使用双亲委派机制去加载类? 答:避免多份同样字节码的加载,浪费内存。 类的加载方式 隐式加载:new显示加载:loadClass、forName等 类的装载过程如下图: 面:loadClass和…

vue实现可编辑的文字_苹果还自带文字转语音,只要一键按下便可实现,今天分享给大家...

如果想将文字转成语音,那大家平时都是怎么操作?下面小编就为大家介绍手机,电脑上都可以使用的方法,让我们一起来看看吧!一、手机端操作1、苹果手机其实苹果手机就自带了文字转语音功能,只要打开手机&#x…

三面美团Java岗,面试竟然被这31道Java基础题难倒了

01 分布式限流:NginxZooKeeper 1.1 分布式限流之Nginx 请解释一下什么是 Nginx? 请列举 x Nginx 的一些特性。 请列举 x Nginx 和 和 Apache 之间的不同点 请解释 x Nginx 如何处理 P HTTP 请求。 在 x Nginx 中,如何使用未定义的服务器名称来阻止…

海龟绘图小动物_震惊!被塑料绳勒成两半的海龟

海洋,其实离人类很近,我们在追逐沙滩和日落,享受美味的海鲜的时候,可曾想到我们平时的一些很随意的行为,会给一些海洋生物带来无法恢复的伤害,甚至夺取它们的生命。或许人们的冷漠无知尚未得到惩罚&#xf…

上海大厂Java面试经历:初步理解类加载运行机制和类加载过程

volatile相关经典面试题 谈谈volatile的特性volatile的内存语义说说并发编程的3大特性什么是内存可见性,什么是指令重排序?volatile是如何解决java并发中可见性的问题volatile如何防止指令重排volatile可以解决原子性嘛?为什么?v…

python生成泊松分布随机数_泊松分布随机数

一、功能产生泊松分布的随机数。二、方法简介泊松分布的概率密度函数为\[f(x)\frac{\lambda ^{x}e^{-\lambda }}{x!} \qquad x\in \left \{ 0,1,...,\lambda \right \}\]用\(P(\lambda)\)表示。泊松分布的均值为\(\lambda\),方差为\(\lambda\)。定理 若\(\lambda &g…

mysql数据库优化面试

前言 现在Java程序员面试都是因为没有丰富的工作经验和自己过硬的技术,所有都不知道一般互联网应该会问什么技术问题,加上自己可能去面试的时候没有准备的太充分,一面试刚跟面试官扯几个面试题就不知道自己在哪里了,被怼的体无完…

leetcode中文版python_Python版LeetCode1.两数之和

啦啦啦,欢迎开启LeetCode刷题的旅程,这将是一段漫长而又艰辛的旅程。这道Two Sum的题目作为LeetCode的开篇之题,乃是经典中的经典,正所谓‘平生不识TwoSum,刷尽LeetCode也枉然’,就像英语单词书的第一个单词…

mysql数据库备份方式,跳槽大厂必看!

NO1:说说zookeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现(Chubby是不开源的),它是集群的管理者,监视着集群中各个节点…

python浅蓝色对应的代码_浅蓝色Python模块不在m上工作

我正在尝试通过macosx10.7.2上的Python连接到wiimote。在为此我试着用浅蓝色。运行时:import lightbluePython会给我这个错误。在>>> import lightblueTraceback (most recent call last):File "", line 1, in File "/Library/Frameworks/P…

mysql数据库安装教程32位,看这一篇就够了!

字节跳动 ⾯试前⼀⾯⼆⾯⼩结 ⾯试前 头条的⾯试是三家⾥最专业的,每次⾯试前有专⻔的HR和你约时间,确定OK后再进⾏⾯试。每次都是通过视频⾯试,因为都是之前都是电话⾯或现场⾯,所以视频⾯试还是有点不⾃然。也有⼈觉得视频⾯试…

java cron工具类_Java工具类之:包装类

我们都知道,JDK 其实给我们提供了很多很多 Java 开发者已经写好的现成的类,他们其实都可以理解成工具类,比如我们常见的集合类,日期相关的类,数学相关的类等等,有了这些工具类,你会发现它能很大…

mysql数据库安装,真香!

Spring Security观后感——手绘思维脑(供参考) 手绘的思维导图,是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级文档之后所绘的,相当于是一个知识的总结与梳理,我将其分为“核心组件”与“工作原理/认证流程”。 Spring Se…

python列表代码_8种高级的Python列表使用技巧,都给你整理好啦(附实操代码)...

Python中的列表是我们很常见的数据结构之一,也是很强大的数据结构之一!Python列表功能非常丰富,并且具有很多隐藏的技巧没有被发现。一、使用Python过滤列表1.使用Filter()函数filter()函数采用两个参数:函数和可迭代项。 在这种情况下&#…

mysql数据库实用教程答案

前言 数据库相关的面试题早已成为了一线互联网大厂面试的家常菜,如果你对数据库不太熟悉,我劝你不要轻易面试大厂。那么,为什么数据库成了大厂面试的家常菜呢?主要原因当然还是海量数据。 无论对于刚入行的小白还是有几年Java开…

在idea中新建的text文件_开发属于自己的第一款 IDEA 插件!

往期热门文章:1、《往期精选优秀博文都在这里了!》2、又一个程序员跑路删库跑路被抓了,导致服务器瘫痪 36 个小时!3、恕我直言,有了这款 IDEA 插件,你可能只需要写 30% 的代码。。。4、Java8 的 Stream API 的确牛X&am…

mysql数据库开发的36条军规

前言 一般的小项目,比如几百人左右访问的项目,访问量几万的项目,如果想用缓存,单机实例完全够用。小黄图就是用的阿里云256MB配置的Redis缓存,日几千的访问量是妥妥够用的了。Redis号称可以支撑10wqps,当然…

mysql 替换非中文_mysql中的正则操作 匹配手机号,匹配中文,替换

mysql中的正则操作 匹配手机号,匹配中文,替换正则匹配hy_user表内tel字段的电话号码:SELECT * FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELECT tel FROM hy_user WHERE tel REGEXP "[1][35678][0-9]{9}"SELE…

mysql数据库引擎怎么看,值得收藏!

什么是Service Mesh 作为Service Mesh技术探索和实践的先行者,全球第一个真正的Service Mesh项目Linkerd负责人、Buoyant公司创始人兼CEO William Morgan第一次完整地阐述了Service Mesh。按照William Morgan的定义,Service Mesh是一个致力于解决服务间…

mysql error -1_【Mysql】SQLException: Got error -1 from storage engine 问题解决!

错误信息:Caused by: java.sql.BatchUpdateException: Got error -1 from storageengineatcom.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.atcom.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.atorg.apache.spark.sql.…