LocationAllocationSolverProperties (arcpy.na)

サマリ

Provides access to analysis properties from a location-allocation network analysis layer. The GetSolverProperties function is used to obtain a LocationAllocationSolverProperties object from a location-allocation network analysis layer.

説明

The LocationAllocationSolverProperties object provides read and write access to all the analysis properties of a location-allocation network analysis layer. The object can be used to modify the desired analysis properties of the location-allocation layer, and the corresponding layer can be re-solved to determine the appropriate results. A new location-allocation layer can be created using the Make Location-Allocation Layer geoprocessing tool. Obtaining the LocationAllocationSolverProperties object from a new location-allocation layer allows you to reuse the existing layer for subsequent analyses rather than create a new layer for each analysis, which can be slow.

After modifying the properties on the LocationAllocationSolverProperties object, the corresponding layer can be immediately used with other functions and geoprocessing tools. There is no refresh or update of the layer required to honor the changes modified through the object.

特性

プロパティ説明データ タイプ
accumulators
(読み書き)

解析時に累積されるネットワーク コスト属性のリストを取得または設定できます。空のリスト([])は、累積されるコスト属性がないことを表します。

String
attributeParameters
(読み書き)

解析で使用されるパラメータ化属性を取得または設定できます。プロパティは Python ディクショナリを返します。ディクショナリのキーは、属性名とパラメータで構成される 2 つの値の組み合わせです。ディクショナリ内の各アイテムの値はパラメータ値です。

パラメータ化されたネットワーク属性は、リアルタイムに変化する属性値をモデリングするために使用されます。たとえば、12 フィートの車高規制があるトンネルをパラメータを使用してモデリングできます。この場合、車両の高さ(フィート)をパラメータ値として指定する必要があります。車両の高さが 12 フィートを超えている場合は、この規制が true に評価され、トンネルの通行が規制されます。同様に、橋は重量規制を指定するパラメータを保持することができます。

attributeParameters プロパティを直接変更しようとしても、値は更新されません。常に新しいディクショナリ オブジェクトを使用して、プロパティの値を設定する必要があります。以下の 2 つのコード ブロックは、これらの 2 つの方法の違いを示しています。

#Don't attempt to modify the attributeParameters property in place.
#This coding method won't work.

solverProps.attributeParameters[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
#Modify the attributeParameters property using a new dictionary object.
#This coding method works. 

params = solverProps.attributeParameters
params[('HeightRestriction', 'RestrictionUsage')] = "PROHIBITED"
solverProps.attributeParameters = params
ネットワーク解析レイヤにパラメータ化属性がない場合、このプロパティは None を返します。

Dictionary
defaultCapacity
(読み書き)

ロケーション-アロケーション解析の problemType パラメータが MAXIMIZE_CAPACITATED_COVERAGE に設定されているときに、施設のデフォルト容量を取得または設定できます。このパラメータは他の解析タイプでは無視されます。

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

Double
facilitiesToFind
(読み書き)

解析時に配置する施設の数を取得または設定できます。problemType プロパティが MINIMIZE_FACILITIES に設定されている場合は、カバーエリアが最大となるように配置する施設の最小数が決定されるため、このプロパティの値は無視されます。problemType プロパティが TARGET_MARKET_SHARE に設定されている場合も、指定された市場シェアの確保に必要な施設の最小数が検索されるため、このプロパティ値は無視されます。

Integer
impedance
(読み書き)

インピーダンスとして使用するネットワーク コスト属性を取得または設定できます。

String
impedanceCutoff
(読み書き)

需要地点を施設に割り当てることができる最大インピーダンスを取得または設定できます。

Double
impedanceParameter
(読み書き)

impedanceTransformation プロパティで指定された計算式のパラメータ値を取得または設定できます。impedanceTransformation プロパティが LINEAR に設定されている場合、このプロパティ値は無視されます。プロパティ値は 0 以外の値になります。

Double
impedanceTransformation
(読み書き)

施設と需要地点の間のネットワーク コストを変換するための式を取得または設定できます。このプロパティ値は impedanceParameter プロパティ値とともに使用され、施設と需要地点の間のネットワーク インピーダンスが、解析による施設の選択に影響する度合いを指定します。設定可能な値の一覧を次に示します。

  • LINEAR施設および需要地点間の変換されたネットワーク インピーダンスは 2 点間の最短パスのネットワーク インピーダンスと同じです。この値を設定すると、impedanceParameter プロパティ値は常に 1 に設定され、impedanceParameter プロパティに設定された値は無視されます。
  • POWER(乗数)施設および需要地点間の変換されたネットワーク インピーダンスは、最短パスのネットワーク インピーダンスを impedanceParameter プロパティに指定された値で乗数した値に相当します。このプロパティ値とともに正の impedanceParameter プロパティ値を使用すると、近傍の施設の加重が大きくなります。
  • EXPONENTIAL施設および需要地点間の変換されたネットワーク インピーダンスは、数学定数 e を最短パスのネットワーク インピーダンスに impedanceParameter プロパティ値を掛けた値で乗数した値に相当します。このプロパティ値とともに正の impedanceParameter プロパティ値を使用すると、近傍の施設の加重が非常に大きくなります。
String
outputPathShape
(読み書き)

ロケーション-アロケーション解析の結果を、直線を使用して表すかどうかを制御します。設定可能な値の一覧を次に示します。

  • NO_LINES(ラインなし)解析の出力として、シェープは生成されません。これは、多数の需要地点または施設があり、表形式の出力のみが必要である場合に便利です。
  • STRAIGHT_LINES(直線)ソリューション施設と施設が割り当てられた需要地点を結ぶ直線が生成されます。
String
problemType
(読み書き)

実行する解析タイプを取得または設定できます。解析タイプは配置されている施設の種類に応じて選択します。それは施設の種類によって、優先事項と制約が異なるからです。設定可能な値の一覧を次に示します。

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

解析時に適用される規制属性のリストを取得または設定できます。空のリスト([])は、解析で使用される規制属性がないことを表します。

String
solverName
(読み取り専用)

解析プロパティ オブジェクトを取得するために使用されている Network Analyst レイヤが参照している解析の名前を返します。このプロパティは、LocationAllocationSolverProperties オブジェクトからアクセスされたときに必ず文字列「Location-Allocation Solver」を返します。

String
targetMarketShare
(読み書き)

problemType プロパティが TARGET_MARKET_SHARE に設定されているときに、解析する市場シェアをパーセントで取得または設定できます。これは、ソリューション施設で獲得したい総需要ウェイトのうちの割合です。解析は、この数値で指定される目標市場シェアを獲得するのに必要な最小数の施設を選択します。facilitiesToFind プロパティに設定された値はすべて無視されます。

Double
timeOfDay
(読み書き)

出発の日時を取得または設定できます。出発地点は、移動方向が需要地点から施設か、施設から需要地点かに応じて、施設または需要地点にできます。値に None を指定すると、日付と時刻は使用されません。

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

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

たとえば、出発を金曜日の午前 8:00 に指定するには、「datetime.datetime(1900, 1, 5, 8,0,0)」という値を指定します。

DateTime
travelDirection
(読み書き)

ネットワーク コストを計算するときに施設と需要地点間で移動する方向を制御します。設定可能な値の一覧を次に示します。

  • FACILITY_TO_DEMAND(施設から需要地点へ)移動する方向は施設から需要地点の方向になります。
  • DEMAND_TO_FACILITY(需要地点から施設へ)移動する方向は需要地点から施設の方向になります。
String
useHierarchy
(読み書き)

解析を実行しているときの階層属性の使用を制御します。設定可能な値の一覧を次に示します。

  • USE_HIERARCHY(階層を使用) 階層属性を解析に使用します。階層を使用すると、解析は下位ランクのエッジよりも上位ランクのエッジを優先します。階層解析は、より高速で、運転者が遠回りであっても一般道路の代わりに高速道路を利用する状況をシミュレートするのに使用できます。このオプションは、Network Analyst レイヤが参照しているネットワーク データセットに階層属性がある場合のみ適用されます。値を True に設定することでも、このオプションを指定できます。
  • NO_HIERARCHY(階層を使用しない)階層属性を解析に使用しません。階層を使用しないことで、ネットワーク データセットの正確なルートが検索されます。値を False に設定することでも、このオプションを指定できます。
String
uTurns
(読み書き)

ストップ間のネットワーク移動中に発生する可能性のあるジャンクションでの U ターンを、解析でどのように処理するかを指定するポリシーを取得または設定できます。設定可能な値の一覧を次に示します。

  • ALLOW_UTURNS(U ターンを許可)任意の数の接続されたエッジを持つジャンクションで U ターンを許可します。
  • NO_UTURNS(U ターンを規制)ジャンクションの結合にかかわらず、すべてのジャンクションで U ターンを禁止します。ただし、この設定が選択されている場合でも、ネットワーク ロケーションでは U ターンが許可されます。同様に、個々のネットワーク ロケーションの CurbApproach プロパティで U ターンを禁止するように設定できます。
  • ALLOW_DEAD_ENDS_ONLY(行き止まりのみ許可)1 つの隣接エッジを持つジャンクション(行き止まり)を除くすべてのジャンクションでの U ターンを禁止します。
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY2 つの隣接するエッジが接するジャンクションでの U ターンを禁止します。ただし、交差点(3 つ以上の隣接エッジを持つジャンクション)および行き止まり(1 つの隣接エッジを持つジャンクション)では U ターンを許可します。ネットワークには、道路セグメントの中間に無関係のジャンクションが存在する場合があります。このオプションは、これらの場所で車両が U ターンすることを防ぎます。
String

コードのサンプル

LocationAllocationSolverProperties example 1 (Python window)

The script shows how to update the problem type of a location-allocation network analysis layer to Minimize Facilities and set a power impedance transformation with an impedance parameter of 2. It assumes that a location-allocation layer called Stores Coverage has been created in a new map document based on the tutorial network dataset for San Francisco region.

#Get the location-allocation layer object from a layer named "Stores Coverage" in
#the table of contents
laLayer = arcpy.mapping.Layer("Stores Coverage")

#Get the solver properties object from the location-allocation layer
solverProps = arcpy.na.GetSolverProperties(laLayer)

#Update the properties for the location-allocation layer using the solver properties
#object
solverProps.problemType = "MINIMIZE_FACILITIES"
solverProps.impedanceTransformation = "POWER"
solverProps.impedanceParameter = 2
LocationAllocationSolverProperties example 2 (workflow)

The script shows how to choose optimal store locations that would generate the most business for a retail chain using location-allocation analysis. The script first creates a new location-allocation layer with appropriate analysis settings. As a next step, the candidate store locations and the block group centroids are loaded as facilities and demand points, respectively. The analysis is solved and saved to a layer file. Two subsequent analyses are performed by modifying the analysis properties using the LocationAllocationSolverProperties object. After each solve, the layer is stored as a layer file. The script uses the tutorial data for the San Francisco region. The detailed description of the scenario is available as part of exercise 9 in the Network Analyst tutorial. While the tutorial walks you through this scenario using the ArcMap user interface, the script provides an example of how the same scenario can be automated using a Python script.

import arcpy

#Set up the environment
arcpy.env.overwriteOutput = True
arcpy.env.workspace = "C:/data/SanFrancisco.gdb"
arcpy.CheckOutExtension("network")

#Set up variables
networkDataset = "Transportation/Streets_ND"
outNALayerName = "NewStoreLocations"
inFacilities = "Analysis/CandidateStores"
requiredFacility = "Analysis/ExistingStore"
competitorFacility = "Analysis/CompetitorStores"
inDemandPoints = "Analysis/TractCentroids"
outputFolder = "C:/data/output/"

#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.
outNALayer = arcpy.na.MakeLocationAllocationLayer(networkDataset, outNALayerName,
                                                  "TravelTime","DEMAND_TO_FACILITY",
                                                  "MAXIMIZE_ATTENDANCE",3,5,
                                                  "LINEAR")
#Get the layer object from the result object. The location-allocation layer
#can now be referenced using the layer object.
outNALayer = outNALayer.getOutput(0)

#Get the names of all the sublayers within the location-allocation layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
facilitiesLayerName = subLayerNames["Facilities"]
demandPointsLayerName = subLayerNames["DemandPoints"]

#Load the candidate store locations as facilities using default search
#tolerance and field mappings.
arcpy.na.AddLocations(outNALayer, facilitiesLayerName, inFacilities, "", "",
                      exclude_restricted_elements = "EXCLUDE")

#Load the tract centroids as demand points using default search tolerance. Use 
#the field mappings to map the Weight property from POP2000 field.
demandFieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
                                                    demandPointsLayerName)
demandFieldMappings["Weight"].mappedFieldName = "POP2000"
arcpy.na.AddLocations(outNALayer,demandPointsLayerName ,inDemandPoints,
                      demandFieldMappings, "",
                      exclude_restricted_elements = "EXCLUDE")

#Solve the location-allocation layer
arcpy.na.Solve(outNALayer)
    
#Save the solved location-allocation layer as a layer file on disk with 
#relative paths
outLayerFile = outputFolder + outNALayerName + ".lyr"
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")

#We need to re-solve the previous scenario as a store-expansion scenario, in
#which we will start with an existing store and optimally locate two additional
#stores.
#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.
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, facilitiesLayerName)
fieldMappings["FacilityType"].defaultValue = 1
fieldMappings["Name"].mappedFieldName = "Name"
arcpy.na.AddLocations(outNALayer, facilitiesLayerName, requiredFacility,
                      fieldMappings, "", append = "APPEND",
                      exclude_restricted_elements = "EXCLUDE")

#Solve the location-allocation layer
arcpy.na.Solve(outNALayer)
    
#Save the solved location-allocation layer as a layer file on disk with 
#relative paths
updatedNALayerName = "StoreExpansionScenario"
outNALayer.name = updatedNALayerName
outLayerFile = outputFolder + updatedNALayerName + ".lyr"
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")

#We need to resolve the previous scenario and locate new stores to 
#maximize market share in light of competing stores.

#Load the competitor store locations as the competitor facilities. Use the field
#mappings to set the facility type to Competitor. We need to append these
#competitor facilities to existing facilities.
fieldMappings["FacilityType"].defaultValue = 2
arcpy.na.AddLocations(outNALayer, facilitiesLayerName, competitorFacility,
                      fieldMappings, "", append = "APPEND",
                      exclude_restricted_elements = "EXCLUDE")

#Get the LocationAllocationSolverProperties object from the location-allocation 
#layer to modify the analysis settings for the layer.
solverProps = arcpy.na.GetSolverProperties(outNALayer)

#Set the problem type to Maximize Market Share, and impedance transformation to
#Power with an impedance parameter value of 2.
solverProps.problemType = "MAXIMIZE_MARKET_SHARE"
solverProps.impedanceTransformation = "POWER"
solverProps.impedanceParameter = 2

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

#print the market share that was obtained
arcpy.AddMessage(arcpy.GetMessage(0))

#Change the name of the NA Layer
updatedNALayerName = "MaximizedMarketShareStoreLocations"
outNALayer.name = updatedNALayerName

#Save the solved location-allocation layer as a layer file on disk with 
#relative paths
outLayerFile = outputFolder + updatedNALayerName + ".lyr"
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
    
arcpy.AddMessage("Completed")

関連トピック

9/14/2013