久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

HTML5繪制上海地鐵線路圖

HTML5繪制上海地鐵線路圖
注冊賬戶后可免費下載此資源!
點擊下載

某市政項目用到地鐵圖展示,展示地鐵站點以及相關信息流,使用Qunee組件可以很好的解決這類需求,做出優美的展現,下面以上海2012地鐵圖為例,效果如下:
 

HTML5繪制上海地鐵線路圖-【科e互聯】

 

示例講解

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

 

數據格式

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

{
"labels" : [  ... ],
"stations" : [ ... ],
"lines" : [ ... ]
}

 

文本標簽數據

包含坐標和文字信息,如果文字需要旋轉,則會增加”rotate”屬性,下面是“莘莊”文本標簽信息

{
"text" : "莘莊",
"x" : 883.591,
"y" : 1625.695
}

文字與節點旋轉效果
 

HTML5繪制上海地鐵線路圖-【科e互聯】

 

站點數據

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

{
"id" : 5,
"x" : 869.8513512641732,
"y" : 1597.6559686949402,
"rotate" : 0.7853981633974483
}

 

地鐵線數據

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

{
"name" : "1",
"color" : "#e52035",
"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,
56, 44, 47, 5]
}

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

{"id": 21, "yOffset": 0.5}

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

三號線數據

{
"name" : "3",
"color" : "#f9d300",
"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},
{"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},
98, 99, 100, 101, 104, 105, 107, 108, 109, 106, 110, 111]
}

地鐵共線效果
 

HTML5繪制上海地鐵線路圖-【科e互聯】



創建圖元

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

 

創建文本標簽

function createText(name, x, y, rotate){
    var text = graph.createNode(name, x, y);
    if(rotate){
        text.rotate = rotate;
    }
    text.zIndex = 20;
    text.image = null;
    text.setStyle(Q.Styles.BACKGROUND_COLOR, Q.toColor(0x88FFFFFF));
    text.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM);
    text.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
    text.setStyle(Q.Styles.LABEL_PADDING, PADDING);
    return text;
}

 

創建站點

function createStation(station){
    var node = graph.createNode(null/**station.name*/, station.x, station.y);
    node.stationId = station.id;
    node.setStyle(Q.Styles.LABEL_FONT_SIZE, 10);
    node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.CENTER_MIDDLE);
    node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.CENTER_MIDDLE);
    node.zIndex = 10;
    if(station.rotate){
        node.image = roundRect;
        node.rotate = station.rotate;
    }else{
        node.image = circle;
    }
    node.setStyle(Q.Styles.SHAPE_FILL_COLOR, "#FFF");
    node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, "#000");
    return node;
}

 

創建地鐵線

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


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

var node = graph.createNode(line.name); node.stations = stations; node.movable = false; node.setStyle(Q.Styles.LABEL_FONT_SIZE, 50); node.setStyle(Q.Styles.LABEL_COLOR, line.color); node.setStyle(Q.Styles.LABEL_ANCHOR_POSITION, Q.Position.LEFT_BOTTOM); node.setStyle(Q.Styles.LABEL_POSITION, Q.Position.LEFT_TOP); node.setStyle(Q.Styles.LAYOUT_BY_PATH, true); node.anchorPosition = null; node.setStyle(Q.Styles.SHAPE_STROKE, size); node.setStyle(Q.Styles.SHAPE_STROKE_STYLE, line.color);

updateLine(node, true); return node; }

function updateLine(line, addListener){ var path = new Q.Path(); line.image = path;

var stations = line.stations; var first = true; Q.forEach(stations, function(s){ var station = getStation(s.id || s); if(!station){ return; } if(addListener){ addLocationChangeListener(station.stationId, line); } var location = station.location; var x = location.x, y = location.y; if(s.yOffset){ var offset = s.yOffset * size; var rotate = station.rotate || 0; var sin = Math.sin(rotate); var cos = Math.cos(rotate); x += cos * offset; y += sin * offset; } if(first){ first = false; path.moveTo(x, y); }else{ path.lineTo(x, y); } }) }

 

交互處理

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


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

Q.forEach(datas, function(data){ if(!data.stationId){ return; } var listeners = stationLocationChangeListeners[data.stationId]; if(listeners){ for(var l in listeners){ updateLine(listeners[l]); } } }); });

 

在線示例

http://demo.qunee.com/#Shanghai Metro Map 2012

HTML5繪制上海地鐵線路圖
注冊賬戶后可免費下載此資源!
點擊下載

相關素材推薦

主站蜘蛛池模板: 久久精彩视频 | 国产剧情一区 | 亚洲成人av | 久亚州在线播放 | 99精品热视频 | 国产91亚洲精品 | av在线播放网址 | 精品真实国产乱文在线 | 天天操天天干天天透 | 理论片免费在线观看 | 九九久久99| 7777在线视频 | 亚洲欧美综合精品久久成人 | 一级黄色片一级黄色片 | 亚洲乱码国产乱码精品精98午夜 | 日日草夜夜草 | 99久久久久久99国产精品免 | 一区二区国产精品 | 国产欧美日韩一区二区三区 | 午夜精品久久久久久久久久久久久 | 日韩午夜精品 | 日韩成人精品一区 | 国产精品视频久久 | 午夜久久久久久久久久一区二区 | 99久久国产| 成人依人| 欧美久久久久久久久中文字幕 | 91精品国产综合久久久久久丝袜 | 久久国产成人精品国产成人亚洲 | 北条麻妃99精品青青久久主播 | 日本高清中文字幕 | 国产激情网 | 91在线视频| 久久亚洲一区二区三区四区 | 亚洲 欧美 日韩在线 | 三级av在线 | 国产精品久久久久久中文字 | 国产乱精品一区二区三区 | 中文字幕日韩在线观看 | 国产一二区在线 | 久久人体视频 |