用途
本技能面向 ArcGIS Maps SDK for JavaScript 的空间分析能力,涵盖三类任务:三维空间分析对象、带统计的要素查询、以及要素归约(聚类与分箱)。几何运算(buffer、union、intersect、clip、offset 等)请参见 arcgis-geometry-operations;路由、地理编码、地理处理等 REST 服务请参见 arcgis-rest-services。
主要能力
三维分析对象
分析对象添加到 SceneView 的 analyses 集合中,所有分析类型都要求使用 SceneView(而非 MapView)。支持的分析类型包括:
- ViewshedAnalysis:从观察点计算可见区域,使用 viewsheds 集合(由 Viewshed 对象组成),而非直接设置 observer 属性。
- LineOfSightAnalysis:计算点与点之间的可见性,使用 LineOfSightAnalysisObserver 和 LineOfSightAnalysisTarget 包装对象。
- ShadowCastAnalysis:阴影可视化,使用 date、startTimeOfDay、endTimeOfDay、mode 等属性,mode 可选 "total-duration"、"discrete"、"min-duration"。
- SliceAnalysis:三维内容的剖切,使用 shape 属性(类型为 SlicePlane,而非 plane)。
- ElevationProfileAnalysis:沿线的地形剖面,使用 profiles 和 geometry(Polyline)。
- AreaMeasurementAnalysis:三维面积测量,使用 geometry(Polygon)。
- DistanceMeasurementAnalysis:三维距离测量,使用 geometry(Polyline),而非 startPoint/endPoint。
- VolumeMeasurementAnalysis:挖填体积测量,使用 geometry(Polygon)。
- DimensionAnalysis:三维长度尺寸标注,使用 dimensions(LengthDimension 数组)。
分析视图支持通过 place() 方法进行交互式放置,可配合 AbortController 取消放置。
带统计的要素查询
通过 featureLayer.createQuery() 创建查询,可设置 outStatistics 计算 sum、avg、max、min、count、stddev 等统计值;支持 groupByFieldsForStatistics 分组统计,并可结合 geometry 与 spatialRelationship 做空间统计。统计查询返回的是带计算属性的要素,需通过 result.features[0].attributes 访问结果。
要素归约
- 聚类(cluster):通过 featureReduction 配置 clusterRadius、clusterMinSize、clusterMaxSize、popupTemplate、labelingInfo 等;可配置 fields 聚合字段(如 avg、count)并配合 renderer 与 visualVariables 可视化。
- 分箱(binning):通过 featureReduction 配置 fixedBinLevel、renderer、popupTemplate 等,使用 aggregateCount 字段做颜色可视化。
使用方式
支持两种导入模式:
直接 ESM 导入,例如:
import ViewshedAnalysis from "@arcgis/core/analysis/ViewshedAnalysis.js"; import Viewshed from "@arcgis/core/analysis/Viewshed.js";
动态导入(CDN),例如:
const [ViewshedAnalysis, Viewshed] = await $arcgis.import([ "@arcgis/core/analysis/ViewshedAnalysis.js", "@arcgis/core/analysis/Viewshed.js", ]);
分析对象通过 view.analyses.add(analysis) 添加;可通过 view.whenAnalysisView(analysis) 获取分析视图,并用 reactiveUtils.watch 监听 progress 或 result 以获取结果。
适用场景
- 在三维场景中做视域、通视、阴影、剖切、高程剖面等可视化分析。
- 对 FeatureLayer 做统计汇总、分组统计或空间范围内的统计查询。
- 对大量点要素进行聚类或分箱聚合展示。
限制与常见陷阱
- 分析对象仅适用于 SceneView,在 MapView 中不可用。
- ViewshedAnalysis 必须使用 viewsheds 集合,不能直接设置 observer。
- 聚类弹窗与标注中访问要素数量应使用 cluster_count(而非 clusterCount)。
- 统计查询返回的是要素而非原始数值,需通过 result.features[0].attributes 访问。
- 读取分析结果前应确认 analysisView.progress === 1 或监听 analysisView.result。
- SliceAnalysis 使用 shape(SlicePlane)属性,而非 plane。
参考示例
analysis-viewshed、analysis-objects、analysis-elevation-profile、analysis-shadow-cast、analysis-area-measurement、analysis-volume-measurement、line-of-sight、featurereduction-cluster、featurereduction-binning、featurereduction-cluster-aggregate-fields。
相关技能
arcgis-geometry-operations(客户端几何运算)、arcgis-rest-services(服务端 REST 服务)、arcgis-coordinates-projection(坐标投影与格式化)、arcgis-layers(FeatureLayer 查询与图层配置)。