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 つの方法の違いを示しています。
| 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 プロパティ値とともに使用され、施設と需要地点の間のネットワーク インピーダンスが、解析による施設の選択に影響する度合いを指定します。設定可能な値の一覧を次に示します。
| String |
outputPathShape (読み書き) | ロケーション-アロケーション解析の結果を、直線を使用して表すかどうかを制御します。設定可能な値の一覧を次に示します。
| String |
problemType (読み書き) | 実行する解析タイプを取得または設定できます。解析タイプは配置されている施設の種類に応じて選択します。それは施設の種類によって、優先事項と制約が異なるからです。設定可能な値の一覧を次に示します。
| String |
restrictions (読み書き) | 解析時に適用される規制属性のリストを取得または設定できます。空のリスト([])は、解析で使用される規制属性がないことを表します。 | String |
solverName (読み取り専用) | 解析プロパティ オブジェクトを取得するために使用されている Network Analyst レイヤが参照している解析の名前を返します。このプロパティは、LocationAllocationSolverProperties オブジェクトからアクセスされたときに必ず文字列「Location-Allocation Solver」を返します。 | String |
targetMarketShare (読み書き) | problemType プロパティが TARGET_MARKET_SHARE に設定されているときに、解析する市場シェアをパーセントで取得または設定できます。これは、ソリューション施設で獲得したい総需要ウェイトのうちの割合です。解析は、この数値で指定される目標市場シェアを獲得するのに必要な最小数の施設を選択します。facilitiesToFind プロパティに設定された値はすべて無視されます。 | Double |
timeOfDay (読み書き) | 出発の日時を取得または設定できます。出発地点は、移動方向が需要地点から施設か、施設から需要地点かに応じて、施設または需要地点にできます。値に None を指定すると、日付と時刻は使用されません。 特定の日付を使用する代わりに、次の日付を使用して曜日を指定することができます。
たとえば、出発を金曜日の午前 8:00 に指定するには、「datetime.datetime(1900, 1, 5, 8,0,0)」という値を指定します。 | DateTime |
travelDirection (読み書き) | ネットワーク コストを計算するときに施設と需要地点間で移動する方向を制御します。設定可能な値の一覧を次に示します。
| String |
useHierarchy (読み書き) | 解析を実行しているときの階層属性の使用を制御します。設定可能な値の一覧を次に示します。
| String |
uTurns (読み書き) | ストップ間のネットワーク移動中に発生する可能性のあるジャンクションでの U ターンを、解析でどのように処理するかを指定するポリシーを取得または設定できます。設定可能な値の一覧を次に示します。
| String |
コードのサンプル
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
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")