時間による写真と行のマッチング(Match Photos To Rows By Time) (データの管理)
サマリ
写真および行のタイム スタンプに従って、写真ファイルとテーブルまたはフィーチャクラスの行を対応付けます。写真の撮影時刻に最も近いタイム スタンプを持つ行が、その写真に対応付けられます。入力行の ObjectID および行に対応する写真のパスを含む、新しいテーブルが作成されます。対応する写真ファイルを、ジオデータベース アタッチメントとして入力テーブルの行に追加することもできます。
図
![Match Photos To Rows By Time illustration Match Photos To Rows By Time illustration](0017/GUID-95735AB4-2D74-4FAC-AE6C-5C79187D4BF5-web.png)
使用法
-
このツールを使用すると、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 秒です。
構文
パラメータ | 説明 | データ タイプ |
Input_Folder |
写真ファイルが保存されているフォルダ。このフォルダの写真は再帰的にスキャンされ、このフォルダにある写真と、そのサブフォルダにある写真のすべてが出力に追加されます。 | Folder |
Input_Table |
行を写真ファイルと対応付けるテーブルまたはフィーチャクラス。この入力テーブルは通常、GPS の記録を表すポイント フィーチャクラスになります。 | TableView |
Time_Field |
各行が取得または作成された日時を表す入力行の日付/時刻フィールド。このフィールドは、Date 型のフィールドである必要があります。文字列または数値フィールドは指定できません。 | Field |
Output_Table |
写真に対応する入力行の OBJECTID と、対応する写真のパスを含む出力テーブル。対応する写真が見つかった入力行の OBJECTID のみが、出力テーブルに含まれます。 | Table |
Unmatched_Photos_Table (オプション) |
オプションの出力テーブル。入力フォルダにあるタイム スタンプが無効な写真ファイルと、写真のタイム スタンプの時間許容値内にタイム スタンプが収まる入力行がないために対応付けることができない写真がリストで示されます。 パスが指定されていない場合、このテーブルは作成されません。 | Table |
Add_Photos_As_Attachments (オプション) |
写真ファイルを、ジオデータベース アタッチメントとして入力テーブルの行に追加するかどうかを指定します。 ![]() アタッチメントを追加するには、最低でも ArcGIS for Desktop Standard ライセンスが必要です。また、出力フィーチャクラスは、バージョン 10 以上に含まれている必要があります。
| Boolean |
Time_Tolerance (オプション) |
入力行と対応する写真ファイルとの日付/時刻の最大差(秒)。入力行と写真ファイルのタイム スタンプの差がこの許容値よりも大きい場合は、対応付けが行われません。日付/時刻の差の大きさにかかわらず、写真ファイルを最も近いタイム スタンプを持つ行に対応付ける場合は、許容値を 0 に設定します。この値では符号(- または +)は無関係で、指定された値の絶対値が使用されます。 このパラメータは、GPS およびデジタル カメラで記録された時刻の間で一定のシフトまたはオフセットを調整する目的で使用しないでください。入力行のタイムスタンプをシフトして写真のタイム スタンプと一致させる場合は、[クロック オフセット] パラメータを使用するか、[タイム ゾーンの変換(Convert Time Zone)] ツールを使用します。 | 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")