国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[2016年末巨獻] — HTML5可交互地鐵線路圖(第二季:帝都進階版)

yck / 2743人閱讀

摘要:兩個月前是的,兩個月過去了,歲月如梭,哥幫小弟做的魔都地鐵拖拖樂打了下廣告,沒想到一炮而紅,好評如潮。下面進入正題一些基本功能這里不再贅述,大家可以查看上一篇有關魔都地鐵圖的文章。一旦地鐵發生故障,會導致大量乘客滯留。

兩個月前(是的,兩個月過去了,歲月如梭),哥幫小弟做的“HTML5魔都地鐵拖拖樂”打了下廣告,沒想到一炮而紅,好評如潮。現在的年輕人,還是很上進的,一被表揚,動力無窮。年底雖然忙得眼底發黑,小弟硬是忙里偷閑又做了一個帝都的版本。

這個版本,不光是換成了帝都的地鐵圖,還增加了很多聽起來就很能“變現”的功能:線路規劃、站點告警展示、站點內部電路圖、站點三維呈現……在這個信息過剩的年代,多數人都是涉獵很廣卻學而不精,小弟這種對問題進行深度挖掘的精神,哥真的很佩服。

------------------------------------------------下面進入正題-----------------------------------------------------------

一些基本功能這里不再贅述,大家可以查看上一篇有關魔都地鐵圖的文章。哥今天主要給大家介紹新增功能。

我們先來看一下小弟做的帝都地鐵圖的效果,基本上是參照baidu的地鐵圖來復現的:

依然是純矢量、可交互、有動態效果、無失真縮放的拓撲圖:

可視化效果具體就不展開了,拿到過拖拖樂的兄弟們都了解。下面主要還是說說這次新增的功能點,怎么形容呢?殺很大噢~

選中線路會發光

鼠標點擊某條地鐵線路,選中的線路會以發光的形式突出顯示出來。

小弟說之所以要增加這個功能,是因為現在的地鐵線路太多了,想查看單條線路的時候經常會看串……也是,雖然交通部門在設計地鐵線路圖的時候已經盡量用不同的顏色去標注每條線路,但是擋不住地鐵十幾二十條地往上加,要想查看單條線路還真是費勁。有了這個功能,頓時清爽了很多有木有? 哥必須為這個功能點個贊……

實現代碼其實很簡單:

function changeAlpha(lineNumber,alpha){
        alpha = alpha || 1;
        var list = lines[lineNumber];
        list.forEach(function(li){
            li.setStyle("whole.alpha",alpha);
            li.s("outer.style", alpha < 1 ? "none":"glow");
            li.s("label.shadowable", alpha >= 1 );
        });
        list = stations[lineNumber];
        list.forEach(function(li){
            li.setStyle("whole.alpha",alpha);
            li.s("outer.style", alpha < 1 ? "none":"glow");
            li.s("label.shadowable", alpha >= 1 );
        });
    }

為啥這么好的想法,地圖廠商都不提供呢?如果你對仍然體會不是很深刻的話,看看下面這張圖,相信你會覺得這個功能是多么賞心悅目……

高亮顯示兩站點間的路線

用鼠標右鍵點擊同一條線路上的兩個站點,這兩個站點之間的路線會高亮顯示。小弟說,從用戶角度來說,這個功能可以用來進行路線的規劃。不過一般我們不會在前端做路線規劃,只需要把計算好的路線結果顯示出來就可以了。小弟做這個功能的另一個目的是為了方便運維人員查看某一段線路上的告警站點。

告警站點一目了然

說到告警,才進入了這次的重點。

地鐵因運量大、速度快、無堵車等優點,已經成為眾多上班族的首選出行方式。一旦地鐵發生故障,會導致大量乘客滯留。因此,對于地鐵運維人員來說,能夠快速發現故障站點并及時排除故障就顯得尤為重要。

我們可以看到,小弟做的這張帝都地鐵圖,與普通地鐵圖最大的不同是上面增加了許多五顏六色的告警標識,告警站點一目了然,上面還標明了告警的數量以及告警級別。這樣,地鐵運維人員就可以快速掌握各地鐵站點的告警情況,合理安排故障排查的優先級。

因為我們公司是做企業應用的嘛,這個功能是很容易放上去的,代碼也不復雜。

Util.addAlarm("alarm" + p["-sid"], n, twaver.AlarmSeverity.severities.get(random), box.getAlarmBox(),random);
addAlarm: function (alarmID, staNode, alarmSeverity, alarmBox,random) {
  var alarm = new twaver.Alarm(alarmID, staNode.getId(), alarmSeverity);
  alarm.setClient("MAPPINGID",this.alarmCode[random]);
  alarm.setClient("raisedTime",new Date());
  alarm.setClient("platform",staNode.getName());
  alarm.setAcked(Math.random()* 10 > 5? true:false);
  alarmBox.add(alarm);
}                             
軌線告警數據展示

雙擊一條線路,會彈出該線路的所有告警數據,包括告警站臺、告警級別、告警發生時間等詳細信息。這里用的是現成的表格組件。

實現也很簡單,首先兩行代碼將表格和DataBox關聯:

var table = new twaver.controls.Table(box.getAlarmBox());
var tablePane = new twaver.controls.TablePane(table);

然后用以下代碼實現:

    var alarmSeverity = {
        Critical: "嚴重",
        Major:"主要",
        WARNING:"警告",
    } 
    table.onCellRendered = function (params) {
        if (params.column.getName() === "告警級別") {
            params.div.style.backgroundColor = params.data.getAlarmSeverity().color;
        }
    };
    var column = createColumn(table, "站臺", "platform", "client", "string",100,40);
    column.setHorizontalAlign("center");
    var column = createColumn(table, "告警級別", "alarmSeverity", "accessor", "string", true);
    column.setWidth(80);
    column.setHorizontalAlign("center");
    var setValue = column.setValue;
    column.setValue = function (data, value, view) {
        value = twaver.AlarmSeverity.getByName(value);
        setValue.call(column, data, value, view);
    };
    column.setEnumInfo(twaver.AlarmSeverity.severities.toArray());
    var column = createColumn(this.table, "告警碼", "MAPPINGID", "client","string",166);
    column.setHorizontalAlign("center");
    var column = createColumn(this.table, "告警問題", "alarmque", "client");
    column.setHorizontalAlign("center");
    var timeColumn = createColumn(table, "告警發生時間", "raisedTime", "client");
    timeColumn.setWidth(167);
    timeColumn.setHorizontalAlign("center");
    timeColumn.renderCell = function (params) {
        var span = document.createElement("span");
        span.innerHTML = formatDate(params.value, "yyyy-MM-dd hh:mm:ss");
        span.style.whiteSpace = "nowrap";
        params.div.appendChild(span);
    }
}
站點信息展示

單擊站點,會彈出一個功能菜單,現在有展示、告警、電路等模塊。小弟說還可以根據需要,定制更多功能模塊,全方位展示站點信息。我們一一來看幾個菜單都展示了些啥。

單個站點告警

點擊“告警”,彈出站點告警數據,還可以查看該站點的歷史告警數據。

小弟說,前幾天他去看了一個很高大上的軌道交通技術展會,了解到每個站點內就有大量的設備,像電力設備、環控設備、屏蔽門設備、電梯設備、門禁設備、廣播和閉路電視設備、通訊設備等等。因此,每個站點也必須要有集中的告警展示。當然,現在做的還比較簡單,如果有真實數據,就能做得更好看了,反正菜單定義都很方便。

站點內部拓撲圖展示

地鐵里的通信系統還是比較復雜的,據我了解,除了有專用的通信系統外,還要提供民用的通信系統,以及專用的電源管理、廣播、視頻監控等等子系統。這就必須要咱們擅長的拓撲圖上場了。

點擊“圖紙”按鈕,彈出站點內部設備的拓撲圖。所有的圖元都可以拖拽、縮放,告警、分組這些該有的功能都有,如果拓撲圖有多個層級,不停往下加layer就好了。

代碼稍復雜:

button.onclick = function (e) {
    var dialog = document.getElementById(id);
    dialog && document.body.removeChild(dialog);
    var box2 = new twaver.ElementBox();
    var network2 = new twaver.vector.Network(box2);
    var view = network2.getView();
    var autoLayouter = new twaver.layout.AutoLayouter(box2);
        // network2.setZoomManager(new twaver.vector.MixedZoomManager(network2,false));
        var items = Util.topo_data;
        var i,item;
        for(i = 0;i < items.length; i++){
            item = items[i];
            Util.createElement(box2, item);
        }
        var self = this;
        var hGap=80;
        autoLayouter.getDimension=function (node) {
            if (node instanceof twaver.Group && node.getChildrenSize() > 0) {
                var rect = null;
                for (var i = 0, n = node.getChildrenSize(); i < n; i++) {
                    var child = node.getChildAt(i);
                    if (child instanceof twaver.Node) {
                        if (rect) {
                            rect = _twaver.math.unionRect(rect, child.getRect());
                        } else {
                            rect = child.getRect();
                        }
                    }
                }
                if (rect) {
                    return { width: rect.width+hGap, height: rect.height };
                } else {
                    return null;
                }
            } else {
                return { width: node.getWidth()+hGap, height: node.getHeight() };
            }
        },
        autoLayouter.doLayout("hierarchic", function(){
            network2.zoomOverview();
        });
        var left = e.clientX, top = e.clientY;
        var width = 760, height = 360;
        Util.showTopo("dialog_topo",element,network2,width+"px",height+"px","260px","0px","圖紙");
        Util.changeState();
        $("#dialog_topo").animate({
            top:"100px",
        },"normal","swing",function(){
        });
    }
站點三維展示

這個功能可謂是很趕時髦的,點擊“展示”模塊,跳出當前站點的三維展示圖,重點標識了幾個出口的位置。

小弟說現在地鐵站的出口示意圖一般都是平面圖,或者是假3D圖,身邊有些妹子經常表示看不太懂,尤其在一些比較復雜的換乘站點,所以整了個3D示意圖,還可以任意角度旋轉、縮放什么的。整個過程我的注意力就被“妹子”吸引了,不得不說為了妹子,小弟的這個地鐵站可是像模像樣的。

模型內部也可以進入,用來展示一些消防用具的位置。不過這地鐵內部,我越看越覺得像某部喪尸片呢……

電路展示

最后,點擊“電路”模塊,彈出站點內部電路圖。如果對接上地鐵的供配電系統,那還是這個展示平臺上相當不錯的一個亮點。

功能介紹到這里就基本結束了。

總結一下,上次小弟主要是在可視化方面下了功夫,而這次是從乘客、監控和運維的角度去設計的功能。盡管很多功能只是點到為止,但真要在實際項目中用起來,相信又是一個亮點工程了。

2016總結

看到今天sfgg有2016總結活動呢,那哥也來總結一把。

還得先說2015年,哥初來sfgg,斗膽發了幾篇文章,認識了不少朋友,也給了不少建議。2016年,項目進展順利,很多精力都投入在非技術領域,自然文章也寫的不勤快了。除了一篇3D機房的文章,后來就開始沾我小弟的光了。不過這也沒啥,江山代有小弟出,團隊就怕缺牛人。從技術走向管理的路,大多也是如此吧。

最后祝大家:

 
 
 
 
 

Happy New Year!

索取代碼照舊:tw-service@servasoft.com

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86716.html

相關文章

  • SegmentFault 技術周刊 Vol.35 - WebGL:打開網頁看大片

    摘要:在文末,我會附上一個可加載的模型方便學習中文藝術字渲染用原生可以很容易地繪制文字,但是原生提供的文字效果美化功能十分有限。 showImg(https://segmentfault.com/img/bVWYnb?w=900&h=385); WebGL 可以說是 HTML5 技術生態鏈中最為令人振奮的標準之一,它把 Web 帶入了 3D 的時代。 初識 WebGL 先通過幾個使用 Web...

    objc94 評論0 收藏0
  • 基于 HTML5 Canvas 的交互地鐵路圖

    摘要:前言前兩天在上尋找靈感的時候,看到了很多有關地圖類似的例子,地圖定位等等,但是好像就是沒有地鐵線路圖,就自己花了一些時間搗鼓出來了這個交互式地鐵線路圖的,地鐵線路上的點是在網上隨便下載了一個,這篇文章記錄自己的一些收獲畢竟我還是個菜鳥以及代前言前兩天在 echarts 上尋找靈感的時候,看到了很多有關地圖類似的例子,地圖定位等等,但是好像就是沒有地鐵線路圖,就自己花了一些時間搗鼓出來了這個交...

    zengdongbao 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<