按时间将照片与行匹配 (数据管理)

摘要

根据照片与行时间戳将照片文件匹配至表或要素类的行。具有时间戳最接近于照片捕捉时间的行将与此照片相匹配。接下来将根据输入的行以及所匹配的照片的路径创建一个包含 ObjectIDs 的新表。也可以将匹配的照片文件作为地理数据库附件添加到输入表的行记录中。

插图

按时间将照片与行匹配图示
输入行 5 与任何照片都不匹配,因为其他行的时间戳更接近照片文件的时间戳。

使用情况

  • 此工具可用于对 GPS 捕获的要素以及捕获 GPS 要素时所获得的数字照片进行匹配。

  • 输出表将包含四个属性字段:

    • IN_FID:时间戳与照片的时间戳相匹配的输入行的对象 ID。
    • Photo_Path:时间戳与 IN_FID 字段中标识的输入行时间戳相匹配的照片文件的完整路径。
    • Photo_Name:照片文件的短名称。
    • Match_Diff:照片文件与匹配的输入行的时间戳间的差异。此数值采用时间差单位参数中指定的单位。

  • 虽然输入表支持 shapefile 和 dBASE 数据,但强烈建议您使用地理数据库数据,因为 shapefile 或 dBASE 表中的日期字段不能同时存储日期和时间信息。

    了解有关 shapefile 限制的详细信息

  • 由于某一单个输入行的时间戳可能同时与多个照片的时间戳相匹配,因此输出表可能会包含多个具有相同 IN_FID 的行(输出中的每一条行记录都表示了一个照片与一个输入行之间的匹配)。

  • 输出表可通过输出 IN_FID 字段和输入的 OBJECTID 字段连接到输入表。如果输出表中包含多个具有相同 IN_FID 的行(一个输入行匹配多个照片),请使用关联或关系类将输出连接至输入。

  • 时间字段必须是 Date 类型。要将文本型或数字型的字段转换为 Date 字段,请使用转换时间字段工具。

  • 即使 GPS 点和数字照片恰好是在同一时间捕获的,由设备记录的时间也可能位于不同的时区中。例如,GPS 设备经常以协调世界时间 (UTC) 或格林尼治时间 (GMT) 来记录时间,而数码相机则往往以本地时区来记录时间。要协调不同时区所导致的时间戳差异,请使用转换时区工具,更改输入表的时间字段来匹配照片文件时间戳的时区。

    同样,GPS 的时钟也可能与数码相机的时钟不同步。要在这些时钟不同步的情况下准确匹配照片和 GPS 点,请确定两个时钟之间的时间差,然后将此值用于时钟偏移参数。

  • 必须以秒为单位指定时间容差时钟偏移参数。Internet 上有很多用于将不同时间单位与秒进行换算的工具。例如,3 分 12 秒等于 192 秒。

参数

标注说明数据类型
输入文件夹

照片文件(.jpg.tif)所在的文件夹。 递归扫描此文件夹的照片文件;文件夹基本级别以及任何子文件夹中的所有照片都将添加到输出中。

Folder
输入表

表或要素类,其行将与照片文件相匹配。输入表通常是一个表示 GPS 记录的点要素类。

Table View
时间字段

输入表中的日期/时间字段,用于指示各行的捕获或创建时间。必须是日期字段;不能是字符串或数值型字段。

Field
输出表

输出表,其中包含与照片相匹配的输入表的 OBJECTID 以及相匹配的照片路径。输出表中仅包含与照片匹配的输入表的 OBJECTID。

Table
未匹配的照片表
(可选)

可选输出表,其中将列出具有无效时间戳的输入文件夹中的任何照片文件,或因没有在时间容差范围内的输入行而无法匹配的任何照片。

如果未指定路径,则不会创建此表。

Table
将照片添加为附件
(可选)

指定照片文件是否将作为地理数据库附件添加到输入表的行中。要将照片文件作为附件进行添加,输入表必须存储在 10 或更高版本的地理数据库中。

  • 选中 - 照片文件将作为地理数据库附件添加到输入表的行中。地理数据库附件被内部复制到地理数据库中。这是默认设置。
  • 未选中 - 照片文件将不作为地理数据库附件添加到输入表的行中。
Boolean
时间容差
(可选)

匹配的输入行和照片文件的日期/时间之间的最大差异(以秒为单位)。如果输入行和照片文件的时间戳差异超出该容差值,则不会发生匹配。要将照片文件与具有最接近时间戳的行匹配,无论日期/时间差异有多大,请将容差设置为 0。此值的符号(- 或 +)无关紧要;将使用指定数值的绝对值。

不要使用此参数进行调整以实现 GPS 和数码相机记录的时间之间一致的转换或偏移。请使用时钟偏移参数或转换时区工具转换输入行的时间戳,来匹配照片的时间戳。

Double
时钟偏移
(可选)

用来捕获照片的数码相机和 GPS 装置的内部时钟之间的差异(以秒为单位)。如果数码相机的时钟在 GPS 装置的时钟之后,请使用正值;如果数码相机的时钟在 GPS 装置的时钟之前,请使用负值。

例如,如果具有时间戳 11:35:17 的照片应匹配至具有时间戳 11:35:32 的行,请使用时钟偏移 15

Double

arcpy.management.MatchPhotosToRowsByTime(Input_Folder, Input_Table, Time_Field, Output_Table, {Unmatched_Photos_Table}, {Add_Photos_As_Attachments}, {Time_Tolerance}, {Clock_Offset})
名称说明数据类型
Input_Folder

照片文件(.jpg.tif)所在的文件夹。 递归扫描此文件夹的照片文件;文件夹基本级别以及任何子文件夹中的所有照片都将添加到输出中。

Folder
Input_Table

表或要素类,其行将与照片文件相匹配。输入表通常是一个表示 GPS 记录的点要素类。

Table View
Time_Field

输入表中的日期/时间字段,用于指示各行的捕获或创建时间。必须是日期字段;不能是字符串或数值型字段。

Field
Output_Table

输出表,其中包含与照片相匹配的输入表的 OBJECTID 以及相匹配的照片路径。输出表中仅包含与照片匹配的输入表的 OBJECTID。

Table
Unmatched_Photos_Table
(可选)

可选输出表,其中将列出具有无效时间戳的输入文件夹中的任何照片文件,或因没有在时间容差范围内的输入行而无法匹配的任何照片。

如果未指定路径,则不会创建此表。

Table
Add_Photos_As_Attachments
(可选)

指定照片文件是否将作为地理数据库附件添加到输入表的行中。

许可:

添加附件时,至少需要一个 ArcGIS Desktop Standard 许可,并且输出要素类必须处于 10 或更高版本的地理数据库中。

  • ADD_ATTACHMENTS 照片文件将作为地理数据库附件添加到输入表的行中。地理数据库附件被内部复制到地理数据库中。这是默认设置。
  • NO_ATTACHMENTS 照片文件将不作为地理数据库附件添加到输入表的行中。
Boolean
Time_Tolerance
(可选)

匹配的输入行和照片文件的日期/时间之间的最大差异(以秒为单位)。如果输入行和照片文件的时间戳差异超出该容差值,则不会发生匹配。要将照片文件与具有最接近时间戳的行匹配,无论日期/时间差异有多大,请将容差设置为 0。此值的符号(- 或 +)无关紧要;将使用指定数值的绝对值。

不要使用此参数进行调整以实现 GPS 和数码相机记录的时间之间一致的转换或偏移。请使用时钟偏移参数或转换时区工具转换输入行的时间戳,来匹配照片的时间戳。

Double
Clock_Offset
(可选)

用来捕获照片的数码相机和 GPS 装置的内部时钟之间的差异(以秒为单位)。如果数码相机的时钟在 GPS 装置的时钟之后,请使用正值;如果数码相机的时钟在 GPS 装置的时钟之前,请使用负值。

例如,如果具有时间戳 11:35:17 的照片应匹配至具有时间戳 11:35:32 的行,请使用时钟偏移 15

Double

代码示例

MatchPhotosToRowsByTime(按时间将照片与行匹配)示例(Python 窗口)

下面的 Python 窗口代码片段演示了如何使用 MatchPhotosToRowsByTime 工具。

import arcpy
arcpy.MatchPhotosToRowsByTime_management(
    "c:/data/photos", "c:/data/city.gdb/gps_points", "DateTime", 
    "c:/data/city.gdb/output_table", "", "ADD_ATTACHMENTS", "", 20)
MatchPhotosToRowsByTime(按时间将照片与行匹配)示例(独立脚本)

以下脚本演示了如何使用 MatchPhotosToRowsByTime 工具。

"""
Name: GeoTaggedPhotosToPoints example
Description: Find the points that match photo time stamps, then join the output table 
             to the input to see which photos match which points
""" 
# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data"
 
# Set local variables
inFolder = "photos"
inFC = "city.gdb/gps_points"
timeField = "DateTime"
outTable = "city.gdb/output_table"
outUnmatched = "city.gdb/unmatched_photos"
attachmentsOption = "ADD_ATTACHMENTS"
timeDiff = 0
timeOffset = 20
# Execute MatchPhotosToRowsByTime and JoinField
arcpy.MatchPhotosToRowsByTime_management(inFolder, inFC, timeField, outTable, 
                                         outUnmatched, attachmentsOption, 
                                         timeDiff, timeOffset)
arcpy.JoinField_management(inFC, "OBJECTID", outTable, "IN_FID", 
                           "Photo_Path;Photo_Name;Match_Diff")