Zusammenfassung
Erstellt einen Netzwerkanalyse-Layer für Start-Ziel-Kostenmatrix und legt seine Analyse-Eigenschaften fest. Mit dem Netzwerkanalyse-Layer für die Start-Ziel-Kostenmatrix können Sie eine Kostenübersicht von einer Gruppe von Startstandorten zu einer Gruppe von Zielstandorten erstellen.
Verwendung
Nachdem Sie den Analyse-Layer mit diesem Werkzeug erstellt haben, können Sie ihm Netzwerkanalyse-Objekte mithilfe des Werkzeugs Standorte hinzufügen hinzufügen, die Analyse mit dem Werkzeug Berechnen berechnen und die Ergebnisse mit dem Werkzeug In Layer-Datei speichern auf der Festplatte speichern.
Bei Verwendung dieses Werkzeugs in Geoverarbeitungsmodellen muss der Ausgabe-Netzwerkanalyse-Layer in einen Modellparameter geändert werden, wenn das Modell als Werkzeug ausgeführt wird. Andernfalls wird der Ausgabe-Layer dem Inhalt der Karte nicht hinzugefügt.
Syntax
arcpy.na.MakeODCostMatrixLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {default_cutoff}, {default_number_destinations_to_find}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape}, {time_of_day})
Parameter | Erklärung | Datentyp |
in_network_dataset | Das Netzwerk-Dataset, auf dem die Start-Ziel-Kostenmatrixanalyse ausgeführt wird. | Network Dataset Layer |
out_network_analysis_layer | Name des zu erstellenden Netzwerkanalyse-Layers für Start-Ziel-Kostenmatrizen. | String |
impedance_attribute | Das Kostenattribut, das in der Analyse als Widerstand verwendet wird. | String |
default_cutoff (optional) | Standardimpedanzwert, an dem die Suche nach Zielen für einen angegebenen Ursprung abgebrochen wird. Wenn die Gesamtimpedanz größer als der Grenzwert ist, wird das Durchlaufen angehalten. Der Standardwert kann durch die Angabe eines Grenzwertes für die Ursprünge überschrieben werden. | Double |
default_number_destinations_to_find (optional) | Standardanzahl von Zielen, die für jeden Ursprung gesucht werden soll. Der Standard kann überschrieben werden, indem ein Wert für die Eigenschaft "TargetDestinationCount" der Ursprünge angegeben wird. | Long |
accumulate_attribute_name [accumulate_attribute_name,...] (optional) | Eine Liste mit Kostenattributen, die während der Analyse akkumuliert werden sollen. Diese Akkumulationsattribute dienen ausschließlich zu Referenzzwecken. Der Solver verwendet nur das vom Parameter Impedanzattribut angegebene Kostenattribut zum Berechnen der Route. Für jedes akkumulierte Kostenattribut wird den vom Solver ausgegebenen Routen eine Total_[Impedance]-Eigenschaft hinzugefügt. | String |
UTurn_policy (optional) | Die Wendenregel an Knoten. Das Zulassen von Wenden bedeutet, dass der Solver an einem Knoten wenden und auf der gleichen Straße wieder zurückführen kann. Da diese Knoten Straßenkreuzungen und Sackgassen darstellen können, kann es sein, dass verschiedene Fahrzeuge an manchen Knoten wenden können und an anderen wiederum nicht. Dies hängt davon ab, ob der Knoten eine Kreuzung oder eine Sackgasse darstellt. Um dies zu berücksichtigen, wird der Parameter "Wendenregel" implizit durch die Anzahl der mit der Kreuzung verbundenen Kanten angegeben. Diese Anzahl wird als Valenz der Knoten bezeichnet. Die zulässigen Werte für diesen Parameter sowie eine Beschreibung der jeweiligen Bedeutung in Bezug auf die Valenz der Knoten sind unten aufgelistet.
Falls Sie eine Wendenregel benötigen, die genauer definiert ist, können Sie einem Netzwerkkostenattribut einen globalen Evaluator für Verzögerung bei Kantenübergängen hinzufügen oder dessen Einstellungen anpassen, sofern dieser vorhanden ist, und der Konfiguration von U-förmigen Kantenübergängen einen besonderen Stellenwert einräumen. Ziehen Sie auch die Einstellung der CurbApproach-Eigenschaft Ihrer Netzwerkstandorte in Erwägung. | String |
restriction_attribute_name [restriction_attribute_name,...] (optional) | Eine Liste mit Beschränkungsattributen, die während der Analyse angewendet werden sollen. | String |
hierarchy (optional) |
Der Parameter wird nicht verwendet, wenn ein Hierarchie-Attribut nicht für das Netzwerk-Dataset definiert ist, das zum Durchführen der Analyse verwendet wird. Verwenden Sie in solchen Fällen "#" als Parameterwert. | Boolean |
hierarchy_settings (optional) | Network Analyst Hierarchy Settings | |
output_path_shape (optional) |
Gleichgültig, welcher Ausgabe-Shape-Typ gewählt wird, die optimale Route wird immer durch die Netzwerkimpedanz und nie durch die Euklidische Entfernung bestimmt. Dies bedeutet, dass sich nur die Routen-Shapes und nicht der zugrunde liegende Durchlauf des Netzwerks unterscheiden. | String |
time_of_day (optional) | Gibt die Abfahrtszeit vom Startpunkt an. Wenn Sie ein verkehrsbasiertes Impedanzattribut ausgewählt haben, wird die Lösung auf Grundlage des dynamischen Verkehrsaufkommens zu der hier angegebenen Uhrzeit generiert. Sie können ein Datum und eine Uhrzeit im Format 14.5.2012 10:30 angeben. Statt ein bestimmtes Datum zu verwenden, kann ein Wochentag mithilfe der folgenden Datumsangaben angegeben werden:
| Date |
Abgeleitete Ausgabe
Name | Erklärung | Datentyp |
output_layer | Der neu erstellte Netzwerkanalyse-Layer. | Network Analyst-Layer |
Codebeispiel
MakeODCostMatrixLayer – Beispiel 1 (Python-Fenster)
Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime")
MakeODCostMatrixLayer – Beispiel 2 (Python-Fenster)
Führen Sie das Werkzeug unter Verwendung aller Parameter aus.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime", 10, 20,
["Meters", "DriveTime"], "NO_UTURNS",
["Oneway"], "USE_HIERARCHY", "", "NO_LINES")
MakeODCostMatrixLayer – Beispiel 3 (Workflow)
Im folgenden eigenständigen Python-Skript wird veranschaulicht, wie das Werkzeug MakeODCostMatrixLayer verwendet werden kann, um eine Start-Ziel-Kostenmatrix für die Warenlieferung von den Lagern an die Geschäfte zu erstellen, die innerhalb einer Fahrzeit von 10 Minuten erreichbar sind.
# Name: MakeODCostMatrixLayer_Workflow.py
# Description: Create an origin-destination cost matrix for delivery of goods
# from the warehouses to all stores within a 10-minute drive time
# and save the results to a layer file on disk. Such a matrix can
# be used as an input for logistics, delivery and routing analyses.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/data/Paris.gdb"
env.overwriteOutput = True
#Set local variables
inNetworkDataset = "Transportation/ParisMultimodal_ND"
outNALayerName = "WarehouseToStoreDrivetimeMatrix"
impedanceAttribute = "Drivetime"
searchTolerance = "1000 Meters"
accumulateAttributeName = ["Meters"]
inOrgins = "Analysis/Warehouses"
inDestinations = "Analysis/Stores"
outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
#Create a new OD Cost matrix layer. We wish to find all stores within a 10
#minute cutoff. Apart from finding the drive time to the stores, we also
#want to find the total distance. So we will accumulate the "Meters"
#impedance attribute.
outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
impedanceAttribute, 10, "",
accumulateAttributeName)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
outNALayer = outNALayer.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
originsLayerName = subLayerNames["Origins"]
destinationsLayerName = subLayerNames["Destinations"]
#Load the warehouse locations as origins using a default field mappings and
#a search tolerance of 1000 Meters.
arcpy.na.AddLocations(outNALayer, originsLayerName, inOrgins, "",
searchTolerance)
#Load the store locations as destinations and map the NOM field from stores
#features as Name property using field mappings
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, destinationsLayerName)
fieldMappings["Name"].mappedFieldName = "NOM"
arcpy.na.AddLocations(outNALayer, destinationsLayerName, inDestinations,
fieldMappings, searchTolerance)
#Solve the OD cost matrix layer
arcpy.na.Solve(outNALayer)
#Save the solved OD cost matrix layer as a layer file on disk with relative
#paths
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
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)
MakeODCostMatrixLayer – Beispiel 4 (Workflow)
Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie auf Sublayer zugegriffen, Eingabe- und Ausgabe-Layer verbunden und Feldwerte aus Eingabe-Startpunkten und -Zielen auf den Ausgabe-Linien-Layer übertragen werden.
# Name: MakeODCostMatrixLayer_Workflow2.py
# Description: Find the travel time to the closest hospital from each census
# tract and join the travel time and hospital name to the input
# tracts.
# Requirements: Network Analyst Extension
import datetime
#Import system modules
import arcpy
from arcpy import env
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/Data/SanFrancisco.gdb"
env.overwriteOutput = True
#Set inputs and outputs
inNetworkDataset = "Transportation/Streets_ND"
inOrigins = "Analysis/TractCentroids"
inDestinations = "Analysis/Hospitals"
outNALayerName = "HospitalsOD"
outTracts_withOD = "Analysis/TractCentroids_withOD"
#Define some OD cost matrix analysis settings
#Optimize based on travel time
impedanceAttribute = "TravelTime"
#Calculate the total distance, even though the analysis is optimizing time
accumulate_attrs = ["Meters"]
#Find only the closest hospital
num_hospitals_to_find = 1
#Set the time of day for the analysis to 6PM on a generic Monday.
start_time = datetime.datetime(1900, 1, 1, 18, 0, 0)
#Don't output line shapes (output Lines will still list travel times)
out_lines = "NO_LINES"
#Create a new OD cost matrix layer.
outODResultObject = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset,
outNALayerName, impedanceAttribute,
default_number_destinations_to_find=num_hospitals_to_find,
accumulate_attribute_name=accumulate_attrs,
output_path_shape=out_lines, time_of_day=start_time)
#Get the layer object from the result object. The OD layer can
#now be referenced using the layer object.
outNALayer = outODResultObject.getOutput(0)
#Get the names of all the sublayers within the OD layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Store the layer names for later use
originsLayerName = subLayerNames["Origins"]
destinationsLayerName = subLayerNames["Destinations"]
#The input census tract data has a unique ID field that can be transferred
#to the analysis layer. Add the field, and then use field mapping to
#transfer the values.
arcpy.na.AddFieldToAnalysisLayer(outNALayer, originsLayerName,
"Tract_ID", "TEXT")
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer, originsLayerName)
fieldMappings["Tract_ID"].mappedFieldName = "ID"
#Load the census tracts as origins.
arcpy.na.AddLocations(outNALayer, originsLayerName, inOrigins,
fieldMappings, "",
exclude_restricted_elements = "EXCLUDE")
#Map the input hospital NAME field to a new Hospital_Name field in
#Destinations
arcpy.na.AddFieldToAnalysisLayer(outNALayer, destinationsLayerName,
"Hospital_Name", "TEXT")
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
destinationsLayerName)
fieldMappings["Hospital_Name"].mappedFieldName = "NAME"
#Load the hospitals as desinations.
arcpy.na.AddLocations(outNALayer, destinationsLayerName, inDestinations,
fieldMappings, "",
exclude_restricted_elements = "EXCLUDE")
#Solve the OD layer
arcpy.na.Solve(outNALayer)
#Get sublayers
#arcpy.mapping.ListLayers returns a list of layer objects containing the NA
#layer itself (item 0) and each of the sublayers. Put these in a dictionary
#with the sublayer names as the keys
subLayers = dict((lyr.datasetName, lyr) for lyr in arcpy.mapping.ListLayers(outNALayer)[1:])
OriginsSubLayer = subLayers["Origins"]
DestinationsSubLayer = subLayers["Destinations"]
LinesSubLayer = subLayers["ODLines"]
#Transfer the tract ID from the input Origins to the output Lines
arcpy.management.JoinField(LinesSubLayer, "OriginID",
OriginsSubLayer, "ObjectID", "Tract_ID")
#Transfer the hospital name from the input Destinations to the output Lines
arcpy.management.JoinField(LinesSubLayer, "DestinationID",
DestinationsSubLayer, "ObjectID", "Hospital_Name")
#Transfer fields of interest (hospital name, TravelTime cost, and other
#accumulated costs) from the output Lines to the input census tracts
#feature class using the Tract_ID field
output_impedance_fieldname = "Total_" + impedanceAttribute
fields_to_transfer = ["Hospital_Name", output_impedance_fieldname]
for field in accumulate_attrs:
fields_to_transfer.append("Total_" + field)
arcpy.management.CopyFeatures(inOrigins, outTracts_withOD)
arcpy.management.JoinField(outTracts_withOD, "ID",
LinesSubLayer, "Tract_ID", fields_to_transfer)
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)
Umgebungen
Lizenzinformationen
- Basic: Ja
- Standard: Ja
- Advanced: Ja