Einzugsgebiet-Analyse-Layer erstellen (Network Analyst)

Zusammenfassung

Erstellt einen Netzwerkanalyse-Layer für Einzugsgebiete und legt seine Analyse-Eigenschaften fest. Ein Einzugsgebiet-Analyse-Layer ist nützlich, wenn Sie die Erreichbarkeitsfläche von einem Einrichtungsstandort aus innerhalb eines gegebenen Grenzkostenwertes bestimmen möchten. Der Layer kann mit einem lokalen Netzwerk-Dataset oder mit einem online oder in einem Portal gehosteten Routing-Service erstellt werden.

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.

  • In ArcGIS Pro werden die Daten von Netzwerkanalyse-Layern in File-Geodatabase-Feature-Classes auf der Festplatte gespeichert. Bei der Erstellung eines Netzwerk-Analyse-Layers in einem Projekt werden die Daten des Layers in einem neuen Feature-Dataset in der Umgebung Aktueller Workspace erstellt. Bei der Erstellung eines Netzwerkanalyse-Layers in einem Python-Skript müssen Sie zunächst mit arcpy.env.workspace = "<path to file gdb>" explizit eine File-Geodatabase, in der die Layer-Daten gespeichert werden sollen, als Workspace-Umgebung festlegen. Bei der Erstellung des Layers wird dieser File-Geodatabase ein neues Feature-Dataset mit den entsprechenden Sublayer-Feature-Classes hinzugefügt.

Syntax

MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes})
ParameterErklärungDatentyp
network_data_source

Das Netzwerk-Dataset oder der Service, für das bzw. den die Netzwerkanalyse ausgeführt wird. Verwenden Sie die Portal-URL für einen Service.

Network Dataset Layer;String
layer_name
(optional)

Der Name des zu erstellenden Netzwerkanalyse-Layers.

String
travel_mode
(optional)

Der Name des Reisemodus, der in der Analyse verwendet werden soll. Der Reisemodus stellt eine Sammlung von Netzwerkeinstellungen (z. B. Reisebeschränkungen und Wendenregeln) dar, mit denen festgelegt wird, wie ein Fußgänger, Auto, Lkw oder anderes Transportmittel sich durch das Netzwerk bewegt. Reisemodi werden für die Netzwerkdatenquelle definiert.

Ein arcpy.na.TravelMode-Objekt und eine Zeichenfolge mit der gültigen JSON-Repräsentation eines Reisemodus können ebenfalls als Eingabe für den Parameter verwendet werden.

String
travel_direction
(optional)

Gibt die Fahrtrichtung zu oder von den Einrichtungen an.

  • FROM_FACILITIESDas Einzugsgebiet stellt die Fahrtrichtung weg von den Einrichtungen dar. Dies ist die Standardeinstellung.
  • TO_FACILITIESDas Einzugsgebiet stellt die Fahrtrichtung hin zu den Einrichtungen dar.

Mithilfe dieses Parameters können in einem Netzwerk mit Beschränkungen für Einbahnstraßen und unterschiedlichen Impedanzen basierend auf der Fahrtrichtung unterschiedliche Einzugsgebiete ermittelt werden. Das Einzugsgebiet für einen Pizza-Lieferservice sollte beispielsweise von der Einrichtung weg erstellt werden, wobei das Einzugsgebiet für ein Krankenhaus zur Einrichtung hin erstellt werden sollte.

String
cutoffs
[cutoffs,...]
(optional)

Die Ausdehnung des zu berechnenden Einzugsgebiets in den Einheiten des Impedanzattributs, das vom ausgewählten Reisemodus verwendet wird. Bei der Analyse der Fahrzeit bedeutet ein Grenzwert von 10 etwa, dass das resultierende Einzugsgebiet den Bereich darstellt, der innerhalb von 10 Minuten erreicht werden kann.

Es können mehrere Grenzwerte festgelegt werden, um konzentrische Einzugsgebiete zu erstellen. Wenn Sie zum Beispiel 2-, 3- und 5-Minuten-Einzugsgebiete für dieselbe Einrichtung ermitteln möchten, geben Sie als Werte für diesen Parameter 2, 3 und 5 an.

Dieser Standardgrenzwert kann pro Einrichtung überschrieben werden, indem einzelne Unterbrechungswerte im Einrichtungs-Sublayer festgelegt werden.

Double
time_of_day
(optional)

Die Abfahrtszeit von oder die Ankunftszeit bei den Einrichtungen des Einzugsgebiets-Layers. Ob der Wert als Abfahrts- oder Ankunftszeit interpretiert wird, hängt davon ab, ob die Fahrt zu der Einrichtung hin oder von der Einrichtung weg führt.

  • Er stellt die Abfahrtszeit dar, wenn travel_direction='FROM_FACILITIES'.
  • Er stellt die Ankunftszeit dar, wenn travel_direction='TO_FACILITIES'.

Der Parameter time_of_day eignet sich am Besten zum Suchen der Straßen, die anhand eines Reisemodus erreicht werden können, der ein Impedanzattribut verwendet, das sich im Laufe des Tages ändert, z. B. ein Attribut, das auf dynamischen Verkehrsbedingungen beruht. Durch das Berechnen der gleichen Analyse mit unterschiedlichen Werten für time_of_day können Sie ermitteln, wie sich die Erreichbarkeit einer Einrichtung über die Zeit verändert. Beispiel: Das Einzugsgebiet von 5 Minuten um eine Feuerwache ist in den frühen Morgenstunden relativ groß, wird während der morgendlichen Hauptverkehrszeit kleiner, nimmt dann am späteren Vormittag wieder zu usw.

Sie können ein Datum und eine Uhrzeit als 21.10.2015 10:30 angeben.

Statt ein bestimmtes Datum zu verwenden, kann ein Wochentag mithilfe der folgenden Datumsangaben angegeben werden:

  • Heute: 30.12.1899
  • Sonntag: 31.12.1899
  • Montag: 1.1.1900
  • Dienstag: 02.01.1900
  • Mittwoch: 03.01.1900
  • Donnerstag: 04.01.1900
  • Freitag: 05.01.1900
  • Samstag: 06.01.1900

Date
time_zone
(optional)

Gibt die Zeitzone des Parameters "Zeitpunkt" an.

  • LOCAL_TIME_AT_LOCATIONSDer Parameter "Zeitpunkt" verwendet Zeitzone(n), in der/denen sich die Einrichtungen oder Ereignisse befinden. Die Start- oder Endzeiten der Einzugsgebiete sind nach Zeitzonen gestaffelt. Dies ist die Standardeinstellung.Wird beispielsweise als Uhrzeit 09:00 Uhr festgelegt und die Berechnung gestartet, werden jeweils Einzugsgebiete in der Zeitzone "Eastern Time" generiert, also z. B. 9:00 Uhr Eastern Time für Einrichtungen in der Zeitzone "Eastern Time", 09:00 Uhr Central Time für Einrichtungen in der Zeitzone "Central Time" und 09:00 Uhr Mountain Time für Einrichtungen in der Zeitzone "Mountain Time". Wenn Geschäfte in einer Kette, die überall in den USA vertreten ist, um 9:00 Uhr Ortszeit öffnen, kann dieser Parameterwert ausgewählt werden, um Marktgebiete zur Öffnungszeit für alle Geschäfte in einer Berechnung zu suchen. Zunächst werden die Geschäfte in der Zeitzone "Eastern Time" geöffnet und ein Polygon generiert. Eine Stunde später werden die Geschäfte in der Zeitzone "Central Time" geöffnet usw. 9:00 Uhr ist immer die Ortszeit, in Echtzeit gibt es jedoch eine Staffelung.
  • UTCDer Parameter "Zeitpunkt" bezieht sich auf die koordinierte Weltzeit (UTC). Alle Einrichtungen werden unabhängig von der Zeitzone, in der sie sich befinden, gleichzeitig erreicht oder verlassen.Wird für Uhrzeit 02:00 Uhr festgelegt, und die Berechnung gestartet, werden jeweils Einzugsgebiete in koordinierter Weltzeit generiert, also z. B. 9:00 Uhr Eastern Standard Time für Einrichtungen in der Zeitzone "Eastern Time", 8:00 Uhr Central Standard Time für Einrichtungen in der Zeitzone "Central Time" und 7:00 Uhr Mountain Standard Time für Einrichtungen in der Zeitzone "Mountain Time".
    Hinweis:

    Im oben beschriebenen Szenario wird die Standardzeit vorausgesetzt. Während der Sommerzeit ist es in der Eastern, Central und Mountain Time jeweils eine Stunde später (d. h. 10:00 Uhr, 9:00 Uhr und 8:00 Uhr).

    Die UTC-Option kann beispielsweise hilfreich sein, wenn die Notfallversorgung in einem Gerichtsbezirk mit zwei Zeitzonen visualisiert werden soll. Die Notfallfahrzeuge werden als Einrichtungen geladen. Für "Zeitpunkt" wird in UTC die aktuelle Zeit ausgewählt. (Sie müssen die aktuelle Uhrzeit und das aktuelle Datum in UTC bestimmen, um diese Option richtig verwenden zu können.) Es werden andere Eigenschaften festgelegt und die Analyse wird berechnet. Die Fahrzeuge werden zwar durch eine Zeitzonengrenze getrennt, in den Ergebnissen werden jedoch die Bereiche angezeigt, die unter Berücksichtigung der Verkehrsbedingungen erreicht werden können. Dieser Prozess kann auch für andere Zeiten verwendet werden, nicht nur für den aktuellen Zeitpunkt.
String
output_type
(optional)

Gibt den Ausgabetyp an, der generiert werden soll. Die Einzugsgebiet-Ausgabe kann aus Linien-Features bestehen, die die erreichbaren Straßen vor der Erweiterung der Grenzwerte darstellen, oder die Polygon-Features, die diese Linien enthalten (das erreichbare Gebiet).

  • POLYGONSDie Einzugsgebiet-Ausgabe enthält nur Polygone. Dies ist die Standardeinstellung.
  • LINESDie Einzugsgebiet-Ausgabe enthält nur Linien.
  • POLYGONS_AND_LINESDie Einzugsgebiet-Ausgabe enthält Polygone und Linien.

Die Ausgabetypen Linien und Polygone und Linien sind nicht verfügbar, wenn es sich bei der Netzwerkdatenquelle um einen Service handelt, der auf einer Portal for ArcGIS-Version beruht, in der die Erstellung von Linien nicht unterstützt wird.

String
polygon_detail
(optional)

Gibt die Detaillierungsebene der Ausgabe-Polygone an.

  • STANDARDEs werden Polygone mit der Standard-Detaillierungsebene erstellt. Dies ist die Standardeinstellung.
  • GENERALIZEDEs werden generalisierte Polygone mit dem Hierarchie-Attribut des Netzwerks erstellt, um schnell Ergebnisse zu erzeugen. Diese Option ist nicht verfügbar, wenn das Netzwerk kein Hierarchie-Attribut aufweist.
  • HIGHPolygone mit einer höheren Detaillierungsebene werden für Anwendungen erstellt, in denen genaue Ergebnisse wichtig sind.

Wenn die Analyse ein Stadtgebiet mit einem gitterähnlichen Straßennetz umfasst, ist der Unterschied zwischen generalisierten und standardmäßigen Polygonen minimal. Bei Gebirgs- und Landstraßen zeigen standardmäßige und detaillierte Polygone jedoch weitaus genauere Ergebnisse als generalisierte Polygone.

String
geometry_at_overlaps
(optional)

Gibt das Verhalten der Einzugsgebiet-Ausgabe von mehreren Einrichtungen in Relation zu einander an.

  • OVERLAPFür jede Einrichtung werden eigene Polygone oder Reihen von Linien erstellt. Die Polygone oder Linien können dabei überlappen. Dies ist die Standardeinstellung.
  • DISSOLVEDie Polygone mehrerer Einrichtungen mit denselben Grenzwerten werden zu einem einzigen Polygon verbunden. Diese Option gilt nicht für die Linienausgabe.
  • SPLITEin Gebiet wird der nächstgelegenen Einrichtung zugewiesen, sodass Polygone oder Linien sich nicht überlappen.
String
geometry_at_cutoffs
(optional)

Gibt das Verhalten der Einzugsgebiet-Ausgabe für eine einzelne Einrichtung an, wenn mehrere Grenzwerte angegeben sind. Dieser Parameter gilt nicht für die Linienausgabe.

  • RINGSJedes Polygon enthält dann nur das Gebiet zwischen aufeinanderfolgenden Grenzwerten. Es enthält nicht das Gebiet zwischen der Einrichtung und kleineren Grenzwerten. Beim Erstellen von 5- und 10-Minuten-Einzugsgebieten enthält das 5-Minuten-Einzugsgebiet-Polygon beispielsweise das Gebiet, das in 05 Minuten erreicht werden kann, während das 10-Minuten-Einzugsgebiet das Gebiet enthält, das zwischen 5 und 10 Minuten erreicht werden kann. Dies ist die Standardeinstellung.
  • DISKSJedes Polygon enthält das Gebiet, das von der Einrichtung zum Grenzwert erreicht werden kann, einschließlich des Gebiets, das mit kleineren Grenzwerten erreichbar ist. Beim Erstellen von 5- und 10-Minuten-Einzugsgebieten schließt das 10-Minuten-Einzugsgebiet-Polygon beispielsweise die Fläche des 5-Minuten-Einzugsgebiet-Polygons ein.
String
polygon_trim_distance
(optional)

Die Kürzungsentfernung des Einzugsgebiet-Polygons. Die Entfernung für "Polygon kürzen" bezieht sich auf die Entfernung zwischen dem Einzugsgebiet-Polygon und der Straße, wenn keine anderen erreichbaren Straßen in der Nähe liegen, ähnlich einer Linienpuffergröße. Dies ist nützlich, wenn die Feature-Dichte im Netzwerk gering ist und das Einzugsgebiet keine große Flächen ohne Features abdecken soll.

Dieser Parameter umfasst einen Wert und die Einheiten für die Entfernung. Der Standardwert beträgt 100 Meter.

Linear Unit
exclude_sources_from_polygon_generation
[exclude_sources_from_polygon_generation,...]
(optional)

Die Kantenquellen des Netzwerk-Datasets, die beim Generieren von Einzugsgebiet-Polygonen ausgeschlossen werden. Danach werden keine Polygone um die ausgeschlossenen Quellen generiert, selbst wenn sie bei der Analyse durchlaufen werden.

Das Ausschließen einer Netzwerkquelle aus Einzugsgebiet-Polygonen bedeutet nicht, dass diese Quellen nicht durchlaufen werden. Durch das Ausschließen von Quellen aus Einzugsgebiet-Polygonen wird nur die Polygon-Form der Einzugsgebiete beeinflusst. Um das Durchlaufen einer bestimmten Netzwerkquelle zu verhindern, müssen Sie bei der Definition des Netzwerk-Datasets eine entsprechende Beschränkung anwenden.

Dies ist nützlich, wenn Sie einige Netzwerkquellen haben, die Sie nicht in die Polygonerstellung einbinden möchten, da auf diese Weise weniger genaue Polygone erstellt werden oder diese Quellen für die Einzugsgebiet-Analyse belanglos sind. Wenn Sie beispielsweise in einem multimodalen Netzwerk mit Straßen- und U-Bahn-Strecken ein Laufzeit-Einzugsgebiet erstellen, sollten Sie die U-Bahn-Strecken aus der Polygonerstellung ausschließen. Reisende können die U-Bahn-Strecke zwar verwenden, sie können entlang einer U-Bahn-Strecke jedoch nicht auf einer Teilstrecke anhalten und ein in der Nähe gelegenes Gebäude betreten. Stattdessen müssen sie die volle Länge bis zu einer U-Bahn-Station fahren, dort die U-Bahn verlassen und dann über die Straßen zu dem Gebäude gehen. Es wäre ungenau, ein Polygon-Feature um eine U-Bahn-Strecke zu generieren.

Dieser Parameter ist in folgenden Fällen nicht verfügbar: Die Ausgabegeometrietypen enthalten keine Polygone, das Netzwerk enthält weniger als zwei Kantenquellen, oder bei der Netzwerkdatenquelle handelt es sich um einen ArcGIS Online-Service bzw. um einen Service, der auf einer Portal for ArcGIS-Version beruht, welche den Ausschluss von Quellen nicht unterstützt.

String
accumulate_attributes
[accumulate_attributes,...]
(optional)

Eine Liste mit Kostenattributen, die während der Analyse akkumuliert werden sollen. Diese akkumulierten Attribute dienen nur Referenzzwecken. Vom Solver wird bei der Berechnung der Analyse nur das Kostenattribut verwendet, das im festgelegten Reisemodus angegeben ist.

Für jedes akkumulierte Kostenattribut wird den Netzwerkanalyse-Ausgabe-Features eine Total_[Impedance]-Eigenschaft hinzugefügt.

Dieser Parameter ist nicht verfügbar, wenn der Analyse-Layer nicht zur Ausgabe von Linien konfiguriert ist, wenn es sich bei der Netzwerkdatenquelle um einen ArcGIS Online-Service handelt bzw. um einen Service handelt, der auf einer Portal for ArcGIS-Version beruht, in der eine Akkumulation nicht unterstützt wird.

String

Abgeleitete Ausgabe

NameErklärungDatentyp
out_network_analysis_layer

Der neu erstellte Netzwerkanalyse-Layer.

Network Analyst-Layer

Codebeispiel

MakeServiceAreaAnalysisLayer – Beispiel 1 (Python-Fenster)

Ausführen des Werkzeugs, wenn nur die erforderlichen Parameter verwendet werden.

network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
MakeServiceAreaAnalysisLayer – Beispiel 2 (Python-Fenster)

Führen Sie das Werkzeug unter Verwendung aller Parameter aus.

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
                                "Driving Time", "FROM_FACILITIES", [5, 10, 15],
                                "1/1/1900 9:00 AM", "UTC", "POLYGONS",
                                "STANDARD", "DISSOLVE", "RINGS", "100 meters",
                                ["Metro_Lines", "Transfer_Stations",
                                "Transfer_Street_Station"], ["Meters", 
                                "DriveTime"])
MakeServiceAreaAnalysisLayer – Beispiel 3 (Workflow)

Das folgende eigenständige Python-Skript veranschaulicht, wie Sie mit dem Werkzeug MakeServiceAreaAnalysisLayer Einzugsgebiete von 1, 2 und 3 Minuten um eine Feuerwache generieren.

# Name: MakeServiceAreaAnalysisLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
#              save the results to a layer file on disk. The service area
#              polygons can be used to visualize the areas that do not have
#              adequate coverage from the fire stations
# 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 = "FireStationCoverage"
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "FireStations")
    output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")

    #Create a new service area layer. We wish to generate the service area
    #polygons as rings, so that we can easily visualize the coverage for any
    #given location. We also want overlapping polygons so we can determine the
    #number of fire stations that cover a given location. We will specify these
    #options while creating the new service area layer.
    result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
                                    travel_mode, "FROM_FACILITIES", [1, 2, 3],
                                    polygon_detail="HIGH",
                                    geometry_at_overlaps="OVERLAP",
                                    geometry_at_cutoffs="RINGS")

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

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

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

    #Solve the service area layer
    arcpy.na.Solve(layer_object)

    #Save the solved service area 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))
MakeServiceAreaAnalysisLayer – Beispiel 4 (Workflow)

Dieses Beispiel veranschaulicht das Erstellen von Einzugsgebieten um Einrichtungen für mehrere Uhrzeiten sowie zum Übertragen von Feldern aus den Eingabe-Features in die Ausgabe-Features und Anhängen von Ausgabe-Polygonen an eine vorhandene Feature-Class.

# Name: MakeServiceAreaAnalysisLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
#               times of day to compare coverage differences due to varying
#               traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension

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

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 = "FireStationCoverage"
    out_featureclass = os.path.join(output_dir, "Output.gdb",
                                                        "FireStationCoverage")
    travel_mode = "Driving Time"
    facilities = os.path.join(input_gdb, "Analysis", "FireStations")
    times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
                    datetime.datetime(2014, 9, 25, 12, 30, 0),
                    datetime.datetime(2014, 9, 25, 17, 30, 0),
                    datetime.datetime(2014, 9, 25, 21, 0, 0)]

    #Create a new service area layer.
    result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
                                                travel_mode, "FROM_FACILITIES",
                                                [3], polygon_detail="HIGH",
                                                geometry_at_overlaps="OVERLAP")

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

    #Get the names of all the sublayers within the service area layer.
    sublayer_names = arcpy.na.GetNAClassNames(layer_object)
    #Stores the layer names that we will use later
    facilities_layer_name = sublayer_names["Facilities"]
    polygons_layer_name = sublayer_names["SAPolygons"]

    #The input data has a field for FireStationID that we want to transfer to
    #our analysis layer. Add the field, and then use field mapping to transfer
    #the values.
    arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
                                                    "FireStationID", "TEXT")
    field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
                                                    facilities_layer_name)
    field_mappings["FireStationID"].mappedFieldName = "FireStationID"

    #Load the fire stations as facilities.
    arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
                            field_mappings, "")

    # Add fields to the output Polygons sublayer for later use.
    arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
                                        "FireStationID", "TEXT")
    arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
                                        "TimeOfDay", "TEXT")

    #Get sublayers to work with later
    facilities_sublayer = layer_object.listLayers(facilities_layer_name)[0]
    polygons_sublayer = layer_object.listLayers(polygons_layer_name)[0]

    #Get the Service Area Layer's solver properties. This can be used to
    #set individual properties later without re-creating the layer.
    solver_properties = arcpy.na.GetSolverProperties(layer_object)

    #Solve the Service Area for each time of day in the time list
    for t in times_of_day:

        print("Calculating service area for time of day: ", t)

        #Use the solver properties to set the time of day for the solve
        solver_properties.timeOfDay = t

        #Solve the service area layer
        arcpy.na.Solve(layer_object)

        #Transfer the FireStationID field from the input Facilities to the
        #output Polygons
        arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
                                        facilities_sublayer, "ObjectID")
        #The joined fields are qualified by the feature class name of the joined
        #table, so determine the feature class names
        field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
        target_field_name = "%s.FireStationID" % field_qualifier_pol
        field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
        expression = "!%s.FireStationID!" % field_qualifier_fac
        arcpy.management.CalculateField(polygons_sublayer, target_field_name,
                                        expression, "PYTHON")
        arcpy.management.RemoveJoin(polygons_sublayer)

        #Populate the TimeOfDay field in the output feature class
        expression = '"' + str(t) + '"'
        arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
                                            expression, "PYTHON")

        #Append the polygons to the output feature class. If this was the first
        #solve, create the feature class.
        if not arcpy.Exists(out_featureclass):
            arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
        else:
            arcpy.management.Append(polygons_sublayer, out_featureclass)

    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))

Lizenzinformationen

  • Basic: Ja
  • Standard: Ja
  • Advanced: Ja