DataGear 的數據集結構是由數據集屬性表示的,數據集屬性並不要求與實際的數據結構一致,可以自由新增、編輯、刪除。利用這一特性,可以爲數據集添加佔位屬性(沒有對應實際數據),然後在看板展示其關聯的圖表時,通過dg-chart-listener的onUpdate函數補全數據,從而實現數據擴展功能。
本文以地圖飛線圖爲例,介紹如何利用上述特性,爲僅包含地區名稱信息的數據集,製作數據可視化看板。
假設有如下地區名稱數據集:
名稱:
源點地區名/終點地區名
數據:
源點地區名, 終點地區名
新疆, 北京
四川, 北京
廣東, 北京
浙江, 北京
執行預覽後,它的屬性列表爲:
名稱 類型
源點地區名 字符串
終點地區名 字符串
地圖飛線圖需要數據集具有如下屬性:源點經度、源點緯度、終點經度、終點緯度,因此,這裏爲上述數據集手動添加這四個佔位屬性:
名稱 類型
源點地區名 字符串
終點地區名 字符串
源地區經度 數值
源地區緯度 數值
終地區經度 數值
終地區緯度 數值
然後,新建地圖飛線圖,如下所示:
名稱:地圖飛線圖
圖表類型:地圖飛線圖
數據集:
源地區經度 -> 源點經度
源地區緯度 -> 源點緯度
終地區經度 -> 終點經度
終地區緯度 -> 終點緯度
此時展示圖表將是空白飛線圖,因爲並沒有實際的地理座標數據。
然後,新建看板,添加上述圖表,爲其添加dg-chart-listener圖表監聽器,並通過它的onUpdate函數補全地理座標數據,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
.chart{
display: inline-block;
width: 100%;
height: 500px;
}
</style>
<script>
//地區名->地理座標映射表
var coordMap=
{
"新疆": [85.523256,41.094106],
"四川": [103.037483,30.450264],
"廣東": [113.560737,23.669933],
"浙江": [119.962996,29.037435],
"北京": [116.651482,40.253657],
};
var chartListener=
{
onUpdate: function(chart, results)
{
var result = chart.resultFirst(results);
var datas = chart.resultDatas(result);
for(var i=0; i<datas.length; i++)
{
var di = datas[i];
var srcCoord = (coordMap[di['源點地區名']] || {});
var targetCoord = (coordMap[di['終點地區名']] || {});
di['源地區經度'] = srcCoord[0];
di['源地區緯度'] = srcCoord[1];
di['終地區經度'] = targetCoord[0];
di['終地區緯度'] = targetCoord[1];
}
chart.resultData(result, datas);
}
};
</script>
</head>
<body>
<div class="chart" dg-chart-listener="chartListener"
dg-chart-widget="上述圖表ID"></div>
</body>
</html>
點擊[保存並展示]按鈕,打開看板展示頁面,完成!!!
效果圖如下所示:
源碼地址:
Gitee:https://gitee.com/datagear/datagear