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.pswp.cn/news/385962.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385962.shtml
英文地址,請注明出處:http://en.pswp.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.…