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

サマリー

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

時間による写真と行のマッチング ツール
入力行 5 はいずれの写真にもマッチしません。これは、他の行に、写真ファイルのタイム スタンプに近いタイム スタンプがあるからです。

使用法

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

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

    • IN_FID- 入力行の Object ID。この行のタイム スタンプが、写真のタイム スタンプとマッチされます。
    • Photo_Path- 写真ファイルの絶対パス。この写真のタイム スタンプが、IN_FID フィールドで指定した入力行のタイム スタンプとマッチされます。
    • Photo_Name- 写真ファイルの短い名前。
    • Match_Diff- 写真ファイルのタイム スタンプとマッチする入力行のタイム スタンプの差。 この数値は、[時間差の単位] パラメーターで指定された単位で表されます。

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

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

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

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

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

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

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

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

パラメーター

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

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

Folder
入力テーブル

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

Table View
時間フィールド

各行が取得または作成された日時を表す入力テーブルの日付フィールド。 フィールドは日付タイプにする必要があります。文字列タイプや数値タイプにすることはできません。

Field
出力テーブル

写真とマッチする入力テーブルの Object ID 値と、マッチする写真のパスを含む出力テーブル。 写真とマッチする入力テーブルの Object ID 値のみが、出力テーブルに含まれます。

Table
一致しない写真テーブル
(オプション)

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

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

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

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

Folder
Input_Table

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

Table View
Time_Field

各行が取得または作成された日時を表す入力テーブルの日付フィールド。 フィールドは日付タイプにする必要があります。文字列タイプや数値タイプにすることはできません。

Field
Output_Table

写真とマッチする入力テーブルの Object ID 値と、マッチする写真のパスを含む出力テーブル。 写真とマッチする入力テーブルの Object ID 値のみが、出力テーブルに含まれます。

Table
Unmatched_Photos_Table
(オプション)

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

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

Table
Add_Photos_As_Attachments
(オプション)

写真ファイルをジオデータベース アタッチメントとして入力テーブルの行に追加するかどうかを指定します。

注意:

アタッチメントを追加するには、出力フィーチャクラスがバージョン 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.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"])

関連トピック