ネットワーク属性でのパラメータの使用
ネットワーク属性の値は変動する条件に依存する場合があります。たとえば、車両の車高を使用して、低い歩道橋が設置された道路部分を通過できるかを判定できます。現在の気象条件により移動速度が遅くなると、ネットワークの時間コストに影響をおよぼす場合があります。車両の車高に基づく規制やスケール ファクタに基づく移動コストなどのネットワーク解析における変動する要素を、下記の 2 つの方法の内のいずれかを使用してモデリングすることができます。1 つの方法は、高さまたは気象条件に変動があるたびにネットワーク属性を作成するというものです。しかし、この方法では、変更する属性の数が増えてもスケーリングできません。もう 1 つの方法は、ネットワーク属性を、この属性の変動的な要素を含むパラメータと一緒に使用するというもので、汎用性があります。
パラメータは、後で指定される値の代替です。パラメータは、新しい値が割り当てられない場合に使用するデフォルト値を持っています。ArcCatalog では、パラメータは、ネットワーク属性に追加され、属性のエバリュエータによって参照されます。ArcMap では、ネットワーク解析の設定をするとき、パラメータ値を変更できます。これにより、実行時には式と現在のパラメータ値を使用してネットワーク属性の値を求めることができます。
パラメータ化されたネットワーク属性のしくみ
ネットワーク属性のパラメータ化には、VBScript または関数エバリュエータのいずれかが使用されます。これらは、ネットワーク属性のパラメータと、その値を求めるのに役に立つ別のネットワーク属性を利用します。パラメータは実行時に変動する場合があるので、パラメータの値はデータベースに書き込まれず、必要なときに算出されるだけとなっています。したがって、パラメータ値が変化しても、ネットワーク データセットを再構築する必要はありません。
規制属性のパラメータ
規制属性のパラメータを追加すれば、車両で使用可能なネットワーク エレメントを特定することができます。ネットワーク エレメントが通過可能であるかどうかを判断するために、車両特性を保持するパラメータは、記述子属性から得られる値と比較されます。たとえば、パラメータ化された規制属性の場合、車両の車高と、歩道橋の下またはトンネルの中の高さ制限を保持する記述子属性とを比較することができます。車高が高さ制限を超えている場合は、エッジが規制されます。これにより、下図に示すように、車両の種類に応じて異なるルートが生成されます。車高が低い車両は、低い橋を通るルートをそのままたどることになります。一方、車高が高い車両は高さ制限が低い橋を避けて別のルートをとることになります。
このようなシナリオでは、記述子属性と規制属性を作成するとよいでしょう。記述子属性には MaxHeight という名前を付け、規制属性には HeightRestriction という名前を付けることにします。MaxHeight はソース データから高さ制限値を取り込み、HeightRestriction は MaxHeight から値を読み取り、読み取った値を現在の車高を保持するパラメータと比較することになります。下図は、このプロセスの概要を示したものです。
コスト属性のパラメータ
別のコスト属性を参照してスケーリングすることができる、パラメータ化されたコスト属性を必要とする場合もあります。これは、凍結、霧、豪雨などの荒れ模様の天候が調査エリアを襲い、通常の車の流れが妨げられている場合に有用です。コスト属性にあらかじめパラメータを用意しておくことにより、移動時間の予想を、走行速度の変化に応じて調整することができます。
2 つのネットワーク属性を作成することが可能です。1 つは DriveTime です。これには、通常の運転時間インピーダンスが格納され、値はソース データ内のフィールドから得られます。もう 1 つは DriveTime_scaled です。これは DriveTime の属性値をとり、その値は、現在のスケール ファクタを保持する DriveTime_scaled 属性のパラメータによってスケーリングされます。
パラメータ化属性の設定
必要なネットワーク属性を作成したら、パラメータ化属性を設定することができます。このための主要な 2 つの手順は次のとおりです。
- パラメータをネットワーク属性に追加
- パラメータを使用するように属性のエバリュエータを設定します。
この 2 つの手順は、[ネットワーク データセット プロパティ] ダイアログ ボックスの [属性] タブを使用して ArcCatalog で実行します。
パラメータの追加
パラメータを作成するには、次の手順に従います。以下に示す例は、規制属性 [HeightRestriction] に合わせてありますが、コスト属性に対しても同じ手順が有効です。
[HeightRestriction] 属性に新しいパラメータ [Vehicle Height] を追加し、デフォルト値として 0 を割り当てます(車高が 0 の場合、車両はどんな高さ制限も受けないと見なされます)。ArcMap でネットワーク解析を実行する際は、パラメータの値をデフォルトから別の値に変更することができます。
エバリュエータの設定
パラメータが追加されたら、エバリュエータを設計する必要があります。エバリュエータは、パラメータを取り込み、さらに定数または別のネットワーク属性(パラメータに関係する情報を格納)のいずれかを取り込むものとします。下に示す例では、パラメータ化された規制属性 [HeightRestriction] にはエバリュエータが割り当てられています。このエバリュエータは、[Vehicle Height] パラメータを、ネットワーク エレメントの高さ制限計測値を含む記述子ネットワーク属性 [MaxHeight] と比較します。
VB Script エバリュエータは、解析時に VBScript 環境を使用して値を計算するので、このエバリュエータを指定すると解析のパフォーマンスに悪影響がおよぶ傾向があります。Esri では、解析時に最適なパフォーマンスを得るために、可能な限り VB Script エバリュエータではなく関数エバリュエータを使用することを強く推奨しています。
この例では関数エバリュエータが選択されています。以下に示す [関数エバリュエータ] ダイアログ ボックスには、道路ごとに評価される式が表示されています。関数エバリュエータが [True] を返すときは必ず、ネットワーク エレメントが規制されています。[False] を返すとき、ネットワーク エレメントは通過可能であり、解析で使用できます。
比較するために、パラメータ化されたコスト属性 [DriveTime_scaled] は、[DriveTime Factor] パラメータを使用する関数エバリュエータ(下図参照)で設定されています。エバリュエータは [DriveTime] コスト属性から運転時間を読み取り、読み取った値を実行時に指定される [DriveTime Factor] の値と掛け算します。
パラメータの値は実行時にデフォルトの 1 から変更することができます。値を 1.5 に設定すると、運転時間が通常の運転時間より 50 パーセント遅くなります。[DriveTime] の値が 5 分であるネットワーク エレメントの場合、[DriveTime_scaled] の値は 7.5 分になります。
ネットワーク データセットの再構築
関数エバリュエータは、値をデータベースに格納するのでなく実行時に計算するので、関数エバリュエータまたは ArcCatalog 内の対応する属性パラメータを追加または変更した後でネットワーク データセットを再構築する必要はありません。しかし、フィールド エバリュエータに基づいて関連する属性に変更を加える場合、ネットワーク データセットを再構築して新しい値を使用する必要があります。
ArcCatalog でパラメータ化属性が提供されている場合、ArcMap では属性を使用してネットワーク問題の解析を開始することができます。パラメータの値をデフォルトから別の値に変更しても、ネットワークを再構築する必要はありません。