Outil Créer un calque à partir des entités sélectionnées: comment la liste des entités est-elle stockée?

12

Dans ArcGIS Desktop, il existe un outil appelé Créer une couche à partir des entités sélectionnées . À l'aide de cet outil, je peux convertir une sélection en couche dans ArcMap.

Je pense qu'il y a une "liste d'entités" qui est intégrée dans la couche quelque part qui isole les entités à afficher sur la carte.

J'aurais pensé que la "liste des fonctionnalités" aurait été stockée dans une whereclause dans une requête de définition en tant que liste de objectids. Par exemple: where objectid in(123,456,789,...). Cependant, ce n'est pas le cas.

Si la couche n'a pas de WHEREclause ou de requête de définition, comment la liste des entités est-elle stockée?

Wilson
la source
2
Il existe une grande différence entre l'élément de menu et l'outil de géotraitement. Ce dont vous parlez est ancien. Vous pouvez utiliser les données stockées dans fidset pour créer vos couches.
FelixIP
2
Je suis pratiquement sûr qu'aucune clause WHERE n'est stockée lorsque vous créez un calque de sélection et qu'une fois qu'il est créé, vous ne pouvez PAS trouver la sélection d'origine utilisée pour le créer. J'espère que je me suis trompé sous la forme d'une réponse, car j'avais récemment affaire à une très ancienne couche de sélection et découvrir la sélection d'origine des fonctionnalités utilisées pour la créer aurait été pratique.
Dan C
1
Fidset est la propriété du calque. Il est ; chaîne séparée pour stocker les FID de sélection.
FelixIP
Créer un calque à partir des entités sélectionnées NE crée PAS un calque DYNAMIQUE. La couche résultante n'est pas dynamique du tout. Il est basé sur un FIDset. Si vous modifiez les données source, les FID changeront et votre couche de sélection se cassera. Cela ne ressemble en rien à une couche Query, qui stocke une clause
where

Réponses:

14

Créer un calque à partir des entités sélectionnées NE crée PAS un calque DYNAMIQUE . La couche résultante n'est pas dynamique du tout. Il est basé sur un FIDset.

Si vous modifiez les données source, les FID changeront et votre couche de sélection se cassera.

Il n'y a pas de clause where dans une couche de sélection. Il est basé sur FIDset (les FID qui ont été sélectionnés lorsque vous avez utilisé «Créer une couche à partir d'entités sélectionnées»).

Veuillez noter que si vous ajoutez ou supprimez des enregistrements des données source, les FID changeront et votre couche de sélection affichera des enregistrements incorrects.

Vous confondez la couche de sélection avec une couche de requête, qui stocke une clause where et est dynamique.

MODIFIER: La liste des fonctionnalités d'une couche de sélection est stockée en mémoire. Il n'est pas recommandé d'utiliser des calques de sélection autres que pour un travail temporaire car il n'y a aucun moyen de récupérer la sélection d'origine une fois le calque de sélection rompu.

Pour trouver la liste des fonctionnalités dans une couche de sélection, vous pouvez utiliser de nombreuses méthodes différentes, dont SearchCursor, pour créer une liste d'ID.

Quelque chose comme ça:

OIDlist = []
with arcpy.da.SearchCursor(layer, 'OBJECTID') as scur:
    for row in scur:
        OIDlist.append(row[0])

Extrait du commentaire de crmackey :

Il existe également un moyen intégré de décrire pour obtenir le FIDSet. Ceci est une chaîne, mais est facile à convertir en liste:

OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
jbalk
la source
1
Il existe également un moyen intégré de décrire pour obtenir le fichier FIDSet. Ceci est une chaîne, mais est facile à convertir en liste: OIDlist = map(int, arcpy.Describe(layer).FIDSet.split(';'))
crmackey
11

La meilleure façon dont j'ai compris comment Create Layer from Selected Featuresest cette référence que j'ai rencontrée Créer une couche temporaire pour sélectionner les entités

La création d'une couche temporaire vous permet d'effectuer des opérations, telles que des sélections, sans affecter la source de données d'origine. Cette couche n'apparaîtra pas dans le contenu ArcCatalog, car elle est créée en mémoire et fait simplement référence aux données stockées sur le disque. Ces couches peuvent être utilisées comme entrées pour d'autres outils de géotraitement au sein de votre session de travail. Une fois que vous quittez l'application, les couches en mémoire seront supprimées.

L'outil Créer une couche d'entités se trouve dans le jeu d'outils Couches et vues de table, dans la boîte à outils Outils de gestion des données. Cliquez avec le bouton droit sur l'outil Créer une couche d'entités et cliquez sur Ouvrir, ou double-cliquez dessus pour ouvrir l'outil.

Le mécanisme qui peut lire dans cet espace disque serait de savoir comment accéder à "l'ensemble des résultats"

En outre, comme mentionné précédemment et Esri le couvrent Travailler avec des fonctionnalités sélectionnées ,

Dans cet exemple, la couche créée à partir d'entités sélectionnées n'est utile qu'en tant que jeu de données de travail temporaire (par exemple, pour une utilisation en entrée dans un modèle de géotraitement). La nouvelle couche établit une liste des FeatureID (FID) ou ObjectID (OID) des entités sélectionnées et deviendra invalide lorsque la source de données d'origine est mise à jour ou modifiée .

En outre, voici plus de discussion en tant que lecture générale, Utilisation de l'espace de travail en mémoire , liée à l' in_memoryespace de travail. Ceci est juste destiné à des informations supplémentaires si vous étiez intéressé.

whyzar
la source
2

Je suppose que la couche de Create Layer From Selected Featuresn'est pas basée sur une WHEREclause ou une condition logique, car le jeu de sélection peut être créé sans impliquer de logique.

Par exemple, vous pouvez ajouter / supprimer manuellement toutes les fonctionnalités du jeu de sélection à l'aide du menu principal en faisant par exemple glisser une case, qui peut provenir de l'un des précédents Select by Attributes / Location.

Je suppose que l'ensemble de sélection ( IFeatureSelection) n'est qu'un ensemble complet de résultats (contenant des copies des ID de la couche d'origine), plutôt que les règles définissant l'ensemble de résultats. D'où l'avertissement dans la documentation liée que les ID peuvent devenir invalides si les ID de la couche d'origine changent.

tinlyx
la source