Standorte hinzufügen (Network Analyst)
Zusammenfassung
Fügt einem Netzwerkanalyse-Layer ein Netzwerkanalyse-Objekt hinzu. Die Objekte werden bestimmten Sublayern, z. B. Stopps und Barrieren, hinzugefügt. Objekte werden als Features oder Datensätze eingegeben.
Verwendung
-
Dieses Werkzeug kann wiederholt ausgeführt werden, um Netzwerkanalyse-Objekte an den gleichen Sublayer anzufügen. Beispiel: Wenn die Stopps für einen Routen-Layer aus zwei Feature-Classes stammen, kann das Werkzeug zweimal aufgerufen werden. Verwenden Sie hierfür die Option "APPEND".
-
Wenn Sie die vorhandenen Netzwerkanalyse-Objekte vor dem Laden der neuen Objekte löschen möchten, verwenden Sie die Option "CLEAR".
-
Dieses Werkzeug wird bedeutend schneller ausgeführt, wenn die Feature-Classes, die als Netzwerkquellen im Netzwerk-Dataset verwendet werden, einen gültigen und aktuellen räumlichen Index haben.
Wenn Sie bewegliche Punkte hinzufügen, z. B. von einem Empfänger auf einem Fahrzeug erfasste GPS-Koordinaten, können Sie mit Peilungsmesswerten und einer Peilungstoleranz die Punkte im Netzwerk genauer verorten.
Syntax
Parameter | Erläuterung | Datentyp |
in_network_analysis_layer |
Der Netzwerkanalyse-Layer, dem die Netzwerkanalyse-Objekte hinzugefügt werden. | Network Analyst Layer |
sub_layer |
Der Sublayer des Netzwerkanalyse-Layers, dem die Netzwerkanalyse-Objekte hinzugefügt werden. | String |
in_table |
Die Feature-Class oder die Tabelle, die die Quelle für die neuen Netzwerkanalyse-Objekte ist. | Table View |
field_mappings |
Legt die Werte für die Eigenschaften der Netzwerkanalyse-Objekte fest. Eigenschaften können auf eine Konstante eingestellt oder einem Feld der Eingabe-Feature-Class oder -Tabelle zugeordnet werden. Zum Angeben des Parameterwerts wird ein NAClassFieldMappings-Objekt verwendet, das aus einer NAClassFieldMappings-Class abgerufen wurde. Das NAClassFieldMappings-Objekt ist eine Sammlung von NAClassFieldMap-Objekten, die Sie in die Lage versetzt, die Standardwerte festzulegen oder einen Feldnamen aus den Eingabe-Features für die Eigenschaften des Netzwerkanalyse-Objekts zuzuordnen. Wenn die Daten, die Sie laden, Netzwerkstandorte oder Standortbereiche auf Grundlage des für die Analyse verwendeten Netzwerk-Datasets enthalten, müssen Sie die Netzwerkstandortfelder aus den Eingabe-Features den Netzwerkstandorteigenschaften zuordnen. Die Angabe der Netzwerkstandortfelder in den Feldzuordnungen entspricht der Verwendung des Parameters Netzwerkstandortfelder statt Geometrie verwenden aus dem Werkzeugdialogfeld. Achtung: Wenn Sie die Feldzuordnung für einzelne Netzwerkstandorteigenschaften angeben, müssen Sie auch die Feldzuordnungen für die verbleibenden Netzwerkstandorteigenschaften angeben, um Werkzeugausführungsfehler zu vermeiden. | Network Analyst Class FieldMap |
search_tolerance | Die Suchtoleranz zur Ermittlung der Eingabe-Features im Netzwerk. Features, die außerhalb der Suchtoleranz liegen, wird kein Standort zugewiesen. Der Parameter umfasst einen Wert und die Einheiten für die Toleranz. Beim Hinzufügen von Standorten zu den Sublayern "Linien-Barrieren" oder "Polygon-Barrieren" wird der Parameter nicht verwendet. In solchen Fällen verwenden Sie "#" als Parameterwert. | Linear unit |
sort_field (optional) |
Ein Feld, in dem die Netzwerkanalyse-Objekte sortiert werden, wenn sie dem Netzwerkanalyse-Layer hinzugefügt werden. Standardmäßig ist es das Feld "ObjectID" in der Eingabe-Feature-Class oder der Tabelle. | Field |
search_criteria [[Source, SnapType],...] (optional) |
Legt fest, welche Quellen im Netzwerk-Dataset beim Ermitteln von Standorten durchsucht und welche Teile der Geometrie (auch als Fangtypen bezeichnet) verwendet werden. Der Parameterwert wird als Liste mit geschachtelten Listen angegeben. Die geschachtelte Liste besteht aus zwei Werten, die den Namen und den Fangtyp für jede Netzwerkquelle angeben. Der Fangtyp wird mit den Schlüsselwörtern "SHAPE", "MIDDLE", "END" oder "NONE" angegeben. Bei Suchen von Standorten wird beispielsweise mit dem Parameterwert [["Straßen", "SHAPE"], ["Streets_ND_Junctions", "NONE"]] angegeben, dass durch die Suche das Shape der Quelle "Straße", aber nicht der Quelle "Streets_ND_Junctions" ermittelt werden kann. Wenn Sie mehrere Fangtypen für eine einzelne Netzwerkquelle angeben möchten, verwenden Sie eine Kombination der Fangtypschlüsselwörter, die durch einen Unterstrich getrennt werden. MIDDLE_END gibt z. B. an, dass die Standorte in der Mitte oder am Ende der Netzwerkquelle gefangen werden können. Beim Hinzufügen von Linien- oder Polygonnetzwerkstandorten wird nur der Fangtyp "Shape" verwendet, auch wenn andere Fangtypen angegeben sind. | Value Table |
match_type (optional) |
Beim Hinzufügen von Standorten zu den Sublayern "Linien-Barrieren" oder "Polygon-Barrieren" wird der Parameter nicht verwendet. In solchen Fällen verwenden Sie "#" als Parameterwert. | Boolean |
append (optional) |
Gibt an, ob neue Netzwerkanalyse-Objekte an vorhandene Objekte angehängt werden sollen.
| Boolean |
snap_to_position_along_network (optional) |
Gibt an, dass Sie die Netzwerkstandorte am Netzwerk-Dataset oder mit einem gewählten Versatz vom Netzwerk-Dataset fangen möchten.
Beim Hinzufügen von Standorten zu den Sublayern "Linien-Barrieren" oder "Polygon-Barrieren" wird der Parameter nicht verwendet. In solchen Fällen verwenden Sie "#" als Parameterwert. | Boolean |
snap_offset (optional) |
Beim Fangen eines Punktes im Netzwerk kann ein Fangversatz festgelegt werden. Ein Fangversatz von null bedeutet, dass der Punkt lagegleich mit dem Netzwerk-Feature (üblicherweise eine Linie) gefangen wird. Wenn der Punkt nicht auf dem Netzwerk-Feature liegen soll, geben Sie einen Fangversatz ein. Der Versatz bezieht sich auf die ursprüngliche Punktposition; das heißt, wenn sich der ursprüngliche Punkt auf der linken Seite befindet, wird seine neue Position nach links versetzt. Wenn er sich ursprünglich auf der rechten Seite befunden hat, ist die neue Position nach rechts versetzt. Beim Hinzufügen von Standorten zu den Sublayern "Linien-Barrieren" oder "Polygon-Barrieren" wird der Parameter nicht verwendet. In solchen Fällen verwenden Sie "#" als Parameterwert. | Linear unit |
exclude_restricted_elements (optional) |
| Boolean |
search_query [[Source, Expression],...] (optional) | Gibt eine Abfrage an, um die Suche auf eine Teilmenge der Features innerhalb einer Quell-Feature-Class zu beschränken. Dies empfiehlt sich, wenn keine Features gesucht werden sollen, die für einen Netzwerkstandort ungeeignet sind. Wenn Sie zum Beispiel Schwerpunkte von Polygonen laden und diese nicht auf Ortsstraßen verorten möchten, können Sie eine Abfrage definieren, die nur nach Hauptstraßen sucht. Der Parameterwert wird als Liste mit geschachtelten Listen angegeben. Die geschachtelte Liste besteht aus zwei Werten, die den Namen und den SQL-Ausdruck für alle Netzwerkquellen angeben. Die Syntax für den SQL-Ausdruck hängt vom Typ der Netzwerk-Quell-Feature-Class ab. Wenn Sie beispielsweise Quell-Feature-Classes abfragen, die in File- oder ArcSDE-Geodatabases, Shapefiles oder SDC gespeichert sind, müssen Sie die Feldnamen in doppelte Anführungszeichen einschließen "CFCC". Wenn Sie in Personal-Geodatabases gespeicherte Quell-Feature-Classes abfragen, müssen Sie die Felder in eckige Klammern einschließen: [CFCC]. Wenn Sie keine Abfrage für eine bestimmte Quelle angeben möchten, verwenden Sie "#" als Wert für den SQL-Ausdruck oder schließen Sie den Quellennamen und den SQL-Ausdruck aus dem Parameterwert aus. Wenn Sie keine Abfrage für alle Netzwerkquellen angeben möchten, können Sie "#" als Parameterwert verwenden. So wird beispielsweise mit dem Parameterwert [["Straßen","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] ein SQL-Ausdruck für die Straßen-Quell-Feature-Class und kein Ausdruck für die Streets_ND_Junctions-Quell-Feature-Class angegeben. Beachten Sie, dass die doppelten Anführungszeichen, mit denen der Feldname CFCC eingeschlossen wird, mit umgekehrten Schrägstrichzeichen als Escape-Zeichen versehen sind, um Analysefehler beim Python-Interpreter zu vermeiden. | Value Table |
Codebeispiel
Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital","","")
Ausführen des Werkzeugs unter Verwendung aller Parameter.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital",
"Name Name #;Attr_Minutes VisitTime 0;CurbApproach # 0",
"2 Miles","FID",
[["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]],
"MATCH_TO_CLOSEST","CLEAR","SNAP","10 Feet","EXCLUDE",
[["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]])
Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie das Werkzeug "AddLocations" verwendet werden kann, um Ursprünge und Ziele in einen Start-Ziel-Kostenmatrix-Layer zu laden.
# Name: AddLocations_Workflow.py
# Description: The scenario shows how to calculate a travel time matrix between
# store features. Use the Add Locations tool to load origins and
# destinations into an OD Cost Matrix layer. Since the origins and
# destinations are the same in this case, the origins are first loaded
# from the store features using their geometry and the destinations
# are loaded from the origins using network location fields to
# speed up the load times.
# 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/SanFrancisco.gdb"
env.overwriteOutput = True
#Set local variables
inNetworkDataset = "Transportation/Streets_ND"
outNALayerName = "StoreTravelTimeMatrix"
impedanceAttribute = "TravelTime"
inFeatures = "Analysis/Stores"
searchTolerance = "500 Meters"
searchQuery = [["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]]
odOrigins = "Origins"
outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
#Create a new OD cost matrix analysis layer. For this scenario, the default
#value for all the remaining parameters statisfies the analysis requirements
outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
impedanceAttribute)
#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[odOrigins]
destinationsLayerName = subLayerNames["Destinations"]
#Get the origin layer object from within the OD cost matrix layer
#The first layer returned by ListLayers is the OD cost matrix layer itself
#which we don't want to use.
for layer in arcpy.mapping.ListLayers(outNALayer)[1:]:
if layer.datasetName == odOrigins:
originsLayer = layer
break
else:
raise Exception("Failed to get the origins layer object.")
#Load store features as origins using the geometry of store features.
#Ensure that the stores are not located on freeways by using a search query.
#The OD cost matrix layer created previously is referred using its name.
arcpy.na.AddLocations(outNALayer,originsLayerName,inFeatures,"",
searchTolerance, exclude_restricted_elements = "EXCLUDE",
search_query = searchQuery)
#Load origins as destinations using the network locations fields from
#origins. This is much faster than loading destinations from the store
#features using their geometry as their network locations have already been
#calculated while loading them origins.
#Create a field mappings object that supports network location fields from
#origins layer using the candidate fields from origins
originsLayer = arcpy.management.MakeFeatureLayer(originsLayer,
outNALayerName+originsLayerName)
candidateFields = arcpy.ListFields(originsLayer.getOutput(0))
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
destinationsLayerName, True,
candidateFields)
arcpy.na.AddLocations(outNALayer,destinationsLayerName,originsLayer,
fieldMappings,"")
#Solve the od cost matrix layer. Halt the execution if there is an
#invalid location
arcpy.na.Solve(outNALayer,"HALT")
#Save the solved na 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 occured on line %i" % tb.tb_lineno
print str(e)