第三篇记录下FeatureSet函数,FeatureSet我也翻译不到准确的意思,暂时译为要素集吧。
FeatureSet和Geometry函数算是Arcade中最重要的2个函数包,从数量上也可以看出。
Geometry针对的是单个要素,FeatureSet针对多个要素的集合,比如说要素类、图层等。
和Geometry函数中一样或相近的函数就不再记录。
一、FeatureSet函数
1、Attachments【附件】
返回与输入功能关联的附件列表。每个结果都包括附件的名称、内容类型、id和字节大小。
Count(Attachments($feature))
2、Average【平均数】
返回FeatureSet中给定数字字段的平均值。
$feature.population - Average($layer, 'population')
Average($layer, 'population / area')
3、Count【计数】
获取要素的个数。
Count($layer)
4、Distinct【不同】
从FeatureSet返回一组不同的值,或者可以理解为一组唯一值。
// 单字段 不同
Distinct($layer, 'Status')
// 多字段 不同
Distinct($layer, ['Status', 'Type'])
// 甚至可以分组,类似重分类
Distinct($layer, {
name: "Density",
expression: "CASE WHEN PopDensity < 100 THEN 'Low' WHEN PopDensity >= 100 THEN 'High' ELSE 'N/A' END"
})
// 更复杂的两个列
Distinct($layer, [{
name: 'Score',
expression: 'POPULATION_DENSITY * 0.65 + Status_Code * 0.35'
}, {
name: 'Type',
expression: 'Category'
}])
5、FeatureSet【构建FeatureSet】
// 用属性构建
var d = {
fields: [{
alias: 'RANK',
name: 'RANK',
type: 'esriFieldTypeInteger'
}, {
alias: 'ELEV_m',
name: 'ELEV_m',
type: 'esriFieldTypeInteger'
}],
spatialReference: { wkid: 4326 },
geometryType: 'esriGeometryPoint',
features: [{
geometry: {
spatialReference: { wkid: 4326 },
x: -151.0063,
y: 63.069
},
attributes: {
RANK: 1,
ELEV_m: 6168
}
}]
};
var features = FeatureSet(d)
// 用JSON构建
var features = FeatureSet('{"fields":[{"alias":"RANK","name":"RANK","type":"esriFieldTypeInteger"},{"alias":"ELEV_m","name":"ELEV_m","type":"esriFieldTypeInteger"}],"spatialReference":{"wkid":4326},"geometryType":"esriGeometryPoint","features":[{"geometry":{"spatialReference":{"wkid":4326},"x":-151.0063,"y":63.069},"attributes":{"RANK":1,"ELEV_m":6168}}]}')
6、FeatureSetByName【从名称获取FeatureSet】
根据要素图层在地图或要素服务中的名称,从要素图层创建FeatureSet。
需要注意,因为图层名并不一定是唯一的,获得的FeatureSet也不是单一的。
var features = FeatureSetByName($map,'Bike routes', ['*'], true);
Count(features);
7、Filter【筛选】
和筛选工具的作用相同。
// 筛选某个范围内的值
var result = Filter($layer, 'POPULATION > 10000');
// 筛选大于平均数的值
var averageValue = Average($layer, 'POPULATION')
var result = Filter($layer, 'POPULATION > @averageValue');
8、First【第一个】
返回 FeatureSet中的第一个要素。
Area( First($layer) )
9、GetFeatureSet【通过Featurea获取FeatureSet】
获取输入Featur所属的FeatureSet。
var fs1 = FeatureSetByName($map, 'Bike routes', ['*'], true);
var fs2 = top(fs1, 10)
var f = First(fs2)
// 参数2默认是“datasource”,还包括“root”和“parent”
GetFeatureSet(f, 'root')
10、GroupBy【分组统计】
将统计信息作为一组分组值或不同值的FeatureSet返回。
// 单类型统计
var treeStats = GroupBy($layer, 'TreeType', { name: 'NumTrees', expression: '1', statistic: 'COUNT' });
// 多类型统计
var treeStats = GroupBy($layer,
[ // fields/expressions to group statistics by
{ name: 'Type', expression: 'TreeType'},
{ name: 'Status', expression: 'TreeStatus'}
],
[ // statistics to return for each unique category
{ name: 'Total', expression: '1', statistic: 'COUNT' },
{ name: 'AvgHeight', expression: 'Height', statistic: 'AVG' },
{ name: 'MaxPercentCoverage', expression: 'CoverageRatio * 100', statistic: 'MAX' }
]
);
11、Max【最大值】、Min【最小值】、Mean【平均值】等
这一类数学计算式,用法基本一致。包括Max【最大值】、Min【最小值】、Mean【平均值】、Sum【合计值】等。
// 字段值取最大
Max($layer, 'population')
// 增加一些计算
Max($layer, 'population / area')
12、OrderBy【排序】
和排序工具功能相同。
// DESC降序,ASC升序
OrderBy($layer, 'POPULATION DESC')
13、Top【从头部截取】
例如,返回人口最多的前5个要素。
Top( OrderBy($layer, 'POPULATION DESC'), 5 )