ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Aide
  • Sign Out
ArcGIS Desktop

ArcGIS Online

La plateforme cartographique de votre organisation

ArcGIS Desktop

Un SIG professionnel complet

ArcGIS Enterprise

SIG dans votre entreprise

ArcGIS for Developers

Outils de création d'applications de localisation

ArcGIS Solutions

Modèles d'applications et de cartes gratuits pour votre secteur d'activité

ArcGIS Marketplace

Téléchargez des applications et des données pour votre organisation.

  • Documentation
  • Support
Esri
  • Se connecter
user
  • Mon profil
  • Déconnexion

ArcMap

  • Accueil
  • Commencer
  • Carte
  • Analyser
  • Gérer les données
  • Outils
  • Extensions

Créer une couche de matrice de coût OD

  • Résumé
  • Utilisation
  • Syntaxe
  • Exemple de code
  • Environnements
  • Informations de licence

Résumé

Crée une couche d'analyse réseau de matrice de coût origine-destination (OD) et définit ses propriétés d'analyse. Une couche d'analyse de matrice de coût origine-destination sert à représenter une matrice de coûts partant de localisations d'origine vers un ensemble de localisations de destination.

Utilisation

  • Après avoir créé la couche d'analyse avec cet outil, vous pouvez ajouter des objets d'analyse de réseau à l'aide de l'outil Ajouter des localisations, résoudre l'analyse à l'aide de l'outil Calculer et enregistrer les résultats sur le disque à l'aide de l'outil Enregistrer dans un fichier de couche.

  • Lorsque vous utilisez cet outil dans des modèles de géotraitement, si le modèle est exécuté en tant qu'outil, la couche d'analyse de réseau en sortie doit être convertie en paramètre de modèle. Dans le cas contraire, la couche en sortie n'est pas ajoutée au contenu de la carte.

Syntaxe

MakeODCostMatrixLayer_na (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})
ParamètreExplicationType de données
in_network_dataset

Jeu d'entités réseau sur lequel l'analyse de matrice de coût OD est appliquée.

Network Dataset Layer
out_network_analysis_layer

Nom de la couche de calcul d'analyse de réseau de matrice de coût OD à créer.

String
impedance_attribute

L'attribut de coût à utiliser comme impédance dans l'analyse.

String
default_cutoff
(Facultatif)

Valeur d'impédance par défaut limitant la recherche de destinations pour une origine donnée. Si l'impédance cumulée dépasse la valeur limite, l'itinéraire est interrompu. Cette valeur peut être remplacée par la valeur limite sur les origines.

Double
default_number_destinations_to_find
(Facultatif)

Nombre de destinations par défaut à trouver pour chaque origine. Cette valeur peut être remplacée en précisant la valeur de la propriété TargetDestinationCount sur les origines.

Long
accumulate_attribute_name
[accumulate_attribute_name,...]
(Facultatif)

Liste des attributs de coût à cumuler lors de l'analyse. Ces attributs d'accumulation sont destinés à servir à titre de référence uniquement ; le solveur utilise uniquement l'attribut de coût spécifié par le paramètre de l'attribut Impédance pour calculer l'itinéraire.

Pour chaque attribut de coût accumulé, une propriété Total_[Impédance] est ajoutée aux itinéraires générés en sortie par le solveur.

String
UTurn_policy
(Facultatif)

Règle de demi-tour aux jonctions. L'autorisation des demi-tours implique que le solveur puisse faire demi-tour au niveau d'une jonction et revenir en arrière par la même rue. Dans la mesure où les jonctions représentent des intersections de rues et des voies sans issue, différents véhicules peuvent faire demi-tour à certaines jonctions mais pas à d'autres, selon que la jonction représente une intersection ou une voie sans issue. Pour en tenir compte, le paramètre de règle de demi-tour est spécifié implicitement par le nombre de tronçons connectés à la jonction, également connu sous le nom de "valence de jonction". Les valeurs acceptables pour ce paramètre sont répertoriées ci-dessous ; chacune est suivie d'une description de sa signification en termes de valence de jonction.

  • ALLOW_UTURNS —Les demi-tours sont autorisés aux jonctions comportant un nombre quelconque de tronçons connectés. Il s'agit de la valeur par défaut.
  • NO_UTURNS —Les demi-tours sont interdits à toutes les jonctions, indépendamment de la valence de jonction. Notez toutefois que les demi-tours restent autorisés aux emplacements réseau même lorsque ce paramètre est sélectionné ; en revanche, vous pouvez configurer la propriété CurbApproach des emplacements réseau individuels pour y interdire les demi-tours également.
  • ALLOW_DEAD_ENDS_ONLY —Les demi-tours sont interdits au niveau de toutes les jonctions, sauf celles ayant un seul tronçon adjacent (voie sans issue).
  • ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY —Les demi-tours sont interdits aux jonctions où deux tronçons adjacents se rencontrent, mais sont autorisés aux intersections (jonctions avec au moins trois tronçons adjacents) et aux voies sans issue (jonctions avec exactement un tronçon adjacent). Souvent, les réseaux comportent des jonctions superflues au milieu de segments de route. Cette option empêche des véhicules de faire des demi-tours à ces emplacements.

Si la définition de votre règle de demi-tour n'est pas suffisamment précise, envisagez d'ajouter un évaluateur de délai de tournant global à un attribut de coût de réseau ou de modifier ses paramètres, le cas échéant, en veillant tout particulièrement à la configuration des tournants inversés. Pensez également à définir la propriété CurbApproach de vos localisations réseau.

String
restriction_attribute_name
[restriction_attribute_name,...]
(Facultatif)

Liste des attributs de restriction à appliquer lors de l'analyse.

String
hierarchy
(Facultatif)
  • USE_HIERARCHY — Utilise l'attribut de hiérarchie pour l'analyse. L'utilisation d'une hiérarchie implique une préférence du solveur pour les tronçons d'ordre supérieur par rapport aux tronçons d'ordre inférieur. Les recherches hiérarchiques sont plus rapides et permettent de simuler la préférence d'un chauffeur de circuler sur des autoroutes au lieu de routes locales si possible, même si cela implique un trajet plus long. Cette option est valide uniquement si le jeu de données réseau en entrée comporte un attribut de hiérarchie.
  • NO_HIERARCHY —N'utilise pas l'attribut de hiérarchie pour l'analyse. Un itinéraire exact est alors obtenu pour le jeu de données réseau.

Le paramètre n'est pas utilisé si aucun attribut de hiérarchie n'est défini dans le jeu de données réseau utilisé pour effectuer l'analyse. Dans ces cas, utilisez "#" comme valeur de paramètre.

Boolean
hierarchy_settings
(Facultatif)

Héritage :

Avant la version 10, ce paramètre vous permettait de modifier les plages de hiérarchie de votre analyse afin de ne pas utiliser les plages de hiérarchie par défaut établies dans le jeu de données réseau. Ce paramètre n'est plus pris en charge dans la version 10 et doit être spécifié comme une chaîne vide. Si vous souhaitez modifier les plages de hiérarchie de votre analyse, mettez à jour les plages de hiérarchie par défaut du jeu de données réseau.

Network Analyst Hierarchy Settings
output_path_shape
(Facultatif)
  • NO_LINES —Aucune forme n'est créée pour les itinéraires en sortie. Cela s'avère utile lorsque vous utilisez un grand nombre d'origines et de destinations et que vous vous intéressez uniquement à la table de la matrice de coût OD (et non aux formes de lignes en sortie).
  • STRAIGHT_LINES —La forme d'itinéraire en sortie est une ligne droite unique entre chacune des paires origine-destination.

Indépendamment du type de forme en sortie choisi, le meilleur itinéraire est toujours déterminé par l'impédance du réseau, jamais par la distance euclidienne. Cela signifie que seules les formes d'itinéraire sont différentes, pas le parcours du réseau sous-jacent.

String
time_of_day
(Facultatif)

Indique l'heure de départ des origines.

Si vous avez choisi un attribut d'impédance basé sur la circulation, l'analyse est effectuée selon des conditions de circulation dynamiques correspondant à l'heure du jour spécifiée ici. Une date et une heure peuvent être spécifiées sous la forme 5/14/2012 10:30 AM.

Au lieu d'utiliser une date particulière, un jour de la semaine peut être spécifié à l'aide des dates suivantes :

  • Aujourd'hui - 12/30/1899
  • Dimanche - 12/31/1899
  • Lundi - 1/1/1900
  • Mardi - 1/2/1900
  • Mercredi - 1/3/1900
  • Jeudi - 1/4/1900
  • Vendredi - 1/5/1900
  • Samedi - 1/6/1900
Par exemple, pour préciser que le trajet doit commencer mardi à 17:00, spécifiez la valeur de paramètre sous la forme 1/2/1900 5:00 PM.

Date

Sortie dérivée

NomExplicationType de données
output_layer

Exemple de code

Exemple 1 d'utilisation de l'outil Créer une couche de matrice de coût OD (fenêtre Python)

Exécute l'outil uniquement avec les paramètres requis.

network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeODCostMatrixLayer(network, "DrivetimeCosts", "DriveTime")
Exemple 2 d'utilisation de l'outil Créer une couche de matrice de coût OD (fenêtre Python)

Exécutez l'outil avec tous les paramètres.

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")
Exemple 3 d'utilisation de l'outil Créer une couche de matrice de coût OD (workflow)

Le script Python autonome suivant illustre l'utilisation de l'outil MakeODCostMatrixLayer pour créer une matrice de coût origine-destination pour la livraison de marchandises à partir des entrepôts vers tous les points de vente dans un temps de trajet de 10 minutes.

# 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)
Exemple 4 d'utilisation de l'outil Créer une couche de matrice de coût OD (workflow)

Le script Python autonome ci-dessous montre comment accéder aux sous-couches, joindre des couches en entrée et en sortie et transférer les valeurs de champs à partir des origines et destinations en entrée vers la couche Lignes en sortie.

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

Environnements

  • Espace de travail courant

Informations de licence

  • ArcGIS Desktop Basic: Oui
  • ArcGIS Desktop Standard: Oui
  • ArcGIS Desktop Advanced: Oui

Rubriques connexes

  • Analyse de la matrice de coût OD
  • A propos de l'analyse de réseau avec une hiérarchie
  • Vue d'ensemble du jeu d'outils Analyse
  • Que sont les couches d'analyse de réseau ?

ArcGIS Desktop

  • Accueil
  • Documentation
  • Support

ArcGIS Platform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

A propos d'Esri

  • A propos de la société
  • Carrières
  • Blog d’Esri
  • Conférence des utilisateurs
  • Sommet des développeurs
Esri
Donnez-nous votre avis.
Copyright © 2019 Esri. | Confidentialité | Légal