欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

arcgis api for javascript学习-FeatureTable使用

程序员文章站 2023-12-26 16:24:34
...

FeatureTable


前言

FeatureTable可以用于查看属性表,对属性表中显示的字段、以及字段显示的格式可以进行设置。效果正如同arcmap中的查看属性表类似


提示:以下是本篇文章正文内容,案例来源于esri官网

一、FeatureTable介绍

        FeatureTable是一种基于小部件的解决方案,可以在其中浏览和编辑要素图层的属性数据。FeatureTable还集成了一些附加信息:如相关记录和附件。
        但是如果服务器上将服务的编辑功能设置为false,则将此属性设置为true不会是图层可编辑。通过将FeatureTable的showRelatedRecords属性设置为true可以将相关信息片段直接公开为表中的列。通过将其showAttachments属性设置为true,也可以在表中显示附件。
        如果调用FeatureTable的selectRows()方法,则选定的记录将在表中突出显示,而所有其它记录都保持可见。调用clearSelection()方法时,选择/突出显示将从表中移除。
        调用FeatureTable的filterRecordsByIds()方法或filterSelectedRecords(),则表将显示已筛选的那些记录,FeatureTable的clearFilter()方法将从表中移除过滤器以及选择/突出显示。

二、使用步骤

1.创建FeatureLayer对象

代码如下(示例):

myFeatureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Warren_College_Trees/FeatureServer/0", {
	mode: FeatureLayer.MODE_ONDEMAND,
	visible: true,
 	outFields: ["Collected", "Status", "Spp_Code", "Height", "Cmn_Name", "Sci_Name", "Street", "Native"],
	id: "fLayer"
});

2.创建FeatureTable小部件对象

代码如下(示例):

myFeatureTable = new FeatureTable({
	featureLayer: myFeatureLayer,
    map: map,
	//设置页面加载后调用FeatureTable显示的字段
	outFields: [
	"Collected", "Spp_Code", "Height", "Cmn_Name", "Sci_Name", "Native"
	],
	//设置字段信息,包括别名,精度等。
	fieldInfos: [
    	{
         	name: 'Spp_Code',
            alias: 'Species Code',
         },
         {
            name: 'Cmn_Name',
            alias: 'Common Name',
          },
          {
              name: 'Sci_Name',
              alias: 'Scientific Name',
          }
          ]
          }, 'myTableNode');

3.启动小部件FeatureTable

myFeatureTable.startup();

三、全部代码

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Using FeatureTable</title>
    <link rel="stylesheet" href="https://js.arcgis.com/3.34/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="https://js.arcgis.com/3.34/esri/css/esri.css">
    <script src="https://js.arcgis.com/3.34/"></script>

    <style>
        html, body, #map{
            width:100%;
            height:100%;
            margin:0;
            padding:0;
        }
    </style>

    <script>
        require([
            "esri/layers/FeatureLayer",
            "esri/dijit/FeatureTable",
            "esri/geometry/webMercatorUtils",
            "esri/map",
            "dojo/dom-construct",
            "dojo/dom",
            "dojo/parser",
            "dojo/ready",
            "dojo/on",
            "dojo/_base/lang",
            "dijit/registry",
            "dijit/form/Button",
            "dijit/layout/ContentPane",
            "dijit/layout/BorderContainer",
            "dijit/form/TextBox"
        ], function (
            FeatureLayer, FeatureTable, webMercatorUtils, Map,
            domConstruct, dom, parser, ready, on,lang,
            registry, Button, ContentPane, BorderContainer, TextBox
        ) {
            parser.parse();

            ready(function(){

                var myFeatureLayer;
                var map = new Map("map",{
                    basemap: "dark-gray"
                });

                map.on("load", loadTable);

                function loadTable(){

                    // Create the feature layer
                    myFeatureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Warren_College_Trees/FeatureServer/0", {
                        mode: FeatureLayer.MODE_ONDEMAND,
                        visible: true,
                        outFields: [
                            "Collected", "Status", "Spp_Code", "Height", "Cmn_Name", "Sci_Name", "Street", "Native"
                        ],
                        id: "fLayer"
                    });

                    //set map extent
                    on(myFeatureLayer, "load", function(evt){
                        var extent = myFeatureLayer.fullExtent;
                        //如果能够将extent投影到map,或者二者是相同的投影,就返回true
                        // webMercatorUtils.canProject(source,target)
                        // source:SpatialReference类型的输入或具有SpatialReference属性(如几何体或地图)的对象。
                        if (webMercatorUtils.canProject(extent, map)) {
                            map.setExtent( webMercatorUtils.project(extent, map) );
                        }
                    });

                    map.addLayer(myFeatureLayer);

                    myFeatureTable = new FeatureTable({
                        featureLayer: myFeatureLayer,
                        map: map,
                        //设置页面加载后调用FeatureTable显示的字段
                        outFields: [
                            "Collected", "Spp_Code", "Height", "Cmn_Name", "Sci_Name", "Native"
                        ],
                        //设置字段信息,包括别名,精度等。
                        fieldInfos: [
                            {
                                name: 'Spp_Code',
                                alias: 'Species Code',
                            },
                            {
                                name: 'Cmn_Name',
                                alias: 'Common Name',
                            },
                            {
                                name: 'Sci_Name',
                                alias: 'Scientific Name',
                            }
                        ]
                    }, 'myTableNode');

                    myFeatureTable.startup();

                    on(myFeatureTable, "load", function(evt){
                        console.log("The load event - ", evt);//true
                    });

                    //当“统计信息”对话框显示包含数值数据的列的计算统计信息时触发事件。
                    myFeatureTable.on("show-statistics", function(evt){
                        //平均值
                        console.log("show-statistics avgfield - ", evt.statistics.avgField);
                        //计数,count
                        console.log("show-statistics countfield - ", evt.statistics.countField);
                        //最大值
                        console.log("show-statistics maxfield - ", evt.statistics.maxField);
                        //最小值
                        console.log("show-statistics minfield - ", evt.statistics.minField);
                        //标准差
                        console.log("show-statistics stddevfield - ", evt.statistics.stddevField);
                        //总和
                        console.log("show-statistics sumfield - ", evt.statistics.sumField)
                    });
                    //当featureTable中的数据行被选中时触发事件
                    myFeatureTable.on("row-select", function(evt){
                        //该行的数据,包括了不仅仅是显示的数据,
                        // 同时也包括了FeatureLayer中outfield中其它字段的数据
                        console.log("select event - ", evt.rows[0].data);
                    });
                    //当数据清除选择的时候触发事件。
                    myFeatureTable.on("row-deselect", function(evt){
                        console.log("deselect event - ", evt.rows[0].data);
                    });
                    //featureTable数据刷新的时候就会触发事件
                    myFeatureTable.on("refresh", function(evt){
                        console.log("refresh event - ", evt);
                    });
                    // 当FeatureTable的列的宽的大小被改变触发事件
                    myFeatureTable.on("column-resize", function(evt){
                        //triggered by ColumnResizer extension
                        console.log("column-resize event- ", evt);
                    });
                    // 当通过“选项”下拉菜单隐藏或显示列时激发。
                    myFeatureTable.on("column-state-change", function(evt){
                        // triggered by ColumnHider extension
                        console.log("column-state-change event - ", evt);
                    });
                    // 排列顺序改变触发事件
                    myFeatureTable.on("sort", function(evt){
                        console.log("sort event - ", evt);
                    });
                    //
                    myFeatureTable.on("filter", function(evt){
                        console.log("filter event - ", evt);
                    });
                }
            });
        });
    </script>
</head>

<body class="claro esri">
<div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'" style="width:100%; height:100%;">
    <div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center', splitter:true" style="height:50%">
        <div id="map"></div>
    </div>
    <div id="bot" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'bottom', splitter:true" style="height:50%">
        <div id="myTableNode"></div>
    </div>
</div>
</body>
</html>

实例来源:esri demo


总结

FeatureTable用于显示要素服务FeatureLayer的属性表,即一个图层(shp),可以操作显示的内容:别名、格式,统计、等。以上内容如有不对,希望讨论指教。

上一篇:

下一篇: