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

摘要

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

插图

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

使用情况

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

  • 输出表将包含以下属性字段:

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

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

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

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

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

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

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

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

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

参数

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

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

Folder
输入表

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

Table View
时间字段

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

Field
输出表

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

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

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

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

Table
将照片添加为附件
(可选)
  • 选中 - 照片文件将作为地理数据库附件添加到输入表的行中。 地理数据库附件被内部复制到地理数据库中。 这是默认设置。
  • 未选中 - 照片文件将不作为地理数据库附件添加到输入表的行中。
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

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

Table
Unmatched_Photos_Table
(可选)

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

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

Table
Add_Photos_As_Attachments
(可选)

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

注:

添加附件时,输出要素类需位于 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.management.MatchPhotosToRowsByTime(
    "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

# Run MatchPhotosToRowsByTime and JoinField
arcpy.management.MatchPhotosToRowsByTime(inFolder, inFC, timeField, outTable, 
                                         outUnmatched, attachmentsOption, 
                                         timeDiff, timeOffset)
arcpy.management.JoinField(inFC, "OBJECTID", outTable, "IN_FID", 
                           ["Photo_Path", "Photo_Name", "Match_Diff"])

相关主题