タイム ゾーン属性

車両がタイム ゾーンをまたいで移動すると、時刻が (場合によっては日付も) 変わります。 複数のタイム ゾーンにまたがるネットワーク データセットで、タイム ゾーン属性が設定されていない場合、解析の時刻値が、混乱や間違いの原因となる可能性があります。 ネットワーク データセットにタイム ゾーン属性を追加して、タイム ゾーンをモデリングすることができます。

このトピックでは、ネットワーク データセットにタイム ゾーンを設定することが必要になる理由と、タイム ゾーン属性を設定する方法を説明します。

タイム ゾーン属性が必要な場合

すべてのネットワーク データセットにタイム ゾーン属性が必要なわけではなく、次のような状況で必要となります。

  • ライブ交通量をモデリングするように、ネットワークが設定されています。
  • ネットワーク エッジが複数のタイム ゾーンにまたがり、履歴交通量をモデリングするように、ネットワークが設定されています。
  • ネットワーク エッジが複数のタイム ゾーンにまたがり、開始時刻またはタイム ウィンドウが協定世界時 (UTC) で指定されていない、時間ベースのインピーダンスを使用する解析に使用されます。
  • ネットワークがラスト マイル デリバリー解析に使用されます。

タイム ゾーンおよびネットワーク解析

タイム ゾーンは、ネットワーク解析でいくつかの方法で使用されます。

時間関連解析設定の解釈

ネットワーク解析では、いくつかの時間関連設定を行うこともできます。 たとえば、タイム ウィンドウを使用して、予約時間や施設の営業時間をモデリングすることができます。 開始時刻を使用して、旅行者が旅行を開始する時刻をモデリングすることができます。 解析の出力フィールドに、到着時刻と出発時刻が表示されます。

複数のタイム ゾーンにまたがるネットワーク データセットでは特に、タイム ゾーン属性を設定することで、これらの時刻プロパティを入力して、解釈することができます。 これを行わない場合、時刻設定の正しい解釈が曖昧になり、間違った値になったり、分析者がすべての値を UTC に変換する必要が生じたりすることがあります。

東部タイム ゾーンと中部タイム ゾーンに 1 つずつ、合計 2 つのストップを追加し、両方のタイム ウィンドウを現地時間の午前 8:00 ~ 9:00 に設定する場合を考えます。 タイム ゾーンが設定されていない場合、両方のタイム ウィンドウを UTC に変換し、時刻を UTC として解釈するよう、解析設定を調整する必要があります。

ネットワーク データセットにタイム ゾーンを設定している場合は、入力した時刻が自動的に基本エッジの現地時間を使用して解釈され、Network Analyst が時間変換を内部で管理します。

移動時間計算の精度

交通量対応のネットワーク データセットの場合、ネットワーク内のあるエッジを通過する移動時間は、そのエッジを通過する時刻の交通状況によって異なります。 タイム ゾーンが適切に設定されていないことが原因で時刻が間違っている場合、間違った移動時間が計算され、解析結果が不正確になる可能性があります。

たとえば、午前 8:38 にルート解析が 2 つの隣接するエッジを通過する場合を想定します。山岳部タイム ゾーンの一方のエッジからスタートして、太平洋タイム ゾーンのもう一方のエッジへ移ります。 タイム ゾーン属性が設定されていない場合、ネットワーク データセットは時差を無視し、一方のタイム ゾーンのみに基づいて、これらのエッジの移動時間を取得します。 その場合、太平洋タイム ゾーン側エッジの移動時間を午前 7:38 で取得せずに、午前 8:38、あるいはデフォルトのタイム ゾーンによってはさらに、別の時刻で取得する可能性があります。

しかし、タイム ゾーンを正しく設定すると、山岳部タイム ゾーン側エッジの移動時間が午前 8:38、太平洋タイム ゾーン側エッジの移動時間が午前 7:38 と、それぞれ現地時間で正しく評価されます。 これにより、交通量対応のネットワーク データセットにおける移動時間の正確さが担保されます。

ルート案内

ネットワークにタイム ゾーン属性がある場合、ルート上でタイム ゾーンが変わったことがルート案内で運転手に通知されます。

ルート案内にタイム ゾーンの変更が表示されます
このルート案内は、午前 8:38 に車両がタイム ゾーン境界を越えることを示しており、これは新しいタイム ゾーンでは午前 7:38 です。 ルート案内で、運転手に 1 時間の時差があることが通知されます。

ネットワーク データセットによるタイム ゾーンのモデリング方法

タイム ゾーンは、ネットワーク データセット内で、タイム ゾーン属性を使用して、モデリングされます。タイム ゾーン属性は、コスト属性や規制属性と同様に設定されているエバリュエーターを使用して、各ネットワーク エッジに、タイム ゾーンを割り当てます。 1 つのタイム ゾーン内に完全に収まるネットワークの場合、すべてのエッジのタイム ゾーンを設定するのに、定数エバリュエーターで十分です。 ネットワークが複数のタイム ゾーンにまたがる場合、フィールド スクリプト エバリュエーターを使用して、各エッジ ソース内のエッジのタイム ゾーンを識別するフィールドを参照することができます。

ネットワークが使用可能なタイム ゾーンのリストは、そのネットワークが格納されているジオデータベース内のタイム ゾーン テーブルで定義されています。 タイム ゾーン テーブルには、MSTimeZone という名前のテキスト フィールドが必要であり、このテーブルの各行に、Windows オペレーティング システムによって認識される公式タイム ゾーン ID のいずれかと一致する文字列値が含まれている必要があります。

タイム ゾーンには、UTC を基準にしたテンポラル オフセットがあります。 現地のルールが、UTC のオフセットを何時間にするか、サマー タイムを導入するかどうか、導入する場合は調整時間のオフセットと期間をどれだけにするかを規定します。 これらのルールは、頻繁に変わることがあり、現在および過去のすべてのルールを追跡するのは困難です。 幸い、Windows オペレーティング システムでは、Windows Update を通じて、世界中のすべてのタイム ゾーンの変更をユーザーのコンピューターに反映させることで、これらのルールが最新の状態に維持されています。 タイム ゾーンとそのルールは、Windows のレジストリに格納されます。 ArcGIS Network Analyst エクステンション は、タイム ゾーンの UTC オフセットとサマー タイムのルールを Windows のレジストリから取得します。

タイム ゾーン属性は、[ネットワーク データセット プロパティ] ダイアログ ボックスの [移動属性] ページの [タイム ゾーン] タブで設定します。

タイム ゾーン タブ

次のプロパティを構成できます。

  • [タイム ゾーン属性の追加] - ネットワーク データセットでのタイム ゾーンのサポートを有効化または無効化するには、このチェックボックスをオンにします。
  • [タイム ゾーン テーブル] - ネットワーク データセットのワークスペースに存在するタイム ゾーン テーブルを含むドロップダウン リストです。
  • [エバリュエーター] - ネットワークに定義されている属性ごとに、ネットワークに含まれる各ソースおよび方向 (エッジの場合、順方向と逆方向) の値が指定される必要があります。 エバリュエーターは、各ソースおよび移動方向の属性の値を割り当てます。各エレメントのデフォルトのエバリュエーターは、属性のエバリュエーターが割り当てられていないソースと方向に使用されます。

    エバリュエーターの詳細

タイム ゾーン属性の構成

タイム ゾーンを使用して解析を実行するには、ネットワーク データセットにタイム ゾーン属性を構成する必要があります。 ネットワーク内のデータが単一のタイム ゾーン内にあるか複数のタイム ゾーンにまたがるかに応じて、必要な構成は異なります。

注意:

いずれかのネットワーク属性を変更した場合は、接続性を再構築し、対象の属性を再計算して、ネットワーク エレメントを更新するためにネットワーク データセットを構築する必要があります。

再構築が必要な場合の詳細

複数のタイム ゾーンにまたがるネットワークでのタイム ゾーン属性の構成

ネットワーク内のストリートが、複数のタイム ゾーンにまたがっている場合、各エッジ ソースのフィールドを使用して、各フィーチャのタイム ゾーンを示すことができます。 タイム ゾーン属性は、このフィールドを参照するフィールド スクリプト エバリュエーターを使用して、構成されている必要があります。

次の概念図は、この構成の仕組みの概要を示したものです。 エッジ ソース フィーチャクラスの TimeZoneID フィールドは、そのフィーチャが属しているタイム ゾーンを示します。 TimeZoneID フィールドの値は、タイム ゾーン テーブルへの外部キーです。タイム ゾーン テーブルは、ネットワーク データセットと同じワークスペース内に存在し、ネットワークに関連するタイム ゾーンのリストが格納されています。 タイム ゾーン テーブルの MSTimeZone フィールドも外部キーですが、これは、Windows のレジストリのエントリが対象です (識別子や外部キーとしては、整数値のほうが一般的ですが、レジストリは、タイム ゾーンを識別するためにテキストを使用します)。このレジストリは、UTC オフセットとサマー タイム期間に関する情報を Network Analyst に提供します。

ネットワーク データセットのタイム ゾーンの概念
TimeZoneID フィールドの値が 14 のストリートがハイライト表示され、タイム ゾーン テーブルの Pacific Standard Time レコードに関連付けられています。 さらに MSTimeZone の値が、これらのストリートをレジストリの Pacific Standard Time キーに関連付けます。 これらの関連付けにより、Network Analyst は、これらのストリートが 11 月から 3 月までは 8 時間、3 月から 11 月までは 7 時間の UTC オフセットを持つことを確認できます。

  1. ネットワーク データセットのワークスペースにタイム ゾーン テーブルを作成します。

    テーブルの名前は任意ですが、MSTimeZone という名前のテキスト フィールドが必要です。

    テーブルを作成するには、ジオデータベースを右クリックして、[新規] > [テーブル] の順に選択するか、[テーブルの作成 (Create Table)] ジオプロセシング ツールを使用します。

  2. ネットワークに必要な各タイム ゾーンの行をテーブルに追加し、各行の MSTimeZone フィールドの値を、Windows のレジストリによって認識されるタイム ゾーン ID に設定します。

    Windows のレジストリによって認識されるタイム ゾーン ID のリストを生成するには、Windows コマンド プロンプトで tzutil /l と入力します。 この ID は、各タイム ゾーンに返される 2 つ目の値です。

    Windows tzutil コマンドからの出力のスクリーンショット

  3. 編集内容をテーブルに保存します。
  4. ネットワークで使用される各エッジ ソース フィーチャクラスに short integer フィールドを作成し、そのフィーチャの正しいタイム ゾーンを表す、タイム ゾーン テーブル内の行の Object ID 値をそのフィールドに設定します。
  5. 必要に応じて、フィーチャクラスに対する編集内容を保存します。
  6. [ネットワーク データセット プロパティ] ダイアログ ボックスでネットワーク属性にアクセスします。
  7. [タイム ゾーン] タブをクリックします。
  8. [タイム ゾーン属性の追加] チェックボックスをオンにします。
  9. [タイム ゾーン テーブル] ドロップダウン リストから、使用するタイム ゾーンを選択します。
  10. [エバリュエーター] セクションで、ネットワーク内のエッジ ソースの [順方向] で、[フィールド スクリプト] エバリュエーターを使用するように、[タイプ] 列を設定します。 エッジ ソースの [逆方向] の設定は、[順方向と同じ] のままにします。
  11. [エバリュエーター] セクションの [値] 列で、前の手順で [フィールド スクリプト] に設定した行の値を、フィーチャのタイム ゾーンを示すエッジ ソース フィールドの名前に設定します。 たとえば、ソース フィーチャクラスが TimeZoneID という名前のフィールドを使用して、タイム ゾーン テーブルの適切な行を参照している場合、この値を「!TimeZoneID!」に設定することで、エバリュエーターがこのフィールドを使用するように構成します。

    フィールド スクリプト エバリュエーターを使用したタイム ゾーン属性の構成のスクリーンショット
    このネットワーク データセットのタイム ゾーン属性は、TimeZones という名前のタイム ゾーン テーブルと、Routing_Streets エッジ ソースの TimeZoneID という名前のフィールドを参照するフィールド スクリプト エバリュエーターを使用して構成されています。

  12. [OK] をクリックします。

    タイム ゾーン属性が、ネットワーク データセットに構成および保存されます。

  13. ネットワーク データセットを構築します。

    ネットワークを使用する準備が整いました。

1 つのタイム ゾーンのみのネットワークでのタイム ゾーン属性の構成

ネットワーク内のすべての道路が 1 つのタイム ゾーンに収まる場合、すべてのネットワーク エッジのタイム ゾーンをハードコードする定数エバリュエーターを使用して、タイム ゾーン属性を構成することができます。 すべてのフィーチャが同じタイム ゾーンにあるため、各フィーチャのタイム ゾーンを識別するために、エッジ ソース フィーチャクラスのフィールドは必要ありません。 タイム ゾーン テーブルは必要ですが、必要なエントリは 1 つだけであり、MSTimeZone フィールドの値を、そのネットワークに関連する 1 つのタイム ゾーンの名前に設定します。 Windows のレジストリは、このタイム ゾーンでの UTC オフセットとサマー タイム期間に関する情報を Network Analyst に提供します。

  1. ネットワーク データセットのワークスペースにタイム ゾーン テーブルを作成します。

    テーブルの名前は任意ですが、MSTimeZone という名前のテキスト フィールドが必要です。

    テーブルを作成するには、ジオデータベースを右クリックして、[新規] > [テーブル] の順に選択するか、[テーブルの作成 (Create Table)] ジオプロセシング ツールを使用します。

  2. テーブルに行を追加し、MSTimeZone フィールドの値を、Windows のレジストリによって認識される正しいタイム ゾーン ID に設定します。

    Windows のレジストリによって認識されるタイム ゾーン ID のリストを生成するには、Windows コマンド プロンプトで tzutil /l と入力します。 この ID は、各タイム ゾーンに返される 2 つ目の値です。

    Windows tzutil コマンドからの出力のスクリーンショット

    単一行のタイム ゾーン テーブルの属性テーブルのスクリーンショット
    このタイム ゾーン テーブルは、TimeZones と呼ばれ、必須の MSTimeZone フィールドがあります。 このタイム ゾーン テーブルは、エッジが太平洋標準時タイム ゾーンに完全に収まるネットワークに使用されるため、このテーブルには「Pacific Standard Time」という値を持つ行が 1 つあります。

  3. 編集内容をテーブルに保存します。
  4. [ネットワーク データセット プロパティ] ダイアログ ボックスでネットワーク属性にアクセスします。
  5. [タイム ゾーン] タブをクリックします。
  6. [タイム ゾーン属性の追加] チェックボックスをオンにします。
  7. [タイム ゾーン テーブル] ドロップダウン リストから、使用するタイム ゾーンを選択します。
  8. [エバリュエーター] セクションで、[ソース] 列のラベルが「<デフォルト>」である行の [タイプ] 列で、[定数] エバリュエーターが構成され、[値] 列にネットワーク データセットに必要なタイム ゾーンの表示名が表示されていることを確認します。 ネットワーク内のエッジ ソースの [順方向] の設定は、[デフォルトと同じ] のままにし、エッジ ソースの [逆方向] の設定は、[順方向と同じ] のままにします。

    このタイム ゾーン テーブルには、行が 1 つしかないため、ネットワーク データセットのデフォルトのタイム ゾーンとして、この行が自動的に選択されます。

    定数エバリュエーターを使用したタイム ゾーン属性の構成のスクリーンショット
    このネットワーク データセットのタイム ゾーン属性は、TimeZones という名前のタイム ゾーン テーブルと、特定のタイム ゾーンにハードコードされた定数エバリュエーターを使用して構成されています。 すべてのエッジが同じタイム ゾーン内にあるため、エッジ ソースは、デフォルトのエッジ エバリュエーターを使用します。

  9. [OK] をクリックします。

    タイム ゾーン属性が、ネットワーク データセットに構成および保存されます。

  10. ネットワーク データセットを構築します。

    ネットワークを使用する準備が整いました。