Suite

Ajout de classes d'entités d'une géodatabase à une autre géodatabase pour python


J'essaie d'écrire un script python autonome qui parcourra la première GDB et ajoutera chaque classe d'entités à sa classe d'entités correspondante dans la deuxième GDB. Le code d'erreur que je reçois est :

"Erreur d'exécution : échec de l'exécution. Les paramètres ne sont pas valides. ERREUR 000338 : les entrées doivent être toutes les classes d'entités, les tables ou les rasters ; pas mélangés. Échec de l'exécution (ajout)."

Je crois que cela a à voir avec la lecture des voies vers le GDB. Il est important de noter qu'avec la deuxième GDB, la classe d'entités cible se trouve dans un jeu de classes d'entités. Ma version arc est 10.2 si cela compte.

import arcpy import os import traceback #Set up workspace outworkspace = "C:UsersjbartDesktopMarathon_LoadingSURVEY_POINTS_V10_1.gdb" workspace = "C:UsersjbartDesktopMarathon_Loading out.gdb" arcpy.env.workspace = workspace # parcourt le premier GDB featureclasses = arcpy.ListFeatureClasses() pour fc dans les classes de fonctionnalités : shp_file = fc print fc if shp_file == "BEND": arcpy.Append_management(os. path.join(workspace, "shp_file"), "C:UsersjbartDesktopMarathon_LoadingSURVEY_POINTS_V10_1.gdbPIPE_FEATUREBEND", "NO_TEST", "","") print ('Le fichier BEND a été ajouté à la base de données cible') else: print('Le fichier de forme d'erreur n'a pas été lu')'

Pour le script montré ici tel quel, je pense que la première erreur est située dans la façon dont nous avons transmis notre paramètre de jeu de données d'entrée à l'outil arcpy.Append_management(). Il semble que nous essayons d'ajouter une classe d'entités appelée "shp_file" plutôt que de passer la variable de chaîne appelée shp_file, que vous avez créé quelques lignes ci-dessus.

Pour ce problème, procédez comme suit ? Veuillez noter la suppression des guillemets sur shp_file:

if shp_file == "BEND": arcpy.Append_management(os.path.join(workspace, shp_file), "C:UsersjbartDesktopMarathon_LoadingSURVEY_POINTS_V10_1.gdbPIPE_FEATUREBEND" , "NO_TEST", "","")

Bonne chance ici - une fois cette première classe d'entités ajoutée avec succès, vous pouvez créer d'autres si conditions pour ajouter les classes d'entités restantes selon les besoins.


Copie d'une géodatabase à l'aide de l'outil Copier

L'outil Copier peut être utilisé pour faire une copie d'une géodatabase existante du même type (par exemple, pour faire une copie d'une géodatabase fichier). La structure et tout le contenu de la géodatabase seront copiés.

Vous pouvez également utiliser Copier pour copier un jeu de données individuel entre deux géodatabases de tout type. Par exemple, vous pouvez copier une classe d'entités d'une géodatabase ArcSDE vers une géodatabase personnelle.

Copie d'une géodatabase à l'aide d'espaces de travail XML de géodatabase

Vous pouvez utiliser des documents d'espace de travail XML de géodatabase pour copier une géodatabase. Cette option crée un document XML lisible du contenu de la géodatabase.

REMARQUE : le document XML de géodatabase résultant peut être extrêmement volumineux lorsque vous copiez les données ainsi que la structure. En règle générale, cette alternative n'est pas recommandée pour copier des données de géodatabase. Les alternatives pour faire une copie de géodatabase incluent l'utilisation de l'outil de copie et de l'assistant d'extraction de données dans ArcMap pour copier des sous-ensembles des informations.

Les documents d'espace de travail XML sont très utiles pour copier des schémas de géodatabase (géodatabases vides) d'un type à un autre. En savoir plus sur la copie d'un schéma à l'aide d'espaces de travail XML.

Pour plus d'informations sur la géodatabase XML, reportez-vous à ce lien pour un livre blanc sur la géodatabase XML.

Pas

    Pour copier une structure de géodatabase à l'aide d'un document d'espace de travail XML

    Si vous spécifiez le chemin et le nom en le saisissant dans la zone de texte, attribuez au fichier une extension .xml, .zip ou .z pour spécifier le type de fichier.

Si les données que vous exportez contiennent des métadonnées et que vous souhaitez les exporter, cochez la case Exporter les métadonnées.

Ce panneau répertorie tous les ensembles de données à copier.

Décochez les cases Inclure pour les classes d'entités, les tables ou les classes de relations que vous ne souhaitez pas exporter.

Si vous laissez une case cochée pour une classe d'entités dans un réseau, une topologie ou un terrain, toutes les classes d'entités participant au réseau, à la topologie ou au terrain seront copiées.

Copie d'une géodatabase à l'aide de l'assistant d'extraction de données dans ArcMap

Ne sélectionnez aucune entité si vous souhaitez copier tout le contenu de la géodatabase. Toutefois, si vous souhaitez copier un sous-ensemble des données, vous pouvez utiliser n'importe quelle méthode de sélection ArcMap pour sélectionner des entités ou des enregistrements. Par exemple, vous pouvez sélectionner des entités en faisant glisser un cadre autour d'elles ou en spécifiant une requête attributaire.

Pas

Voici les étapes pour copier le contenu d'une géodatabase à l'aide de l'assistant d'extraction de données :


Utilisation de géodatabases dans un script de géotraitement

Les géodatabases sont des bases de données relationnelles qui contiennent des informations géographiques. Les géodatabases contiennent des classes d'entités et des tables. Les classes d'entités peuvent être organisées dans un jeu de classes d'entités, elles peuvent également exister indépendamment dans la géodatabase.
Les classes d'entités stockent des entités géographiques représentées sous forme de points, de lignes ou de polygones et leurs attributs, elles peuvent également stocker des annotations et des dimensions. Toutes les classes d'entités d'un jeu de classes d'entités partagent le même système de coordonnées. Les tables peuvent contenir des attributs supplémentaires pour une classe d'entités ou des informations géographiques, telles que des adresses ou des coordonnées x,y,z.
Le modèle de géodatabase définit un modèle générique pour les informations géographiques. Ce modèle générique peut être utilisé pour définir et travailler avec une grande variété de modèles différents spécifiques à l'utilisateur ou à l'application. En définissant et en mettant en œuvre une grande variété de comportements sur un modèle géographique générique, une plate-forme robuste est fournie pour la définition d'une variété de modèles de données utilisateur.
La géodatabase prend en charge un modèle de classes d'entités topologiquement intégrées similaire au modèle de couverture. Cependant, il étend le modèle de couverture en prenant en charge les réseaux complexes, les topologies, les relations entre les classes d'entités et d'autres entités orientées objet. Les applications ESRI ArcGIS Desktop (ArcMap, ArcCatalog et ArcGlobe) fonctionnent avec des géodatabases ainsi qu'avec des couvertures et des fichiers de formes.
Découvrez comment créer et modifier des données dans une géodatabase
La mise en œuvre réussie d'un système SIG multi-utilisateurs avec ArcInfo et ArcSDE commence par une bonne conception du modèle de données et un bon réglage de la base de données. La manière dont les données sont stockées dans la base de données, les applications qui y accèdent et les configurations matérielles client/serveur sont autant de facteurs clés pour un système SIG multi-utilisateurs réussi.
Une partie essentielle d'une géodatabase performante est le réglage du système de gestion de base de données (SGBD) dans lequel elle est stockée. Ce réglage n'est pas requis pour les géodatabases personnelles, mais il est essentiel pour les géodatabases ArcSDE. Pour plus d'informations sur le réglage de votre base de données pour ArcSDE et la géodatabase, consultez le fichier PDF Guide de configuration et de réglage pour <DBMS>.
La conception d'une géodatabase est un processus critique qui nécessite une planification et une révision jusqu'à ce que vous parveniez à une conception qui réponde à vos besoins. Une fois que vous avez une conception, vous pouvez créer la géodatabase et sa structure à l'aide d'outils de géotraitement. Il existe des outils pour créer, modifier et analyser votre structure de géodatabase, tels que Créer une classe d'entités, Compresser et Ajouter un sous-type.
Notez que les géodatabases personnelles sont conçues pour un usage unique, utilisant Access comme base de données. Les géodatabases multi-utilisateurs utilisent des packages RDBMS, tels qu'Oracle, SQL Server ou IBM DB2. Les scripts de géotraitement génériques doivent être écrits pour fonctionner avec l'un ou l'autre type de géodatabase à l'aide des différentes méthodes de géoprocesseur de validation et de qualification.

Nommer les classes d'entités et les tables

Les géodatabases utilisent divers systèmes de gestion de bases de données relationnelles pour gérer les nombreuses tables qui composent une géodatabase. Toutes les tables d'une géodatabase doivent avoir un nom unique. Par conséquent, un mécanisme permettant de vérifier si un nom de table est unique est essentiel lors de la création de données dans une géodatabase. Le comportement par défaut des outils de géotraitement consiste à écraser la sortie qui existe déjà. Il existe donc un risque d'écrasement accidentel des données si le script ne garantit pas que le nouveau nom de sortie est unique.
À l'aide de la méthode ValidateTableName, un script peut déterminer si un nom spécifique est valide et unique pour un espace de travail spécifique.


En savoir plus sur la méthode ValidateTableName
La spécification de l'espace de travail en tant que paramètre permet au géoprocesseur de vérifier tous les noms de table existants et de déterminer s'il existe des restrictions de nom imposées par l'espace de travail en sortie. Si l'espace de travail de sortie est un SGBDR, il peut contenir des mots réservés qui ne peuvent pas être utilisés comme nom de table. Il peut également contenir des caractères non valides qui ne doivent pas être utilisés dans un nom de table ou de champ. ValidateTableName renverra une chaîne représentant un nom de table valide qui peut être le même que le nom d'entrée si le nom d'entrée est valide. L'exemple ci-dessous garantit que la nouvelle classe d'entités en sortie créée par l'outil Copier des entités aura un nom unique valide dans n'importe quelle géodatabase :

Validation du nom du champ

Chaque base de données peut avoir des restrictions de nommage pour les noms de champ dans une table. Les objets tels que les classes d'entités ou les classes de relations sont stockés sous forme de tables dans un SGBDR, de sorte que ces restrictions affectent plus que des tables autonomes. Ces restrictions peuvent ou non être communes à divers systèmes de base de données, les scripts doivent donc vérifier tous les nouveaux noms de champ pour s'assurer qu'un outil n'échoue pas pendant l'exécution.


En savoir plus sur la méthode ValidateFieldName
L'exemple ci-dessous garantira qu'un champ sera ajouté quel que soit le nom d'entrée, en utilisant la méthode ValidateFieldName :

Chaque fois qu'un script met à jour un jeu de données, tel qu'une classe d'entités ou une table, veillez à éviter les situations dans lesquelles le jeu de données est verrouillé. Microsoft Access verrouille toujours une base de données pour les opérations de mise à jour lors de l'accès à une table, donc si vous avez une géodatabase personnelle ouverte dans ArcCatalog, un script ne pourra pas mettre à jour le contenu de la géodatabase jusqu'à ce qu'il soit désélectionné et que le dossier soit actualisé ou ArcCatalog est fermé. Cela inclut les outils de script.
Python évalue une structure de données vide comme fausse et toute structure de données non vide comme vraie. Une valeur numérique de 0 ou une chaîne vide est également évaluée comme fausse.

Noms des tables et des champs de qualification

Les géodatabases qui résident dans un SGBDR, comme Oracle, SQL Server ou IBM DB2, utilisent des conventions de dénomination de base de données standard pour identifier les tables d'utilisateurs spécifiques. Un SGBDR peut contenir des milliers de tables provenant de nombreux utilisateurs différents. Par conséquent, les utilisateurs d'une géodatabase d'entreprise doivent comprendre comment qualifier correctement le nom d'un objet afin que la classe d'entités, la classe de relations, le jeu de classes d'entités ou la table corrects soient utilisés lors d'une opération. Si un nom non qualifié est spécifié en entrée d'un outil, le géoprocesseur le qualifie automatiquement à l'aide du nom d'utilisateur actuellement connecté, qui est spécifié en tant que propriété de l'espace de travail connecté. Si un script doit accéder aux données d'un certain nombre d'utilisateurs, il doit qualifier le nom de la table à l'aide de la méthode QualifyTableName du géoprocesseur afin que la syntaxe du nom qualifié soit correcte.


En savoir plus sur la méthode QualifyFieldName
En savoir plus sur la méthode QualifyTableName
Il nécessite le nom d'une table, le nom d'utilisateur et le chemin d'accès à une géodatabase. Les valeurs des paramètres de sortie n'ont pas besoin d'être qualifiées car la sortie d'un outil est toujours créée par l'utilisateur connecté de l'espace de travail. L'exemple ci-dessous montre comment un script qualifie les noms de table afin qu'il puisse utiliser les tables d'un certain nombre d'utilisateurs :

Les requêtes SQL peuvent contenir les noms de nombreux champs de deux ou plusieurs tables. Il n'est pas rare que le même nom de champ existe dans des tables distinctes, en particulier lorsque vous travaillez avec des clés étrangères et primaires. Les noms de champ qualifiés doivent également être utilisés lorsqu'une table contient certains noms de champ également utilisés par ArcSDE. Pour résoudre l'ambiguïté entre les noms en double, le nom du champ doit être qualifié avec le nom de la table ou de la vue. La méthode QualifyFieldName permet à un mécanisme indépendant de la base de données de créer des noms de champ complets, en utilisant la table et le nom de champ comme entrée. L'exemple ci-dessous garantit qu'un script créera toujours une instruction SQL correcte, quel que soit le type de base de données sous-jacente :

  • Les applications de bureau ArcGIS, telles qu'ArcMap et ArcCatalog, présentent toujours des noms complets de classes d'entités, de tables et de champs. Si vous n'êtes pas sûr du propriétaire d'une table ou des tables accessibles, utilisez ArcCatalog pour afficher le contenu de la géodatabase.
  • Les noms de champ, tels que Area, Entity et Len, sont utilisés par les tables système ArcSDE et nécessitent des scripts pour qualifier complètement les champs avec ces noms. Reportez-vous au Guide d'administration ArcSDE pour plus d'informations sur les noms de champ ArcSDE.

Table d'analyse et noms de champ

Les scripts doivent utiliser les méthodes ParseTableName et ParseFieldName du géoprocesseur pour diviser les noms complets d'un jeu de données ou d'une colonne d'une table en ses composants (base de données, propriétaire, table et colonne). Les scripts qui doivent être indépendants du SGBDR ne doivent pas supposer que '.' est le délimiteur utilisé pour séparer les composants d'un nom d'ensemble de données complet. Les applications ArcGIS utilisent toujours des noms complets, donc si votre script est utilisé comme source d'un outil de script, tout nom de classe d'entités, par exemple, devra être analysé si le script doit déterminer le nom de la classe d'entités sans le les noms d'utilisateur et de base de données. Dans l'exemple ci-dessous, le script vérifie la classe d'entités en entrée pour les noms d'utilisateurs spécifiques. Le script pourrait utiliser les fonctions d'analyse syntaxique de Python pour diviser le nom qualifié, mais il assumerait alors une syntaxe spécifique, qui pourrait changer si un autre type de base de données est utilisé. ParseTableName renvoie une chaîne unique avec le nom de la base de données, le nom du propriétaire et le nom de la table séparés par des virgules. ParseFieldName renvoie le nom de la table et le nom du champ, également séparés par des virgules. Un script peut alors analyser de manière fiable la chaîne renvoyée, car ces méthodes renvoient toujours la même chaîne formatée. Une chaîne en Python a un certain nombre de méthodes natives pour la manipulation. Dans cet exemple, la méthode split est utilisée pour créer une liste Python, en utilisant la virgule comme délimiteur. Les autres méthodes de chaîne incluent upper, lower, strip et count.

Une liste Python est une collection ordonnée de tout type d'objet, comme des chaînes ou des nombres. Les listes sont basées sur zéro et peuvent être utilisées pour gérer efficacement des tableaux de valeurs lorsque l'ordre du contenu de la liste est connu.
Les scripts qui sont utilisés comme source d'outils de script peuvent faire des hypothèses sur leurs valeurs d'argument d'entrée. Les chemins d'accès aux données sont toujours entièrement qualifiés par la structure de géotraitement. Les scripts qui peuvent être exécutés en dehors d'une application ArcGIS ne doivent pas faire la même hypothèse.
En savoir plus sur les outils de script


Lorsque vous dites « les colonnes sont identiques », les types de données sont-ils également identiques ?

Je pense également que vous pouvez utiliser arcpy.CopyFeatures_management pour créer la classe d'entités sans créer au préalable un modèle vide.

Le comportement par défaut de l'outil d'ajout est de "TEST" que les noms et types de champs correspondent. J'ai souvent trouvé et même enregistré des bogues où ce test échoue sur des classes d'entités identiques. Ma meilleure suggestion est de définir le schema_type sur "NO_TEST" et de fournir une chaîne vide comme mappage de champ. Si vous souhaitez spécifier le mappage de champ exact, le moyen le plus simple de le faire est d'ajouter l'outil à un nouveau modèle, de le configurer pour qu'il s'exécute comme vous le souhaitez dans le script (fournissez toutes les entrées et cibles paramètres et mappages de champs) et enregistrez le modèle. Ensuite, exportez le modèle en tant que script python et copiez la partie de mappage de champ dans votre nouveau script.


Quelle est votre meilleure pratique pour ajouter des entités d'une géodatabase locale à un service d'entités modifiable dans Portal for ArcGIS ?

L'API ArcGIS pour Python (arcgis) fonctionne parfaitement pour l'ajout d'entités dans ArcGIS Online. La capacité d'upsert n'est que du glaçage.

Remarquablement, cette fonction apparemment basique d'arcgis (API pour Python) ne fonctionne pas avec Portal for ArcGIS.

Ma solution de contournement actuelle consiste à faire référencer arcpy à une couche dans une carte locale (service d'entités de Portal) et à y ajouter des entités [d'une classe d'entités]. Cela fonctionne, mais c'est bogué et une solution gonflée.

Il doit y avoir quelque chose de mieux.

Je n'utilise pas beaucoup Portal ces jours-ci, mais j'ai un flux de travail dans lequel je souhaite ajouter un FGDB local à un service de fonctionnalités AGOL, mais avec quelques ajustements. J'ai quelques champs supplémentaires dans AGOL qui ne sont pas dans la FGDB et je dois calculer au fur et à mesure du chargement, j'ai donc écrit un script mixte ArcPy / ArcGIS API qui fait ceci:

Ouvre un curseur de recherche, parcourt

Lit un nombre configurable de tuples/fonctionnalités ArcPy dans des dicts de style API ArcGIS, en calculant les champs dérivés à la volée pour chacun

Passe l'ensemble de fonctionnalités dans edit_features' ajouter le paramètre

Répétez jusqu'à la fin de la lecture du curseur de recherche

Pas très compliqué et je ne vois pas pourquoi (contrairement à l'ajout) cela ne fonctionnerait pas avec Portal.


Paramètres

La liste des classes d'entités en entrée ou des couches d'entités qui seront converties et ajoutées au dossier de sortie.

Le dossier dans lequel les fichiers de formes seront écrits.

Sortie dérivée

Le dossier contenant les nouveaux fichiers de formes.

La liste des classes d'entités en entrée ou des couches d'entités qui seront converties et ajoutées au dossier de sortie.

Le dossier dans lequel les fichiers de formes seront écrits.

Sortie dérivée

Le dossier contenant les nouveaux fichiers de formes.

Exemple de code

Le script de fenêtre Python suivant montre comment utiliser la fonction FeatureClassToShapefile en mode immédiat.

Le script autonome suivant montre comment utiliser la fonction FeatureClassToShapefile.


Contenu

Les entités vectorielles (objets géographiques à géométrie vectorielle) sont des types de données géographiques polyvalents et fréquemment utilisés, bien adaptés à la représentation d'entités avec des limites discrètes, telles que des puits, des rues, des rivières, des états et des parcelles. Une entité est simplement un objet qui stocke sa représentation géographique, qui est généralement un point, une ligne ou un polygone, comme l'une de ses propriétés (ou champs) dans la ligne. Dans ArcGIS, les classes d'entités sont des collections homogènes d'entités avec une représentation spatiale commune et un ensemble d'attributs stockés dans une table de base de données. Par exemple, un ligne classe d'entités pour représenter les axes de route.

Généralement, les classes d'entités sont des collections thématiques de points, de lignes ou de polygones, mais il existe sept types de classes d'entités :

  • Points— Entités trop petites pour être représentées sous forme de lignes ou de polygones ainsi que d'emplacements de points (comme des observations GPS).
  • Lignes— Représenter la forme et l'emplacement d'objets géographiques, tels que les axes de rues et les cours d'eau, trop étroits pour être représentés sous forme de zones. Les lignes sont également utilisées pour représenter des entités qui ont une longueur mais pas de surface, telles que les courbes de niveau et les limites.
  • Polygones— Un ensemble d'entités surfaciques à plusieurs côtés qui représentent la forme et l'emplacement de types d'entités homogènes tels que les états, les comtés, les parcelles, les types de sols et les zones d'utilisation des terres.
  • Annotation— Mapper le texte, y compris les propriétés de rendu du texte. Par exemple, en plus de la chaîne de texte de chaque annotation, d'autres propriétés sont incluses, telles que les points de forme pour placer le texte, sa police et sa taille en points, ainsi que d'autres propriétés d'affichage. L'annotation peut également être liée à des entités et peut contenir des sous-classes.
  • Dimensions— Un type spécial d'annotation qui affiche des longueurs ou des distances spécifiques, par exemple, pour indiquer la longueur d'un côté d'un bâtiment, une parcelle de terrain ou la distance entre deux entités. Les dimensions sont largement utilisées dans les applications de conception, d'ingénierie et d'installations pour les SIG.
  • Multipoints— Caractéristiques composées de plusieurs points. Les multipoints sont souvent utilisés pour gérer des tableaux de très grandes collections de points tels que les clusters de points LIDAR qui peuvent contenir littéralement des milliards de points. L'utilisation d'une seule ligne pour une telle géométrie de point n'est pas possible. Leur regroupement en lignes multipoints permet à la géodatabase de gérer des ensembles de points massifs.
  • Multipatchs— Une géométrie 3D utilisée pour représenter la surface extérieure, ou coque, des entités qui occupent une zone ou un volume discret dans un espace tridimensionnel. Les multipatchs comprennent des anneaux et des triangles 3D plans qui sont utilisés en combinaison pour modéliser une coque en trois dimensions. Les multipatchs peuvent être utilisés pour représenter n'importe quoi, des objets simples, tels que des sphères et des cubes, ou des objets complexes, tels que des iso-surfaces et des bâtiments.

Les caractéristiques à copier.

La classe d'entités qui sera créée et dans laquelle les entités seront copiées.

Mot-clé de configuration de géodatabase à appliquer si la sortie est une géodatabase.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Les caractéristiques à copier.

La classe d'entités qui sera créée et dans laquelle les entités seront copiées.

Mot-clé de configuration de géodatabase à appliquer si la sortie est une géodatabase.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Ce paramètre a été déprécié dans ArcGIS Pro . Toute valeur que vous entrez est ignorée.

Exemple de code

Le script de fenêtre Python suivant montre comment utiliser l'outil CopyFeatures en mode immédiat.

Le script autonome suivant montre comment utiliser CopyFeatures pour copier les fichiers de formes d'un dossier dans une géodatabase fichier.


Arcpy.Exists échoue sur les couches existantes

Je rencontre un problème où la fonction `arcpy.Exists()` renvoie un `false` pour une bonne couche connue dans la fenêtre interactive python. Nous utilisons un modèle de carte pour les couches définies dans la table des matières.

En général, je fais glisser le calque de la table des matières dans la fenêtre interactive pour qu'il s'affiche comme `r'Work LayersReplacement Tree'` puisqu'il fait partie d'un groupe dans la table des matières. Si j'ajoute manuellement les données au lieu d'utiliser un modèle et de ressourcer les couches, la fonction `arcpy.Exists()` fonctionne et renvoie `true`, mais à l'occasion, elle renverra un `false`.

Lorsqu'il renvoie « false », je peux vérifier la source de la couche, accéder à l'emplacement et à la classe d'entités spécifiée et voir qu'elle est là. Je peux l'ajouter manuellement et l'exécuter aussi.

Pour une raison quelconque, il semble que l'utilisation d'un document cartographique existant comme modèle et que la ressource de la table des matières casse cela à l'occasion. Le code que j'utilise est un peu plus complexe que `arcpy.Exists()`, mais je l'ai réduit à ce problème. Mon code lève une exception indiquant qu'une couche particulière n'existe pas, c'est donc le moyen le plus simple de résoudre les problèmes.

Je suis même allé jusqu'à faire glisser plusieurs couches de la table des matières dans une liste de la fenêtre interactive et à l'itérer avec `arcpy.Exists()` jusqu'au même résultat de `false`.

Je peux définir l'espace de travail sur la géodatabase fichier que nous utilisons et l'utilisation du nom de la classe d'entités (c.

Y a-t-il un bogue ou une déconnexion quelque part lors de l'utilisation d'une carte comme modèle et de la ressourcement des données de la table des matières vers la fenêtre interactive python afin que les couches (qui s'affichent également sur le bloc de données !) s'ils ont été ajoutés manuellement ?


Modèle divisé

Lorsqu'une classe d'entités linéaires ou surfaciques est créée, par défaut, un modèle fractionné est automatiquement défini sur la classe d'entités. Le modèle de fractionnement est utilisé pour déterminer comment la géométrie de l'entité et ses attributs dans la table seront divisés lorsqu'une entité est fractionnée pendant le processus de mise à jour.

Les barres obliques dans le nom du modèle fractionné représentent une liste ordonnée d'opérations qui se produisent sur l'entité au sein de la classe d'entités qui est fractionnée. Mettre à jour/Insérer est le comportement par défaut du modèle divisé et la plupart des utilisateurs n'auront jamais besoin de le modifier. Le modèle de division Supprimer/Insérer/Insérer est approprié lorsque vous avez des exigences de modélisation spécifiques, telles que la correspondance d'un format particulier pour l'interopérabilité et la conversion de données, qui doivent identifier une division comme une suppression de la fonctionnalité d'origine.

En plus de définir le modèle de fractionnement sur une classe d'entités, vous pouvez également définir la règle de fractionnement sur une classe de relations. La stratégie de fractionnement de classe de relations est utilisée pour déterminer comment les enregistrements liés dans la table de destination sont traités lorsqu'une entité dans la classe d'entités d'origine est fractionnée pendant le processus de mise à jour. Selon le type de classe de relations, simple ou composite, il existe différents comportements de stratégie de fractionnement qui peuvent être définis, notamment les objets associés par défaut (simple) , par défaut (composite) et en double .

Voir Stratégie de division de classe de relations pour plus de détails sur la façon de définir et d'utiliser cette propriété de classe de relations.

    Propriétés de la classe d'objets : dans l'onglet Source de la boîte de dialogue Propriétés de la classe d'objets, faites défiler jusqu'à Fractionner le modèle . Cliquer dans la cellule à côté de Split Model active un menu déroulant. Le choix d'un modèle fractionné dans la liste remplit l'outil de géotraitement Définir le modèle fractionné de classe d'entités et l'exécute en arrière-plan.

Si la classe d'entités en entrée provient d'une géodatabase d'entreprise, vous devez être le propriétaire des données pour exécuter cet outil.

Mettre à jour/Insérer

Par défaut, un modèle de fractionnement Mettre à jour/Insérer est défini sur les classes d'objets lors de leur création. Par conséquent, lorsqu'une entité de cette classe d'entités est fractionnée lors de la mise à jour, l'entité d'origine est mise à jour, devenant la plus grande entité, et la plus petite entité est insérée en tant que nouvelle ligne dans la table.

L'image ci-dessous illustre l'avant et l'après lorsqu'un seul câble, OBJECTID 2 est divisé au sein de la classe d'objets câble et où le modèle de division est défini sur la valeur par défaut, Update/Insert . Avant le fractionnement, la première ligne est sélectionnée, OBJECTID 2, et l'outil d'édition fractionné est utilisé pour fractionner cette entité sélectionnée. Après le fractionnement, notez que la première ligne, OBJECTID 2, reste et que sa géométrie et la valeur de l'attribut OBJECTID ont été mises à jour. Cela montre que OBJECTID 2 contient la plus grande entité après la division, et la plus petite entité a été insérée en tant que nouvelle ligne dans la table avec un OBJECTID de 5. Après la division, OBJECTID 2 et OBJECTID 5 ont la même longueur totale que l'original longueur de l'OBJECTID 2 avant sa division.

Supprimer/Insérer/Insérer

Une fois que le modèle de fractionnement est défini sur Supprimer/Insérer/Insérer pour une classe d'entités, lorsqu'une entité de cette classe d'entités est fractionnée lors de la mise à jour, l'opération de fractionnement entraîne la suppression de l'entité d'origine qui a été fractionnée, suivie des deux parties du l'entité fractionnée est insérée en tant que nouvelles entités avec deux nouvelles lignes dans le tableau.

Toute classe d'entités avec un modèle fractionné défini sur Supprimer/Insérer/Insérer ne s'ouvrira pas dans les versions antérieures à ArcGIS Pro 2.6 ou ArcGIS Enterprise 10.8.1.

L'image ci-dessous illustre l'avant et l'après lorsqu'un seul câble, OBJECTID 2 est divisé au sein de la classe d'objets câble et où le modèle de division a été défini sur Mettre à jour/Insérer . Avant le fractionnement, l'outil de géotraitement Définir le modèle de fractionnement de classe d'entités a été exécuté pour remplacer le modèle fractionné par Supprimer/Insérer/Insérer . La première ligne est sélectionnée, OBJECTID 2, et l'outil d'édition fractionné est utilisé pour fractionner cette entité sélectionnée. Après le fractionnement, notez que la première ligne, OBJECTID 2, a été supprimée et que deux nouvelles lignes, OBJECTID 6 et OBJECTID 7, ont été insérées. Après le fractionnement, les deux nouvelles entités qui ont été insérées ont la même longueur totale que la longueur de l'entité d'origine avant le fractionnement.

Avertir:

Si le modèle fractionné est défini sur Supprimer/Insérer/Insérer sur une classe d'entités qui a été enregistrée comme versionnée et que la même entité est fractionnée de deux manières dans deux versions, par exemple, la version par défaut et la version enfant, aucun conflit ne s'affichera car l'entité d'origine a été supprimée et deux nouvelles entités sont insérées. Par conséquent, la version enfant finira par contenir toutes les variantes de la fonction de fractionnement lors de la réconciliation. Si le modèle de division par défaut Mettre à jour/Insérer est utilisé, la même fonctionnalité est divisée de deux manières dans deux versions, un conflit de mise à jour/mise à jour serait généré, alertant l'utilisateur que quelque chose ne va pas avec les modifications apportées.

Propriétés de classe d'objets

Le modèle fractionné de la classe d'entités peut être affiché à partir de l'onglet Source de la boîte de dialogue Propriétés de la classe d'entités, puis faites défiler jusqu'à Fractionner le modèle .


Voir la vidéo: Création dun fichier géodatabase dans arcmap. Creating a file geodatabases in arcmap (Octobre 2021).