ロケーション-アロケーション解析レイヤーの作成 (Make Location-Allocation Analysis Layer) (Network Analyst)

概要

ロケーション アロケーション ネットワーク解析レイヤーを作成し、解析プロパティを設定します。ロケーション アロケーション解析レイヤーは、複数の候補地から指定した数の施設を選択し、需要を施設に最適で効率的な方法で割り当てられるようにします。レイヤーは、ローカル ネットワーク データセットや、オンラインでホストされたサービスまたはポータル内のサービスを使用して作成できます。

使用法

  • このツールで解析レイヤーを作成した後は、[ロケーションの追加 (Add Locations)] ツールを使用して解析レイヤーにネットワーク解析オブジェクトを追加し、[解析の実行 (Solve)] ツールを使用して解析を実行し、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用して結果をディスクに保存することができます。

  • このツールをジオプロセシング モデルに使用するときは、モデルをツールとして動作させる場合、出力ネットワーク解析レイヤーにモデル パラメーターを作成する必要があります。そうしないと、出力レイヤーはマップのコンテンツに追加されません。

  • ArcGIS Pro では、ネットワーク解析レイヤーのデータは、ディスク上のファイル ジオデータベースのフィーチャクラスに格納されます。プロジェクトでネットワーク解析レイヤーを作成する場合、レイヤーのデータは、現在のワークスペース環境の新しいフィーチャ データセット内に作成されます。Python スクリプトでネットワーク解析レイヤーを作成する場合、まず arcpy.env.workspace = "<path to file gdb>" を使用して、ワークスペース環境をレイヤーのデータを格納するファイル ジオデータベースに明示的に設定する必要があります。レイヤーが作成されるとき、適切なサブレイヤーのフィーチャクラスを含む新しいフィーチャ データセットがこのファイル ジオデータベースに追加されます。

構文

arcpy.na.MakeLocationAllocationAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {problem_type}, {cutoff}, {number_of_facilities_to_find}, {decay_function_type}, {decay_function_parameter_value}, {target_market_share}, {capacity}, {time_of_day}, {time_zone}, {line_shape}, {accumulate_attributes})
パラメーター説明データ タイプ
network_data_source

ネットワーク解析が実行されるネットワーク データセットまたはサービス。サービスのポータル URL を使用します。

Network Dataset Layer;String
layer_name
(オプション)

作成するネットワーク解析レイヤーの名前。

String
travel_mode
(オプション)

解析で使用する移動モードの名前。移動モードは、移動規制や U ターン ポリシーなど、歩行者、車、トラック、その他の交通手段がネットワークをどのように移動するかを決定するネットワーク設定のコレクションを表します。移動モードは、ネットワーク データ ソースに対して定義されます。

arcpy.na.TravelMode オブジェクトおよび移動モードの有効な JSON 表現を含む文字列もパラメーターの入力として使用できます。

String
travel_direction
(オプション)

ネットワーク コストを計算するときに施設と需要地点間で移動する方向を指定します。

  • FROM_FACILITIES移動する方向は施設から需要地点の方向になります。これがデフォルトです。消防署の場合、消防署から緊急事態の場所まで移動する時間が重視されるため、通常はこの設定が使用されます。
  • TO_FACILITIES移動する方向は需要地点から施設の方向になります。小売店の場合、買物客が小売店に到達するまでの時間が重視されるため、通常はこの設定が使用されます。

このオプションを使用することで、移動する方向に基づいた一方通行規制およびさまざまなインピーダンスを考慮した、ネットワーク上の施設への需要地点の割り当てが行われるようになります。たとえば、需要地点から施設への移動には 15 分かかっても、施設から需要地点への移動時間は 10 分だけの場合があります。

String
problem_type
(オプション)

実行する解析タイプ。解析タイプは配置されている施設の種類に応じて選択します。それは施設の種類によって、優先事項と制約が異なるからです。

  • MINIMIZE_IMPEDANCEこのオプションでは倉庫のロケーション解析を実行します。加重インピーダンス (そのロケーションにおける需要と最寄り施設へのインピーダンスの掛け算) の合計値を最小になるように、複数の施設を選択します。この解析タイプは P 中央値解析としてよく知られています。これがデフォルトの解析タイプです。
  • MAXIMIZE_COVERAGEこのオプションでは消防署のロケーション解析を実行します。すべての需要、あるいは需要の最大量が指定したインピーダンスの閾値に収まるように施設を選択します。
  • MAXIMIZE_CAPACITATED_COVERAGEこのオプションでは、施設の容量に制限がある場合のロケーション解析を実行します。すべての需要または需要の最大量を、いずれの施設でも容量を超えることなく提供できるように施設が選択されます。容量の制限を満たすだけでなく、加重インピーダンス (施設に割り当てられた需要に、施設との間のインピーダンスを掛けた値) の合計値が最小になるように施設が選択されます。
  • MINIMIZE_FACILITIESこのオプションでは消防署のロケーション解析を実行します。すべての需要、あるいは需要の最大量を指定したインピーダンスの閾値に収めるのに必要な最小数の施設を選択します。
  • MAXIMIZE_ATTENDANCEこのオプションでは、近傍店舗のロケーション解析を実行します。各店舗には近傍の需要が割り当てられますが、割り当てられる需要値の比率は距離の増加に伴い低下します。割り当てられた需要の合計が最大になるように複数の施設が選択されます。選択された施設は、指定されたインピーダンスの閾値より遠い位置にある需要には影響を受けません。
  • MAXIMIZE_MARKET_SHAREこのオプションでは競合施設のロケーション解析を実行します。競合施設に対して市場シェアを最大化する施設を選択します。各施設に割り当てられた需要比率の決定には、重力モデルの概念が使用されます。割り当てられた需要の合計が最大になるように複数の施設が選択されます。
  • TARGET_MARKET_SHAREこのオプションでは競合施設のロケーション解析を実行します。競合施設に対して指定された目標市場シェアを満たすように施設を選択します。各施設に割り当てられた需要比率の決定には、重力モデルの概念が使用されます。指定された目標市場シェアを満たすために必要な最小数の施設が選択されます。
String
cutoff
(オプション)

需要地点を施設に割り当てることができる最大インピーダンス。単位は、選択した [移動モード] で使用されるインピーダンス属性の単位です。最大インピーダンスは、ネットワークに沿った最小コスト パスによって計測されます。需要地点がカットオフの範囲外にある場合、それは割り当てられません。このプロパティは、店舗に訪れるために顧客が移動することをいとわない最大距離や、消防署がコミュニティのすべての人に到達するのにかかっても許容される最長時間などをモデリングするのに使用することもできます。

このカットオフは、Cutoff_[インピーダンス] プロパティの需要地点サブレイヤーのカットオフ値を個別に指定することで、需要地点ごとにオーバーライドできます。たとえば、施設に到達するために移動してもいとわない距離が農村部の住民の場合は最大 10 マイルであるのに対し、都市部の住民の場合は最大 2 マイルであるとします。この振舞いは、解析レイヤーの [カットオフ] の値を 10 に設定し、都市部の需要地点の Cutoff_Miles 値を 2 に設定することでモデリングできます。

デフォルトでは、解析にカットオフは使用されません。

Double
number_of_facilities_to_find
(オプション)

解析時に検出する施設の数を指定します。デフォルトでは、このパラメーターは 1 に設定されます。

検出する必要のある施設の数が必須施設よりも多い場合、FacilityType 値が [必須] に設定されている施設は常にソリューションに含められ、残りの検出する必要のある施設は候補施設から選択されます。

解析前に FacilityType 値が [選択済み] に設定されている施設は、解析時には候補施設として処理されます。

MINIMIZE_FACILITIES 解析タイプではカバーエリアが最大になるような最小数の施設の配置を決定するため、パラメーター値は考慮されません。

TARGET_MARKET_SHARE 解析タイプでは指定された市場シェアの確保に必要な最小数の施設を検索するため、パラメーター値はオーバーライドされます。

Long
decay_function_type
(オプション)

これは、施設と需要地点の間のネットワーク コストを変換するための式を設定します。[インピーダンス パラメーター] とともに使用されるこのプロパティは、施設と需要地点の間のネットワーク インピーダンスが、解析でどの施設が選択されるかに影響する度合いを指定します。

  • LINEAR施設および需要地点間の変換されたネットワーク インピーダンスは 2 点間の最短パスのネットワーク インピーダンスと同じです。このオプションにより、インピーダンス パラメーターは常に 1 に設定されます。これがデフォルトです。
  • POWER施設および需要地点間の変換されたネットワーク インピーダンスは、最短パスのネットワーク インピーダンスをインピーダンス パラメーターに指定された値で累乗した値に相当します。正の値のインピーダンス パラメーターとともに、このオプションを使用して、近傍の施設の加重を大きくします。
  • EXPONENTIAL施設および需要地点間の変換されたネットワーク インピーダンスは、数学定数 e を最短パスのネットワーク インピーダンスにインピーダンス パラメーターに掛けた値で累乗した値に相当します。正の値のインピーダンス パラメーターとともに、このオプションを使用して、近傍の施設の加重を非常に大きくします。指数関数変換は、一般的に、インピーダンス カットオフとともに使用されます。

需要地点には ImpedanceTransformation プロパティがあり、これが設定されていると、解析レイヤーの [インピーダンス パラメーター] プロパティが需要地点ごとにオーバーライドされます。都市部の住民と農村部の住民で異なるコスト変換関数を指定しなければならない場合があります。これは、解析レイヤーのインピーダンス変換を農村部の住民に適合するように設定し、都市部にある個々の需要地点のインピーダンス変換を都市部の住民に適合するように設定することでモデリングできます。

String
decay_function_parameter_value
(オプション)

decay_function_type パラメーターで指定された計算式へのパラメーター値を提供します。このパラメーターの値は、コスト変換関数が LINEAR タイプの場合には無視されます。POWER または EXPONENTIAL のコスト変換関数の場合、値は 0 以外である必要があります。

需要地点には ImpedanceTransformation プロパティがあり、これが設定されていると、解析レイヤーの decay_function_parameter_value プロパティが需要地点ごとにオーバーライドされます。都市部の住民と農村部の住民で異なるコスト変換関数を指定しなければならない場合があります。これは、解析レイヤーのインピーダンス変換を農村部の住民に適合するように設定し、都市部にある個々の需要地点のインピーダンス変換を都市部の住民に適合するように設定することでモデリングできます。

Double
target_market_share
(オプション)

problem_type パラメーターが TARGET_MARKET_SHARE に設定されているときに、解析に使用する目標市場シェアをパーセントで指定します。これは、解析対象の施設で獲得したい総需要ウェイトに占める割合です。この数値で指定される目標市場シェアを獲得するのに必要な最小数の施設を選択します。

Double
capacity
(オプション)

[problem_type] パラメーターが [MAXIMIZE_CAPACITATED_COVERAGE] に設定されている場合、施設のデフォルトの容量を指定します。このパラメーターは他の解析タイプでは無視されます。

施設には [容量] プロパティがあり、このプロパティに NULL 以外の値が設定されている場合は、その施設の capacity パラメーターよりも優先されます。

Double
time_of_day
(オプション)

出発の日時を示します。出発時間の場所は、[移動方向] が需要地点から施設か、施設から需要地点かに応じて、施設または需要地点にできます。

交通量ベースのインピーダンス属性を選択した場合、ここで指定した時刻での動的な交通状況に対する解決策が生成されます。日時は、2012/05/14 10:30 のように指定できます。

特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。

  • 今日 - 12/30/1899
  • 日曜 - 12/31/1899
  • 月曜 - 1/1/1900
  • 火曜 - 1/2/1900
  • 水曜 - 1/3/1900
  • 木曜 - 1/4/1900
  • 金曜 - 1/5/1900
  • 土曜 - 1/6/1900

Date
time_zone
(オプション)

[時刻] パラメーターのタイム ゾーン。

  • LOCAL_TIME_AT_LOCATIONS[時刻] パラメーターが、施設または需要地点が位置するタイム ゾーンを表します。[移動方向] が施設から需要地点へとなっている場合、これが施設のタイム ゾーンです。[移動方向] が需要地点から施設へとなっている場合、これが需要地点のタイム ゾーンです。これがデフォルトです。
  • UTC[時刻] パラメーターが、UTC (協定世界時) を参照します。特定の時刻 (たとえば今) に最適の位置を選択したいが、施設または需要地点のタイム ゾーンがわからない場合は、このオプションを選択します。
String
line_shape
(オプション)
  • NO_LINES解析の出力として、形状は生成されません。これは、解析の規模が非常に大きく、ソリューション テーブルだけが必要で、マップで結果を視覚化する必要がない場合に便利です。
  • STRAIGHT_LINES出力ライン形状は解析対象の施設と割り当てられた需要地点とを結ぶ直線になります。これがデフォルトです。

どの出力形状のタイプを選択するかに関係なく、常に最適なルートはユークリッド距離ではなくネットワーク インピーダンスによって決定されます。これは、ルート形状のみが異なり、ネットワークの基となっているトラバースは同じであることを意味します。

String
accumulate_attributes
[accumulate_attributes,...]
(オプション)

解析中に累積されるコスト属性のリスト。これらの累積属性は、参考情報としてのみ使用されます。解析では、指定されている移動モードで使用されるコスト属性のみが使用されます。

累積されるコスト属性ごとに、ネットワーク解析の出力フィーチャに Total_[Impedance] プロパティが入力されます。

このパラメーターは、ネットワーク データ ソースが ArcGIS Online サービスである場合、あるいはネットワーク データ ソースが累積をサポートしないバージョンの Portal for ArcGIS のサービスである場合には使用できません。

String

派生した出力

名前説明データ タイプ
out_network_analysis_layer

新しく作成されたネットワーク解析レイヤー。

Network Analyst レイヤー

コードのサンプル

MakeLocationAllocationAnalysisLayer (ロケーション-アロケーション解析レイヤーの作成) の例 1 (Python ウィンドウ)

必須パラメーターのみを使用してツールを実行します。

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "StoreLocations")
MakeLocationAllocationAnalysisLayer (ロケーション-アロケーション解析レイヤーの作成) の例 2 (Python ウィンドウ)

すべてのパラメーターを使用してツールを実行します。

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeLocationAllocationAnalysisLayer(network, "NewStores",
                                    "Driving Time", "TO_FACILITIES",
                                    "MAXIMIZE_ATTENDANCE", 3, 5, "POWER", 2, "",
                                    "", "1/1/1900 9:00 AM", "UTC",
                                    "STRAIGHT_LINES", ["TravelTime", "Meters"])
MakeLocationAllocationAnalysisLayer (ロケーション-アロケーション解析レイヤーの作成) の例 3 (ワークフロー)

次のスタンドアロン Python スクリプトは、MakeLocationAllocationAnalysisLayer ツールを使用して小売店チェーンの売り上げを最大化するための店舗の場所を選択する方法を示しています。

# Name: MakeLocationAllocationAnalysisLayer_Workflow.py
# Description: Choose the store locations that would generate the most business
#              for a retail chain. For this scenario, we will perform the
#              location-Allocation analysis using the maximize attendance
#              problem type.
# Requirements: Network Analyst Extension

#Import system modules
import arcpy
from arcpy import env
import os

try:
    #Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
    if arcpy.CheckExtension("network") == "Available":
        arcpy.CheckOutExtension("network")
    else:
        raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
    
    #Set environment settings
    output_dir = "C:/Data"
    #The NA layer's data will be saved to the workspace specified here
    env.workspace = os.path.join(output_dir, "Output.gdb")
    env.overwriteOutput = True

    #Set local variables
    input_gdb = "C:/Data/SanFrancisco.gdb"
    network = os.path.join(input_gdb, "Transportation", "Streets_ND")
    layer_name = "NewStoreLocations"
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "CandidateStores")
    required_facility = os.path.join(input_gdb, "Analysis", "ExistingStore")
    demand_points = os.path.join(input_gdb, "Analysis", "TractCentroids")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new location-allocation layer. In this case, the demand travels to
    #the facility. We wish to find 3 potential store locations out of all the
    #candidate store locations using the maximize attendance model.
    result_object = arcpy.na.MakeLocationAllocationAnalysisLayer(network,
                                    layer_name, travel_mode, "TO_FACILITIES",
                                    "MAXIMIZE_ATTENDANCE", cutoff=20,
                                    number_of_facilities_to_find=3)

    #Get the layer object from the result object. The location-allocation layer
    #can now be referenced using the layer object.
    layer_object = result_object.getOutput(0)

    #Get the names of all the sublayers within the location-allocation layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    demand_points_layer_name = sublayer_names["DemandPoints"]

    #Load the candidate store locations as facilities using default search
    #tolerance and field mappings.
    arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
                                                                            "")

    #Load the existing store location as the required facility. Use the field
    #mappings to set the facility type to requried. We need to append this
    #required facility to existing facilities.
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    facilities_layer_name)
    field_mappings["FacilityType"].defaultValue = 1
    arcpy.na.AddLocations(layer_object, facilities_layer_name,
                            required_facility, field_mappings, "",
                            append="APPEND")

    #Load the tract centroids as demand points using default search tolerance
    #Use the field mappings to map the Weight property from POP2000 field.
    demand_field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    demand_points_layer_name)
    demand_field_mappings["Weight"].mappedFieldName = "POP2000"
    arcpy.na.AddLocations(layer_object, demand_points_layer_name, demand_points,
                          demand_field_mappings, "")

    #Solve the location-allocation layer
    arcpy.na.Solve(layer_object)

    #Save the solved location-allocation layer as a layer file on disk
    layer_object.saveACopy(output_layer_file)

    print("Script completed successfully")

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print("An error occurred on line %i" % tb.tb_lineno)
    print(str(e))

ライセンス情報

  • Basic: はい
  • Standard: はい
  • Advanced: はい