Suite

ArcPy : enregistrez et ouvrez mxd sans fermer ArcGIS


Avec Python Add-In Wizard, j'ai créé un bouton qui :

  1. recherche dans un répertoire spécifique le dernier dossier créé/modifié (qui est créé avec un autre outil)
  2. enregistre le mxd actuel avec un nouveau nom dans ce dossier
  3. démarre le nouveau projet

Ce que je veux réaliser, c'est que je n'ai pas besoin d'ouvrir à nouveau ArcGIS pour démarrer le nouveau mxd et au lieu de cela, ouvrez le nouveau mxd dans la session ArcGIS en cours. Est-ce que quelqu'un a une expérience avec cela et peut m'aider?

Voici mon code :

import os, arcpy class SaveNew(object): """Implémentation pour Python_Addins_addin.btn_speichernneu (Button)""" def __init__(self): self.enabled = True self.checked = False def onClick(self): #recherche du dernier dossier créé/modifié dans le répertoire répertoire = r"VMSERV2Geodata_Export" newfolder = max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime) #set MapDocument et Enregistrement et renommage dans un nouveau dossier mxd = arcpy.mapping.MapDocument("CURRENT") mxd.saveACopy(os.path.join(newfolder+"NewProject")) # ouvrir un nouveau mxd -> ici je veux ouvrir le "NewProject.mxd" dans la session ArcGIS actuelle os.startfile(os.path.join(newfolder," NewProject.mxd"))

Si vous voulez ouvrir mxd dans un nouveau processus, vous pouvez utiliser

sous-processus d'importation subprocess.Popen(["C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe", 'D:/temp/test.mxd']

pour un processus synchrone

import subprocess subprocess.Call(["C:/Program Files (x86)/ArcGIS/Desktop10.3/bin/ArcMap.exe", 'D:/temp/test.mxd']

Mais vous devez fermer le nouveau avant le premier.

Ne pas utiliser

os.system("TASKKILL /F /IM ArcMap.exe")

car il ferme toutes les fenêtres de processus ArcMap

mais tu peux utiliser

import os import signal os.kill(os.getpid(), signal.SIGTERM)

Qui créent de nouvelles fenêtres… Mais qui font le travail


Je ne pense pas que vous puissiez faire cela avec arcpy; il semble être conçu principalement pour l'automatisation des documents cartographiques plutôt que pour l'application ArcMap elle-même. En tant que tel, il n'y a pas de véritable fonctionnalité pour ouvrir et fermer des documents dans l'application active. Vous pourrez peut-être faire quelque chose comme ça si vous utilisiez plutôt ArcObjects.


Voici le code que j'utilise actuellement :

class SaveNew(object): """Implementation for Python_Addins_addin.btn_savenew (Button)""" def __init__(self): self.enabled = True self.checked = False def onClick(self): #recherche du dernier dossier créé/modifié dans le répertoire répertoire = r"VMSERV2Geodata_Export" newfolder = max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime) #set MapDocument et Enregistrer et renommer dans un nouveau dossier mxd = arcpy.mapping.MapDocument("CURRENT") mxd.saveACopy(os.path.join(newfolder+"NewProject")) newmxd = os.path.join(newfolder,"NewProject.mxd" ) # open new mxd -> ne fonctionne qu'avec Messagebox pythonaddins.MessageBox("Le fichier suivant sera bientôt ouvert : " + os.path.join(newfolder,"NewProject.mxd"),"Info",0) os.startfile (os.path.join(newfolder,"NewProject.mxd")) # fermeture de l'ancien projet os.kill(os.getpid(),signal.SIGTERM)


Voir la vidéo: ArcMap Save and Add MXD file ArcGIS Mastery (Octobre 2021).