标注 | 说明 | 数据类型 |
输入文件夹 | 照片文件(.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 |
摘要
根据照片与行时间戳将照片文件匹配至表或要素类的行。 具有时间戳最接近于照片捕捉时间的行将与此照片相匹配。 根据输入的行以及所匹配的照片的路径创建一个包含对象 ID 值的新表。 也可以使用此工具,将匹配的照片文件作为地理数据库附件添加到输入表的行记录中。
插图
使用情况
此工具可用于对 GPS 捕获的要素以及捕获 GPS 要素时所获得的数字照片进行匹配。
输出表将包含以下属性字段:
- IN_FID - 时间戳与照片的时间戳相匹配的输入行的对象 ID。
- Photo_Path - 时间戳与 IN_FID 字段中标识的输入行时间戳相匹配的照片文件的完整路径。
- Photo_Name - 照片文件的短名称。
- Match_Diff - 照片文件与匹配的输入行的时间戳间的差异。 此数值采用时间差单位参数中指定的单位。
虽然输入表支持 shapefile 和 dBASE 数据,但强烈建议您使用地理数据库数据,因为 shapefile 或 dBASE 表中的日期字段不能同时存储日期和时间信息。
由于某一单个输入行的时间戳可能同时与多个照片的时间戳相匹配,因此输出表可能会包含多个具有相同 IN_FID 值的行(输出中的每一条行记录都表示了一个照片与一个输入行之间的匹配)。
输出表可通过输出 IN_FID 字段和输入的对象 ID 值连接到输入表。 如果输出表中包含多个具有相同 IN_FID 字段值的行(一个输入行匹配多个照片),请使用关联或关系类将输出连接至输入。
时间字段必须是日期类型。 要将文本型或数字型的字段转换为日期型字段,请使用转换时间字段工具。
即使 GPS 点和数字照片恰好是在同一时间捕获的,由设备记录的时间也可能位于不同的时区中。 例如,GPS 设备经常以协调世界时间 (UTC) 或格林尼治时间来记录时间,而数码相机则往往以本地时区来记录时间。 要协调不同时区所导致的时间戳差异,请使用转换时区工具,更改输入表的时间字段来匹配照片文件时间戳的时区。
同样,GPS 的时钟也可能与数码相机的时钟不同步。 要在这些时钟不同步的情况下准确匹配照片和 GPS 点,请确定两个时钟之间的时间差,然后将此值用于时钟偏移参数。
必须以秒为单位指定时间容差和时钟偏移参数。 Internet 上有很多用于将不同时间单位与秒进行换算的工具。 例如,3 分 12 秒等于 192 秒。
参数
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 或更高版本的地理数据库中。
| Boolean |
Time_Tolerance (可选) | 匹配的输入行和照片文件的日期/时间之间的最大差异(以秒为单位)。 如果输入行和照片文件的时间戳差异超出该容差值,则不会发生匹配。 要将照片文件与具有最接近时间戳的行匹配,无论日期/时间差异有多大,请将容差设置为 0。 此值的符号(- 或 +)无关紧要;将使用指定数值的绝对值。 不要使用此参数进行调整以实现 GPS 和数码相机记录的时间之间一致的转换或偏移。 请使用时钟偏移参数或转换时区工具转换输入行的时间戳,来匹配照片的时间戳。 | Double |
Clock_Offset (可选) | 用来捕获照片的数码相机和 GPS 装置的内部时钟之间的差异(以秒为单位)。 如果数码相机的时钟在 GPS 装置的时钟之后,请使用正值;如果数码相机的时钟在 GPS 装置的时钟之前,请使用负值。 例如,如果具有时间戳 11:35:17 的照片应匹配至具有时间戳 11:35:32 的行,请使用时钟偏移值 15。 | Double |
代码示例
下面的 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 函数。
"""
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"])