重新构建轨迹 (GeoAnalytics Desktop)

摘要

从启用时间的输入数据创建线或面轨迹。

插图

“重新构建轨迹”工具图示

使用情况

  • 重新构建轨迹会针对点要素或面要素运行。 输入图层必须已启用时间,并具有用于表示时刻的要素。

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

  • 应用了缓冲区的要素将生成面轨迹。 未应用缓冲区的输入点要素将生成折线轨迹。

  • 输入要素将由已启用时间、且能够表示时刻的要素组成。 结果为可表示时间间隔的线或面要素。 该间隔的开始和结束由轨迹中第一个和最后一个要素的时间决定。

    具有两个不同轨迹(绿色和红色)的输入要素,显示时间类型时刻(左)以及生成的轨迹(右)或时间类型间隔
    随即显示具有两个不同轨迹(绿色和红色)的输入要素,其中具有时间类型时刻(左)以及生成的轨迹(右)或时间类型间隔。

  • 针对线性结果,仅会返回包含多个点的轨迹。 如果应用了缓冲区,则将返回所有要素。

  • 您可以选择为您的输入要素应用缓冲区。 当您应用缓冲区时,生成的轨迹将为面要素。

    应用了缓冲区的重新构建为轨迹的输入点
    应用了缓冲区的输入点已被重新构建为轨迹。

  • 缓冲输入要素时,每个输入要素都会被缓冲。 随后将生成凸包,以创建面轨迹。

    输入点(绿色)、可视化中间缓冲区(蓝色影线)以及生成的面轨迹(蓝色)
    将显示输入点(绿色)、可视化中间缓冲区(蓝色影线)以及生成的面轨迹(蓝色)的示例。

  • 缓冲区表达式中使用的字段必须为数值字段,且将采用输入空间参考的单位进行应用。 有关详细信息,请参阅 GeoAnalytics Desktop 工具箱中的 Arcade 表达式。 您可以使用跟踪感知型方程。

  • 默认情况下,系统仅会计算轨迹中的点或面计数。 其他统计数据可通过指定汇总字段参数值进行计算。

  • 默认情况下,需使用测地线方法创建轨迹。 该方法适用于以下两个分析的组件:

    • 跨越国际日期变更线的轨迹 - 当使用测地线方法时,越过国际日期变更线的输入图层将具有正确跨越国际日期变更线的轨迹。 这是默认设置。 必须将您的输入图层或处理空间参考设置为支持环绕国际日期变更线的空间参考,例如“世界圆柱等积”等全球投影。
    • 缓冲区 - 可对输入要素进行有选择地缓冲。 要了解有关何时应用测地线或平面缓冲区的详细信息,请参阅创建缓冲区

  • 可通过以下方式分割轨迹:

    • 时间分割 - 基于两个输入之间的一段时间。 当输入数据大于指定时间时,可应用时间分割将任何轨迹分解。 例如,如果您有五个轨迹标识符相同的要素,时间分别为 [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 公里的距离分割,会产生如下的结果:

    有关输入点(绿色)与多个不同时间和距离分割的 5 个示例
    显示了有关输入点(黄色)与多个不同时间和距离分割的 5 个示例。

    分割选项描述

    六个具有时间和位置的输入点

    具有相同标识符的输入点。 点之间的距离标记在虚线的顶部,各点测量的时间标记在点的下方。 时间轴上有 4 处分割。 红色分割代表 1 天的时间界限分割,从凌晨 12:00 开始。 蓝色分割代表两点之间的距离大于 16 公里的距离分割。 紫色分割代表两个连续点之间的时态距离大于 6 小时的时间分割。

    没有时间分割和没有距离分割的示例

    没有时间分割和没有距离分割的示例。

    时间分割为 6 小时的示例

    时间分割为 6 个小时的示例。 任何大于两小时的要素都会分割成单独的轨迹。

    时间界限为 1 天的示例

    时间界限为 1 天(从午夜开始)的示例。 以从指定时间(此处为凌晨 12:00)开始的每 1 天为间隔创建轨道。

    距离分割为 16 公里的示例

    距离分割为 16 公里的示例。 任何相距大于 16 公里的要素(上午 05:00 和 06:00 时的要素)会分割成单独的轨迹。

    时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例

    时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例。任何相差超过 6 小时或与从凌晨 12:00 开始的持续时间分割相交的要素都会被分割成独立的轨迹。

    时间分割为 6 小时和距离分割为 16 公里的示例

    时间分割为 6 小时和距离分割为 16 公里的示例。 任何相差大于 6 小时(上午 06:00 和下午 7:00 时的要素)或相距远于 16 公里的要素会分割成不同的轨迹。

    距离分割为 16 公里和时间界限为 1 天(从凌晨 12:00 开始)的示例

    距离分割为 16 公里和时间界限为 1 天(从凌晨 12:00 开始)的示例。任何相距大于 16 公里或与从凌晨 12:00 开始的持续时间分割相交的要素会分割成不同的轨迹。

    距离分割为 16 公里、时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例

    距离分割为 16 公里、时间分割为 6 小时和时间界限为 1 天(从凌晨 12:00 开始)的示例。任何相距大于 16 公里、相差超过 6 小时或与从凌晨 12:00 开始的持续时间分割相交的要素会分割成不同的轨迹。

  • 在使用时间分割、距离分割或分割表达式来分割轨迹时,可以确定将在分割之间创建段的方式。 您具有以下几种选项:

    • 间距 - 在已分割的两个要素之间创建间距。
    • 之后完成 - 创建在分割后结束的段。
    • 之前开始 - 创建在分割之前结束和开始的段。

    下图显示了分割类型的一个示例:

    三种类型的时间分割

    显示了相同输入点(黄色)上时间分割的三个示例。

    时间分割选项描述

    5 个具有时间和位置的输入点。

    5 个具有相同标识符的输入点。 每个点的时间将标记在虚线下方。 对于所有示例,2:00 a.m. 和 5:00 a.m. 之间存在一个分割。 每个轨迹将在轨迹上的第三个点和第四个点之间分割为两段。 第一个轨迹为绿色,第二个轨迹为紫色。 分割轨迹的方式将由分割类型参数定义。

    间距 间距分割

    在分割的两个点之间存在间距的示例。 这是默认设置。

    之后完成 分割之后完成

    轨迹在分割后的第四个点结束的示例。 第二个轨迹将从第四个点开始。

    之前开始 分割之前开始

    轨迹在分割前的第三个点分割的示例。 第二个轨迹将从第三个点开始。

  • 以下是为何使用分割参数和字段标识符参数可能对定义轨迹有意义的示例,以航班飞行为例:

    • 飞机要素包括 aircraft IDflight IDpilot namestart timeflight_maneuver 字段。 flight_maneuver 字段表示飞机是在陆地上、在上升、在下降还是位于恒定高度。
      • 使用 aircraft ID 字段作为标识符,以查看每架飞机的行程。
      • 使用 aircraft IDflight ID 字段作为标识符,以比较不同的路径。
      • 要一次性检查每架飞机一年的飞行情况,请使用 aircraft ID 字段和时间界限 1 年。
      • 使用 pilot nameaircraft IDstart time 字段来查看每个飞行员的航班。
      • 使用 aircraft ID 字段作为标识符并使用距离大于 1,000 公里的分割来确定新的轨迹,已知 1,000 公里的测量跳跃点不应属于同一轨迹。
      • 可以使用 aircraft ID 字段作为标识符,然后当 flight_maneuver 字段中的值发生变化时使用表达式进行分割。 例如,var flight_manuever = TrackFieldWindow("maneuver", -1, 1); flight_maneuver[0] != flight_maneuver[1] 用于检查轨迹中的当前值与上一个值是否匹配。 如果不匹配,则将分割轨迹。

  • 输出轨迹将返回用作轨迹标识符的字段、轨迹内的要素计数 (count)、各个轨迹的开始和结束时间(start_dateend_date)、以毫秒为单位的轨迹持续时间 (duration) 以及任何其他可选统计数据(格式为 statisticstype_fieldname))。

  • 您可以执行以下一项或多项操作来提高重新构建轨迹工具的性能。

    • 设置范围环境,以便仅分析感兴趣的数据。
    • 使用平面方法而不是测地线方法。
    • 请勿应用缓冲区。
    • 可以使用时间分割时间界限分割距离分割分割表达式参数来分割轨迹。 时间界限分割参数对性能的提高最大。
    • 本地数据用于分析运行的位置。

  • 此地理处理工具由 Spark 作为支持。 可在台式计算机上并行使用多个核来完成分析。 要了解有关运行分析的详细信息,请参阅 GeoAnalytics Desktop 工具的注意事项

  • 运行 GeoAnalytics Desktop 工具时,将在台式计算机上完成分析。 为获得最佳性能,应在桌面上提供数据。 如果使用的是托管要素图层,则建议您使用 ArcGIS GeoAnalytics Server。 如果您的数据不是本地数据,则运行工具需要更长时间。 要使用 ArcGIS GeoAnalytics Server 执行分析,请参阅 GeoAnalytics Tools

  • 还可使用以下方法完成相似性分析:

    • “数据管理”工具箱中的点转线工具。

参数

标注说明数据类型
输入图层

要重新构建为轨迹的点或面。 输入必须为启用时间的图层,用于表示时刻。

Feature Layer
输出要素类

包含所生成轨迹的新要素类。

Feature Class
轨迹字段

将用于标识唯一轨迹的一个或多个字段。

Field
方法

指定将用于重新构建轨迹的条件。 如果使用了缓冲区,则方法参数将用于确定缓冲区的类型。

  • 测地线如果空间参考可以平移,则轨迹将在适当的时候穿过日期变更线。 如果空间参考不可平移,则轨迹将被限制在坐标系的范围之内且不可环绕。
  • 平面将创建平面缓冲区。
String
缓冲区类型

指定缓冲距离将如何定义。

  • 字段将使用单个字段来定义缓冲距离。
  • 表达式使用字段和数学运算符的方程将用于定义缓冲距离。
String
缓冲字段
(可选)

将用于缓冲输入要素的字段。 字段值采用输入空间参考的单位,除非您所使用的是地理坐标系,在这种情况下,单位将为米。

Field
缓冲区表达式
(可选)

将用于缓冲输入要素的表达式。 字段必须为数字形式,并且表达式可以包含 [+ - * / ] 运算符和多个字段。 将应用经计算的值,且采用输入空间参考的单位,除非您所使用的是地理坐标系,在这种情况下,单位为米。

使用 Arcade 表达式,例如 as_kilometers($feature.distance) * 2 + as_meters(15)

如果将图层添加到地图中,则可以使用字段助手过滤器来构建表达式。

Calculator Expression
时间分割
(可选)

时间差距大于按时间分割的持续时间的要素将被分割成单独的轨迹。

Time Unit
距离分割
(可选)

距离差距大于距离分割值的要素将被分割成单独的轨迹。

Linear Unit
时间界限分割
(可选)

用于分割输入数据以进行分析的时间跨度。 您可通过时间界限分析定义的时间跨度内的值。 例如,如果您使用 1 天的时间界限,并将时间界限参考设置为 1980 年 1 月 1 日,则轨迹将在每天开始时被分割。

Time Unit
时间界限参考
(可选)

用于分割输入数据以进行分析的参考时间。 将为整个数据跨度创建时间界限,且不需要在开始时产生参考时间。 如果未指定参考时间,则将使用 1970 年 1 月 1 日。

Date
汇总字段
(可选)

将根据指定字段进行计算的统计数据。

  • 计数 - 非空值的数目。 可用于数值字段或字符串。 [null, 0, 2] 的计数为 2
  • 总和 - 字段内数值的总和。 [null, null, 3] 的总和为 3
  • 平均值 - 数值的平均值。 [0, 2, null] 的平均值为 1
  • 最小值 - 数值字段的最小值。 [0, 2, null] 的最小值为 0
  • 最大值 - 数值字段的最大值。 [0, 2, null] 的最大值为 2
  • 标准差 - 数值字段的标准差。 [1] 的标准差为 null[null, 1,1,1] 的标准差为 null
  • 方差 - 轨迹中数值字段内数值的方差。 [1] 的方差为 null[null, 1, 1, 1] 的方差为 null
  • 范围 - 数值字段的范围。 其计算方法为最大值减去最小值。 [0, null, 1] 的范围为 1[null, 4] 的范围为 0
  • 任何 - 字符串型字段中的示例字符串。
  • 第一个 - 轨迹中指定字段的第一个值。
  • 最后一个 - 轨迹中指定字段的最后一个值。

Value Table
分割表达式
(可选)

可根据值、几何或时间值来分割轨迹的表达式。 将对验证为 true 的表达式进行分割。

Calculator Expression
分割类型
(可选)

指定在分割轨迹时,在两个要素之间创建轨迹段的方式。 分割类型将应用于分割表达式、距离分割和时间分割。

  • 间距在两个要素之间未创建任何段。 这是默认设置。
  • 之后完成将在两个要素之间创建一个段,该段在分割后结束。
  • 之前开始将在两个要素之间创建一个段,该段在分割前结束。
String

arcpy.geoanalytics.ReconstructTracks(input_layer, out_feature_class, track_fields, method, buffer_type, {buffer_field}, {buffer_expression}, {time_split}, {distance_split}, {time_boundary_split}, {time_boundary_reference}, {summary_fields}, {split_expression}, {split_type})
名称说明数据类型
input_layer

要重新构建为轨迹的点或面。 输入必须为启用时间的图层,用于表示时刻。

Feature Layer
out_feature_class

包含所生成轨迹的新要素类。

Feature Class
track_fields
[track_fields,...]

将用于标识唯一轨迹的一个或多个字段。

Field
method

指定将用于重新构建轨迹的条件。 如果使用了缓冲区,则 method 参数将用于确定缓冲区的类型。

  • GEODESIC如果空间参考可以平移,则轨迹将在适当的时候穿过日期变更线。 如果空间参考不可平移,则轨迹将被限制在坐标系的范围之内且不可环绕。
  • PLANAR轨迹将不会穿过日期变更线。
String
buffer_type

指定缓冲距离将如何定义。

  • FIELD将使用单个字段来定义缓冲距离。
  • EXPRESSION使用字段和数学运算符的方程将用于定义缓冲距离。
String
buffer_field
(可选)

将用于缓冲输入要素的字段。 字段值采用输入空间参考的单位,除非您所使用的是地理坐标系,在这种情况下,单位将为米。

Field
buffer_expression
(可选)

将用于缓冲输入要素的表达式。 字段必须为数字形式,并且表达式可以包含 [+ - * / ] 运算符和多个字段。 将应用经计算的值,且采用输入空间参考的单位,除非您所使用的是地理坐标系,在这种情况下,单位为米。

使用 Arcade 表达式,例如 as_kilometers($feature.distance) * 2 + as_meters(15)

Calculator Expression
time_split
(可选)

时间差距大于按时间分割的持续时间的要素将被分割成单独的轨迹。

Time Unit
distance_split
(可选)

距离差距大于距离分割值的要素将被分割成单独的轨迹。

Linear Unit
time_boundary_split
(可选)

用于分割输入数据以进行分析的时间跨度。 您可通过时间界限分析定义的时间跨度内的值。 例如,如果您使用 1 天的时间界限,并将时间界限参考设置为 1980 年 1 月 1 日,则轨迹将在每天开始时被分割。

Time Unit
time_boundary_reference
(可选)

用于分割输入数据以进行分析的参考时间。 将为整个数据跨度创建时间界限,且不需要在开始时产生参考时间。 如果未指定参考时间,则将使用 1970 年 1 月 1 日。

Date
summary_fields
[summary_fields,...]
(可选)

将根据指定字段进行计算的统计数据。

  • COUNT - 非空值的数目。 可用于数值字段或字符串。 [null, 0, 2] 的计数为 2
  • SUM - 字段内数值的总和。 [null, null, 3] 的总和为 3
  • MEAN - 数值的平均值。 [0,2, null] 的平均值为 1
  • MIN - 数值字段的最小值。 [0, 2, null] 的最小值为 0
  • MAX - 数值字段的最大值。 [0, 2, null] 的最大值为 2
  • STDDEV - 数值字段的标准差。 [1] 的标准差为 null[null, 1,1,1] 的标准差为 null
  • VAR - 轨迹中数值字段内数值的方差。 [1] 的方差为 null[null, 1,1,1] 的方差为 null
  • RANGE - 数值字段的范围。 其计算方法为最大值减去最小值。 [0, null, 1] 的范围为 1[null, 4] 的范围为 0
  • ANY - 字符串型字段中的示例字符串。
  • FIRST - 轨迹中指定字段的第一个值。
  • LAST - 轨迹中指定字段的最后一个值。

Value Table
split_expression
(可选)

可根据值、几何或时间值来分割轨迹的表达式。 将对验证为 true 的表达式进行分割。

Calculator Expression
split_type
(可选)

指定在分割轨迹时,在两个要素之间创建轨迹段的方式。 分割类型将应用于分割表达式、距离分割和时间分割。

  • GAP在两个要素之间未创建任何段。 这是默认设置。
  • FINISH_LAST将在两个要素之间创建一个段,该段在分割后结束。
  • START_NEXT将在两个要素之间创建一个段,该段在分割前结束。
String

代码示例

ReconstructTracks 示例(独立脚本)

以下独立脚本演示了如何使用 ReconstructTracks 函数。

# Name: ReconstructTracks.py
# Description: Reconstruct hurricane points into hurricane tracks, where each 
#              location is buffered by the wind speed * 100.

# Import system modules
import arcpy

# Enable time on the input features using an .lyrx file.
# To create the .lyrx file, add your layer to a map, open the layer properties 
# and enable time. Then right-click the layer and select Share As Layer File.
inputLyrx = r'C:\data\Hurricanes.lyrx'

# MakeFeatureLayer converts the .lyrx to features
hurricanesLayer = arcpy.management.MakeFeatureLayer(inputLyrx, "Hurricanes Layer")

# ApplySymbologyFromLayer sets the time using the .lyrx file definition
arcpy.management.ApplySymbologyFromLayer(hurricanesLayer, inputLyrx)

# Set local variables
trackIdentifier = "EVENTID"
out = "c:/mydata/OutputDatasets.gdb/HurricaneTracks"
bufferExpression = "WINDSPEED * 100"
statistics = [["PRESSURE", "MEAN"]]

# Run Reconstruct Tracks
arcpy.gapro.ReconstructTracks(hurricanesLayer, out, trackIdentifier, 
                              "GEODESIC", "EXPRESSION", None, 
                              bufferExpression, None, statistics)