pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

基于HTML5制作在線上海地鐵圖

下面以上海2012地鐵圖為例,嘗試使用HTML5技術來實現,找到一個HTML5的圖形組件-Qunee for HTML5,展示上海地鐵站點以及相關信息流,簡單學習一下,就可以很好的解決這類需求,做出優美

       某市政項目要用到地鐵圖,展示上海地鐵站點以及相關信息流,嘗試使用HTML5技術來實現,自己折騰有點慢,找到一個HTML5的圖形組件-Qunee for HTML5,簡單學習一下,就可以很好的解決這類需求,做出優美的展現,下面以上海2012地鐵圖為例,效果如下:


      示例講解

       首先需要解決數據問題,可以從維基百科或者上海地鐵官網中獲取,不過也免不了人工,要達到良好的顯示效果,需要不只要記錄站點的位置,還需要設置文本標簽的理想位置,有時為了避免文字疊加,需要設置旋轉角度……總之事在人為,想想辦法,最終解決了數據問題,再加上Qunee圖形組件的強大展示效果,做出來可以交互的在線地鐵圖

       數據格式

       采用JSON格式數據,分三種類型:文本標簽、站點、地鐵線

       總的結構如下:

  1. {
  2. "labels" : [  ... ],
  3. "stations" : [ ... ],
  4. "lines" : [ ... ]
  5. }
復制代碼

       文本標簽數據

       包含坐標和文字信息,如果文字需要旋轉,則會增加”rotate”屬性,下面是“莘莊”文本標簽信息
  1. {
  2. "text" : "莘莊",
  3. "x" : 883.591,
  4. "y" : 1625.695
  5. }
復制代碼

       文字與節點旋轉效果


       站點數據

       包含坐標、旋轉角度以及編號信息,下面是“莘莊”站的信息

  1. {
  2. "id" : 5,
  3. "x" : 869.8513512641732,
  4. "y" : 1597.6559686949402,
  5. "rotate" : 0.7853981633974483
  6. }
復制代碼

       地鐵線數據

       包含名稱,顏色,以及經過的站點編號

  1. {
  2. "name" : "1",
  3. "color" : "#e52035",
  4. "stations" : [64, 70, 67, 71, 72, 65, 69, 73, 66, 68, 63, 62, 22, 61, 60, {"id": 21, "yOffset": 0.5}, 59, {"id": 18, "yOffset": -0.5}, 17, 58, 14, 7, 57, 6,
  5. 56, 44, 47, 5]
  6. }
復制代碼

       對于特殊情況,比如兩條地鐵線共用一條線路的情況,會出現兩條線重合,為了避免這種情況,還可以指定站點橫向偏移量,比如上面一號線中的如下數據

  1. {"id": 21, "yOffset": 0.5}
復制代碼

       因為上海地鐵三號線與四號線共用線路較多,所以這種處理更加明顯

       三號線數據

  1. {
  2. "name" : "3",
  3. "color" : "#f9d300",
  4. "stations" : [6, 95, 96, 97, {"id":12,"yOffset":0.5}, {"id":11,"yOffset":0.5}, {"id":8,"yOffset":0.5}, {"id":9,"yOffset":0.5},
  5. {"id":10,"yOffset":0.5}, {"id":25,"yOffset":0.5}, {"id":26,"yOffset":0.5}, {"id":238,"yOffset":0.5}, {"id":22,"yOffset":-0.5}, {"id":27,"yOffset":-0.5},
  6. 98, 99, 100, 101, 104, 105, 107, 108, 109, 106, 110, 111]
  7. }
復制代碼

       地鐵共線效果

       創建圖元

       數據需要轉換成qunee圖元對象,三種類型分別對應三個創建函數

       創建文本標簽
  1. function createText(name, x, y, rotate){
  2.     var text = graph.createNode(name, x, y);
  3.     if(rotate){
  4.         text.rotate = rotate;
  5.     }
  6.     text.zIndex = 20;
  7.     text.image = null;
  8.     text.setStyle(Q.Styles.BACKGROUND_COLOR, Q.toColor(0x88FFFFFF));
  9.     text.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM);
  10.     text.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
  11.     text.setStyle(Q.Styles.LABEL_PADDING, PADDING);
  12.     return text;
  13. }
復制代碼

       創建站點

  1. function createStation(station){
  2.     var node = graph.createNode(null/**station.name*/, station.x, station.y);
  3.     node.stationId = station.id;
  4.     node.setStyle(Q.Styles.LABEL_FONT_SIZE, 10);
  5.     node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.CENTER_MIDDLE);
  6.     node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
  7.     node.zIndex = 10;
  8.     if(station.rotate){
  9.         node.image = roundRect;
  10.         node.rotate = station.rotate;
  11.     }else{
  12.         node.image = circle;
  13.     }
  14.     node.setStyle(Q.Styles.SHAPE_FILL_COLOR, "#FFF");
  15.     node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, "#000");
  16.     return node;
  17. }
復制代碼

       創建地鐵線

       createLine(…)函數用于創建地鐵線,使用了節點類型圖元,并設置節點主體為路徑,函數updateLine(…)用于從站點信息自動生成線路路徑

  1. function createLine(line){
  2.     var stations = line.stations;

  3.     var node = graph.createNode(line.name);
  4.     node.stations = stations;
  5.     node.movable = false;
  6.     node.setStyle(Q.Styles.LABEL_FONT_SIZE, 50);
  7.     node.setStyle(Q.Styles.LABEL_COLOR, line.color);
  8.     node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM);
  9.     node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.LEFT_TOP);
  10.     node.setStyle(Q.Styles.LAYOUT_BY_PATH, true);
  11.     node.anchorPosition = null;
  12.     node.setStyle(Q.Styles.SHAPE_STROKE, size);
  13.     node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, line.color);

  14.     updateLine(node, true);
  15.     return node;
  16. }
復制代碼
  1. function updateLine(line, addListener){
  2.     var path = new Q.Path();
  3.     line.image = path;

  4.     var stations = line.stations;
  5.     var first = true;
  6.     Q.forEach(stations, function(s){
  7.         var station = getStation(s.id || s);
  8.         if(!station){
  9.             return;
  10.         }
  11.         if(addListener){
  12.             addLocationChangeListener(station.stationId, line);
  13.         }
  14.         var location = station.location;
  15.         var x = location.x, y = location.y;
  16.         if(s.yOffset){
  17.             var offset = s.yOffset * size;
  18.             var rotate = station.rotate || 0;
  19.             var sin = Math.sin(rotate);
  20.             var cos = Math.cos(rotate);
  21.             x += cos * offset;
  22.             y += sin * offset;
  23.         }
  24.         if(first){
  25.             first = false;
  26.             path.moveTo(x, y);
  27.         }else{
  28.             path.lineTo(x, y);
  29.         }
  30.     })
  31. }
復制代碼

        交互處理

        增加交互處理,監聽站點拖動事件,保持地鐵路線跟隨站點位置變化

  1. graph.interactionDispatcher.addListener(function(evt){
  2.     if(evt.kind != Q.InteractionEvent.ELEMENT_MOVING){
  3.         return;
  4.     }
  5.     var datas = evt.datas;

  6.     Q.forEach(datas, function(data){
  7.         if(!data.stationId){
  8.             return;
  9.         }
  10.         var listeners = stationLocationChangeListeners[data.stationId];
  11.         if(listeners){
  12.             for(var l in listeners){
  13.                 updateLine(listeners[l]);
  14.             }
  15.         }
  16.     });
  17. });
復制代碼

在線示例

來源:http://blog.chinaunix.net/uid-29563534-id-4171575.html

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了基于HTML5的WebGL經典3D虛擬機房漫游動畫,需要的朋友可以參考下
這篇文章主要介紹了基于HTML5的WebGL實現json和echarts圖表展現在同一個界面的相關資料,需要的朋友可以參考下
這篇文章主要介紹了基于HTML5 Canvas的3D動態Chart圖表的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
利用html5,css實現鐘擺效果 ,在項目中經常會遇到,今天小編把基于HTML5+CSS3實現簡單的時鐘效果的實現代碼分享到腳本之家平臺,需要的額朋友參考下吧
這篇文章主要介紹了基于HTML5實現類似微信手機搖一搖功能(計算搖動次數),需要的朋友可以參考下
這篇文章主要介紹了基于HTML5陀螺儀實現ofo首頁眼睛移動效果的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 江西自考网-江西自学考试网 | 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 工业雾炮机_超细雾炮_远程抑尘射雾器-世纪润德环保设备 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | Q361F全焊接球阀,200X减压稳压阀,ZJHP气动单座调节阀-上海戎钛 | 云杂志网-学术期刊-首页| 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 仪器仪表网 - 永久免费的b2b电子商务平台 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 直流大电流电源,燃料电池检漏设备-上海政飞| 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 |