ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

ArcMap

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Erweiterungen

Layer für Vehicle Routing Problem erstellen

  • Zusammenfassung
  • Verwendung
  • Syntax
  • Codebeispiel
  • Umgebungen
  • Lizenzinformationen

Zusammenfassung

Erstellt einen Netzwerkanalyse-Layer für das Vehicle Routing Problem und legt seine Analyseeigenschaften fest. Ein Analyse-Layer für das Vehicle Routing Problem ist für die Optimierung verschiedener Routen bei einer Fahrzeugflotte hilfreich.

Hinweis:

Die Werkzeuge Layer für Vehicle Routing Problem erstellen und Vehicle Routing Problem berechnen sind ähnlich, jedoch für unterschiedliche Zwecke konzipiert. Verwenden Sie das Werkzeug Vehicle Routing Problem berechnen, wenn Sie einen Geoverarbeitungsservice einrichten. Der Prozess der Erstellung wird dadurch vereinfacht. Verwenden Sie anderenfalls das Werkzeug Layer für Vehicle Routing Problem erstellen.

Um einen VRP-Geoverarbeitungsservice mit Vehicle Routing Problem berechnen zu erstellen, müssen Sie nur ein Werkzeug einrichten und es als Service veröffentlichen. Im Gegensatz dazu müssen Sie mit Layer für Vehicle Routing Problem erstellen ein Modell erstellen, es mit verschiedenen anderen Werkzeugen ordnungsgemäß verbinden und das Modell veröffentlichen, um einen Service zu erstellen. Eine andere Möglichkeit stellen ArcGIS Online Vehicle Routing Problem Services dar. Die Services werden wie Geoverarbeitungswerkzeuge in ArcMap ausgeführt, können von anderen Anwendungen aufgerufen werden und enthalten qualitativ hochwertige Straßendaten für einen Großteil der Welt.

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.MakeVehicleRoutingProblemLayer(in_network_dataset, out_network_analysis_layer, time_impedance, {distance_impedance}, {time_units}, {distance_units}, {default_date}, {capacity_count}, {time_window_factor}, {excess_transit_factor}, {UTurn_policy}, {restriction_attribute_name}, {hierarchy}, {hierarchy_settings}, {output_path_shape})
ParameterErklärungDatentyp
in_network_dataset

Das Netzwerk-Dataset, für das die Analyse des Vehicle Routing Problem ausgeführt wird. Das Netzwerk-Dataset muss ein zeitbasiertes Kostenattribut aufweisen, da mit dem VRP-Solver die Zeit minimiert wird.

Network Dataset Layer
out_network_analysis_layer

Name des zu erstellenden Netzwerkanalyse-Layers für das Vehicle Routing Problem.

String
time_impedance

Das Zeitkostenattribut, mit dem die Routenzeit entlang der Netzwerkelemente definiert wird. Das Zeitkostenattribut ist erforderlich, da der VRP-Solver (Vehicle Routing Problem) die Zeiten minimiert.

String
distance_impedance
(optional)

Das Entfernungskostenattribut, mit dem die Länge entlang der Netzwerkelemente definiert wird. Das Entfernungskostenattribut ist optional.

String
time_units
(optional)

Die Zeiteinheiten, die von den Zeitdatenfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Diese Einstellung muss nicht mit den Einheiten des Zeitkostenattributs übereinstimmen.

  • Seconds
  • Minutes
  • Hours
  • Days
String
distance_units
(optional)

Die Entfernungseinheiten, die von den Entfernungsfeldern in den Sublayern und Tabellen des Analyse-Layers verwendet werden (Netzwerkanalyseklassen). Diese Einstellung muss nicht mit den Einheiten des optionalen Entfernungskostenattributs übereinstimmen.

  • Miles
  • Kilometers
  • Feet
  • Yards
  • Meters
  • Inches
  • Centimeters
  • Millimeters
  • Decimeters
  • NauticalMiles
String
default_date
(optional)

Das implizite Datum für Zeitfeldwerte, für die kein Datum für die Uhrzeit angegeben wurde. Wenn ein Zeitfeld für ein Auftragsobjekt, z. B. TimeWindowStart1, einen reinen Uhrzeitwert enthält, wird als Datum das Standarddatum verwendet. Wenn ein Auftrag beispielsweise den TimeWindowStart1-Wert von 9:00 Uhr aufweist und als Standarddatum der 6. März 2013 festgelegt ist, wird als vollständiger Zeitwert für das Feld der Wert "9:00 Uhr, 6. März 2013" verwendet. Das Standarddatum wirkt sich nicht auf Zeitfeldwerte aus, für die bereits ein Datum festgelegt ist.

Mithilfe der folgenden Datumsangaben kann auch ein Wochentag als Standarddatum angegeben werden.

  • Heute – 30.12.1899
  • Sonntag – 31.12.1899
  • Montag – 1.1.1900
  • Dienstag – 2.1.1900
  • Mittwoch – 3.1.1900
  • Donnerstag – 4.1.1900
  • Freitag – 5.1.1900
  • Samstag – 06.01.1900
Wenn Sie beispielsweise angeben möchten, dass das implizite Datum für Zeitfeldwerte "Dienstag" sein sollte, müssen Sie den folgenden Parameterwert angeben: 2.1.1900.

Wenn das Netzwerk-Dataset Verkehrsdaten enthält, können sich die Ergebnisse der Analyse abhängig von dem hier angegebenen Datum ändern. Im Vergleich zu einer Startzeit um 8:00 Uhr am Sonntag, wenn nicht viel Verkehr ist, dauern die Routen länger, die an einem Montag um 8:00 Uhr zur Hauptverkehrszeit durchgeführt werden. Außerdem kann sich die optimale Route abhängig von den Verkehrsbedingungen ändern.

Date
capacity_count
(optional)

Die Anzahl der Abmessungen für die zulässige Höchstlast, mit denen die jeweiligen Höchstlasten der Fahrzeuge beschrieben werden. Bei einem Lieferauftrag kann für jedes Fahrzeug eine Höchstlast oder ein Höchstvolumen gelten, das aufgrund physischer oder gesetzlicher Bedingungen auf einmal befördert werden darf. Wenn Sie die Last und das Volumen in den Aufträgen verfolgen, können Sie hier unter Verwendung dieser beiden Kapazitätswerte eine Überladung der Fahrzeuge verhindern. Die Kapazitätszahl für dieses Szenario lautet 2 (Volumen und Gewicht). Je nach Problem möchten Sie vielleicht unterschiedliche Arten von Kapazitätsmengen verfolgen. Die in die Kapazitätsfelder eingegebenen Kapazitäten ("DeliveryQuantities" und "PickupQuantities" für die Klasse "Aufträge" und "Capacities" für die Klasse "Routen") sind durch Leerzeichen getrennte numerische Zeichenfolgen, die so viele Werte enthalten können, wie in "Kapazitätszahl" festgelegt ist. Jedes Kapazitätsmaß sollte für alle Kapazitätsfeldwerte innerhalb desselben VRP-Analyse-Layers in derselben Positionsreihenfolge angezeigt werden. Die Kapazitäten selbst sind nicht benannt. Um eine versehentliche Verschiebung der Kapazitätsparameter zu vermeiden, stellen Sie sicher, dass die durch Leerzeichen getrennten Kapazitätslisten für alle Kapazitätsfeldwerte immer in derselben Reihenfolge eingegeben werden.

Long
time_window_factor
(optional)

Mit diesem Parameter können Sie festlegen, wie wichtig die Einhaltung von Zeitfenstern ist, ohne damit eine Zeitverletzung zu definieren. Eine Zeitfensterverletzung tritt auf, wenn eine Route nach dem Schließen eines Zeitfensters einen Auftrag, ein Depot oder eine Unterbrechung erreicht. Als Verletzung ist das Intervall zwischen dem Ende des Zeitfensters und der Ankunftszeit einer Route definiert.

Die VRP-Lösung kann sich je nach dem Wert, den Sie für den Parameter Gewichtung der Zeitfensterverletzung auswählen, ändern. In der folgenden Liste wird die Bedeutung der verschiedenen Werte beschrieben und es werden mögliche Auswirkungen auf die VRP-Lösung genannt:

  • High —Der Solver versucht, eine Lösung zu finden, durch die Zeitfensterverletzungen auf Kosten steigender Gesamtfahrzeiten minimiert werden. Wählen Sie diese Einstellung aus, wenn die rechtzeitige Ankunft bei Aufträgen wichtiger ist als eine Minimierung der Gesamtlösungskosten. Dies kann z. B. der Fall sein, wenn Sie einen Termin mit Kunden bei den Aufträgen vereinbart haben und eine verspätete Ankunft vermeiden möchten (eine weitere Möglichkeit ist die Verwendung von harten Zeitfenstern, bei denen keine Verletzung zulässig ist).Wenn weitere Beschränkungen eines Vehicle Routing Problem vorliegen, ist es eventuell unmöglich, alle Aufträge innerhalb ihrer Zeitfenster zu erreichen. In diesem Fall können auch mit der Einstellung "Hoch" Zeitfensterverletzungen auftreten.
  • Medium —Dies ist die Standardeinstellung. Der Solver sucht einen Kompromiss zwischen der Einhaltung von Zeitfenstern und der Senkung der Gesamtlösungskosten.
  • Low —Der Solver versucht, eine Lösung zu finden, durch die die Gesamtfahrzeit unabhängig von Zeitfenstern minimiert wird. Wählen Sie diese Einstellung aus, wenn die Einhaltung von Zeitfenstern weniger wichtig ist als die Reduzierung der Gesamtlösungskosten. Sie können ggf. diese Einstellung wählen, wenn Sie einen wachsenden Rückstand an Service-Anforderungen bewältigen müssen. Um an einem Tag mehr Aufträge durchführen zu können und den Rückstand abzuarbeiten, können Sie diese Einstellung auswählen, auch wenn den Kunden durch die Verspätungen Ihrer Fahrzeugflotte Unannehmlichkeiten entstehen.
String
excess_transit_factor
(optional)

Mit diesem Parameter können Sie festlegen, wie wichtig die Reduzierung von Fahrzeitüberschreitungen ist. Die Fahrzeitüberschreitung entspricht der Zeit, um die die direkte Fahrzeit zwischen den Auftragspaaren überschritten wird. Die Fahrzeitüberschreitung ergibt sich aus Unterbrechungen oder Fahrten zu anderen Aufträgen oder Depots, die zwischen den Auftragspaaren stattgefunden haben.

Die VRP-Lösung kann sich je nach dem Wert, den Sie für die Eigenschaft "Gewichtung der Fahrzeitüberschreitung" auswählen, ändern. In der folgenden Liste wird die Bedeutung der verschiedenen Werte beschrieben und es werden mögliche Auswirkungen auf die VRP-Lösung genannt:

  • High —Der Solver versucht, eine Lösung zu finden, durch die Fahrzeitüberschreitungen bei Auftragspaaren auf Kosten steigender Gesamtfahrzeiten minimiert werden. Diese Einstellung empfiehlt sich, wenn bei Aufträgen Personen befördert werden und Sie die Fahrzeiten der Personen verkürzen möchten. Ein typisches Beispiel sind Taxiunternehmen.
  • Medium —Dies ist die Standardeinstellung. Der Solver sucht einen Kompromiss zwischen der Reduzierung der Fahrzeitüberschreitung und der Senkung der Gesamtlösungskosten.
  • Low —Der Solver versucht, eine Lösung zu finden, durch die die Gesamtlösungskosten unabhängig von Zeitüberschreitungen minimiert werden. Diese Einstellung wird normalerweise von Kurierdiensten verwendet. Da Kurierdienste Pakete und keine Personen befördern, muss die Fahrzeit nicht berücksichtigt werden. Mit dieser Einstellung können Kuriere Auftragspaare in der ordnungsgemäßen Reihenfolge abwickeln und die Gesamtlösungskosten minimieren.
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.

  • ALLOW_UTURNS —Wenden sind an Knoten mit einer beliebigen Anzahl verbundener Kanten erlaubt. Dies ist der Standardwert.
  • NO_UTURNS —Wenden sind an allen Knoten verboten, unabhängig von der Valenz der Knoten. Beachten Sie jedoch, dass selbst bei Auswahl dieser Einstellung Wenden an Netzwerkpositionen weiterhin erlaubt sind; allerdings können Sie für die Eigenschaft CurbApproach der jeweiligen Netzwerkposition auch ein Verbot von Wenden festlegen.
  • ALLOW_DEAD_ENDS_ONLY —Wenden sind an allen Knoten verboten, außer es ist nur eine angrenzende Kante vorhanden (Sackgasse).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY —Wenden sind an Knoten verboten, an denen genau zwei angrenzende Kanten aufeinander treffen, jedoch an Kreuzungen (Knoten mit drei oder mehr angrenzenden Kanten) und in Sackgassen (Knoten mit genau einer angrenzenden Kante) erlaubt. Oftmals verfügen Netzwerke über unwesentliche Knoten in der Mitte von Straßensegmenten. Durch diese Option wird verhindert, dass Fahrzeuge an diesen Punkten wenden.

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)
  • USE_HIERARCHY — Verwendet das Hierarchie-Attribut für die Analyse. Wenn eine Hierarchie verwendet wird, werden vom Solver Kanten einer höheren Rangstufe gegenüber Kanten niedrigerer Rangstufen bevorzugt. Hierarchische Berechnungen sind schneller und können verwendet werden, um zu simulieren, dass ein Fahrer es nach Möglichkeit vorzieht, auf Autobahnen statt auf Landstraßen zu fahren, selbst wenn die Fahrstrecke dann länger ist. Diese Option ist nur dann gültig, wenn das Eingabe-Netzwerk-Dataset ein Hierarchie-Attribut aufweist.
  • NO_HIERARCHY —Das Hierarchie-Attribut wird nicht für die Analyse verwendet. Wenn keine Hierarchie verwendet wird, wird eine genaue Route für das Netzwerk-Dataset berechnet.

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)

Ältere Versionen:

Vor Version 10 konnten mit diesem Parameter die im Netzwerk-Dataset erstellten Standardhierarchiebereiche in die Hierarchiebereiche für Ihre Analyse geändert werden. In Version 10 wird dieser Parameter nicht mehr unterstützt und sollte als leere Zeichenfolge angegeben werden. Wenn Sie die Hierarchiebereiche für Ihre Analyse ändern möchten, müssen Sie die Standardhierarchiebereiche im Netzwerk-Dataset aktualisieren.

Network Analyst Hierarchy Settings
output_path_shape
(optional)
  • TRUE_LINES_WITH_MEASURES —Die Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen. Die Ausgabe umfasst zudem Routenmesswerte für die lineare Referenzierung. Die Messwerte nehmen ab dem ersten Halt zu und zeichnen die kumulierte Impedanz auf, um eine bestimmte Position zu erreichen.
  • TRUE_LINES_WITHOUT_MEASURES —Die Ausgabe-Routen haben die exakte Form der zugrunde liegenden Netzwerkquellen.
  • STRAIGHT_LINES —Das Ausgaberouten-Shape weist pro Routensequenz gerade Linien zwischen den Aufträgen und Depotstopps auf.
  • NO_LINES —Für die Ausgaberouten wird kein Shape erstellt. Es können außerdem auch keine Wegbeschreibungen generiert werden.
String

Abgeleitete Ausgabe

NameErklärungDatentyp
output_layer

Der neu erstellte Netzwerkanalyse-Layer.

Network Analyst-Layer

Codebeispiel

MakeVehicleRoutingProblemLayer – Beispiel 1 (Python-Fenster)

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.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
                                        "DeliveryRoutes","Minutes")
MakeVehicleRoutingProblemLayer – Beispiel 2 (Python-Fenster)

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

import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.MakeVehicleRoutingProblemLayer("Transportation/Streets_ND",
                                        "FridayRoutes","Minutes","Meters",
                                        "Minutes","Miles", "1/2/1900", "1",
                                        "High","Medium","ALLOW_DEAD_ENDS_ONLY",
                                        ["Oneway"],"USE_HIERARCHY","",
                                        "TRUE_LINES_WITHOUT_MEASURES")
MakeVehicleRoutingProblemLayer – Beispiel 3 (Workflow)

Mit dem folgenden eigenständigen Python-Skript wird veranschaulicht, wie das Werkzeug MakeVehicleRoutingProblemLayer verwendet werden kann, um eine Reihe von Aufträgen mit einer Fahrzeugflotte durchzuführen.

# Name: MakeVehicleRoutingProblemLayer_Workflow.py
# Description: Find the best routes for a fleet of vehicles, which is operated 
#              by a distribution company, to deliver goods from a main 
#              distribution center to a set of grocery stores.
# 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"
    outNALayer = "StoreDeliveryRoute"
    impedanceAttribute = "TravelTime"
    distanceAttribute = "Meters"
    timeUnits = "Minutes"
    distanceUnits = "Miles"
    inOrders = "Analysis/Stores"
    inDepots = "Analysis/DistributionCenter"
    inRoutes = "RoutesTable"
    orderFieldMappings = "Name Name #; ServiceTime ServiceTime #; " + \
                       "TimeWindowStart1 TimeStart1 #; " + \
                       "TimeWindowEnd1 TimeEnd1 #; MaxViolationTime1 # 0; " + \
                       "DeliveryQuantities Demand #"
    depotFieldMappings = "Name Name #; TimeWindowStart1 # 8 AM; " + \
                       "TimeWindowEnd1 # 5 PM"
    outLayerFile = "C:/data/output" + "/" + outNALayer + ".lyr"
    
    #Create a new Vehicle routing problem (VRP) layer. Since the time-based 
    #attributes such as ServiceTime on orders and CostPerUnitTime on routes is 
    #recorded in minutes, we use minutes for time_units parameter. As we are 
    #using cost per unit distance in routes, we have to specify a 
    #distance attribute. The values for CostPerUnitDistance are in miles, so we 
    #specify miles for distance units parameter.
    arcpy.MakeVehicleRoutingProblemLayer_na(inNetworkDataset,outNALayer,
                                            impedanceAttribute,distanceAttribute,
                                            timeUnits, distanceUnits, "", 1, 
                                            UTurn_policy="NO_UTURNS", 
                                            output_path_shape="STRAIGHT_LINES")
    
    #Load the store locations as orders. Using field mappings we map the Name, 
    #ServiceTime, TimeWindowStart1, TimeWindowEnd1 and DeliveryQuantities 
    #properties for Orders from the fields of store features and assign a value
    #of 0 to MaxViolationTime1 property
    arcpy.AddLocations_na(outNALayer, "Orders", inOrders, orderFieldMappings,"")
    
    #Load the depots from the distribution center features. Using field mappings
    #we map the Name properties for Depots from the fields of distribution 
    #center features and assign a value of 8 AM for TimeWindowStart1 and a value
    #of 5PM for TimeWindowEnd2 properties
    arcpy.AddLocations_na(outNALayer, "Depots", inDepots, depotFieldMappings,"")
    
    #Load the routes from a table containing information about routes
    #In this case, since the fields on the table and property names for Routes
    #are same, we will just use the default field mappings
    arcpy.AddLocations_na(outNALayer, "Routes", inRoutes, "", "")
    
    #Solve the VRP layer
    arcpy.Solve_na(outNALayer)
    
    #Save the solved VRP layer as a layer file on disk with relative paths
    arcpy.SaveToLayerFile_management(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)

Umgebungen

  • Aktueller Workspace

Lizenzinformationen

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

Verwandte Themen

  • Vehicle Routing Problem-Analyse
  • Netzwerkanalyse mit Hierarchie
  • Zeitfenster
  • Überblick über das Toolset "Analyse"
  • Was sind Netzwerkanalyse-Layer?
  • Vehicle Routing Problem berechnen

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2021 Esri. | Datenschutz | Rechtliches