OD コスト マトリックスによる起点と終点の間の移動時間の計算
Network Analyst ライセンスで利用可能。
「 起点と終点の (OD) コスト マトリックス解析 」は、複数の起点から複数の終点までのネットワークに沿った最小コスト パスを検出して計測します。 道路網の最適なパスは起点と終点のペアごとに計算され、移動時間と移動距離は出力ラインの属性として格納されます。 このチュートリアルでは、患者から病院までの移動時間を示す OD コスト マトリックスを作成し、その結果を使用して病院にアクセスしにくい患者を特定します。
注意:
このチュートリアルを完了するには、ネットワーク データ ソースとして解析の入力データの地理をカバーするネットワーク データセットを使用して公開された、指定されたチュートリアル ネットワーク データセットである ArcGIS Online、または ArcGIS Enterprise ルート検索サービスを使用します。 ArcGIS Online をネットワーク データ ソースとして使用すると、 クレジット が消費されます。
データの取得
このチュートリアルのデータは、ダウンロードして使用できます。
「 データ ダウンロード ページ 」に移動します。
[ダウンロード] ボタンをクリックしてファイルをローカルに保存します。
ダウンロードしたファイルを展開します。
マップの作成
マップを作成するには、次の手順を実行します。
ArcGIS Pro を起動します。
[マップ] テンプレートをクリックしてプロジェクトを作成します。 必要に応じて、プロジェクトの名前と位置を変更します。
[OK] をクリックします。
マップを含む新しいプロジェクトが表示されます。
プロジェクトへのチュートリアル データの追加
ネットワーク データセットは、道路システムをモデル化します。 ネットワーク データセットには、道路の位置と属性だけでなく、どの道路が接続されているか、接続されている道路間のどのターンが許可または禁止されているかなどの、道路の相互関係に関する情報や、可能な移動パスや移動時間に影響する他の情報も含まれています。 OD コスト マトリックス解析では、ネットワーク データセットを参照して、起点から終点までの移動時間または距離を計算します。
注意:
ArcGIS Online を使用して解析する場合は、その解析で、ArcGIS Online クラウドに格納されている高品質な世界規模のネットワーク データセットが参照され、 ArcGIS Online のクレジット が使用されます。 また、自分のコンピューターのローカルに保存した独自のネットワーク データセットを使用するか、または ArcGIS Enterprise を使用して、独自のネットワーク データセットを使用する「 ルート検索サービスを公開 」して Enterprise ポータルでサービスを構成し、ArcGIS Pro で利用することもできます。
ネットワーク データセットをマップに追加するには、次の手順を実行します。
[カタログ] ウィンドウ (デフォルトではアプリケーションの右側にあります) で [フォルダー] を右クリックし、 [フォルダー接続の追加]
を選択します。[フォルダー接続の追加] ダイアログ ボックスが表示されます。
チュートリアル データを置いたフォルダーを参照して、 [Network Analyst] をダブルクリックし、 [Tutorial] をクリックしてこのフォルダーを選択します。
[OK] をクリックします。
Tutorial フォルダーへの接続が作成されます。
次に、このフォルダーに含まれているネットワーク データセットの 1 つをマップに追加します。
注意:
ArcGIS Online または ArcGIS Enterprise ルート検索サービスをネットワーク データ ソースとして使用する場合は、ネットワーク データセットをマップに追加する必要はありません。
[カタログ] ウィンドウで、 [フォルダー] > [Tutorial] > [SanFrancisco.gdb] > [Transportation] の順に展開します。
[Streets_ND] (ネットワーク データセット アイコン
が付いています) をマップにドラッグします。このネットワーク データセットが [コンテンツ] ウィンドウとマップに追加されます。
[カタログ] ウィンドウで、 [Tutorial] > [SanFrancisco.gdb] > [Analysis] の順に参照します。
[Patients] レイヤーを右クリックして、 [現在のマップに追加]
を選択します。[Patients] レイヤーが [コンテンツ] ウィンドウとマップに追加されます。
[Hospitals] レイヤーを右クリックして、 [現在のマップに追加]
を選択します。[Hospitals] レイヤーが [コンテンツ] ウィンドウとマップに追加されます。
患者と病院の間の OD コスト マトリックスの作成
このセクションでは、OD コスト マトリックス解析を実行して、各患者と各病院の間の運転時間を計算します。 OD コスト マトリックス レイヤーを作成して、患者を起点として、病院を終点として読み込み、解析を実行し、結果を調べます。
OD コスト マトリックス レイヤーの作成
「 OD コスト マトリックス解析レイヤー 」には、OD コスト マトリックス解析のすべての入力、パラメーター、結果が格納されます。
[解析] タブの [ワークフロー] グループで、 [ネットワーク解析] > [OD コスト マトリックス]
の順にクリックします。OD コスト マトリックス レイヤーが [コンテンツ] ウィンドウに追加されます。 このレイヤーには、解析の入力と出力を格納するいくつかのサブレイヤーが含まれます。
OD コスト マトリックス レイヤーの作成時にサンフランシスコのネットワーク データセットを参照します。レイヤーの作成時に、このネットワークが、マップのネットワーク データセットとして設定されたためです。
注意:
ネットワーク解析レイヤーの作成に使用されるネットワーク データ ソースを表示または変更するには、 [解析] タブの [ワークフロー] グループで、 [ネットワーク解析] ドロップダウン矢印をクリックして、 [ネットワーク データ ソース] の下を確認します。 この値を変更しても、既存のネットワーク解析レイヤーのネットワーク データ ソースには影響しません。ネットワーク データ ソースの更新後に作成された新しいネットワーク解析レイヤーにのみ影響します。
[コンテンツ] ウィンドウで、 [OD コスト マトリックス] をクリックし、グループ レイヤーを選択します。
[OD コスト マトリックス レイヤー] タブが表示されます。
[OD コスト マトリックス レイヤー] タブをクリックし、タブのコントロールを表示します。

これらのコントロールを使用して、生成する OD コスト マトリックスの設定を構成します。
ヒント:
[OD コスト マトリックス レイヤー] タブは、 [コンテンツ] ウィンドウで OD コスト マトリックス レイヤーまたはサブレイヤーのいずれかを選択した場合のみ表示されます。 また、複数の OD コスト マトリックス レイヤーが存在する場合は、個別にレイヤーの設定を変更することも、複数のレイヤーを選択して選択したすべてのレイヤーの設定を編集することもできます (それらのレイヤーが同じネットワーク データ ソースを共有している場合)。
[OD コスト マトリックス レイヤー] タブの [移動モード] グループで、 [モード] に対して [運転時間] が選択されていることを確認します。
この OD コスト マトリックスでは、患者と病院の間の移動時間が計算されます。
起点の追加
目標は患者から病院までの運転時間を計算することなので、 [Patients] フィーチャクラスを OD コスト マトリックスの起点として使用します。 これを行うには、 [Patients] フィーチャクラスを、OD コスト マトリックス レイヤーの [Origins] サブレイヤーに読み込む必要があります。
[OD コスト マトリックス レイヤー] タブの [入力データ] グループで、 [起点のインポート]
をクリックします。[ロケーションの追加] ウィンドウが表示されます。
[入力ネットワーク解析レイヤー] が [OD コスト マトリックス] に設定され、 [サブ レイヤー] が [起点] に設定されていることを確認します。
[入力ロケーション] の下にあるドロップダウン メニューをクリックし、 [Patients] を選択します。
[フィールド マッピング] で [名前] プロパティを選択し、 [フィールド名] を
PatientIDに設定します。[フィールド マッピング] を使用して、入力データのフィールド値を、ネットワーク解析レイヤーのスキーマのフィールドに転送します。
PatientIDフィールドを [Origins] サブレイヤーの [名前] プロパティにマッピングすることで、Nameフィールドの値を後で OD コスト マトリックスの結果に結合して元の入力データに戻すことができます。ヒント:
[Patients] フィーチャクラスの
PatientIDフィールドはテキスト フィールドで、 [Origins] サブレイヤーのNameフィールドも同様です。 このため、NameフィールドにPatientIDの値を入力すると、 [Origins] テーブルの値を元の [Patients] フィーチャクラスに結合して戻すことができます。 ただし、データに異なるデータ タイプの一意識別子がある場合は、フィールドのデータ タイプが一致しないため、 [Origins]Nameフィールドから結合することはできません。入力フィーチャクラスのいずれのフィールドもネットワーク解析レイヤーのサブレイヤーに転送することができ、これは結合に使用すると便利です。
解析レイヤーにフィールドを追加 (Add Field To Analysis Layer) ツールを使用して、ネットワーク解析レイヤーのサブレイヤーにフィールドを追加します。
[ロケーションの追加 (Add Locations)] ツールを使用して入力データを読み込む場合は、フィールド マッピングを使用して、入力データのフィールドを前の手順で追加したフィールドにマッピングします。
解析が完了したら、結合やその他の解析手順で、追加されたフィールドを使用します。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
10 人の患者が起点として読み込まれます。
終点の追加
目標は患者から病院までの運転時間を計算することなので、 [Hospitals] フィーチャクラスを OD コスト マトリックスの終点として使用します。 これを行うには、 [Hospitals] フィーチャクラスを、OD コスト マトリックス レイヤーの [Destinations] サブレイヤーに読み込む必要があります。
[OD コスト マトリックス レイヤー] タブの [入力データ] グループで、 [終点のインポート]
をクリックします。[ロケーションの追加] ウィンドウが表示されます。
[入力ネットワーク解析レイヤー] が [OD コスト マトリックス] に設定され、 [サブ レイヤー] が [終点] に設定されていることを確認します。
[入力ロケーション] の下にあるドロップダウン メニューをクリックし、 [Hospitals] を選択します。
[フィールド マッピング] で [名前] プロパティを選択し、入力された [Hospitals] フィーチャクラスの
NAMEフィールドが自動的にマッピングされていることを確認します。[フィールド マッピング] を使用して、入力データのフィールド値を、ネットワーク解析レイヤーのスキーマのフィールドに転送します。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
終点として読み込まれた 22 の病院
OD コスト マトリックスを作成するための解析の実行
解析を実行するには、次の手順を実行します。
[OD コスト マトリックス レイヤー] タブで [実行]
をクリックします。解析プロセスが完了したら、起点と終点ラインがマップ上に表示されます。 各起点と各終点の間に 1 本の直線が表示されます。 ラインは直線ですが、次に検討する運転時間は道路網に沿った移動を使用して計算されています。
[コンテンツ] ウィンドウで、 [OD コスト マトリックス] グループ レイヤーを展開します (まだ展開していない場合)。
[OD コスト マトリックス: ライン] サブレイヤーを右クリックして、 [属性テーブル] をクリックします。
[Lines] サブレイヤーの属性テーブルは、各患者から各病院への起点 - 終点 OD コスト マトリックスを表します。 テーブルの各行は、起点 - 終点ペアを表します。
Total_TravelTimeフィールドには、各起点から各終点までの運転時間が分単位で表示されます。解析で使用される [運転時間] 移動モードでは、分単位の [TravelTime] コスト属性が使用されるためです。Total_で始まる名前の他のフィールドは、この解析では使用されなかったネットワーク データセットのその他のコスト属性に関連付けられています。属性テーブルを閉じます。
病院にアクセスしにくい患者の判定
OD コスト マトリックスは、目的地へのアクセスを調査する際によく使用されます。 このチュートリアルの次のセクションでは、10 分以内の運転時間で病院にアクセスできない患者を特定し、この情報を使用して [Patients] フィーチャクラスのフィールドを更新します。 更新された設定で OD コスト マトリックス レイヤーを解決し、結合を使用して、結果を [Patients] フィーチャクラスに戻します。
解析設定の更新と再解析
前の OD コスト マトリックスには、すべての患者から各病院までの運転時間が含まれていました。 今回の解析では、OD コスト マトリックス解析の設定を更新して、各患者について、10 分の運転時間制限内で最も近い病院のみを結果に含めるよう制限します。
[OD コスト マトリックス レイヤー] タブの [移動モード] グループで、 [終点] テキスト ボックスに「 1 」を設定します。
この設定は、各起点に対して検索を実行する終点の数を制限します。 OD コスト マトリックスの結果には、すべての病院までの運転時間ではなく、各患者に最も近い病院までの運転時間が含まれます。
[OD コスト マトリックス レイヤー] タブの [移動モード] グループで、 [カットオフ] テキスト ボックスに「 10 」を設定します。
この設定により、患者から病院までの運転時間が指定された制限時間以下のレコードのみが含まれるように結果が制限されます。
[運転時間] 移動モードでは、分単位の [TravelTime] コスト属性が使用されます。 その結果、 [カットオフ] の値は分単位で解釈されます。
[OD コスト マトリックス レイヤー] タブで [実行]
をクリックして、解析を再実行します。解決プロセスが完了すると、課せられた制限により、マップに表示されるラインの数が前よりも少なくなります。 [解析の実行 (Solve)] ツールから、2 つの起点に対して終点が見つからなかったため部分的なソリューションが生成されたことを知らせる警告メッセージも表示されます。 これは、解析が 2 つの起点 (患者) から 10 分の運転時間制限内に到達できる終点 (病院) を見つけられなかったためです。
[OD コスト マトリックス: ライン] サブレイヤーを右クリックして、 [属性テーブル] をクリックします。
テーブルでは、各起点に対して 1 行以上は表示されません。 警告メッセージで指摘された 2 つの起点は、どの終点にも接続されなかったため、行が表示されません。
属性テーブルを閉じます。
OD コスト マトリックスの結果を元のデータに結合する
解析の目標は、病院にアクセスしにくい患者を特定することです。 このセクションでは、OD コスト マトリックス解析の結果を Patients フィーチャクラスに結合し、10 分以内の運転時間で病院に到達できない患者にフラグを設定するフィールドを計算します。
最初に [Lines] サブレイヤーのデータを [Origins] サブレイヤーに結合し、算出された運転時間を各起点と関連付けます。
[OD Cost Matrix:Origins] レイヤーを右クリックし、 [テーブルの結合とリレート] > [テーブル結合] の順にクリックします。
[テーブルの結合] ツールが表示されます。
[入力テーブル] パラメーターが [Origins] に設定されていることを確認します。
[入力フィールド] パラメーターを
ObjectIDに設定します。[結合テーブル] パラメーターを [OD Cost Matrix\Lines] に設定します。
[フィールドの結合] パラメーターを
OriginIDに設定します。[Lines] サブレイヤーの
OriginIDフィールドは、 [Origins] サブレイヤーのObjectIDフィールドに対応します。 このため、結合に使用できません。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
[Lines] サブレイヤーのデータは、 [Origins] サブレイヤーに結合されます。
[OD コスト マトリックス: 起点] サブレイヤーを右クリックして、 [属性テーブル] をクリックします。
[Origins] サブレイヤーの属性テーブルには、 [Lines] サブレイヤーから結合されたデータが含まれます。
Total_TravelTimeフィールドを検索して、値を調べます。2 つの起点について、 [Lines] サブレイヤーでこれらの起点に関連付けられたレコードがないため、このフィールドの値は null です。 これらは、10 分の運転時間制限内に病院に到達できなかった患者です。
属性テーブルを閉じます。
次に、 [Origins] のデータを、OD コスト マトリックスの入力として使用した [Patients] サブレイヤーに結合します。 これにより、計算された運転時間を転送し、制限された運転時間内に病院に到達できなかった患者を特定できます。
[Patients] レイヤーを右クリックし、 [テーブルの結合とリレート] > [テーブル結合] の順にクリックします。
[テーブルの結合] ツールが表示されます。
[入力テーブル] パラメーターが [Patients] に設定されていることを確認します。
[入力フィールド] パラメーターを
PatientIDに設定します。[結合テーブル] パラメーターを [OD Cost Matrix\Origins] に設定します。
[フィールドの結合] パラメーターを
Nameに設定します。注意:
結合された [Origins] テーブルには、
Nameという 2 つのフィールドがあります。 1 つは [Origins] サブレイヤーのフィールド、もう 1 つは [Lines] サブレイヤーから結合されたフィールドです。 [Origins] サブレイヤーのNameフィールドを使用します。 [フィールドの結合] パラメーターのフィールド リストでは、フィールド名の横に、そのパラメータがどのテーブルからのものであるかを示す追加のテキストが含まれる場合があります。 このテキストは、 [Origins] サブレイヤーに対して自動生成されたフィーチャクラス名です。通常は、「 Origins 」というテキストの後にランダムな文字が続きます。以前に
PatientIDフィールドを [Origins] サブレイヤーのNameフィールドにマッピングしたので、その値を結合に使用できます。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
OD コスト マトリックスのデータが [Patients] レイヤーに結合されます。
最後に、結合した [Patients] レイヤーを調べて、10 分以内の運転時間で病院に到達できない患者を特定します。
[Patients] レイヤーを右クリックし、 [属性テーブル] をクリックします。
OD コスト マトリックス レイヤーの、結合された [Lines] および [Origins] サブレイヤーのデータが、 [Patients] 属性テーブルに含まれています。
Total_TravelTimeフィールドを検索して、値を調べます。[Lines] サブレイヤーを [Origins] サブレイヤーに結合した後で確認したように、10 分以内に病院に到達できなかったため、 [Patients] テーブルの 2 つの行に null の
Total_TravelTimeフィールド値があります。 これらは、病院にアクセスしにくい患者であり、フォローアップのためにフラグを付ける必要があります。[マップ] タブの [選択] グループで、 [属性条件で選択] ボタン
をクリックします。[属性検索 (Select Layer By Attribute)] ツールが開きます。
必要に応じて、 [入力テーブル] パラメーターを [Patients] に設定します。
[式] パラメーターを構成して、
Total_TravelTimeフィールドが null の患者を選択します。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
10 分以内に病院にアクセスできない患者が選択されています。
[Patients] の属性テーブルで、
PoorAccessフィールドを探します。PoorAccessフィールド見出しを右クリックして、 [フィールド演算] をクリックします。[フィールド演算 (Calculate Field)] ツールが開きます。
[入力テーブル] パラメーターが [Patients] に設定され、 [フィールド名] パラメーターが [PoorAccess] に設定されていることを確認します。
[式] パラメーターを構成して、
PoorAccessフィールドの値を 1 にして計算します。これを行うには、 [Patients.PoorAccess =] ラベルの付いたテキスト ボックスを「 1 」 に設定します。
残りのパラメーターをデフォルト設定のままにして [OK] ボタンをクリックします。
PoorAccessフィールドで、選択した行に 1 が設定されます。[Patients] レイヤーを右クリックし、 [テーブルの結合とリレート] > [結合をすべて削除] の順にクリックします。
結合したデータがすべて [Patients] レイヤーから削除されます。
病院にアクセスしにくい患者のサブセットを特定してフラグを付け、この情報を使用してさらに分析したり意思決定したりできます。