Suite

L'autorisation Bing interrompt le script arcpy

L'autorisation Bing interrompt le script arcpy


J'ai créé ce joyeux petit script arcpy pour résoudre certains problèmes de source de données :

print "Bonjour, je vais corriger les sections de chemin de fichier de recherche et de remplacement en votre nom. 
Donnez-moi un instant pour simplement compter le nombre de MXD que je vais regarder pour vous aujourd'hui… " import os import arcpy mxdfiles = [os.path .join(d, x) pour d, dirs, files in os.walk(r"PATH") pour x in files if x.endswith(".mxd")] print "
Ok, je vais travailler sur " +str(len(mxdfiles))+" MXDs. 
Démarrer ce processus maintenant… " pour l'élément dans mxdfiles : print "
Working on : "+item mxd = arcpy.mapping.MapDocument(item) mxd.findAndReplaceWorkspacePaths(r"PATH OLD1", r"CHEMIN NOUVEAU") mxd.findAndReplaceWorkspacePaths(r"CHEMIN ANCIEN2", r"CHEMIN NOUVEAU") mxd.findAndReplaceWorkspacePaths(r"CHEMIN ANCIEN3", r"CHEMIN NOUVEAU") mxd.findAndReplaceWorkspacePaths(r"CHEMIN OLD4" , r"CHEMIN NOUVEAU") mxd.findAndReplaceWorkspacePaths(r"CHEMIN OLD5", r"CHEMIN NOUVEAU2") mxd.save() del mxd print "Terminé "+str(mxdfiles.index(item)+1)+" mappe donc loin." print "
Traitement terminé !"

Malheureusement, cependant, lorsqu'il rencontre un MXD avec une couche d'images Bing, une boîte d'autorisation Bing apparaît sur laquelle vous devez cliquer sur "OK" (appuyer sur Entrée fonctionne également). C'est parce que mon entreprise n'a plus de licence pour utiliser Bing/Microsoft Virtual Earth, donc cette petite boîte apparaît à chaque fois qu'un MXD est ouvert manuellement, ou, semble-t-il, lorsqu'il est invoqué par mon script. Cela signifie que je dois soit :

  1. Trouvez un moyen de cliquer sur ce bouton par programmation ou de l'ignorer.
  2. Laissez une tasse de café sur ma touche Entrée pendant la nuit.
  3. Supprimez les couches Bing (ou Microsoft Virtual Earth*) par programmation.

J'ai cherché en vain sur l'option 1. Avant d'opter pour l'option 2, j'ai essayé l'option 3. Comme test, j'ai utilisé le script suivant (car celui-ci n'a pas fonctionné) pour essayer de supprimer les couches Microsoft Virtual Earth* (leur groupe est Microsoft Virtual Earth, à l'intérieur de celui-ci, il y a trois couches avec le même nom plus Hybrid, Aerial ou Roads suffixe):

import arcpy mxd = arcpy.mapping.MapDocument(r"PATH") pour df dans arcpy.mapping.ListDataFrames(mxd): pour lyr dans arcpy.mapping.ListLayers(mxd, "*Microsoft*", df): arcpy.mapping .RemoveLayer(df, lyr) print "Supprimé de la trame de données "+ df.name+": " +lyr.name mxd.save() del mxd, lyr, df

Il s'est déroulé sans erreur et a supprimé les couches. La boîte de dialogue d'autorisation Bing n'apparaissait pas pendant l'exécution du script. La seule chose est que la fenêtre contextuelle apparaît lorsque j'ouvre la carte que je viens de modifier avec ce script - même si les couches ont disparu ! Est-ce que quelqu'un sait pourquoi la suppression de ces couches avec ce script n'arrête pas la fenêtre contextuelle ? J'ai testé la suppression manuelle de ces calques, l'enregistrement, la fermeture puis la réouverture du MXD. La fenêtre contextuelle n'apparaît alors pas. Il y a donc quelque chose de fait dans le processus manuel qui n'est pas fait dans mon script.

Curieusement, lorsque j'ouvre le MXD incriminé, exécutez le script de suppression de couche ci-dessus à l'aide de la fenêtre Python, puis fermez et rouvrez le MXD, la fenêtre contextuelle d'autorisation Bing n'apparaît pas. De plus, si je supprime toutes les autres couches et tables du MXD afin qu'il ne contienne que des couches Microsoft Virtual Earth, puis supprimez les couches restantes avec le script, puis ouvrez le MXD manuellement, la fenêtre contextuelle d'autorisation Bing apparaît toujours :-

Avant d'essayer d'incorporer mon script pour supprimer ces couches dans celui sur lequel je travaille pour parcourir tous les MXD et corriger leurs chemins, j'ai besoin de savoir :

  1. Qu'est-ce qui fait que la boîte de dialogue Autorisation Bing s'affiche avec mon script initial, mais pas celui de suppression de couche ?
  2. Pourquoi, après avoir exécuté le script de suppression de couche Bing/Microsoft Virtual Earth, la fenêtre contextuelle d'autorisation apparaît toujours ?

Essayez ce code :

import arcpy mxd = arcpy.mapping.MapDocument(r"PATH") pour df dans arcpy.mapping.ListDataFrames(mxd): pour lyr dans arcpy.mapping.ListLayers(mxd, "*Microsoft*", df): arcpy.Delete_management (lyr) arcpy.mapping.RemoveLayer(df, lyr) print "Supprimé de la trame de données "+ df.name+": " +lyr.name mxd.save() del mxd, lyr, df

Le support Esri m'a contacté et m'a dit de simplement enregistrer une copie plutôt que d'enregistrer le .MXD lui-même. En outre : "… lorsque des couches Bing sont ajoutées à un MXD, une propriété globale est créée et référencée. Même lorsque ces couches sont supprimées, le MXD conserve la référence. Lors de l'enregistrement du MXD en tant que copie (lorsque les calques Bing ne sont pas présents), la référence est pas copié. C'est pourquoi nous n'observons pas de fenêtres contextuelles dans la copie. " Ils n'ont donné aucune explication sur la façon de supprimer la propriété globale.

Adopter cette approche crée évidemment de nombreuses copies MXD. Vous voudrez peut-être configurer votre script pour écraser les originaux.


Voir la vidéo: Just how easy is Python programming in ArcGIS Pro? You only need 7+2 commands for this tool!