ネットワーク データセットにタイム ゾーンを追加する
車両がタイム ゾーンを越えると、時刻(および場合によっては日付)が変わります。複数のタイム ゾーンにまたがるネットワーク データセットにタイム ゾーンを設定していないと、解析の時刻値が混乱の元になる可能性があります。さらに、履歴交通量対応ネットワークデータセットから返される移動時間は、タイム ゾーンが無視されていると不正確になることがあります。そうした問題を避けるために、タイム ゾーンに対応したネットワーク データセットを設定することができます。
このトピックでは、ネットワーク データセットにタイム ゾーンを設定することが必要な場合がある理由と、それらをタイム ゾーン ネットワーク属性を使用して設定する方法について説明します。
ネットワーク データセットが完全に 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 のレジストリに格納されます。
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 フィールドとタイム ゾーン テーブルを関連付けます。
-
[ネットワーク データセット プロパティ] ダイアログ ボックスまたは [新規ネットワーク データセット] ウィザードの [属性] タブで、[追加] をクリックします。
[新規属性の追加] ダイアログ ボックスが表示されます。
- 属性の名前(TimeZone など)を入力します。
- [使用タイプ] リストから [Descriptor] を選択します。
-
[データ タイプ] リストから [Integer] を選択します。
-
[OK] をクリックします。
属性が属性リストに追加されます。
-
新しい属性を右クリックし、[タイム ゾーンを使用] をクリックして、作成したタイム ゾーン テーブルの名前をクリックします。
緑色の円で囲まれた T マークが属性名の左側に表示され、それがタイム ゾーン属性であることを示します。
- タイム ゾーン属性名をダブルクリックして、[エバリュエータ] ダイアログ ボックスを開きます。
-
エッジ ソースごとに、フィールド エバリュエータを設定し、ソース フィーチャクラスから TimeZoneID 値を読み込みます。
次の例では、Streets ソース フィーチャクラスの TimeZoneID フィールドから値を読み込むフィールド エバリュエータが、From-To 方向と To-From 方向の両方に割り当てられています。
-
[OK] をクリックします。
[エバリュエータ] ダイアログ ボックスが閉じます。[新規ネットワーク データセット] ウィザードを完了した後、または [ネットワーク データセット プロパティ] ダイアログ ボックスを閉じた後に、ネットワーク データセットを作成して、新しいタイム ゾーン フィールドを組み込むことができます。