反馈已提交

网络繁忙

JS实现点击按钮转移地图中心点和钻取

  • 文档创建者:jiangsr
  • 编辑次数:22次
  • 最近更新:Alicehyy 于 2022-01-12
  • 1. 概述

    1.1 版本

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

    1.2 预期效果

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

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

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

    1.2 实现思路

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

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

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

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

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

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

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

    2. 决策报表示例

    2.1 准备数据

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

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

    1535597474u8P0P7zr.png

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

    2.2 设计模板

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

    Snag_497934.png

    2.2.1 钻取地图设置

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

    Snag_4bbb35.png

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

    Snag_535715.png

    2.2.2 设置参数面板

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

    Snag_67d80b.png

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

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

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

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

    15355975316ppYvU2S.png

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

    2.3 添加点击事件

    2.3.1 中心点移动

    选中「中心点移动」按钮,添加一个点击事件,输入 JavaScript 代码:

    var chart=FR.Chart.WebUtils.getChart("chart0").getChartWithIndex(0); //获取图表对象
    var jingdu=_g().getWidgetByName("jingdu").getValue();//获取经度文本框
    var weidu=_g().getWidgetByName("weidu").getValue(); //获取纬度文本框
    var loc=[weidu*1,jingdu*1];
    chart.panTo(loc); //根据经纬度移动中心点 

    如下图所示:

    Snag_7c72d3.png

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

    如下图所示:

    Snag_eb2a45.png

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

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

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

    注:不支持移动端。

    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

    附件列表


    主题: 图表应用
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    在线QQ:800049425

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526

    文 档反 馈

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭