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),可以操作显示的内容:别名、格式,统计、等。以上内容如有不对,希望讨论指教。