按时间将照片与行匹配 (数据管理)
摘要
根据照片与行时间戳将照片文件匹配至表或要素类的行。具有时间戳最接近于照片捕捉时间的行将与此照片相匹配。接下来将根据输入的行以及所匹配的照片的路径创建一个包含 ObjectIDs 的新表。也可以将匹配的照片文件作为地理数据库附件添加到输入表的行记录中。
插图
用法
-
此工具可用于对 GPS 捕获的要素以及捕获 GPS 要素时所获得的数字照片进行匹配。
输出表将包含四个属性字段:
- IN_FID:时间戳与照片的时间戳相匹配的输入行的对象 ID。
- Photo_Path:时间戳与 IN_FID 字段中标识的输入行时间戳相匹配的照片文件的完整路径。
- Photo_Name:照片文件的短名称。
- Match_Diff:照片文件与匹配的输入行的时间戳间的差异。此数值采用时间差单位参数中指定的单位。
虽然输入表支持 shapefile 和 dBASE 数据,但强烈建议您使用地理数据库数据,因为 shapefile 或 dBASE 表中的日期字段不能同时存储日期和时间信息。
由于某一单个输入行的时间戳可能同时与多个照片的时间戳相匹配,所以输出表可能会包含多个具有相同 IN_FID 的行(输出中的每条行记录都表示了一个照片与一个输入行之间的匹配)。
输出表可通过输出 IN_FID 字段和输入的 OBJECTID 字段连接到输入表。如果输出表中包含多个具有相同 IN_FID 的行(一个输入行匹配多个照片),请使用关联或关系类将输出链接至输入。
时间字段必须是日期类型。要将文本型或数值型的字段转换为日期字段,请使用转换时间字段工具。
即使 GPS 点和数字照片恰好是在同一时间捕获的,由设备记录的时间也可能位于不同的时区中。例如,GPS 设备经常以协调世界时间 (UTC) 或格林尼治时间 (GMT) 来记录时间,而数码相机则往往以本地时区来记录时间。要协调不同时区所导致的时间戳差异,请使用转换时区工具,更改输入表的时间字段来匹配照片文件时间戳的时区。
同样,GPS 的时钟也可能与数码相机的时钟不同步。要在这些时钟不同步的情况下准确匹配照片和 GPS 点,请确定两个时钟之间的时间差,然后将此值用于时钟偏移参数。
必须以秒为单位指定时间容差和时钟偏移参数。Internet 上有很多用于将不同时间单位与秒进行换算的工具。例如,3 分 12 秒等于 192 秒。
语法
参数 | 说明 | 数据类型 |
Input_Folder |
照片文件所在的文件夹。此文件夹是递归扫描照片文件得到的;基础等级文件夹以及任何子文件夹中的所有照片都将被添加到输出中。 | Folder |
Input_Table |
表或要素类,其行将与照片文件相匹配。输入表通常是一个表示 GPS 记录的点要素类。 | TableView |
Time_Field |
输入表中的日期/时间字段,用于指示各行的捕获或创建时间。必须是日期字段;不能是字符串或数值型字段。 | Field |
Output_Table |
输出表,其中包含与照片相匹配的输入表的 OBJECTID 以及相匹配的照片路径。输出表中仅包含与照片匹配的输入表的 OBJECTID。 | Table |
Unmatched_Photos_Table (可选) |
可选输出表,其中将列出具有无效时间戳的输入文件夹中的任何照片文件,或因没有在时间容差范围内的输入行而无法匹配的任何照片。 如果未指定路径,则不会创建此表。 | Table |
Add_Photos_As_Attachments (可选) |
指定是否将照片文件作为地理数据库附件添加到输入表的行中。 许可: 添加附件时,至少需要一个 ArcGIS for Desktop Standard 许可,并且输出要素类必须处于 10 或更高版本的地理数据库中。
| Boolean |
Time_Tolerance (可选) |
匹配的输入行和照片文件的日期/时间之间的最大差异(以秒为单位)。如果输入行和照片文件的时间戳差异超出该容差值,则不会发生匹配。要将照片文件与具有最接近时间戳的行进行匹配,而不考虑日期/时间的差异可能多大,请将容差设置为 0。该值的符号(- 或 +)并不相干;将使用指定数值的绝对值。 不要使用此参数进行调整以实现 GPS 和数码相机记录的时间之间一致的转换或偏移。请使用时钟偏移参数或转换时区工具转换输入行的时间戳,来匹配照片的时间戳。 | Double |
Clock_Offset (可选) |
用来捕获照片的数码相机和 GPS 装置的内部时钟之间的差异(以秒为单位)。如果数码相机的时钟在 GPS 装置的时钟之后,请使用正值;如果数码相机的时钟在 GPS 装置的时钟之前,请使用负值。 例如,如果具有时间戳 11:35:17 的照片应匹配至具有时间戳 11:35:32 的行,请使用时钟偏移 15。 | Double |
代码实例
下面的 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(按时间将照片与行匹配)工具。
"""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
from arcpy import env
# Set environment settings
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")