時間による写真と行のマッチング (Match Photos To Rows By Time) (データ管理)

サマリー

写真および行のタイム スタンプに従って、写真ファイルとテーブルまたはフィーチャクラスの行を対応付けます。写真の撮影時刻に最も近いタイム スタンプを持つ行が、その写真に対応付けられます。入力行の ObjectID および行に対応する写真のパスを含む、新しいテーブルが作成されます。対応する写真ファイルを、ジオデータベース アタッチメントとして入力テーブルの行に追加することもできます。

[時間による写真と行のマッチング (Match Photos To Rows By Time)] の図
入力行 5 はいずれの写真にも一致しません。これは、他の行に、写真ファイルのタイム スタンプに近いタイム スタンプがあるからです。

使用法

  • このツールを使用すると、GPS で取得したフィーチャと、その GPS フィーチャを取得した時刻に撮影されたデジタル写真を対応付けることができます。

  • 出力テーブルには、4 つの属性フィールドが含まれます。

    • IN_FID: 入力行のオブジェクト ID。この行のタイム スタンプが、写真のタイム スタンプと照合されます。
    • Photo_Path: 写真ファイルの絶対パス。この写真のタイム スタンプが、IN_FID フィールドで指定した入力行のタイム スタンプと照合されます。
    • Photo_Name: 写真ファイルの短い名前。
    • Match_Diff: 写真ファイルのタイム スタンプと一致する入力行のタイム スタンプの差。この数値は、[時間差の単位] パラメーターで指定された単位で表されます。

  • 入力行ではシェープファイルと dBASE データがサポートされますが、ジオデータベース データを使用することをお勧めします。これは、シェープファイルまたは dBASE テーブルの日付フィールドには、日付と時刻の両方の情報を保存できないためです。

    シェープファイルの制限の詳細

  • 1 つの入力行のタイム スタンプが複数の写真のタイム スタンプに一致する場合があるため、出力テーブルには同じ IN_FID を含む複数の行が存在する場合があります (出力の各行は、1 つの写真と 1 つの入力行の対応付けを表します)。

  • 出力テーブルは、出力の IN_FID フィールドと入力の OBJECTID を使用して入力テーブルに結合することができます。出力テーブルに同じ IN_FID を含む複数の行がある (1 つの入力行が複数の写真に対応する) 場合は、リレートまたはリレーションシップ クラスを使用して出力を入力にリンクします。

  • 時刻フィールドは Date 型である必要があります。テキスト フィールドまたは数値フィールドを Date フィールドに変換するには、[時間フィールドの変換 (Convert Time Field)] ツールを使用します。

  • GPS ポイントとデジタル写真が正確に同じ時刻に取得されている場合でも、デバイスによって記録された時刻のタイム ゾーンが異なる場合があります。たとえば、GPS デバイスでは UTC (協定世界時) や GMT (グリニッジ標準時) が使用されることが多く、デジタル カメラでは一般的にローカルなタイム ゾーンが使用されます。タイム ゾーンの違いによるタイム スタンプの差を調整するには、[タイム ゾーンの変換 (Convert Time Zone)] ツールを使用して入力行の時刻フィールドを変更し、写真ファイルのタイム スタンプで使用されているタイム ゾーンに一致させます。

    同様に、GPS の時計がデジタル カメラの時計と同期していない場合があります。これらの時計が同期していない場合に写真と GPS ポイントを一致させるには、2 つの時計の時間差を調べ、この値を [クロック オフセット] パラメーターに使用します。

  • [時間許容値][クロック オフセット] パラメーターは、秒で指定する必要があります。時間の単位を秒に直すユーティリティは、インターネット上に数多くあります。たとえば、3 分 12 秒は 192 秒です。

パラメーター

ラベル説明データ タイプ
入力フォルダー

写真ファイルが保存されているフォルダー。このフォルダーの写真は再帰的にスキャンされ、このフォルダーにある写真と、そのサブフォルダーにある写真のすべてが出力に追加されます。

Folder
入力テーブル

行を写真ファイルと対応付けるテーブルまたはフィーチャクラス。この入力テーブルは通常、GPS の記録を表すポイント フィーチャクラスになります。

Table View
時間フィールド

各行が取得または作成された日時を表す入力行の日付/時刻フィールド。このフィールドは、Date 型のフィールドである必要があります。文字列または数値フィールドは指定できません。

Field
出力テーブル

写真に対応する入力行の OBJECTID と、対応する写真のパスを含む出力テーブル。対応する写真が見つかった入力行の OBJECTID のみが、出力テーブルに含まれます。

Table
マッチしない写真のリストが出力されるテーブル
(オプション)

オプションの出力テーブル。入力フォルダーにあるタイム スタンプが無効な写真ファイルと、写真のタイム スタンプの時間許容値内にタイム スタンプが収まる入力行がないために対応付けることができない写真がリストで示されます。

パスが指定されていない場合、このテーブルは作成されません。

Table
写真をアタッチメントとして追加
(オプション)

写真ファイルを、ジオデータベース アタッチメントとして入力テーブルの行に追加するかどうかを指定します。写真ファイルをアタッチメントとして追加するには、入力行がバージョン 10 以降のジオデータベースに格納されている必要があります。

  • オン - 写真ファイルをジオデータベース アタッチメントとして入力テーブルの行に追加します。ジオデータベース アタッチメントは、ジオデータベースに内部的にコピーされます。これがデフォルトです。
  • オフ - 写真ファイルをジオデータベース アタッチメントとして入力テーブルの行に追加しません。
Boolean
時間許容値
(オプション)

入力行と対応する写真ファイルとの日付/時刻の最大差 (秒)。入力行と写真ファイルのタイム スタンプの差がこの許容値よりも大きい場合は、対応付けが行われません。日付/時刻の差の大きさにかかわらず、写真ファイルを最も近いタイム スタンプを持つ行に対応付ける場合は、許容値を 0 に設定します。この値では符号 (- または +) は無関係で、指定された値の絶対値が使用されます。

このパラメーターは、GPS およびデジタル カメラで記録された時刻の間で一定のシフトまたはオフセットを調整する目的で使用しないでください。入力行のタイムスタンプをシフトして写真のタイム スタンプと一致させる場合は、[クロック オフセット] パラメーターを使用するか、[タイム ゾーンの変換 (Convert Time Zone)] ツールを使用します。

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

写真ファイルが保存されているフォルダー。このフォルダーの写真は再帰的にスキャンされ、このフォルダーにある写真と、そのサブフォルダーにある写真のすべてが出力に追加されます。

Folder
Input_Table

行を写真ファイルと対応付けるテーブルまたはフィーチャクラス。この入力テーブルは通常、GPS の記録を表すポイント フィーチャクラスになります。

Table View
Time_Field

各行が取得または作成された日時を表す入力行の日付/時刻フィールド。このフィールドは、Date 型のフィールドである必要があります。文字列または数値フィールドは指定できません。

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 およびデジタル カメラで記録された時刻の間で一定のシフトまたはオフセットを調整する目的で使用しないでください。入力行のタイムスタンプをシフトして写真のタイム スタンプと一致させる場合は、[クロック オフセット] パラメーターを使用するか、[タイム ゾーンの変換 (Convert Time Zone)] ツールを使用します。

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")

環境

特殊なケース

ライセンス情報

  • Basic: 制限付き
  • Standard: Yes
  • Advanced: Yes

関連トピック