快速开发基于 HTML5 网络拓扑图应用

采用 HT 开发网络拓扑图非常容易,例如《入门手册》的第一个小例子麻雀虽小五脏俱全:http://www.hightopo.com/guide/guide/core/beginners/examples/example_overview.html

该例子展示了如何构建两个节点、一条连线、以及一个 Group 的组合效果。结合 《数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇》可以容易理解构建一个拓扑界面基本上就是操作 DataModel 数据模型,以下为构建上图界面效果的模型代码部分:

// init data model
hello = new ht.Node();
hello.setPosition(60, 140);
hello.setName(‘Hello‘);
hello.setStyle(‘note‘, ‘I love HT‘);
hello.setStyle(‘note.background‘, ‘#FFA000‘);
dataModel.add(hello);

world = new ht.Node();
world.setPosition(260, 80);
world.setName(‘World‘);
world.setStyle(‘note‘, ‘HT for your imagination‘);
world.setStyle(‘note.expanded‘, false);
world.setStyle(‘border.color‘, ‘red‘);
dataModel.add(world);

edge = new ht.Edge(hello, world);
edge.setName(‘Hello World\nwww.hightopo.com‘);
edge.setStyle(‘label.color‘, ‘white‘);
edge.setStyle(‘label.background‘, ‘#3498DB‘);
dataModel.add(edge);  

group = new ht.Group();
group.setName(‘HT for Web ‘ + ht.Default.getVersion());
group.addChild(hello);
group.addChild(world);
group.addChild(edge);
dataModel.add(group);

当然真实的系统不会像上述代码这样写死内容,一般用户通过后台数据查询,然后再根据后台数据动态创建拓扑节点、连线、组、子网等图元内容,并填充如图元名字、连线颜色、告警内容等属性信息,而因为 HT 技术基于 HTML5,因此大部分工业控制 Web SCADA 客户都采用了 WebSocket 的实时通讯方式,关于 WebSocket 的使用可参考这篇文章:3D拓扑自动布局之Node.js篇

构建模型就是上面这样简单,剩下工作就是设置相应的图元属性达到信息展示和美观的效果,关于图元甚至整体 HT 图形组件风格的自定义,可参考《HT for Web 风格手册》,这里我举个简单的小细节,可人有人留意到上面设置 label 的代码有点特别:

edge.setName(‘Hello World\nwww.hightopo.com‘);

这里 \n 顾名思义就是换行的意思,当然除了换行外,还可以有垂直布局等等花哨的展示形态,可参考《网络拓扑图上文本的巧妙应用》一文的介绍:

var list = [], node;
for (var i = 0; i < 4; i++) {
    node = new ht.Node();
    node.setImage(‘station‘);
    node.p(100 + i * 100, 100);
    dm.add(node);

    list.push(node);
}
node = list[0];
node.s({
    ‘label‘: ‘厦门‘,
    ‘label.font‘: ‘22px arial, sans-serif‘,
    ‘label2‘: ‘Xiamen‘,
    ‘label2.position‘: 31,
    ‘label2.offset.y‘: 23
});

node = list[1];
node.s({
    ‘label‘: ‘图\n扑‘,
    ‘label.position‘: 14,
    ‘label.font‘: ‘22px arial, sans-serif‘,
    ‘label2‘: ‘Hightopo‘,
    ‘label2.position‘: 14,
    ‘label2.offset.x‘: -7,
    ‘label2.rotation‘: -Math.PI / 2
});

node = list[2];
node.s({
    ‘label‘: ‘上\n海‘,
    ‘label.position‘: 20,
    ‘label.font‘: ‘22px arial, sans-serif‘,
    ‘label2‘: ‘Shanghai‘,
    ‘label2.position‘: 20,
    ‘label2.offset.x‘: 6,
    ‘label2.rotation‘: -Math.PI / 2
});

node = list[3];
node.s({
    ‘label‘: ‘北京‘,
    ‘label.position‘: 3,
    ‘label.font‘: ‘22px arial, sans-serif‘,
    ‘label2‘: ‘Beijing‘,
    ‘label2.position‘: 3,
    ‘label2.offset.y‘: -23
});

当然也可以达到动态旋转文字的效果,拖拽下面这个红色圆球达到动态旋转文字的效果:http://www.hightopo.com/guide/guide/core/beginners/examples/example_label.html

从上面例子可以参考光光一个文字还有设置颜色、背景、字体、最大长度等等参数,如果加上 Position 的布局 3D 的布局那几乎可以基于文字独立写篇文章了,这里就不一而足了,有兴趣的可以玩玩位置手册的各种例子:http://www.hightopo.com/guide/guide/core/position/ht-position-guide.html

构建完图元连线关系,设置完图元风格属性,接下来主要就是图元摆放问题,对于工业控制领域的图元摆放一般是手工进行,所以 Web SCADA 工业控制领域一般会构建一套针对自己产品的 HMI 人机界面绘图工具,可参考《基于HT for Web的Web SCADA工控移动应用》文章:

对于电信网管拓扑应用,由于网络拓扑图元数据量往往常常非常巨大,虽然 HT 拓扑图组件性能非常强劲,承载好几甚至上十万的网络拓扑矢量图元都毫无压力,但如何实现这么多数据量图元的布局是个问题,如果是规规矩矩的自然比较容易,写两个 for 循环就能实现网格布局,可参考 http://www.hightopo.com/demo/fan/index.html 这个数千个风机的例子,这种例子一般用于能源行业控制系统,通过采用 HT 的矢量格式,可动态控制风机的转速、颜色等参数,来直观形象的表达该风机的运行状态。

这个例子http://www.hightopo.com/demo/fan/index.html 并没有针对手机做特别优化,但我特意用 iOS Safari 来跑,不得不说 Safari 10 还是配得上 HT 的这个例子,苹果还是不断努力在提升 HTML5 在其产品线中的性能,并且 Safari 10 号称已经 100% 支持 ES6 标准了,https://developer.apple.com/library/prerelease/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html

The ECMAScript 2015 standard, also known as ES6, is completely supported, bringing this major JavaScript evolution to Safari on macOS and iOS.

不过更多的电信网管拓扑图应用会采用 HT 的自动布局功能,可参考《HT for Web 自动布局手册》和 《HT for Web 弹力布手册》,利用好自动布局功能可以大大减少项目上线的实施工作量,且电信设备往往需要自动发现动态变化,几乎无法用手工完成这些事情。如果结合华为任正非老大最近的言论 http://finance.sina.com.cn/chanjing/gsnews/2016-09-26/doc-ifxwevmf2247492.shtml ,可以想象将来华为的电信网管拓扑,应该利用其独有的行业网络数据,依靠人工智能来提供自动布局算法布局,好吧,我扯远了刹车回主题。

其实自动布局无法提供算法进行图元摆放,以便达到业务展示的需求,可参考《电信网络拓扑图自动布局 - 曲线布局》和《电信网络拓扑图自动布局 - 总线布局》,这两篇文章详细分析了如果自定义出总线和沿着任意曲线布局的案例:

以上创建网络图元、设置图元连线关系、配置图元风格属性、进行图元布局摆放就是构建拓扑图的几个基本步骤,其实熟悉了 HT 分分钟就能开发出像模像样的 HTML5 网络拓扑图应用,如果需要数据存储可参考《HT for Web 序列化手册》,用户可将整个拓扑图序列化成字符串的 JSON 格式内容,这样你可以保存到后台数据库,或者后台服务器文件皆可,HT 只是前端的图形组件,不介入后台通讯和存储,反正控制权在你,不收任何约束,可以随心所欲的设计你的网络拓扑图整体系统架构。

更多 HTML5 拓扑图例子可参考:http://www.hightopo.com/demos/index.html

时间: 2024-10-09 22:31:25

快速开发基于 HTML5 网络拓扑图应用的相关文章

矢量Chart图表嵌入HTML5网络拓扑图的应用

使用 HT for Web (以下简称 HT)开发HTML5网络拓扑图的开发有 Chart 需求的项目的时候,感觉很痛苦,HT 集成的 Chart 组件中,并不包含有坐标,在展现方面不是很直观,但是也不是没有解决方案,接下来我们就来聊聊具体的解决方案. 首先,第一种解决方案是,在定义 Chart 矢量的时候在 comps 中除了定义 Chart 外,再添加几个你自定义的绘制区域来绘制你想要的坐标轴,效果及 example 如下: 该 Chart 的定义代码见附录1(代码的定义太长),代码虽然长,

使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度

上一篇博文使用PhoneGap开发基于Html5应用一:PhoneGap简介 中我介绍了如何从phonegap官网上下载源码并启动第一个应用,今天我们把phonegap的应用稍微改一下,让他实现几个比较牛叉的功能: 1.启动一个网页 2.启动摄像头 3.启动定位 老规矩,在实现这几个功能之前我们先讲一下原理性的东西: 首先我们先回顾一下上次说的,其实phonegap应用中有个特别的webview,它就是CDVViewController,关于这个类我们后面再详细描述,现在我们先了解这个类到底做了

使用PhoneGap开发基于Html5应用一:PhoneGap简介

兄弟们,我胡汉三又回来啦! 1.何为PhoneGap 之前我的一个客户有这么一个要求:开发一款移动应用,但不需要做成本地应用,而是做成一个类似网页一样的应用.这样我们只需要在浏览器里访问他们公司的这个应用的网页就可以实现本地化应用的基本功能.但有个问题是,出于安全考虑,android,iOS都没有提供通过浏览器调用手机设备中的摄像头,GPS定位等设备的接口(iOS提供了部分).为了实现这个功能,PhoneGap是个超级可爱的东东就产生了. 如果亲爱的你曾经做过iOS或者Android开发的话应该

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

回<[开源]EnterpriseFrameWork框架系列文章索引> 本章内容与上一张<利用EnterpriseFrameWork快速开发Winform系统(C/S)>关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模

HTML5 网络拓扑图性能优化

HTML5 中的 Canvas 对文本的渲染(fillText,strokeText)性能都不太好,比如设置字体(font).文本旋转(rotation),如果绘制较多的文本时,一些交互操作会手动很大的影响,操作起来没那么顺畅,体验将会极其差,这不是我们想要的结果,再进一步和图片的绘制进行比较比较,你会发现,绘制图片和绘制文本在性能上不是一个等级的,在性能上绘制图片会好太多. 我们今天就来谈谈 HT for Web 性能相关的问题.在 HT 中,有很多地方可以设置文本,每个节点上面都可以设置两个

HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用

在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web 的整合. HT for Web作为逻辑拓扑图形组件自身没有GIS功能,但可以与各种GIS引擎即其客户端组件进行融合,各取所长实现逻辑拓扑和物理拓扑的无缝融合,本章将具体介绍HT for Web与开发免费的OpenLayers地图结合应用的关键技术点,该文介绍的结合的原理,其实还可推广到与ArcGIS.百度地图

五、利用EnterpriseFrameWork快速开发基于WebServices的接口

回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWork框架开发系统的三种模式,Web模式.Winform模式以及WCF模式,本章主要针对最后一种模式WebServices模式开发系统对外接口程序的过程: 说明一下为什么框架要把WebService的集成进来,主要还是利用WebService跨平台的优势用来开发外部系统的接口是非常方便的:不管第三方是java平

基于HTML5的拓扑图编辑器(2)

继续来说编辑器的需求, 前面介绍了拖拽创建节点.以及连线的方法,并加入到了其后的 Qunee 类库,实际应用中需要更多功能,Qunee 的拓扑图编辑器也在逐渐完善,一方面增加多种编辑交互,一方面提供数据导入导出,同时也在摸索编辑器的整体界面设计和前端开发框架 拖拽创建节点 延续之前提供的功能,增加更多可配置选项(可设置节点类型,样式和属性),支持按住shift快捷键,直接拖入到分组内 新增多种交互模式 创建连线交互 Q.Consts.INTERACTION_MODE_CREATE_SIMPLE_

轻装上阵Flink--在IDEA上开发基于Flink的实时数据流程序

前言 本文介绍如何在IDEA上快速开发基于Flink框架的DataStream程序.先直接上手! 环境清单 案例是在win7运行.安装VirtualBox,在VirtualBox上安装Centos操作系统.所有资源都在百度云上,有需要请直接下载.安装教程基本都是傻瓜式,文章不做讲述,有需要直接网上搜索. 资源 版本 VirtualBox 5.2.16 Centos 6.5 Maven 3.6.3 JDK 8u241 IDEA 2019.3.2 Flink 1.10.0 链接:https://pa