描述
使用给定的时间和距离阈值来查找移动对象已停止或停留的位置。
插图
使用方法
此地理处理工具适用于 ArcGIS Enterprise 10.8 或更高版本。
输入图层必须为启用时间的点要素,用于表示时刻。
停留位置被定义为在一定时间内极少移动或没有移动的连续观测点。根据具体的应用领域,可将其称为停留点或空闲检测。
下表列出了查找停留位置工具中使用的术语:
术语 描述 停留位置
在给定时间和距离参数的情况下表示轨迹何时静止的要素。此为工具的输出结果,可将停留要素表示为点、凸包或平均中心。
轨迹
已启用时间且时间类型为时刻的要素序列。要素由轨迹标识符字段确定处于序列中,并按时间进行排序。例如,某个城市拥有一支扫雪车队,每 10 分钟记录一次车辆的位置。车辆 ID 可以表示不同的轨迹。
观测
轨迹中的一个点。
测地线
在球体上绘制的线。在地球上绘制的测地线表示地球大地水准面的曲率。
平面
在平面上(即笛卡尔平面)上测量的直线距离。这也被称为欧氏距离。
时刻
由开始时间表示的单个时间点且无结束时间。
间隔
由开始时间和结束时间表示的一段时间。
结果是表示时刻的点要素,或是表示时间间隔的面要素。间隔的开始和结束由停留中第一个和最后一个要素的时间决定。
任何不具备时间的要素都将从分析中排除。
停留位置只能在具有多个要素的轨迹中检测到。
停留位置需要同时使用时间(时间容差)和距离(距离容差)值进行确定。首先,该工具将使用唯一标识符将要素分配给轨迹。轨迹的顺序取决于要素的时间。接下来,将计算轨迹中的第一个观测点与下一个观测点之间的距离。如果两个时间上连续的点至少在给定的持续时间内保持在给定的距离内,则要素将被视为停留的一部分。如果发现两个要素是停留的一部分,则停留中的第一个要素将被用作参考点,且该工具会找到位于停留中参考点的指定距离内的连续要素。找到指定距离内的所有要素后,该工具将采集停留要素并计算其平均中心。如果当前停留之前和之后的要素位于停留位置的平均中心的给定距离内,则系统会将其添加到停留中。此过程将一直持续到轨迹结束。
可以指定一个或多个字段用于标识轨迹。轨迹由一个或多个轨迹字段的唯一组合表示。
默认情况下,系统将使用测地线方法创建停留位置,以进行距离计算。建议在以下情况下使用测地线距离:
- 跨越国际日期变更线的轨迹 - 当使用测地线方法时,越过国际日期变更线的输入图层将具有正确跨越国际日期变更线的轨迹。这是默认设置。必须将您的输入图层或处理空间参考设置为支持环绕国际日期变更线的空间参考,例如“世界圆柱等积”等全球投影。
- 您的数据集不在局部投影中 - 如果输入数据在局部投影中,请使用平面距离方法。例如,使用平面方法检查单个州内的停留位置。您的输入图层或处理空间参考必须设置为数据集本地的空间参考。
输出停留位置可通过四种方式表示。下表显示了每种方式的示例:
输出类型 描述 示例 所有要素
将返回每个要素。生成的要素将具有时间类型时刻。
属于停留的要素将渲染为蓝色。不属于停留的要素将渲染为灰色。
对于此输出类型,将仅计算计数统计数据。该计数将表示属于单个停留的要素的数量。非停留要素的计数将为 0。
停留要素
仅返回组成停留的要素。生成的要素将具有时间类型时刻。
对于此输出类型,将仅计算计数统计数据。该计数将表示属于单个停留的要素的数量。
平均中心
每个停留都会返回一个点,用于表示停留在时间和距离上的平均中心。生成的要素将具有时间类型间隔。
系统将始终计算停留中的要素计数。您可以选择计算有关此类型停留要素的统计数据。默认情况下,系统会计算所有统计数据。
凸包
每个停留都由停留要素的凸包表示。生成的要素将具有时间类型间隔。
系统将始终计算停留中的要素计数。您可以选择计算有关此类型停留要素的统计数据。默认情况下,系统会计算所有统计数据。
除了来自输入图层以及指定的汇总统计数据的字段之外,所有输出要素中还包括以下字段:
字段名称 描述 count
位于停留中的要素数
dwellid
要素所属的停留的唯一 ID
meanx
构成停留的 x 坐标的平均值
meany
构成停留的 y 坐标的平均值
meandistance
停留位置中连续点之间的平均距离
instant_datetime
当输出类型为停留要素、平均中心或所有要素时,创建单个要素的时间
start_datetime
输出类型为凸包时创建的开始时间
end_datetime
输出类型为凸包时创建的结束时间
如果输出类型为所有要素,则属于停留的结果将计算出上述字段。不属于停留的结果将为 count 字段返回值 0,instant_datetime 字段将返回输入要素的时间值,且所有其他字段将返回值 null。
当计算凸包且停留位置完全静止(一个唯一位置)或由两个唯一点组成时,系统会将基于分析中使用的空间参考容差的较小值用作宽度、高度或直径,以创建输出面而非凸包。这些面将用于可视化,且不表示停留的空间范围。下面的表格中将介绍此类情况的示例:
输入情况 描述 示例 重合(一个空间唯一点)
如果输入要素发生堆叠(重合),则生成的凸包将为无效的面。
在此示例中,重合输入要素由位于黄色面中心的红点表示。黄色面表示重合点的输出凸包结果。蓝色面可显示当单个停留位置中存在四个非重合点时的真正凸包外观。
共线(两个空间唯一点)
如果输入要素位于一条线上(最常见于两个空间唯一点),则生成的凸包将为无效面。
在此示例中,共线点由黄色面内的红色点表示。黄色面表示共线点的输出凸包结果。
可通过以下方式分割轨迹:
- 时间分割 - 基于两个输入之间的一段时间。当输入数据大于指定时间时,可应用时间分割将任何轨迹分解。例如,如果您有五个轨迹标识符相同的要素,时间分别为 [01:00, 02:00, 03:30, 06:00, 06:30],并将时间分割设置为 2 个小时,则任何经测量间隔超过 2 小时的要素都将被分割。在本示例中,结果将为 [01:00, 02:00, 03:30] 和 [06:00, 06:30] 的轨迹,因为 03:30 与 6:00 之间的间隔大于 2 小时。
- 时间界限分割 - 基于定义的时间间隔。应用时间界限会以定义的间隔对线段轨迹进行分割。例如,如果您将时间界限设置为 1 天,开始于 1990 年 1 月 1 日上午 9:00,则轨迹会在每天上午 9:00 被截断。此分割方法可加快计算速度的快速方法,因为它可以创建较小的追踪以进行分析。如果您的分析更适合按重复的时间边界进行分割,则建议使用大数据处理。
- 距离分割 - 基于输入之间的距离。当输入数据大于指定距离时,可应用距离分割将任何轨迹分解。例如,如果将距离分割设置为 5 公里,则大于 5 公里的连续要素将成为其他轨迹的一部分。
- 分割表达式 - 基于 Arcade 表达式。应用分割表达式可根据值、几何或时间值来分割轨迹。例如,当某个字段值是轨迹中前一个值的两倍以上时,可以分割轨迹。为此,对于示例字段 WindSpeed,可以使用以下表达式:var speed = TrackFieldWindow("WindSpeed", -1, 1); 2* speed[0] < speed[1]。当前一个值 (speed[0]) 小于当前值的两倍时,将分割轨迹。
您可以同时应用一个、两个、三个或四个分割选项或者均不应用。以下所有示例均使用间距分割。假设您应用 6 小时的时间分割、1 天的时间界限和 16 公里的距离分割,会产生如下的结果:
分割选项 说明 六个具有时间和位置的输入点
具有相同标识符的输入点。点之间的距离标记在虚线的顶部,各点测量的时间标记在点的下方。时间轴上有 4 处分割。红色分割代表 1 天的时间界限分割,从凌晨 12:00 开始。蓝色分割代表两点之间的距离大于 16 公里的距离分割。紫色分割代表两个连续点之间的时态距离大于 6 小时的时间分割。
没有时间分割和没有距离分割的示例。
时间分割为 6 个小时的示例。任何大于两小时的要素都会分割成单独的轨迹。
时间界限为 1 天(从午夜开始)的示例。以从指定时间(此处为凌晨 12:00)开始的每 1 天为间隔创建轨道。
距离分割为 16 公里的示例。任何相距大于 16 公里的要素(上午 05:00 和 06:00 时的要素)会分割成单独的轨迹。
时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例。任何相距时间大于 6 小时或与时间段分割相交于上午 12:00 的要素 将分割为独立的轨迹。
时间分割为 6 小时和距离分割为 16 公里的示例。任何相差大于 6 小时(上午 06:00 和下午 7:00 时的要素)或相距远于 16 公里的要素会分割成不同的轨迹。
距离分割为 16 公里和时间界限为一天(从凌晨 12:00 开始)的示例 任何相距大于 16 公里或与从凌晨 12:00 开始的持续时间分割相交的要素会分割成不同的轨迹。
距离分割为 16 公里、时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例 任何相距大于 16 公里,或相差超过 6 小时,或从凌晨 12:00 开始的持续时间分割相交的要素会分割成不同的轨迹。
在选择用于计算停留位置的参数时,请考虑观测类型和要查找的停留比例。以下是有关如何修改参数以查找移动数据中的停留的示例:
- 船舶要素具有 vesselID 和 tripID 字段。
- 将 vesselID 和 tripID 字段用作标识符,以计算沿不同路线的停留位置。
- 使用 1 小时的时间容差和 1 海里的距离容差来查找船只在其 1 海里范围内停留至少 1 小时的位置。
- 动物追踪器具有 animalID 字段。
- 将 animalID 字段用作标识符,以比较特定动物的停留位置。
- 要确定动物的活动范围,请使用 3 天的时间容差和 10 英里的距离容差,以查找感兴趣的动物栖息地。
- 对于较小的感兴趣区域,请使用 2 小时的时间容差和 100 米的距离容差。
- 船舶要素具有 vesselID 和 tripID 字段。
您可以通过以下一个或多个操作来提升查找停留位置工具的性能:
- 设置范围环境,以便仅分析感兴趣的数据。
- 将结果输出为停留要素或平均中心。
- 通过添加轨迹字段输入来最大程度细分轨迹。
- 使用平面方法而非测地线方法进行距离计算。
- 使用时间分割、时间界限分割和距离分割参数来分割轨迹。使用时间界限分割参数对性能的提高最大。
- 将本地数据用于分析运行的位置。
此地理处理工具由 ArcGIS GeoAnalytics Server 作为支持。分析将在 GeoAnalytics Server 上完成,且结果将存储在 ArcGIS Enterprise 的内容中。
当 GeoAnalytics Server 工具运行时,GeoAnalytics Server 上的分析已完成。要获得最佳性能,通过 ArcGIS Enterprise 门户上托管的要素图层或通过大数据文件共享,可以将数据用于 GeoAnalytics Server。在分析开始之前,非 GeoAnalytics Server 本地数据将被转移到您的 GeoAnalytics Server。这意味着运行工具需要更长时间,并且在某些情况下,从 ArcGIS Pro 到 GeoAnalytics Server 移动数据可能会失败。失败的阈值取决于网络速度,以及数据的大小和复杂性。因此,建议您始终共享数据或创建大数据文件共享。
语法
arcpy.geoanalytics.FindDwellLocations(input_features, output_name, track_fields, distance_method, distance_tolerance, time_tolerance, output_type, {summary_statistics}, {data_store}, {time_boundary_split}, {time_boundary_reference})
参数 | 说明 | 数据类型 |
input_features | 可从中找到停留的点轨迹。输入必须为启用时间的图层,并具有用于表示时刻的要素。 | Feature Set |
output_name | 输出要素服务的名称。 | String |
track_fields [track_fields,...] | 将用于标识唯一轨迹的一个或多个字段。 | Field |
distance_method | 指定如何计算停留要素之间的距离。
| String |
distance_tolerance | 点之间将视为一个停留位置的最大距离。 | Linear Unit |
time_tolerance | 将视为单个停留位置的最短持续时间。 在查找停留时,系统会同时考虑时间和距离。距离容差参数将指定距离。 | Time Unit |
output_type | 用于指定将如何输出停留要素。
| String |
summary_statistics [summary_statistics,...] (可选) | 将根据指定字段进行计算的统计数据。
| Value Table |
data_store (可选) | 指定将用于保存输出的 ArcGIS Data Store。默认为 SPATIOTEMPORAL_DATA_STORE。在时空大数据存储中存储的所有结果都将存储在 WGS84 中。在关系数据存储中存储的结果都将保持各自的坐标系。
| String |
time_boundary_split (可选) | 用于分割输入数据以进行分析的时间跨度。您可通过时间界限分析定义的时间跨度内的值。例如,如果您使用 1 天的时间界限,并将时间界限参考设置为 1980 年 1 月 1 日,则轨迹将在每天开始时被分割。 | Time Unit |
time_boundary_reference (可选) | 用于分割输入数据以进行分析的参考时间。将为整个数据跨度创建时间界限,且不需要在开始时产生参考时间。如果未指定参考时间,则将使用 1970 年 1 月 1 日。 | Date |
派生输出
名称 | 说明 | 数据类型 |
output | 输出点或面驻留位置。 | 记录集 |
代码示例
以下 Python 窗口脚本演示了如何使用 FindDwellLocations 工具。
# Name: FindDwellLocations.py
# Description: Find the mean centers representing locations where ships have
# stayed within 15 miles across 4 hours of travel
# Requirements: ArcGIS GeoAnalytics Server
# Import system modules
import arcpy
# Set local variables
inFeatures = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Hurricanes/MapServer/0"
outputName = "AtlanticShips_DwellLocations"
trackIdentifier = "SHIPID"
distance = "15 Miles"
timeDuration = "4 Hours"
outputType = "MEAN_CENTERS"
statistics = [["SPEED", "MEAN"]]
# Execute Find Dwell Locations
arcpy.geoanalytics.FindDwellLocations(inFeatures, outFeatures, trackIdentifier,
"GEODESIC", distance, timeDuration,
outputType, statistics,
"RELATIONAL_DATA_STORE")
环境
- 输出坐标系
将用于分析的坐标系。除非由该参数进行指定,否则将基于输入坐标系完成分析。对于 GeoAnalytics 工具,最终结果将存储于 WGS84 中的时空数据存储之内。
许可信息
- Basic: 需要 ArcGIS GeoAnalytics Server
- Standard: 需要 ArcGIS GeoAnalytics Server
- Advanced: 需要 ArcGIS GeoAnalytics Server