Skip To Content

检测事件

注:

目前,此功能仅在 Map Viewer 经典版(之前称为 Map Viewer)中受支持。

检测事件 检测事件工具使用指定的条件检查连续时间要素。 符合指定条件的要素被标记为事件。 生成的图层以与输入相同的格式显示输入要素,其他字段则表明要素是否为事件、事件的状态、事件的持续时间以及唯一的事件标识符。

工作流示意图

检测事件工作流示意图

使用 GeoAnalytics Tools 进行的分析

通过跨多个 ArcGIS GeoAnalytics Server 计算机和核心组件的分布式处理来运行使用 GeoAnalytics Tools 进行的分析。GeoAnalytics ToolsArcGIS Enterprise 中标准要素分析工具的参数和功能不同。要了解有关这些差别的详细信息,请参阅要素分析工具差别

术语

术语描述

轨迹

已启用时间且时间类型为时刻的要素序列。 要素由轨迹标识符字段确定处于序列中,并按时间进行排序。 例如,某个城市拥有一支扫雪车队,每 10 分钟记录一次车辆的位置。 车辆 ID 可以表示不同的轨迹。

事件点

满足感兴趣条件的要素。

即时

由开始时间表示的单个时间点且无结束时间。 这要求检测事件的输入时间类型为时刻。

间隔

由开始时间和结束时间表示的一段时间。

感兴趣要素

用于描述正分析的要素。 在分析过程中,将分析所有要素。

示例

传感器在水体和水污染监测中发挥了重要作用。 每个传感器测量结果都包含测量发生时间的时间戳以及感兴趣污染物的值。 您可以访问当地的水文测量数据,以及每个地点的测量结果和时间戳。 您希望在之前的时间步长中查找报告污染物增加较多的传感器。

用法说明

检测事件可运行于表格、点、线或面要素上。 输入图层必须已启用时间,并具有用于表示时刻的要素。

仅使用具有时间条目的输入要素。 任何不具备时间的要素都不会包含在输出结果中,也不会在输出结果中使用。

结果中将返回用于标识轨迹的一个或多个字段。

可以指定一个或多个字段用于标识轨迹。 轨迹由一个或多个轨迹字段的唯一组合表示。 例如,如果将字段 flightIDDestination 用作轨迹标识符,则以下要素 [ID007Solden] 和 [ID007Tokyo] 将分别处于两个独立的轨迹,原因是 Destination 字段的值不同。

开始和结束条件是使用表达式创建的。

了解有关通过 GeoAnalytics Tools 使用表达式检测事件的详细信息

可选择应用结束条件。 如果仅应用开始条件,则事件将在评估开始条件为 true 时开始,并在评估开始条件为 false 时结束。 例如,如果轨迹中的值为 [0, 10, 15, 20, 40, 10, 12, -2, -12],并且开始条件为 $feature["values"] > 15,则具有 [True] 并且为 [0: False, 10: False, 15: False, 20: True, 40: True, 10: False, 12: False, -2: False, -12: False] 的要素为事件,其中只有值大于 15 的要素为事件。 如果您选择应用的结束条件是 $feature["values"] < 0,结果将如下所示:[0: False, 10: False, 15: False, 20: True, 40: True, 10: True, 12: True, -2: False, -12: False]。 在本例中,事件将在满足开始条件时开始,之后每个连续要素都是事件,直到结束条件为 true。 下表对这些示例进行了描述:

位置:123456789

0

10

15

20

40

10

12

-2

-12

开始:$feature["values"] > 15 并且无结束

False

False

False

True

True

True

False

False

False

开始:$feature["values"] > 15,结束:$feature["values"] < 0

False

False

False

True

True

True

True

False

False

以定义间隔应用时间间隔线段轨迹。 例如,如果您将时间间隔界限设置为 1 天,开始于 1990 年 1 月 1 日上午 9:00,则轨迹会在每天上午 9:00 被截断。 此分割是一种加快计算速度的快速方法,因为它可以快速创建较小的轨迹以进行分析。 如果您的分析更适合按重复的时间间隔界限进行分割,则建议使用大数据处理。

输出要素将返回输入中的字段以及其他字段:

  • IncidentID - 提供给每个作为事件的要素的唯一 ID。
  • IncidentStatus - 表示事件状态的字符串字段。 如果要素不是事件,则值将为 null;如果要素是满足开始条件的第一个事件,则为 Started;如果要素仍为事件,则为 OnGoing;如果要素不再是事件,则为 Ended。 单个轨迹中可存在多个事件段。 例如,如果轨迹具有以下值:[0, 10, 15, 20, 40, 10, 12, -2, -12],并且开始条件为 $feature["values"] > 15,则生成的 IncidentStatus 值为 [0: null, 10: null, 15: null, 20: Started, 40: OnGoing, 10: Ended, 12: null, -2: null, -12: null]
  • IncidentDuration - 事件发生的时间,以毫秒为单位。 此值计算为感兴趣的要素与启动事件的要素之间的差值。
  • Instant_Datetime - 要素发生的时间。

如果选中使用当前地图范围,则仅对当前地图范围中可见的要素进行分析。如果未选中,则将分析输入图层中的所有输入要素,包括超出当前地图范围的要素。

局限性

输入必须为已启用时间且时间类型为时刻的要素。 任何不具备时间的要素都不会包含在输出中。

检测事件的工作原理

下面介绍了检测事件工具的工作原理:

计算

将按轨迹以时间顺序排列要素。 从第一个要素起,对开始条件进行评估,直到其为 true。 要素满足开始条件后,将评估下一个要素,直到开始条件为 false(如果未指定结束条件),或者直到结束条件为 true(如果结束条件为 true)。 满足该条件后,事件将结束,进程将重新开始。 单个轨迹中可能存在多个事件段。 例如,如果轨迹具有值 [10, 20, 30, 40, 50, 10, 20, 30, 40, 50, 10, 20],并且开始条件为 $feature["values"] > 20,则将存在两个事件段:[10: null, 20: null, 30: Started, 40: OnGoing, 50: OnGoing, 10: Ended, 20: null, 30: Started, 40: OnGoing, 50: OnGoing, 10: Ended, 20: null]

事件的持续时间(以毫秒为单位)计算为要素的时间减去事件的开始时间。 仅当要素状态为 StartedOnGoingEnded 时,才会计算持续时间。 状态为 Started 的要素的持续时间始终为 0。

ArcGIS API for Python 示例

可通过 ArcGIS API for Python 获取检测事件工具。

本示例可通过计算五个速度值的移动窗口的平均值,查找除雪机移动速度低于每小时 10 英里的时间和地点。


# Import the required ArcGIS API for Python modules
import arcgis
from arcgis.gis import GIS
from arcgis.geoanalytics import find_locations

# Connect to your ArcGIS Enterprise portal and confirm that GeoAnalytics is supported
portal = GIS("https://myportal.domain.com/portal", "gis_publisher", "my_password")
if not portal.geoanalytics.is_supported():
    print("Quitting, GeoAnalytics is not supported")
    exit(1)   

# Find the big data file share dataset you'll use for analysis
search_result = portal.content.search("", "Big Data File Share")

# Look through the search results for a big data file share with the matching name
bdfs_search = next(x for x in search_result if x.title == "bigDataFileShares_VehicleData")

# Look through the big data file share for snowplow track data
snowplows = next(x for x in bdfs_search.layers if x.properties.name == "Snowplow_tracks")

# Set the tool environment settings
arcgis.env.verbose = True
arcgis.env.defaultAggregations = True

# Run the Detect Incidents tool
output = find_locations.detect_incidents(input_layer = snowplows,
    track_fields = "plowID, dayOfYear",
    start_condition_expression = "Mean($track.field["speed"].window(-5, 0)) < 10",
    output_name = "Snow_Plow_Incidents")

# Visualize the tool results if you are running Python in a Jupyter Notebook
processed_map = portal.map('Fairbanks, AK', 10)
processed_map.add_layer(output)
processed_map

类似工具

使用检测事件查找事件要素。 其他工具或许在解决略有差异的类似问题时十分有用。

Map Viewer 经典版 分析工具

要将已启用时间的要素重新构建到轨迹中,请使用重新构建轨迹工具。

要计算字段的值,请使用计算字段工具。

ArcGIS Pro 分析工具

重新构建轨迹工具也在 ArcGIS Pro 中可用。

可在 ArcGIS Pro 中获取计算字段工具。

检测事件工具在 ArcGIS Pro 中可用。

要从 ArcGIS Pro 运行此工具,您的活动门户必须为 Enterprise 10.6 或更高版本。您必须使用具有执行 GeoAnalytics 要素分析权限的帐户登录。