解析の入力の配置

ネットワーク解析を実行する際、解析への入力が、使用しているネットワーク データ ソースのエッジやジャンクションの上に正確に配置されることはめったにありません。 たとえば、道路の中心線から構築されたネットワーク データセットを使用しているが、解析対象のポイントは都市の区画の重点である場合などです。 これらの区画の重心は道路の中心線上に配置されず、道路から一定距離ずれた位置にあります。 ネットワーク解析を正常に実行するために、Network Analyst では、解析の各入力が配置されるネットワーク データセットの位置を特定する必要があります。 解析では、入力の元の位置ではなく、このネットワーク ロケーションが使用されます。 たとえば、市内の 2 つの区画間のルートを計算する場合、ルートの始点と終点は区画の重心ではなく、区画の重心が道路の中心線にスナップする位置になります。

ネットワーク エッジ上のポイント

上の図は、ネットワーク上でのルートのストップの位置を示します。 紫色の円は、ストップの地理的な位置を表します。 しかし、ルート ラインは道路ネットワーク沿いの最寄りのポイント、つまりポイントのネットワーク ロケーションから開始しています。

配置プロセス

ネットワーク ロケーションは、入力の地理的な位置、入力が使用されるネットワーク解析の設定、入力の配置に使用されるツールや関数のユーザー固有のロケーション設定などのいくつかの要素に基づいて計算されます。 この手順は、入力ポイントでは、次のように行われます。

  1. Network Analyst が、元のポイント位置に最も近いネットワーク上のポイントを検索します。
  2. Network Analyst が、ネットワーク解析の設定とユーザーのロケーション設定を考慮し、解析の入力を配置するうえで、この位置が有効であるかどうかを判断します。 位置が無効な配置と見なされた場合は、位置はスキップされ、次に近い位置が考慮されます。 ネットワーク エッジまたはジャンクションは、次のような理由によって、無効な配置と見なされます。
    • 位置が選択した移動モードの制限を受けています。 たとえば、現在の移動モードが、通行制限のある高速道路をすべて制限しており、最寄りのネットワーク エッジが通行制限のある高速道路である場合は、この解析のポイントはこのエッジ上に配置できません。
    • 位置がバリアによって制限されています。
    • 位置が指定したロケーション設定によって制限されています。 たとえば、検索クエリを使用し、特定の道路クラスのネットワーク エッジ上に入力を配置しないように回避できます。
  3. このようにして、入力ポイントに対して有効なネットワーク ロケーションが見つかるまで、次に近いネットワーク ロケーションを検証しながら手順を繰り返します。 指定した検索許容距離内に有効な位置が見つからなかった場合、ポイントは配置されないままになり、解析では使用できません。

入力を配置したら、次にネットワーク ロケーションがフィールドのセットに格納されます。 これらのフィールドについては、以下のネットワーク ロケーション フィールドのセクションで詳しく説明します。

ポイント バリアを配置する場合、移動モードとその他のバリアは無視されます。 考慮されるのは、ジオメトリとユーザー固有のロケーション設定のみです。 ラインとポリゴンもネットワーク解析の入力として使用できますが、その場合はラインおよびポリゴン バリアとして使用します。 これらのバリアは、重複するすべてのネットワーク エッジまたはジャンクションに配置され、ユーザー固有のロケーション設定の対象となります。

ネットワーク解析ワークフローでのネットワーク ロケーション計算

ネットワークに入力が配置される方法とタイミングは、ネットワーク解析ワークフローによって異なります。

レイヤーベースのネットワーク解析ワークフロー

ネットワーク解析レイヤー」を使用して解析を行う場合、[ロケーションの追加 (Add Locations)] ツールの実行時にネットワーク ロケーションを事前に計算するか、解析時に自動で計算するか、またはこれらを組み合わせて計算することができます。 以下のサブセクションでは、いくつかの一般的なワークフローでのオプションについて説明しています。

[ロケーションの追加 (Add Locations)] ツールを使用したレイヤーベースのワークフロー

最も一般的なレイヤーベースのネットワーク解析ワークフローは、ネットワーク解析レイヤーを作成し、「ロケーションの追加」ツールを実行してネットワーク解析レイヤーに入力を追加し、レイヤーを解析することです。

ネットワーク解析レイヤーがローカル ネットワーク データセットを参照している場合、[ロケーションの追加 (Add Locations)] ツールの実行時に、入力がネットワークに配置されます。 このツールは、ツール パラメーターで構成された設定や、ネットワーク解析レイヤーの移動モード、ネットワーク解析レイヤーに現在格納されているバリアに基づいてネットワーク ロケーションを計算します。 ツールの実行後、指定したネットワーク解析レイヤーのサブレイヤーに入力が追加され、そのサブレイヤーのネットワーク ロケーション フィールドに計算された値が入力されます。 サブレイヤーの属性テーブルにネットワーク ロケーション フィールドを表示できます。

デフォルトでは、ネットワーク解析レイヤーの移動モードと既存のバリアが、入力の配置時に考慮されます。 入力は、移動モードまたは既存のバリアによって制限されているエッジやジャンクション上には配置されません。 そのため、他の解析の入力を読み込む前に、移動モードを設定し、[ロケーションの追加 (Add Locations)] ツールを使用してバリアを読み込むことをお勧めします。 ただし、ロケーションを追加した後や、バリアの追加や削除を行った後に移動モードを変更すると、影響を受けるポイントのネットワーク ロケーションは解析時に自動的に再計算され、この自動再計算オプションをオフにしない限り、その有効性が維持されます。

ネットワーク解析レイヤーがポータル サービスを参照する場合、ロケーション フィールドは、解析を実行するまでは計算されません。 [ロケーションの追加 (Add Locations)] ツールは、ロケーション フィールドを計算せずに、解析レイヤーに入力を追加します。 入力は解析時に、ネットワーク解析レイヤーの解析とロケーション設定とともにサービスに送信されます。 サービスがロケーション フィールドを計算し、解析を実行して、結果を返します。 レイヤーが解析されると、入力サブレイヤーの属性テーブルに、入力済みのロケーション フィールドが表示されます。

入力を作成する編集ツールを使用したレイヤーベースのワークフロー

もう 1 つの一般的なレイヤーベースのネットワーク解析ワークフローは、ネットワーク解析レイヤーを作成し、標準の編集ツールを使用してネットワーク解析レイヤーのサブレイヤーにフィーチャを手動で作成し、レイヤーを解析することです。 このワークフローでは、入力はネットワーク解析レイヤーで構成されたロケーション設定、移動モード、およびバリアを使用して解析時にネットワーク上に配置されます。 解析の完了後、各入力サブレイヤーの属性テーブルで入力済みのネットワーク ロケーション フィールドを表示できます。

事前計算済みのネットワーク ロケーションを使用したレイヤーベースのワークフロー

一部のワークフローでは、ネットワーク ロケーションは、「ロケーション フィールドを計算」ツールを使用してフィーチャクラスに対して事前に計算されます。 この場合、[フィールドの追加 (Add Field)] ツールはフィールド マッピングを使用して、事前計算済みのネットワーク ロケーション フィールドを入力フィーチャクラスから指定したサブレイヤーに転送します。

ネットワーク ロケーションを事前計算して解析で使用する方法の詳細

一部の環境では、該当するオプションをオフにしない限り、解析で有効になるように事前計算済みのネットワーク ロケーションが解析時に再計算される場合があります。 ネットワーク ロケーションの事前計算時にデフォルト以外のロケーション設定を使用した場合、ネットワーク解析レイヤーのロケーション設定を更新して一致させる必要があります。 これによって、解析時に自動的に再配置された入力が同じロケーション設定を使用するようになります。 この動作の詳細は、上でリンクされているトピックに含まれています。

Network Analyst モジュールを使用した Python ベースのワークフロー

Network Analyst モジュール」である arcpy.nax を使用して Python で解析を実行すると、ネットワーク ロケーションは事前計算されるか、解析時に計算されます。 これらのオプションについて以下のサブセクションにまとめます。

Python ベースのワークフローに解析の入力を設定する方法の詳細

事前計算済みのネットワーク ロケーションを使用しない Python ベースのワークフロー

一般的な Python ベースのワークフローでは、解析に入力を追加するには、ネットワーク解析の解析オブジェクトで load メソッドか insertCursor メソッドを使用します。 ネットワーク ロケーション フィールドが明示的に割り当てられない限り、ネットワーク ロケーションは、solve メソッドを使用して解析が行われるまでは計算されません。 ロケーション設定がネットワーク解析の解析オブジェクトで構成されると、入力の配置時に、移動モードと解析で使用されるバリアが考慮されます。 解析が実行されると、入力済みのロケーション フィールドが、解析の結果オブジェクトを介してアクセスできる出力に表示されます。

事前計算済みのネットワーク ロケーションを使用した Python ベースのワークフロー

一部のワークフローでは、ネットワーク ロケーションは、「ロケーション フィールドを計算」ツールを使用してフィーチャクラスに対して事前に計算されます。 この場合、load メソッドか insertCursor メソッドを使用して入力を追加するときに、ネットワーク ロケーション フィールドをマッピングできます。 これらの既存のネットワーク ロケーション フィールドが解析時に使用されます。

ネットワーク ロケーションを事前計算して解析で使用する方法の詳細

一部の環境では、該当するオプションをオフにしない限り、解析で有効になるように事前計算済みのネットワーク ロケーションが解析時に再計算される場合があります。 ネットワーク ロケーションの事前計算時にデフォルト以外のロケーション設定を使用した場合、解析オブジェクトのロケーション設定を更新して一致させる必要があります。 これによって、解析時に自動的に再配置された入力が同じロケーション設定を使用するようになります。 この動作の詳細は、上でリンクされているトピックに含まれています。

入力の配置方法に影響する設定

いくつかの設定が配置の動作を制御します。

配置に使用できるネットワーク エッジ ソースとジャンクション ソースを制御できます。 たとえば、入力を歩道でなく、道路上に配置するように解析を構成できます。 配置先に指定できるソースのリストは、解析に使用されているネットワーク データセットに固有です。 レイヤーベースのワークフローを使用してネットワーク解析を実行する場合、[ロケーションの追加 (Add Locations)] ツールの [検索基準] パラメーターを使用するか、ネットワーク解析レイヤーのプロパティ ページを使用して、この設定を調整できます。 Network Analyst モジュールを使用して Python で解析を実行する場合、searchSources プロパティ (各ソースのクエリの設定にも使用可能) を使用してこの設定を調整できます。

検索クエリを使用すると、SQL 式を使用して特定の特性に一致するネットワーク ソース フィーチャに配置を制限することができます。 たとえば、特定の道路クラスに一致する道路フィーチャ上にのみ入力を配置できるように解析を構成できます。 レイヤーベースのワークフローを使用してネットワーク解析を実行する場合、[ロケーションの追加 (Add Locations)] ツールの [検索クエリ] パラメーターを使用するか、ネットワーク解析レイヤーのプロパティ ページを使用して、この設定を調整できます。 Network Analyst モジュールを使用して Python で解析を実行する場合、searchSources プロパティ (配置に使用するソースの制御にも使用可能) を使用してこの設定を調整できます。

検索許容値は、入力フィーチャをネットワークに配置するときに使用する最大検索距離を制御します。 この距離内に有効なネットワーク ロケーションが見つからなければ、入力フィーチャは未配置と見なされます。 検索許容値を小さくすると、間違った道路に配置する可能性が低下しますが、有効なネットワーク ロケーションが見つからない可能性が増加します。 レイヤーベースのワークフローを使用してネットワーク解析を実行する場合、[ロケーションの追加 (Add Locations)] ツールの [検索許容値] パラメーターを使用するか、ネットワーク解析レイヤーのプロパティ ページを使用して、この設定を調整できます。 Network Analyst モジュールを使用して Python で解析を実行する場合、searchTolerance プロパティと searchToleranceUnits プロパティを使用してこの設定を調整できます。

注意:
解析ネットワーク データ ソースが ArcGIS Online または 11.0 よりも前のバージョンの ArcGIS Enterprise を実行しているポータルの場合、これらの設定はサポートされません。

ネットワーク解析レイヤーのプロパティを使用してこれらの設定を制御する方法の詳細

[ロケーションの追加 (Add Locations)] ツールを使用してこれらの設定を制御する方法の詳細

Network Analyst モジュールを使用してワークフローのこれらの設定を制御する方法の詳細

入力クラスごとに配置の動作を個別に制御

場合によっては、解析の入力タイプごとに配置の動作を個別に制御したほうがよい場合もあります。 たとえば、OD コスト マトリックス解析では、検索クエリを入力の終点とバリアに適用しない場合に、入力の起点のみの検索クエリを使用できます。

レイヤーベースのワークフローを使用してネットワーク解析を実行する場合、ネットワーク解析レイヤーのプロパティ ページを使用してサブレイヤーごとに配置の動作を構成できます。 また、[ロケーションの追加 (Add Locations)] ツールを実行すると、ツール ダイアログ ボックスで構成され、レイヤーのデフォルト設定と一致しないロケーション設定がそのサブレイヤーのレイヤー上に保持されます。

Network Analyst モジュールを使用して Python で解析を実行する場合、setLocateSettingsOverrides メソッドを使用して入力クラスごとに配置の動作を構成し、解析のデフォルト設定を無効にできます。 このメソッドの詳細とサンプルについては、「解析の入力の設定」をご参照ください。

注意:
解析ネットワーク データ ソースが ArcGIS Online または 11.0 よりも前のバージョンの ArcGIS Enterprise を実行しているポータルの場合、この機能はサポートされません。

ネットワーク ロケーション フィールド

ネットワークに入力を配置したら、次にネットワーク ロケーション フィールドを使用して、ネットワーク ロケーションを定義します。

ポイントのネットワーク ロケーション フィールド

ポイント入力では、ネットワーク ロケーション フィールドには、ポイントが配置されているネットワーク エッジまたはジャンクションの ID が含まれています。 ポイントがエッジに配置されている場合、ロケーション フィールドには、そのエッジに沿った位置と、ポイントが配置されているエッジの側も含まれます。 ポイント入力のネットワーク ロケーション フィールドは次のとおりです。

フィールド名説明データ タイプ

SourceID

入力ポイントが配置されたネットワーク データセット ソース フィーチャクラスの数値 ID。

Long

SourceOID

入力ポイントが配置されたソースにあるフィーチャの ObjectID。

Long

PosAlong

ソース ライン フィーチャのデジタイズ方向に沿った位置。この値は割合として格納されます。ネットワーク位置がジャンクションを参照している場合、このフィールドは NULL になります。

Double

SideOfEdge

ライン フィーチャのデジタイズ方向を基準として定められる、エッジの側。このフィールドがとりうる値は、[右側] (1)、[左側] (2) のいずれかです。

Long

SnapX

ネットワーク データセットの座標系で、ポイントが配置されたネットワーク データセット上の位置の X 座標。

Double

SnapY

ネットワーク データセットの座標系で、ポイントが配置されたネットワーク データセット上の位置の Y 座標。

Double

SnapZ

ネットワーク データセットの座標系で、ポイントが配置されたネットワーク データセット上の位置の Z 座標。ネットワークが 2 次元の場合、SnapZ フィールドは 0 になります。

Double

DistanceToNetworkInMeters

ポイントの地理的位置とそのポイントがネットワーク上に配置された位置との間の距離 (メートル単位)。

Double

ラインとポリゴンのネットワーク ロケーション フィールド

ラインとポリゴンは、ネットワーク解析のバリアとして使用されます。 ラインまたはポリゴン入力のネットワーク ロケーションは、単一の BLOB フィールド (Locations) によって定義されます。

フィールド名説明データ タイプ

Locations

このフィールドの情報は、ラインまたはポリゴンで覆われるネットワークのエッジ、および覆われる各エッジ エレメントの部分を定義します。このフィールドに含まれる情報を直接読んだり編集したりすることはできませんが、Network Analyst は解析を実行する際にその情報を解釈します。

BLOB

未配置の入力

Network Analyst が、ネットワーク上に入力を配置できないこともあります。 これは、指定した検索許容距離内に有効なネットワーク エッジまたはジャンクションがない場合に発生します。 未配置の入力は、ネットワーク解析で使用することはできません。

ポイントが未配置になると、ネットワーク ロケーション フィールドにはデータが入力されません。 また、Status フィールドの値は 1(Not Located) になります。 Status フィールドを使用してテーブルを検索し、未配置の入力をすべて探すことができます。 未配置のポイントの地理的な位置を確認し、無視しても問題ないか、あるいは編集が必要かを判断します。

ネットワーク解析レイヤーを解析すると、未配置の入力はデフォルトで無視されます。 未配置の入力がある場合に解析が失敗するようにするには、「解析の実行」ツールの [無効なロケーションを除外] オプションをオフにします。 Python ベースのワークフローの場合、ネットワーク解析の解析オブジェクトの ignoreInvalidLocations プロパティを使用し、未配置のポイントを無視するかどうかを指定します。

ネットワーク ロケーション フィールドの事前計算

多数の入力のネットワーク ロケーションを計算すると、膨大な時間がかかることがあります。 同じネットワーク データセットと解析設定を使用する複数の解析で、同じ入力データを使用する場合は、ネットワーク ロケーション フィールドを事前に計算することで処理時間を短縮できます。

ネットワーク ロケーションを事前計算して解析で使用する方法の詳細

車両の方位を使用した高精度なネットワーク ロケーションの計算

車両の進行方向、あるいは方位を使用して、ネットワーク上の配置をより正確に判断することができます。

ポイントを配置する際に方位を使用する方法の詳細