Network Analyst のライセンスで利用可能。
ネットワークに定義されている各属性は、ネットワークに含まれる各ソースの値を持つ必要があります。エバリュエーターは、各ソースの属性の値を割り当てます。ArcGIS の前段階 (ARC/INFO と ArcView GIS) では、属性の値はシェープファイルまたはカバレッジのフィールドから割り当てられました。ArcGIS では、フィールド エバリュエーターがネットワーク ソースのフィールドからネットワーク属性に値を割り当てます。さらに、ArcGIS では定数エバリュエーター、フィールド式エバリュエーター、関数エバリュエーター、スクリプト エバリュエーターなど、他の種類のエバリュエーターも使用できます。
次に、エバリュエーターについて説明します。
エバリュエーター | 説明 |
---|---|
フィールド エバリュエーター | ネットワーク属性に値を割り当てる最も一般的な方法は、ネットワーク データセットの構築時にネットワーク属性の値となる 1 つのフィールドを指定する方法です。たとえば、メートルで示した各道路セグメントの長さのように、値が測定値を説明する場合にフィールド エバリュエーターを使用できます。 |
フィールド式エバリュエーター | [フィールド エバリュエーター] は、1 つのフィールドの代わりに、値としてフィールド式を指定することができます。この場合は、[フィールド エバリュエーター] ダイアログ ボックス上で VBScript あるいは Python を使って式を作成します。たとえば、ネットワーク属性の単位がメートルで、ソース データの単位がフィートの場合、ネットワーク データセットの構築時にフィートをメートルに変換する式を作成できます。 |
定数エバリュエーター | 属性には、定数を割り当てることができます。コスト属性、記述子属性、階層属性の値は数値 (0、1、2) です。規制属性では、ブール式データ タイプの [規制を使用] または [規制を無視] になります。 |
関数エバリュエーター | 関数エバリュエーターは属性値を計算するために、別の属性値またはパラメーター値で乗法関数または論理関数を実行します。数値属性の場合、たとえば DriveTime * 1.25 のように、別の属性の値と何らかの値を乗算する式から値が導出されます。属性タイプがブール値の場合は、別の属性値とパラメーター値を比較する式 (MaxHeight < VehicleHeight など) から属性値が求められます。 |
グローバル ターン遅延エバリュエーター | グローバル ターン遅延エバリュエーターは、2 つのエッジ エレメントの間を移動するためのデフォルトとなるコスト値を割り当てます。コストは 2 つのエッジ間の相対角度と通過するエッジの道路クラス (幹線道路、一般道路、生活道路) に基づきます。道路クラスは [階層範囲] ダイアログ ボックスと階層属性を使用して指定します。たとえば、グローバル ターン遅延エバリュエーターを使用して、すべての左折 (左折かどうかは相対角度によって決定されます) について、生活道路から一般道路への左折を生活道路間の左折に比べて時間を要する設定にすることができます。また、2 本の一般道路の交差点を直進する際に 10 秒間の遅延を追加するなど、他の移動に対して追加のコストを指定することもできます。 |
スクリプト エバリュエーター | 属性を VBScript または Python スクリプトの実行結果から割り当てることができます。これにより、複雑な属性をモデリングできます。他のエバリュエーターとは異なり、スクリプト エバリュエーターはネットワークの構築時に値を割り当てません。その代わりに、解析中に、特定のネットワーク解析でその属性の使用が必要になった場合に値を割り当てます。属性の値が絶えず変化する場合は、スクリプト エバリュエーターを使用することにより、それぞれのネットワーク解析について属性を確実に更新することができます。 |
エッジ交通量エバリュエーター | エッジ交通量エバリュエーターは、交通量データに使用します。履歴データまたはライブデータを使用して、特定の曜日および時刻の移動時間を提供します。特定時刻の移動時間が利用できないときに平日および週末の移動時間を提供する代替コスト属性が含まれています。エッジ交通量エバリュエーターには、ルート解析でのストップや配車ルート解析での訪問を順序付けるときに Network Analyst で参照される、時間に中立的なコスト属性も含まれます。 |
すべてのジャンクション ソースとターン ソースは、1 つのエバリュエーターを持つことができます。すべてのエッジ ソースは、2 つのエバリュエーター (エッジのデジタイズ方向ごとに 1 つずつ) を持つことができます。
エッジ、ジャンクション、ターンには、デフォルトのエバリュエーターを割り当てることができます。特定のソースに明示的にエバリュエーターを指定しなかった場合、そのソースの値はデフォルトのエバリュエーターによって割り当てられます。
次に、エバリュエーターを割り当てる一般的なワークフローを説明します。
- エバリュエーターの割り当てが必要なソースを選択します。
- [フィールド]、[定数]、[関数]、または [スクリプト] など、エバリュエーターの種類を選択します。
- ネットワーク属性に割り当てる値を指定します。
フィールドから値を得る場合は、ドロップダウン メニューから [フィールド] を選択します。フィールド式に基づいて値を計算する場合は、エバリュエーターのタイプとして [フィールド] を選択し、キーボードの F12 キーを押して [フィールド エバリュエーター] ダイアログ ボックスを表示します。また、[エバリュエーター] ダイアログ ボックスでソースを右クリックし、[値] メニューから [プロパティ] を選択して [フィールド エバリュエーター] ダイアログ ボックスを表示することもできます。
エバリュエーターの例
コスト属性への値の割り当て
次の図の DriveTime ネットワーク属性は、Streets ソース フィーチャクラスにフィールド エバリュエーターを使用しています。これは [タイプ] 列を見るとわかります。[値] 列は、Streets ソースの From-To 方向のネットワーク属性値が [FT_Minutes] フィールドから取得されることを示しています。同様に、Streets ソースの To-From 方向の値は [TF_Minutes] フィールドから取得されます。
この例では、このネットワークのその他のエッジ ソースはトランジット エッジで、走行時間を持ちません。したがって、定数値 -1 を割り当てることができます。より望ましいのは、定数値 0 と、自動車などの路上車両を禁止する任意の規制属性を割り当てることです。
または、コスト属性を関数エバリュエーターを使用して別のコスト属性から導出することができます。たとえば、遅い車両の移動時間をモデリングする属性は、関数エバリュエーターを使用することで、標準の移動時間をモデリングする属性を参照し、属性を減速係数と乗算することができます。
規制属性への値の割り当て
規制属性の値のデータ タイプはブールです。ソース エレメントは関連付けられた規制を使用することも、無視することもできるため、定数値である [規制を使用] または [規制を無視] を割り当てることができます。
あるいは、規制属性は関数エバリュエーターを使用し、別の属性をパラメーター値と比較することで導出できます。たとえば、車高規制をモデリングする属性は、関数エバリュエーターを使用して、道路の高さ制限を属性パラメーターに格納されている車両の実際の高さと比較することができます。式の評価が True である場合、道路に対して制限が使用されます。式の評価が False である場合、制限は無視されます。この規則に対する例外として、オペランド (MaxHeight または Vehicle Height) のいずれかの値がゼロである場合は必ず、式の評価結果は false となります。
ソース フィーチャクラスのフィールドから規制属性の値を割り当てることもできます。たとえば、フィールド式エバリュエーターを使用してブール値の結果を生成し、式が True の場合はエレメントに制限を使用し、True でない場合は制限を無視することができます。
ネットワーク データセットの作成時に、ArcGIS Network Analyst エクステンション は Oneway (一方通行) のようにすべてのソースで共通して使用されるフィールドを検索します。いずれかのソースで Oneway フィールドが見つかった場合は Oneway ネットワーク属性が作成され、フィールド式に基づいて、関連するソースの値が割り当てられます。
次の 2 つの画像は一方通行規制の属性を表す VBScript 式です。道路の各デジタイズ方向に 1 つのエバリュエーターと 1 つの式が あります。
これらの式は、Oneway フィールド内のテキスト値に基づいて許可される移動方向を決定します。
- FT または F = ライン フィーチャのデジタイズされた方向への移動のみが許可されます (From-To 方向)。
- TF または T = ライン フィーチャのデジタイズされた方向と反対向きの移動のみが許可されます (To-From 方向)。
- N = どちらの方向への移動も許可されません。
- 他の任意の値 = 両方への移動が許可されます。
制限の使用法パラメーター
規制属性には、[規制の使用法] というパラメーターが常に関連付けられています。このパラメーターは、制限を使用するエレメントを禁止するのか、単に回避するのか、それとも優先するのかを決定します。ほとんどの場合は、[規制の使用法] を [禁止] に設定しますが、他の設定を選択できる場合もあります。
階層の割り当て
ネットワーク データセットに階層を割り当てることで、エッジをさまざまな階層レベルに分類して解析時間を短縮することができます。ただし、階層を使用した解析の結果は階層を使用しない解析に比べて最適でない場合があります。階層の内容と使用する目的についてよく理解していただくために、「階層を使用したネットワーク解析について」をお読みいただくことをお勧めします。
階層レベルは 1 から始まる連続した整数で定義されます。一番小さい整数 (1) が最も高い階層レベルを表します。整数値が大きくなるにつれて、階層レベルは低くなります。たとえば、ネットワークを 3 つの階層レベルに分割する場合は、幹線道路に 1 を割り当て、一般道路に 2 を割り当て、生活道路に 3 を割り当てます。幹線道路には高速道路が含まれ、生活道路には住宅街の道路が含まれます。
多くの場合、ネットワーク データセットの階層はフィールドまたはフィールド式エバリュエーターによって割り当てられます。Streets フィーチャクラスに、それぞれ高速道路、幹線道路、一般道路を表す 1、2、3 という値の道路クラス属性 (階層) が存在する場合、フィールド エバリュエーターを使用するだけで階層属性を設定できます。
通常、3 つから 5 つの階層レベルが階層属性に割り当てられます。ただ、各レベルが 1 から始まる連続した整数で表されていれば、好きな数だけ階層レベルを割り当てることができます。ただし、非常に多くの階層レベルを割り当てるのは避けてください。残りの階層に対して接続されないエッジを残してしまうと、ネットワーク解析レイヤーの解析を実行する際に失敗する原因となります。
ソースのフィーチャクラスの属性が求める階層レベルの数以上のグループ数に分類されている場合、フィールド式エバリュエーターを使用して求める階層レベルの数を満たすようグループを分類することができます。たとえば、Streets フィーチャクラスが Func_Class という名前の整数フィールドを持ち、次に示す 6 種類の道路クラスを持っていると仮定します。
Func_Class | 道路の種類 |
---|---|
1 | 高速道路 |
2 | 有料道路 |
3 | 都市高速道路 |
4 | 主要な一般道路 |
5 | 一般道路 |
6 | 高速道路のランプ |
さらに、3 つの階層レベルを作成して Func_Class の値を以下に示すテーブルのように分類したいと仮定します。
階層レベル | Func_Class の値 |
---|---|
1 | 1 (高速道路) 2 (有料道路) 6 (高速道路のランプ) |
2 | 3 (都市高速道路) 4 (主要な一般道路) |
3 | 5 (各地方の道路) |
このシナリオをモデリングするには、階層属性のフィールド エバリュエーターにスクリプトを追加します。スクリプトは、VBScript で作成するか、Python スクリプトで作成するかを選択できます。以下の例は VBScript で作成したもので、「level」という名前の変数を作成し、3 (この例で最も低い階層レベル) に設定しています。次に、以下の条件が設定されます。Func_Class が 1、2、6 の場合、「level」に 1 が割り当てられます。Func_Class が 3 あるいは 4 の場合、「level」に 2 が割り当てられます。その他の場合には、値は 3 のままです。[値] テキスト ボックスには「level」が入力されているため、この階層ネットワーク属性では、「level」が表す値がスクリプトの最後に評価されます。
これにより、Func_Class 1、2、6 のすべてのエレメントには階層属性値 1 が割り当てられ、Func_Class 3、4 のすべてのエレメントには 2 が割り当てられます。それ以外のすべてのエレメント (つまり Func_Class 5 のエレメント) には階層属性値 3 が割り当てられます。