历史版本28 :JS实现点击按钮转移地图中心点和钻取 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
功能变动
11.0-
11.0.2新增:开放官方接口 chart.drillUp(index) 、chart.getLayerIndex()

1.2 预期效果

使用钻取地图时,需要使用鼠标手动操作进行地图钻取和中心点转移。

现提供一个方法,控件中输入经纬度后点击按钮转移中心点,选择区域名后点击按钮钻取到该区域。效果如下图所示:

5475369C-C67B-4669-8003-E945A8F9D8BB.GIF

1.3 实现思路

调用图表相关接口实现,接口如下:

  • chart.panTo(loc)  //转移位置

  • charts.drillDown(areas[i])  //下钻到区域 

  • chart.getLayerIndex()  // 获取当前钻取层级,获取的层级从0开始

  • chart.drillUp(index)  // 向上钻取

注1:上述接口均不支持移动端。

注2:上述接口均不支持扩展图表。

注3:FVS 可视化看板详情可见:FVS点击标题转移地图中心点和钻取

2. 普通报表示例编辑

在普通报表中,设置图表和参数面板的方法是一致的。不同的是,在按钮点击事件中,图表对象以及调用参数控件的方法有所不同。

  • 图表对象需换成图表所在的单元格,如 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;
        }
}

普通报表分页预览效果如下图所示:

59BBA315-400D-4A98-9EEB-2D410B26C690.GIF

注:不支持移动端。

3. 决策报表示例编辑

3.1 准备数据

点击设计器左上角「文件>新建决策报表,新建空白模板。

1)新建内置数据集 Embedded1,如下图所示:

1535597474u8P0P7zr.png

2)新建内置数据集 Embedded2,如下图所示:

3.2 设计模板

向 body 中拖入「钻取地图」和「参数面板」,最终效果如下图所示:

Snag_497934.png

3.2.1 钻取地图设置

1)双击钻取地图,进入编辑状态,类型选择「区域地图」,地图边界选择「中国」,其余设置可自行选择。如下图所示:

Snag_4bbb35.png

2)地图数据选择「各层级分别指定」,第 1 层绑定 Embedded1 的区域数据,第 2 层绑定 Embedded2 的市级数据。如下图所示:

Snag_535715.png

3.2.2 设置参数面板

1)选中参数面板 para,将「点击查询前不显示报表内容」取消勾选,否则地图在点击「查询」前不会显示。如下图所示:

Snag_67d80b.png

2)将要使用的控件直接拖入参数面板,各控件设置及用途如下:

  • 拖入 3 个标签控件,作提示文本使用。设置「属性>控件值」分别为字符串「经度」、「纬度」、「下钻区域名」。

  • 拖入 2 个文本控件,预览模板时用来输入经度和纬度。分别设置「属性>控件名称」为「jingdu」、「weidu」。

  • 拖入 1 个下拉框控件,用来绑定地图区域。设置「属性>控件名称」为「quyu」,绑定数据字典如下图所示:

15355975316ppYvU2S.png

  • 拖入 2 个按钮控件,按钮名字分别为「中心点移动」,「根据区域名下钻」。

3.3 添加点击事件

3.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() 获取控件值。

如下图所示:

Snag_7c72d3.png

3.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;
        }
}

如下图所示:

Snag_eb2a45.png

3.4 效果预览

保存模板,点击「PC端预览」,效果如 1.1 预期效果中所示。

注:不支持移动端。

4. 模板下载编辑

已完成模板参见:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Chart\Map\点击按钮转移地图中心点和钻取.frm

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Chart\Map\点击按钮转移地图中心点和钻取.cpt

点击下载模板:

点击按钮转移地图中心点和钻取.frm

点击按钮转移地图中心点和钻取.cpt