ネットワーク解析を実行する際、解析への入力が、使用しているネットワーク データ ソースのエッジやジャンクションの上に正確に配置されることはめったにありません。たとえば、道路の中心線から構築されたネットワーク データセットを使用しているが、解析対象のポイントは都市の区画の重点である場合などです。これらの区画の重心は道路の中心線上に配置されず、道路から一定距離ずれた位置にあります。ネットワーク解析を正常に実行するために、Network Analyst では、解析の各入力が配置されるネットワーク データセットの位置を特定する必要があります。解析では、入力の元の位置ではなく、このネットワーク ロケーションが使用されます。たとえば、市内の 2 つの区画間のルートを計算する場合、ルートの始点と終点は区画の重心ではなく、区画の重心が道路の中心線にスナップする位置になります。
上の図は、ネットワーク上でのルートのストップの位置を示します。紫色の円は、ストップの地理的な位置を表します。しかし、ルート ラインは道路ネットワーク沿いの最寄りのポイント、つまりポイントのネットワーク ロケーションから開始しています。
配置の仕組み
ネットワーク ロケーションは、入力の地理的な位置、入力が使用されるネットワーク解析の設定、入力の配置に使用されるツールや関数のユーザー固有の位置情報の設定などのいくつかの要素に基づいて計算されます。この手順は、入力ポイントでは、次のように行われます。
- Network Analyst が、元のポイント位置から最も近いネットワーク エッジの最寄りポイントを検索します。
- Network Analyst が、ネットワーク解析の設定とユーザーの位置情報の設定を考慮し、解析の入力を配置するうえで、このエッジが有効であるかどうかを判断します。エッジが配置において無効と見なされた場合は、エッジはスキップされ、次に近いエッジが考慮されます。エッジは、次のような理由によって、配置において無効であると見なされます。
- エッジが、選択した移動モードの制限を受けている。たとえば、現在の移動モードが、通行制限のある高速道路をすべて制限しており、最寄りのネットワーク エッジが通行制限のある高速道路である場合は、この解析のポイントはこのエッジ上に配置できません。
- エッジか、エッジの一番近い部分が、バリアによって制限されている。
- エッジが、指定した位置情報の設定によって制限されている。たとえば、検索クエリを使用し、特定の道路クラスのネットワーク エッジ上に入力を配置しないように回避できます。
- このようにして、入力ポイントに対して有効なネットワーク ロケーションが見つかるまで、次に近いネットワーク エッジを検証しながら手順を繰り返します。指定した検索許容範囲内に有効な位置が見つからなかった場合、ポイントは配置されないままになり、解析では使用できません。
ポイント バリアを配置する場合、移動モードとその他のバリアは無視されます。考慮されるのは、ジオメトリと、ユーザー固有の位置情報の設定のみです。
ラインとポリゴンもネットワーク解析の入力として使用できますが、その場合はラインおよびポリゴン バリアとして使用します。これらのバリアは、重複するすべてのネットワーク エッジまたはジャンクションに配置され、ユーザー固有の位置情報の設定の対象となります。
ネットワーク ロケーション フィールド
ネットワークに入力を配置したら、次にネットワーク ロケーション フィールドを使用して、ネットワーク ロケーションを定義します。
ポイントのネットワーク ロケーション フィールド
ポイント入力では、ネットワーク ロケーション フィールドには、ポイントが配置されているネットワーク エッジまたはジャンクションの 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 |
ネットワーク解析でネットワーク ロケーションが計算される方法とタイミング
ネットワークに入力が配置される方法とタイミングは、ネットワーク解析の実行方法によっても異なります。
レイヤーベースのネットワーク解析ワークフロー
ネットワーク解析レイヤーを使用して解析を行う場合、[ロケーションの追加 (Add Locations)] ツールを使用して、ネットワーク解析レイヤーに入力を追加します。解析レイヤーがローカル ネットワーク データセットを参照する場合、入力のネットワーク ロケーションは [ロケーションの追加 (Add Locations)] ツールを実行したときに計算されます。入力済みのネットワーク ロケーション フィールドは、入力を追加したサブレイヤーの属性テーブルで表示できます。デフォルトでは、ネットワーク解析レイヤーに追加されたポイントの位置は、ネットワーク ロケーションが計算され、解析で使用されている場合であっても、元の位置に表示されます。[ロケーションの追加 (Add Locations)] ツールの [ネットワークへスナップ] オプションをオンにすると、ポイントをネットワーク ロケーションに表示できるようになります。
[ロケーションの追加 (Add Locations)] ツールには、配置の動作を制御するための設定があります。たとえば、検索許容範囲の設定、配置において使用する、または使用してはならないネットワーク ソースの指定、特定の性質を持つネットワーク ソース フィーチャを制限するための検索クエリの設定などを行えます。これらのオプションの詳細については、ツール ドキュメントをご参照ください。
さらに、ネットワーク解析レイヤーの移動モードと既存のバリアが、入力の配置時に考慮されます。入力は、移動モードまたは既存のバリアによって制限されているエッジやジャンクション上には配置されません。そのため、他の解析の入力を読み込む前に、移動モードを設定し、バリアを読み込むことをお勧めします。ただし、ロケーションを追加した後や、バリアの追加や削除を行った後に移動モードを変更すると、影響を受けるポイントのネットワーク ロケーションは解析時に自動的に再計算され、その有効性が維持されます。
解析レイヤーがポータル サービスを参照する場合、ロケーション フィールドは、解析を実行するまでは計算されません。[ロケーションの追加 (Add Locations)] ツールは、ロケーション フィールドを計算せずに、解析レイヤーに入力を追加します。入力は、解析時に、解析の設定とともにサービスに送信されます。サービスがロケーション フィールドを計算し、解析を実行して、結果を返します。レイヤーが解析されると、入力サブレイヤーの属性テーブルに、入力済みのロケーション フィールドが表示されます。
編集ツールを使用し、ネットワーク解析入力を手動で作成することもできます。これらの入力フィーチャのネットワーク ロケーションは、解析レイヤーの解析時に自動的に計算されます。
オンライン ツールを使用したワークフロー
ArcGIS Online routing services でオンライン ツールを使用して解析を実行する場合、ネットワーク ロケーションは、ツールの実行時にサービスによって計算されます。サービスによって返された入力フィーチャの属性テーブルで、使用されたネットワーク ロケーションを確認できます。オンライン ツールには特定の位置情報の設定はありませんが、入力の配置時には、移動モードの設定とバリアが考慮されます。入力は、移動モードや、特定の制限やインピーダンス属性の制限を受けているか、バリアの範囲内にあるエッジやジャンクションには配置されません。
Network Analyst モジュールを使用した Python ベースのワークフロー
Network Analyst モジュール である arcpy.nax を使用して Python で解析を行う場合、解析に入力を追加するには、ネットワーク解析の解析オブジェクトで load メソッドか insertCursor メソッドを使用します。ネットワーク ロケーションは、solve メソッドを使用して解析が行われるまでは計算されません。解析が実行されると、入力済みのロケーション フィールドが、解析の結果オブジェクトを介してアクセスできる出力に表示されます。
各ネットワーク解析オブジェクトには、配置の動作を制御するプロパティが含まれます。たとえば、searchTolerance または searchToleranceUnits プロパティを使用して検索許容範囲を設定するか、searchQuery プロパティを使用して検索クエリを設定し、一定の性質を持つネットワーク ソース フィーチャを制限することができます。さらに、入力の配置時には、解析オブジェクトの移動モードとバリアも考慮されます。入力は、移動モードや、解析に含めたバリアの制限を受けるエッジやジャンクションには配置されません。
ネットワーク ロケーション フィールドの事前計算
多数の入力のネットワーク ロケーションを計算すると、膨大な時間がかかることがあります。同じネットワーク データセットと解析設定を使用する複数の解析で、同じ入力データを使用する場合は、ネットワーク ロケーション フィールドを事前に計算することで処理時間を短縮できます。[ロケーション フィールドの計算 (Calculate Locations)] ツールを使用し、特定のネットワーク データセット、移動モード、ツール設定に基づいて、ネットワーク ロケーション フィールドをフィーチャクラスに追加できます。
ネットワーク解析レイヤーを使用して解析を実行する場合、[ロケーションの追加 (Add Locations)] ツールで解析レイヤーに入力を追加するときに、計算済みのロケーションフィールドを使用できます。これを行うには、[フィールド マッピング] オプションを使用し、入力フィーチャからネットワーク ロケーションのプロパティに、ネットワーク ロケーション フィールドをマッピングします。ツール ダイアログ ボックスを使用する場合、フィールド マッピング コンボ ボックスを [ネットワーク ロケーション フィールドの使用] に設定し、このマッピングを有効にします。
Network Analyst モジュールを使用して Python で解析を行う場合、use_location_fields パラメーターを True に設定しておくと、load メソッドの field_mappings パラメーターを使用して、入力から入力クラスのフィールドにネットワーク ロケーション フィールドをマッピングできるようになります。
解析にネットワーク ロケーション フィールドをマッピングする場合は、SourceID、SourceOID、PosAlong、SideOfEdge フィールドのみをマッピングします。SnapX、SnapY、SnapZ、DistanceToNetworkInMeters フィールドは情報目的でのみ使用されるため、解析のロケーションの指定には必要ありません。
ArcGIS Online のオンライン ツールを使用する場合、またはネットワーク データ ソースとして ArcGIS Online を参照するネットワーク解析レイヤーを使用する場合は、計算済みのネットワーク ロケーションを使用できません。ただし、ネットワーク解析レイヤーが、ネットワーク データ ソースとしてエンタープライズ ポータルを参照する場合、ArcGIS Enterprise routing services を公開するときに使用したものと同じネットワーク データセットを使用してロケーション フィールドを事前計算できます。そうすると、解析を実行するときに、サービスがそのロケーション フィールドを使用します。
計算済みのロケーション フィールドは、計算の対象となったネットワーク データセットと移動モードに対してのみ有効です。これらのポイントを別のネットワークまたは移動モードで使用する場合は、ロケーション フィールドの再計算が必要です。さらに、ネットワーク データセットを編集した場合にも、編集内容が入力の配置に影響する場合には、保存されたロケーション フィールドを再計算する必要があります。
未配置の入力
Network Analyst が、ネットワーク上に入力を配置できないこともあります。これは、指定した検索許容範囲内に有効なネットワーク エッジまたはジャンクションがない場合に発生します。未配置の入力は、ネットワーク解析で使用することはできません。
ポイントが未配置になると、ネットワーク ロケーション フィールドにはデータが入力されません。また、Status フィールドの値は 1(Not Located) になります。Status フィールドを使用してテーブルを検索し、未配置の入力をすべて探すことができます。未配置のポイントの地理的な位置を確認し、無視しても問題ないか、あるいは編集が必要かを判断します。
ネットワーク解析レイヤーを解析すると、未配置の入力はデフォルトで無視されます。未配置の入力があるときに解析を失敗させるには、[解析の実行 (Solve)] ツールの [無効なロケーションを除外] オプションをオフにします。Python ベースのワークフローの場合、ネットワーク解析の解析オブジェクトの ignoreInvalidLocations プロパティを使用し、未配置のポイントを無視するかどうかを指定します。オンライン ツールを使用して解析を実行する場合、未配置の入力は常に無視されます。
車両の方位を使用してネットワーク ロケーションをより正確に計算する
車両の進行方向、あるいは方位を使用して、ネットワーク上の配置をより正確に判断することができます。
ポイントを配置する際に方位を使用する方法の詳細を誤算ください。