Pourquoi est-il important d'utiliser des couches d'entités dans ModelBuilder?


9

J'essaie de comprendre la création d'un géotraitement avec ModelBuilder, mais je ne sais pas pourquoi il est important d'utiliser des couches d'entités au lieu de classes d'entités lors de la création d'un géotraitement avec ModelBuilder. Quelqu'un peut-il expliquer pourquoi?


Réponses:



9

Il existe plusieurs raisons pour lesquelles vous souhaitez référencer des couches d'entités dans ModelBuilder, par opposition aux classes d'entités. Tout d'abord, il est utile de comprendre les différences.

  • Les "classes d'entités" font simplement référence aux données brutes, dans leur intégralité. Un exemple simple de cela où le FC est un fichier de formes sur disque.
  • Les "couches d'entités" sont des références à une abstraction des données, où vous pouvez interagir avec une ou plusieurs des entités de l'ensemble de données brutes (par opposition à l'ensemble de données entier). Les couches sont ce avec quoi vous interagissez efficacement une fois que vous avez chargé les données dans ArcMap.

Compte tenu de ce contexte, voici quelques raisons pour lesquelles vous souhaitez utiliser l'outil "Créer une couche d'entités" comme intermédiaire entre les données brutes et d'autres outils de géotraitement.

  1. De nombreux outils GP dans ModelBuilder nécessitent l'utilisation d'une couche et n'acceptent pas de FC en entrée. Cela est particulièrement vrai si votre ou vos outils GP doivent sélectionner des données. Dans ce scénario, vous devez interagir avec la COUCHE, pas avec les données brutes. Exemple: Si vous n'aviez pas ArcMap (ou un autre programme SIG) ouvert, comment sélectionneriez-vous des entités dans le fichier de formes brut ... vous ne pouvez pas. Vous devez interagir avec la couche dans ArcMap pour effectuer cette sélection.
  2. Si vous souhaitez exécuter un modèle depuis ArcCatalog ou exporter votre modèle vers un script Python pouvant être exécuté en dehors d'ArcGIS, vous devez utiliser des "couches d'entités" afin de convertir vos données source brutes en "couches". Cela reviendrait à "ajouter des données" à votre session ArcMap.

  3. L'utilisation de couches facilite le sous-ensemble de vos données au fur et à mesure du processus ModelBuilder. Supposons que vous vouliez traiter toutes les données avec l'attribut "A" avec une méthode, mais toutes les données avec l'attribut "B" avec une autre méthode. Vous pouvez référencer vos données brutes une fois, puis diviser les données en deux "branches" en utilisant des couches d'entités et traiter chaque ensemble indépendamment, mais en affectant / mettant à jour l'ensemble de données source unique.

  4. Vous pouvez créer des couches d'entités "in_memory" qui sont de véritables "bacs" de traitement de données temporaires, et qui peuvent traiter les données beaucoup plus rapidement que l'écriture sur disque après chaque opération. Cela limite également la quantité de déchets que vous devez nettoyer une fois votre traitement terminé.

Merci beaucoup Ryan. Votre réponse est très complète et claire.
Diego Pardo

7

L'intégration de couches temporaires dans vos modèles réduit également le temps de traitement. Du point de vue du traitement, l'écriture sur la mémoire est beaucoup plus efficace que l'écriture sur le disque. De même, vous pouvez écrire des données temporaires dans l' espace de travail in_memory , qui est également plus efficace en termes de calcul.

De nombreuses opérations dans ArcGIS nécessitent des couches temporaires comme entrées. Par exemple, Sélectionner une couche par emplacement (gestion des données) est un outil très puissant et pratique qui vous permet de sélectionner des entités d'une couche qui partagent des relations spatiales avec une autre entité de sélection. Vous pouvez spécifier des relations complexes telles que "HAVE_THEIR_CENTER_IN" ou "BOUNDARY_TOUCHES", etc.

Éditer:

Par curiosité et pour élaborer sur le traitement des différences à l'aide des couches d'entités et de l'espace de travail in_memory, envisagez le test de vitesse suivant où 39 000 points sont mis en mémoire tampon sur 100 m:

import arcpy, time
from arcpy import env

# Set overwrite
arcpy.env.overwriteOutput = 1

# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'

###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

entrez la description de l'image ici


Nous pouvons voir que les méthodes 2 et 3 sont équivalentes et environ 3 fois plus rapides que la méthode 1. Cela montre la puissance de l'utilisation des couches d'entités comme étapes intermédiaires dans des workflows plus importants.


Cela semble confondre deux choses (les données en mémoire et les couches d'entités). Ils ne sont pas les mêmes. Les données écrites dans l' in_memoryespace de travail sont toujours des données (par exemple, les classes d'entités et les tables) occupent toujours (potentiellement beaucoup) d'espace. Les couches d'entités, d'autre part, sont une vue sur les données, vous permettant de sélectionner un sous-ensemble de données et de l'utiliser dans des processus ultérieurs, plutôt que de dupliquer des données juste pour en obtenir un sous-ensemble. Les couches de fonctions ne prennent presque pas d'espace du tout. J'aime les considérer comme des "pointeurs avec des métadonnées", par exemple ils pointent vers certaines données et décrivent comment les interroger / les rendre.
blah238

Juste pour ajouter à mon commentaire précédent, j'ai lu quelque part sur ce site que l' in-memoryespace de travail est essentiellement une géodatabase fichier qui se trouve en mémoire, si vous aimez y penser de cette façon.
blah238

Comme une géodatabase fichier, mais les zones de forme ne sont pas calculées lorsque in_memory - fournira un lien vers cela plus tard.
PolyGeo

Dans votre deuxième exemple mis à jour, vous créez une classe d'entités en mémoire, pas une couche d'entités.
blah238

2
Cela fait un bon moment mais voici le lien que j'ai promis il y a 6+ mois.
PolyGeo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.