1. 概述编辑
1.1 版本
报表服务器版本 | 功能变动 |
---|---|
11.0 | - |
11.0.2 | 新增:开放官方接口 chart.drillUp(index) 、chart.getLayerIndex() |
1.2 预期效果
使用钻取地图时,需要使用鼠标手动操作进行地图钻取和中心点转移。
现提供一个方法,控件中输入经纬度后点击按钮转移中心点,选择区域名后点击按钮钻取到该区域。效果如下图所示:
1.3 实现思路
调用图表相关接口实现,接口如下:
chart.panTo(loc) //转移位置
charts.drillDown(areas[i]) //下钻到区域
chart.getLayerIndex() // 获取当前钻取层级,获取的层级从0开始
chart.drillUp(index) // 向上钻取
注1:上述接口均不支持移动端。
注2:上述接口均不支持扩展图表。
2. 决策报表示例编辑
2.1 准备数据
点击设计器左上角「文件>新建决策报表」,新建空白模板。
1)新建内置数据集 Embedded1,如下图所示:
2)新建内置数据集 Embedded2,如下图所示:
2.2 设计模板
向 body 中拖入「钻取地图」和「参数面板」,最终效果如下图所示:
2.2.1 钻取地图设置
1)双击钻取地图,进入编辑状态,类型选择「区域地图」,地图边界选择「中国」,其余设置可自行选择。如下图所示:
2)地图数据选择「各层级分别指定」,第 1 层绑定 Embedded1 的区域数据,第 2 层绑定 Embedded2 的市级数据。如下图所示:
2.2.2 设置参数面板
1)选中参数面板 para,将「点击查询前不显示报表内容」取消勾选,否则地图在点击「查询」前不会显示。如下图所示:
2)将要使用的控件直接拖入参数面板,各控件设置及用途如下:
拖入 3 个标签控件,作提示文本使用。设置「属性>控件值」分别为字符串「经度」、「纬度」、「下钻区域名」。
拖入 2 个文本控件,预览模板时用来输入经度和纬度。分别设置「属性>控件名称」为「jingdu」、「weidu」。
拖入 1 个下拉框控件,用来绑定地图区域。设置「属性>控件名称」为「quyu」,绑定数据字典如下图所示:
拖入 2 个按钮控件,按钮名字分别为「中心点移动」,「根据区域名下钻」。
2.3 添加点击事件
2.3.1 中心点移动
选中「中心点移动」按钮,添加一个点击事件,输入 JavaScript 代码:
var chart=FR.Chart.WebUtils.getChart("chart0").getChartWithIndex(0); //获取图表对象
var jingdu=_g().getParameterContainer().getWidgetByName("jingdu").getValue();//获取经度文本框
var weidu=_g().getParameterContainer().getWidgetByName("weidu").getValue(); //获取纬度文本框
var loc=[weidu*1,jingdu*1];
chart.panTo(loc); //根据经纬度移动中心点
注:11.0 决策报表旧自适应下需要使用 _g().getParameterContainer().getWidgetByName("textEditor0").getValue() 获取控件值。
如下图所示:
2.3.2 根据区域名下钻
选中「根据区域名下钻」按钮,添加一个点击事件,输入 JavaScript 代码:
var chart=FR.Chart.WebUtils.getChart("chart0").getChartWithIndex(0);//获取图表对象
var quyu=_g().getWidgetByName("quyu").getValue();//获取下拉框控件的值
if (chart.getLayerIndex() > 0)
chart.drillUp(chart.getLayerIndex() - 1);// 若已经下钻,点击其他区域需返回上一层级后再次下钻
var areas= [];
//根据区域下钻
chart.series.forEach(ser => areas.push(...ser.points));
var len=areas.length;
for(var i=0;i<len;i++){
if(areas[i].name==quyu){
chart.drillDown(areas[i]);
break;
}
}
如下图所示:
2.4 效果预览
保存模板,点击「PC端预览」,效果如 1.1 预期效果中所示。
注:不支持移动端。
3. 普通报表示例编辑
在普通报表中,设置图表和参数面板的方法是一致的。不同的是,在按钮点击事件中,图表对象以及调用参数控件的方法有所不同。
图表对象需换成图表所在的单元格,如 var chart=FR.Chart.WebUtils.getChart("A1").getChartWithIndex(0);
普通报表中获取参数面板控件时需调用参数面板接口,如 var jingdu=_g().getParameterContainer().getWidgetByName("jingdu").getValue();
所以在普通报表中,「中心点移动」按钮点击事件的 JavaScript 代码如下:
var chart=FR.Chart.WebUtils.getChart("A1").getChartWithIndex(0); //获取图表对象
var jingdu=_g().getParameterContainer().getWidgetByName("jingdu").getValue();//获取经度文本框
var weidu=_g().getParameterContainer().getWidgetByName("weidu").getValue(); //获取纬度文本框
var loc=[weidu*1,jingdu*1];
chart.panTo(loc); //根据经纬度移动中心点
「根据区域名下钻」按钮点击事件的 JavaScript 代码如下:
var chart=FR.Chart.WebUtils.getChart("A1").getChartWithIndex(0);//获取图表对象
var quyu=_g().getParameterContainer().getWidgetByName("quyu").getValue();//获取下拉框控件的值
if (chart.getLayerIndex() > 0)
chart.drillUp(chart.getLayerIndex()- 1); // 若已经下钻,点击其他区域需返回上一层级后再次下钻
var areas= [];
//根据区域下钻
chart.series.forEach(ser => areas.push(...ser.points));
var len=areas.length;
for(var i=0;i<len;i++){
if(areas[i].name==quyu){
chart.drillDown(areas[i]);
break;
}
}
普通报表分页预览效果如下图所示:
注:不支持移动端。
4. 模板下载编辑
已完成模板参见:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Chart\Map\点击按钮转移地图中心点和钻取.frm
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Chart\Map\点击按钮转移地图中心点和钻取.cpt
点击下载模板: