Actualisation de la table attributaire ouverte dans ArcMap à l'aide d'ArcPy plutôt que d'ArcObjects?

11

J'exécute l'outil Calculer le champ GP à partir de l'arcpy dans ArcMap. Lorsqu'une valeur de ligne est mise à jour, elle n'apparaît pas jusqu'à ce que j'utilise l'outil Recharger le cache (Options de tableau> Recharger le cache). Comment actualiser automatiquement la table attributaire sans utiliser ArcObjects?

J'ai essayé de mettre à jour la requête de définition comme l'a suggéré @ blah238 En utilisant python, comment "recharger le cache" une table d'attributs ouverte , mais cela n'aide pas. La réinitialisation de la source de données n'est pas une option car la classe d'entités peut se trouver dans la session d'édition et je ne veux pas perdre la connexion aux données source.

Alex Tereshenkov
la source
Utilisez-vous ArcGIS 10.1? Si oui, utilisez-vous un complément Python ou un outil de script Python pour exécuter le calcul du champ?
PolyGeo
1
Est-ce que c'est vraiment important? J'appelle l'outil Calculate Field GP à partir d'un complément Python, mais la même chose est observée lors de l'exécution de l'outil GP à partir de la fenêtre Python.
Alex Tereshenkov
1
Je pense toujours que si je vais essayer de reproduire un problème, la façon la plus probable que je le verrai est de suivre exactement (ou aussi près que possible) les mêmes étapes dans la même configuration qu'auparavant. Déjà vu.
PolyGeo

Réponses:

4

Vous semblez atteindre une limitation d'ArcPy, en l'absence d'ArcObjects.

Les limites d'ArcPy.mapping ont été décrites de manière générale ici :

Arcpy.mapping ne remplace pas ArcObjects mais plutôt une alternative pour les différents scénarios qu'il prend en charge. ArcObjects est toujours nécessaire pour un développement plus fin et la personnalisation des applications, tandis que arcpy.mapping est destiné à automatiser le contenu des documents cartographiques et des fichiers de couches existants.

Si l'autre suggestion de @ blah238 d'utiliser ArcObjects d'ArcPy n'est pas une option pour vous, il est préférable de soumettre une idée ArcGIS pour que cette fonctionnalité soit exposée à ArcPy. Si vous postez un lien vers une telle idée ArcGIS ici, je serai heureux de voter pour.

PolyGeo
la source
Merci PolyGeo, dommage que nous ne puissions pas trouver un moyen de rafraîchir la table attributaire lors du calcul des valeurs de champ en dehors de la session d'édition.
Alex Tereshenkov
1
Vous pouvez soumettre une demande d'amélioration au support technique d'ESRI. J'ai demandé la possibilité d'avoir juste un bouton, une option de menu ou une touche F pour actualiser le tableau pour afficher les modifications sans fermer ni ouvrir manuellement. On m'a dit que la table devrait se mettre à jour d'elle-même et l'affaire a été classée comme non reproductible localement. Ils sont généralement utiles. J'ai l'impression qu'ils ne sont même pas conscients des limites.
johns
Je recommande de faire les deux ci-dessus, mais ArcGIS Ideas vous permet de surveiller la popularité et les progrès de la mise en œuvre beaucoup plus facilement que le support local ici.
PolyGeo
1
@johns, savez-vous que vous n'avez pas à fermer et ouvrir la table attributaire pour la rafraîchir? La méthode actuelle consiste à cliquer sur le bouton Options de la table> Recharger le cache. Une autre chose qui fonctionne est d'exécuter l'opération Calculer le champ en mode édition, puis les valeurs dans les tables d'attributs sont mises à jour immédiatement.
Alex Tereshenkov
1
@Alex, merci pour la suggestion; cela m'a fait revenir en arrière pour tester le problème plus avant. J'ai utilisé le cache de rechargement, mais il a échoué / échoué lorsque j'ai ajouté des polygones en mode édition dans la vue de mise en page à l'aide d'un complément pour obtenir l'étendue de la mise en page. Lorsque vous êtes en vue de données et que j'utilise le même complément, le cache de rechargement fonctionne. Donc, cela implique en quelque sorte la vue de mise en page.
johns
3

Cela peut vous être utile ou non pour votre flux de travail spécifique. J'ai constaté que si vous modifiez la sélection sur votre couche, la table d'attributs est également mise à jour.

J'utilise donc souvent

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Bien sûr, si vous avez sélectionné quelque chose que vous ne voulez pas perdre de vue, ce n'est pas bon. Dans ce cas, vous pouvez sélectionner à partir de la couche où l'OID est dans la liste des OID des entités actuellement sélectionnées (essentiellement changer la sélection en ce qui est déjà sélectionné). Cela peut prendre trop de temps pour être pratique, je ne l'ai jamais essayé dans un scénario réel.

Patrick
la source
1

As-tu essayé:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

ou

arcpy.RefreshActiveView() # Refreshes the map

ou

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Je pense que l'un d'eux fonctionnera, mais je sais que parfois dans ArcMap je dois fermer manuellement la table attributaire, puis la rouvrir pour voir quelques modifications. Je ne sais pas si la fermeture et l'ouverture de la table peuvent être effectuées avec ArcPy, mais ce serait également une option.

Cody Brown
la source
Thansk, Cody, malheureusement, rien de tout cela fonctionne. Fermer et ouvrir la table attributaire manuellement fait l'affaire, mais je cherche quelque chose qui le ferait par programme. L'ouverture et la fermeture de la table attributaire ne sont pas non plus disponibles avec Python.
Alex Tereshenkov
Aucun de ces éléments n'est conçu pour actualiser la table attributaire.
Radar
1

Cela marche:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
Eddy Opperdoes
la source