Smartbi Insight V10帮助中心
页面树结构
跳到banner的尾部
回到标题开始

实现单起点、多起点的酷炫航线图效果

转至元数据结尾
转至元数据起始

该宏示例在 V10.5上 验证通过

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

示例效果

通过宏代码实现单起点、多起点的酷炫航线图效果,当前宏代码适用于即席查询、透视分析、电子表格。

以即席查询为例,基于数据源“northwind”创建即席查询,使用了其中的数据表“t_airlinemap”,预期效果如下:

1. 单起点航线效果

2. 多起点航线效果

由于“图形数据动态变化”的默认值是“当前页数据”,如需实现多起点航线图效果可采取以下方案:

① 手动切换该值为“全部数据”。

② 手动设置当前页显示的最大行数,或者设置字段筛选器指定以哪些城市为起点。

操作步骤

1. 创建即席查询

新建“即席查询”,选择数据源为“northwind”

2. 选择数据

在左边侧边栏向下扩展开的列表中找到表 “t_airlinemap”,勾选所有字段,点击刷新即可查看对应的数据。

3. 绘制航线图

① 在工具栏中点击 添加图形 按钮

② 修改图形类型为“地图”-“航线图”,选择指定地图为“中国”,勾选“c_FromCity”为开始区域标识,“c_ToCity”为结束区域标识,“c_Value”为指标,然后点击”确定“。保存该即席查询。

4. 编辑宏代码

在资源区内找选中刚才创建的即席查询,右键选择 宏管理 进入宏管理界面。

宏管理界面新建客户端模块。在弹出的新建模块对话框中选择对象为“chart”,事件为“beforeRenderer”,并把下面宏代码复制到代码区域;

  • 单起点航线效果
航线图效果-单起点
function main(chartView) {
    var chart = chartView.getChartObject();
    var options = chart.getOptions();
    //设置起点图例不显示
    options.legend.show = false;
    setToolTip(options);
    setLineType(options.series[0], options.series[2]);
    setLineType(options.series[1], options.series[2]);
    setVisualMap(options);
    setGeoType(options);
    setEffect(options.series[2], options);
}
//设置toolTip提示信息样式
function setToolTip(options){
    options.tooltip.backgroundColor = "rgba(95,158,160,0.9)";
    options.tooltip.textStyle = options.tooltip.textStyle || {};
    options.tooltip.textStyle.color = "black";
}
//设置地图及画布样式
function setGeoType(options) {
    options.backgroundColor = '#013954';
    options.geo.itemStyle = options.geo.itemStyle || {};
    options.geo.itemStyle.normal = options.geo.itemStyle.normal || {};
    options.geo.itemStyle.normal.color = 'rgba(51, 69, 89, .5)';
    options.geo.itemStyle.normal.borderColor = '#516a89';
    options.geo.itemStyle.borderWidth = 1;
    options.geo.emphasis = options.emphasis || {};
    options.geo.emphasis.color = 'rgba(37, 43, 61, .5)';
    //地图比例
    options.geo.zoom = 1.2;
    //是否可缩放
    options.roam = true;
}
//设置航线样式
function setLineType(line, dataItem) {
    line.effect = {
        show: true,
        period: 4, //箭头指向速度,值越小速度越快
        trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重
        symbol: 'arrow', //箭头图标
        symbolSize: 4, //图标大小
    };
    line.lineStyle = {
        normal: {
            width: 0.5, //尾迹线条宽度
            opacity: 1, //尾迹线条透明度
            curveness: 0.2, //尾迹线条曲直度
        }
    };
    line.symbol = 'none';
    //设置航线颜色
    for (let i = 0; i < line.data.length; i++) {
        line.data[i].lineStyle = line.data[i].lineStyle || {};
        if (dataItem.data[i].value[2] < 80) {
            line.data[i].lineStyle.color = "#00eaff";
        } else {
            line.data[i].lineStyle.color = "#f44336";
        }
    }
}
//设置圆环样式
function setEffect(line, options) {
    line.symbol = 'circle';
    line.symbolSize = function(val) {
        return 5 + val[2] / 10; //圆环大小,根据数组设置
    };
    //设置圆环、标签颜色
    for (var i = 0; i < line.data.length; i++) {
        line.data[i].label = line.data[i].label || {};
        line.data[i].itemStyle = line.data[i].itemStyle || {};
        if (line.data[i].value[2] < 80) {
            line.data[i].label.color = "#00eaff";
            line.data[i].itemStyle.color = "#00eaff";
        } else {
            line.data[i].label.color = "#f44336";
            line.data[i].itemStyle.color = "#f44336";
        }
        line.data[i].label.fontFamily = "serif";
        line.data[i].label.position = 'right';
    }
}
//设置数值图例
function setVisualMap(options) {
    options.visualMap = options.visualMap || {};
    options.visualMap = {
        min: 0,
        max: 100,
        calculable: false,//是否可计算
        show: true,
        color: ['#f44336', '#00eaff'],
        textStyle: {
            color: '#fff'
        }
    };
}
  • 多起点航线效果
航线图效果-多起点
function main(chartView) {
    var chart = chartView.getChartObject();
    var option = chart.getOptions();
    var color = ['#f44336', '#00eaff'];
    var index = 1;
    var colorIndex = 0;
    for (let i = 0; i < option.series.length; i++) {
        if (index % 3 === 0) {
            setEffect(option.series[i], color[colorIndex++]);
        } else {
            setLineStyle(option.series[i], color[colorIndex]);
        }
        index++;
    }
    setLegend(option);
    setGeoType(option);
    setToolTip(option);
    setGeoBorder(option);

}
//设置航线样式
function setLineStyle(line, color) {
    line.effect = {
        show: true,
        period: 3, //箭头指向速度,值越小速度越快
        trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重
        symbol: 'diamond', //箭头图标
        symbolSize: 5, //图标大小
    };
    line.lineStyle.normal = line.lineStyle.normal || {};
    line.lineStyle.normal.width = 0.5;
    line.lineStyle.normal.curveness = 0.2;
    line.lineStyle.normal.color = color;
    line.symbol = 'none';
    for (let i = 0; i < line.data.length; i++) {
        line.data[i].lineStyle = line.data[i].lineStyle || {};
        line.data[i].lineStyle.color = color;
    }
}
//设置圆环不显示
function setEffect(line, color) {
    line.symbol = 'none';
}
//设置图例样式
function setLegend(option) {
    option.legend.selectedMode = "multiple";
    option.legend.textStyle = option.legend.textStyle || {};
    option.legend.textStyle.color = option.legend.textStyle.color || {};
    option.legend.textStyle.color = "white";
    option.legend.textStyle.fontSize = 10;
}
//设置地图及画布样式
function setGeoType(options) {
    options.backgroundColor = 'rgba(1,57,84,0.8)';
    options.geo.itemStyle = options.geo.itemStyle || {};
    options.geo.itemStyle.normal = options.geo.itemStyle.normal || {};
    options.geo.itemStyle.normal.color = 'rgba(51, 69, 89, .5)';
    options.geo.itemStyle.normal.borderColor = 'rgba(28,199,242,1.0)';
    options.geo.itemStyle.normal.borderWidth = 2.5;
    options.geo.emphasis = options.emphasis || {};
    options.geo.emphasis.color = 'rgba(37, 43, 61, .5)';
    //地图比例
    options.geo.zoom = 1.2;
    //是否可缩放
    options.roam = false;
}

//设置toolTip提示信息样式
function setToolTip(options) {
    options.tooltip.backgroundColor = "rgba(95,158,160,0.9)";
    options.tooltip.textStyle = options.tooltip.textStyle || {};
    options.tooltip.textStyle.color = "black";
}

//设置地图外框边框(series多加一层地图)
function setGeoBorder(option) {
    option.series.push({
        type: "map",
        map: "CHINA",
        //roam: true,
        silent: true,
        zoom: 1.2,
        itemStyle: {
            normal: {
                areaColor: 'rgba(23,30,59,1)',
                borderWidth: 1, //设置外层边框
                borderColor: 'rgba(81,106,137,0.8)',
            },
            emphasis: {
                areaColor: 'rgba(23,30,59,0.8)',
                borderWidth: 0.8, //设置外层边框
                borderColor: '#516a89',
            },

        },
        label: {
            show: false
        },
        tooltip: {
            formatter: '{a}',
            backgroundColor: "rgba(95,158,160,0.9)",
            textStyle: {
                color: "black",
                fontFamily: 'serif'
            }
        },
    });
}

资源下载

migrate 航线图效果.xml

  • 无标签

聚圣源男宝宝起名小名大全姓张的起名男孩双胞胎景氏男孩起名大全第三重人格红字开头的公司起名网上购物排行榜显示器电源线农民工返程啥时出发破碎轨迹一年级下册语文贾如何起名姓杨起名尤文图斯老板女友越城记黑鱼煲见崎鸣理财小组名字起名大全开店怎样起名字好裕子起名外交部回应菅义伟当选日本首相捏咔周易免费起名字测试打分结果王姓男宝宝起名100分黄叶集团有限公司公司起名字pinklady利用翊字起名起名100分有哪些双胞胎女孩诗经起名周记怎么写工程造价毕业论文淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化