Suite

Garantir le chemin relatif dans les fichiers de couche Arcgis

Garantir le chemin relatif dans les fichiers de couche Arcgis


Je recherche l'équivalent python arcgis de VBA Comment enregistrer un fichier de couche avec un chemin relatif.

J'utilise un script pour modifier les chemins dans une collection d'environ 75 fichiers de couches avant de les distribuer à des bureaux extérieurs. Le script fonctionne bien, sauf que les nouveaux chemins de fichiers de couche ne sont pas relatifs, ce qui signifie qu'ils sont généralement cassés pour les destinataires car ils utilisent rarement les mêmes lettres de lecteur, etc. que nous, ce qui va à l'encontre de l'objectif.

Les chemins suivent le modèleX:CalquesCatégorie1Groupe3, etX:dataOne.gdb, c'est-à-dire que les couches et les données sont sur le même lecteur mais pas dans la même arborescence.


J'ai trouvé une solution : a) ne pas validerreplaceDataSource(le dernier paramètre est False au lieu de True), et b) utilisezEnregistrerDansFichierCalquequi a un paramètre "relatif" au lieu desauvegarder une copie:

essayez : lyr.replaceDataSource(target_wspace, 'FILEGDB_WORKSPACE', lyr.datasetName, False) # lyr.saveACopy(fixed_fname) arcpy.SaveToLayerFile_management(lyr, fixed_fname, "RELATIVE") sauf : print arcpy.GetMessages()

Malheureusement, cela ne fonctionne pas avec les fichiers de couches de groupe, mais au moins, c'est un progrès !

Pour votre information et pour éviter toute confusion, comme la contradiction apparente m'a certainement dérouté au début, dans le document Esri Paths expliqué, il est indiqué sans équivoque que les chemins relatifs ne sont pas pris en charge dans les scripts tandis que la page de référence pour le fichier Enregistrer dans le calque dit tout aussi clairement qu'il y a un mot-clé RELATIVE.

Ce que cela signifie en pratique, c'est que oui, vous devez utiliser la notation du chemin complet dans les scripts,x:datafoo.gdbet pas… … datafoo.gdb, puis saveToLayer supprime la lettre de lecteur et les répertoires principaux lors de l'enregistrement. Ainsi, les entrées doivent toujours être des chemins complets, tandis que la sortie peut ou non l'être.

Pour autant que je sache, SaveToLayerFile est la seule commande arcpy avec un paramètre relatif. Je suppose qu'il existe un équivalent pour sauvegarder les mxd mais je ne l'ai pas encore trouvé.


Vous pouvez utiliser arcpy comme vous le faites maintenant, mais enregistrez les fichiers de couche dans le dossier temporaire du système d'exploitation, puis utilisez directement Python pour copier le fichier enregistré de l'emplacement temporaire vers le chemin relatif où il doit aller.