ネットワーク データセットにタイム ゾーンを追加する
車両がタイム ゾーンを越えると、時刻(および場合によっては日付)が変わります。複数のタイム ゾーンにまたがるネットワーク データセットにタイム ゾーンを設定していないと、解析の時刻値が混乱の元になる可能性があります。さらに、交通量に対応したネットワーク データセットから正しくない移動時間が返されたり、タイム ゾーンが無視された場合は、ライブ交通量ネットワーク データセットが間違った時間の交通状況をレンダリングする可能性があります。そうした問題を避けるために、ネットワーク データセットに属性を追加して、タイム ゾーンに対処することができます。
このトピックでは、ネットワーク データセットでタイム ゾーンの設定が必要になる理由と、記述子ネットワーク属性を使用してタイム ゾーンを設定する方法について説明します。
ライブ交通量に対応したネットワーク データセットでは、常にタイム ゾーン属性の設定が必要です。ただし、ライブ交通量をサポートしないネットワーク データセットでは、タイム ゾーン属性の設定は必ずしも必要ではありません。たとえば、ライブ交通量をサポートしないネットワーク データセットが完全に 1 つのタイム ゾーンに収まる場合は、タイム ゾーンを設定する必要がありません。また、開始時間を設定した時間ベースのインピーダンスを使用してネットワーク解析を実行する予定がない場合も、タイム ゾーンの設定は不要です。
タイム ゾーンがネットワーク解析に関係する理由
複数のタイム ゾーンにまたがる交通量に対応したネットワーク データセットでタイム ゾーン属性を設定することがなぜ重要かをさらによく理解するために、午前 8:13 にルート解析が 2 つの隣接するエッジを通過する場合を想定します。東部標準時ゾーンの一方のエッジからスタートして、中部標準時ゾーンのもう一方のエッジへ移ります。タイム ゾーン属性が設定されていないと、ネットワーク データセットは時差を無視し、1 つのタイム ゾーンのみに基づいてエッジの移動時間を取得します。その場合、中部標準時ゾーンにあるエッジの移動時間を午前 7:13 で取得せずに、デフォルトのタイム ゾーンによって、たとえば午前 8:13 など別の時刻で取得する可能性があります。
しかし、タイム ゾーンを正しく設定すると、東部標準時ゾーンのエッジのコストが現地時間の午前 8:13 で評価され、中部標準時ゾーンのエッジのコストが現地時間の午前 7:13 で正しく評価されます。交通量対応ネットワーク データセットの移動時間の正確性がこうして維持されます。さらに、ルート案内にタイム ゾーンの変化が表示されます。
複数のタイム ゾーンにまたがるネットワーク データセットが交通量対応か非対応かにかかわりなく、タイム ゾーン属性を設定することにより、時刻値が常に現地時間を指すようになるため、タイム ウィンドウや到着または出発時間などの時刻プロパティの入力と解釈が容易になります。たとえば、東部標準時ゾーンと中部標準時ゾーンに 1 つずつ、合計 2 つのストップを追加し、両方のタイム ウィンドウを現地時間の午前 8:00 ~ 9:00 に設定する場合を考えます。タイム ゾーンを設定していない場合は、1 つまたは両方のタイム ウィンドウの値をデフォルトのタイム ゾーンに手動で変換しなければなりません。それに対して、ネットワーク データセットにタイム ゾーンを設定している場合は、入力する時間が自動的に基本エッジの現地時間に設定され、Network Analyst が時間変換を内部で処理します。
ネットワーク データセットによるタイム ゾーンの処理方法
タイム ゾーンは、UTC(協定世界時)に対する一時的なオフセットを持ちます。現地のルールが、UTC のオフセットを何時間にするか、サマー タイムを導入するかどうか、導入する場合は調整時間のオフセットと期間をどれだけにするかを規定します。これらのルールは頻繁に変わる可能性があり、現在および過去のルールをすべて把握するのは簡単ではありません。幸い、Windows オペレーティング システムの新しいバージョンでは、Windows Update を通じて世界中のすべてのタイム ゾーンの変更がユーザのコンピュータに反映されます。タイム ゾーンとそのルールは、Windows のレジストリに格納されます。
ArcGIS Network Analyst エクステンションは、タイム ゾーンの UTC に対するオフセットとサマー タイムのルールを Windows のレジストリから取得します。次の概念図は、この仕組みの概要を示したものです。
エッジ ソース フィーチャの TimeZoneID フィールドは、そのフィーチャがどのタイム ゾーンに属しているかを示します。TimeZoneID 値は、ネットワーク データセットと同じワークスペースにあり、タイム ゾーンのリストを格納しているタイム ゾーン テーブルの外部キーです。タイム ゾーン テーブルの MSTimeZone フィールドも外部キーですが、これは Windows のレジストリのエントリが対象です(識別子や外部キーとしては整数値のほうが一般的ですが、レジストリはタイム ゾーンを識別するためにテキストを使用します)。このレジストリは、UTC に対するオフセットとサマー タイムの期間に関する情報を Network Analyst に提供します。
図に示されているように、ネットワーク データセットにタイム ゾーンを設定するには、エッジ ソース フィーチャクラスにタイム ゾーン テーブルと TimeZoneID フィールドが必要です。これらのコンポーネントを用意したら、タイム ゾーン ネットワーク属性を作成できます。
タイム ゾーン テーブルの作成
タイム ゾーン テーブルを自動的に作成し設定するには、[Populate Time Zone Table] ツールを実行します。このツールは、ArcGIS Resource Center からダウンロードできます。または、次の手順に従って、タイム ゾーン テーブルを手動で作成します。この一連のステップとその次のステップは、ユーザが ArcGIS のテーブルの作成および編集方法をよく理解していることを前提にしています。
- ネットワーク データセットと同じワークスペースにテーブルを作成し、それに名前(たとえば TimeZones など)を付けます。
ワークスペースがジオデータベースの場合、ネットワーク データセットをさらに 1 レベル下のフィーチャ データセットに置く必要があったとしても、テーブルはジオデータベース レベルに作成する必要があります。
- テキスト属性をテーブルに追加し、MSTimeZone という名前を付けます。注意:
テキスト属性の名前が MSTimeZone でなければならないのは、これが Network Analyst のキーワードだからです。
属性の長さは、テーブルに追加する最も長いタイム ゾーンの名前に適合している必要があります。2010 年 3 月時点では、Windows レジストリの最長のタイム ゾーン名は 61 文字です。
- 必要に応じて、タイム ゾーンを説明した別のテキスト フィールドを追加します。
このように説明フィールドを追加することの利点については、次のステップで詳しく説明します。
- テーブルを作成したら、MSTimeZone フィールドにタイム ゾーンの名前を設定する必要があります。これは手動か、またはプログラム的に設定することができます。
プログラム的に設定する場合は、まず ArcGIS Resource Center で TimeZoneFactory オブジェクトを検索します。その他に、以下の手順に従って Windows レジストリの値を手動で検索することができます。
- [レジストリ エディタ] を開きます。
Windows 7 または Vista では、[スタート] をクリックし、[プログラムとファイルの検索] テキスト ボックスに「regedit」と入力し、Enter キーを押します。
Windows XP では、[スタート] → [ファイル名を指定して実行] の順にクリックして、[ファイル名を指定して実行] ダイアログ ボックスを開きます。[名前] テキスト ボックスに「regedit」と入力し、Enter キーを押します。
- レジストリのキーは、フォルダのように見えます。次のキーを展開します。HKEY_LOCAL_MACHINE → SOFTWARE → Microsoft → WindowsNT → CurrentVersion → Time Zones。
Time Zones キーの下に下位キーの長いリストが表示されます。リスト内の各キーがタイム ゾーンを表します。MSTimeZone 属性の下の新しいタイム ゾーン テーブルに入力する値は、Network Analyst が解析時にレジストリ内で検出できるように、それらのキー名のスペルに正確に一致していなければなりません。
注意:レジストリを変更するとシステムが壊れる可能性があるため、決して変更しないでください。
名前をコピーするには、タイム ゾーン キーをクリックして F2 キーを押し、編集モードに入ります。Ctrl + C キーを押して、名前をクリップボードにコピーします。Esc キーを押して編集モードを終了します(後で名前を貼り付けるには、Ctrl + V キーを押します)。
[レジストリ エディタ] でキーを選択すると、その値が [レジストリ エディタ] ウィンドウの他のパネルに表示されます。同時に、この値はタイム ゾーンを説明しており、Network Analyst はこの値を使用して正しい時間を決定します。Network Analyst は Display 値を使用しませんが、この情報を参照して、タイム ゾーンの UTC からの一時的なオフセットと、それが使用されている場所に関する地理情報を知ることができます。
- ネットワーク データセットで使用する必要があるタイム ゾーンごとに、タイム ゾーン テーブルにレコードを作成します。各レコードの MSTimeZone フィールドに、[レジストリ エディタ] に表示されるタイム ゾーンの名前を入力するか貼り付けます。
たとえば、ネットワーク データセットが米国本土をカバーしている場合は、次に示すように 5 つの MSTimeZone 値をテーブルに設定します(Display フィールドはオプションです)。
ObjectID
MSTimeZone
Display
1
東部標準時
(UTC - 05:00)東部標準時(米国とカナダ)
2
中部標準時
(UTC - 06:00)中部標準時(米国とカナダ)
3
山地標準時
(UTC - 07:00)山地標準時(米国とカナダ)
4
米国山地標準時
(UTC - 07:00)アリゾナ州
5
太平洋標準時
(UTC - 08:00)太平洋標準時(米国とカナダ)
ヒント:Display フィールドは、MSTimeZone 値をさらに詳しく説明するために追加されています。このフィールドに含まれる情報は、レジストリのタイム ゾーン キーの Display 値からコピーされます。
Network Analyst はこのテーブルの Display のようなフィールドを必要としませんが、それを追加することによって、ユーザは MSTimeZone が表すタイム ゾーンを識別しやすくなります。たとえば、山地標準時と米国山地標準時の MSTimeZone の値はほとんど同じに見えます。しかし、Display フィールドから、アリゾナ州のタイム ゾーンは米国山地標準時で表されることが分かります(アリゾナ州で別のタイム ゾーンが必要なのは、山地標準時を使用している他の州とは異なり、サマー タイムを導入していないからです)。
- [レジストリ エディタ] を開きます。
これで、MSTimeZone という名前のテキスト フィールドを持つテーブルが用意されました。次のステップでは、各エッジ ソース フィーチャをテーブルの正しいタイム ゾーンに関連付けます。
エッジ ソースへの TimeZoneID フィールドの追加
各エッジ ソース フィーチャを 1 つのタイム ゾーンに正確に関連付ける必要があります。
- TimeZoneID という名前の整数フィールドを各エッジ ソース フィーチャクラスに追加します。このフィールドには任意の名前を付けることができますが、TimeZoneID にすることをお勧めします。
- エッジ ソース フィーチャの値を計算します。
TimeZoneID 値は、このフィーチャを、作成したばかりのタイム ゾーン テーブルのレコードに関連付ける外部キーです。したがって、上の例では ObjectID の 5 が太平洋標準時を表し、そのタイム ゾーンのすべてのエッジ ソース フィーチャに TimeZoneID 値の 5 を設定する必要があります。太平洋標準時を表す ObjectID 値が別の値の場合は、TimeZoneID にその値を設定します。
ネットワーク データセットへのタイム ゾーン属性の追加
この一連のステップは、ネットワーク データセットにタイム ゾーン ネットワーク属性を作成する方法を示しています。この属性は、エッジ ソース フィーチャクラスの TimeZoneID フィールドとタイム ゾーン テーブルを関連付けます。
道路フィーチャクラスに TimeZoneID フィールドを追加して、タイム ゾーン テーブルを正しく設定していれば、[新規ネットワーク データセット] ウィザードがこの属性を自動的に作成します。
-
[ネットワーク データセット プロパティ] ダイアログ ボックスまたは [新規ネットワーク データセット] ウィザードの [属性] タブで、[追加] をクリックします。
[新規属性の追加] ダイアログ ボックスが表示されます。
- 属性の名前(TimeZone など)を入力します。
- [使用タイプ] リストから [記述子] を選択します。
-
[データ タイプ] リストから [Integer] を選択します。
-
[OK] をクリックします。
属性が属性リストに追加されます。
-
新しい属性を右クリックし、[関連するタイム ゾーン テーブル] をクリックして、ワークスペース内にあるタイム ゾーン テーブルの名前をクリックします。
緑色の円で囲まれた T マークが属性名の左側に表示され、それがタイム ゾーン属性であることを示します。
- タイム ゾーン属性名をダブルクリックして、[エバリュエータ] ダイアログ ボックスを開きます。
-
エッジ ソースごとに、フィールド エバリュエータを設定し、ソース フィーチャクラスから TimeZoneID 値を読み込みます。
次の例では、Streets ソース フィーチャクラスの TimeZoneID フィールドから値を読み込むフィールド エバリュエータが、From-To 方向と To-From 方向の両方に割り当てられています。
-
[OK] をクリックします。
[エバリュエータ] ダイアログ ボックスが閉じます。[新規ネットワーク データセット] ウィザードを完了した後、または [ネットワーク データセット プロパティ] ダイアログ ボックスを閉じた後に、ネットワーク データセットを作成して、新しいタイム ゾーン フィールドを組み込むことができます。
複数のタイム ゾーンにわたるネットワーク解析の実行
ネットワーク ロケーションにタイム ウィンドウがある場合、入力した時刻値には現地のタイム ゾーン、つまりネットワーク ロケーションのエッジ エレメントが属するタイム ゾーンが割り当てられます。
配車ルートのタイム ウィンドウは、ネットワーク上の場所に最初は関連付けられていなかった可能性があるオブジェクトについては異なる方法で処理されます。
- 配車ルートを開始できるタイム ウィンドウは、EarliestStartTime および LatestStartTime プロパティで指定します。これらのプロパティ値のタイム ゾーンは、ルートの開始拠点が置かれたエッジから取得されます。
- [休憩] は、TimeWindowStart と TimeWindowEnd を使用して指定するタイム ウィンドウを持ちます。休憩はルートに関連付けられ、そのタイム ゾーンは、ルートの開始拠点が置かれたエッジから取得されます。