디렉토리 트리를 크롤링하고 Mxd relativePaths를 true로 변경하려면 어떻게해야합니까?


9

각 프로젝트 폴더에 많은 하위 폴더가있을 수있는 많은 프로젝트 폴더가 있습니다. 이 하위 폴더에는 mxd, shapefile, 개인 gdb 및 fgdb가 포함될 수 있습니다. 많은 경우 사용자는 mxd를 저장하기 전에 "상대 경로 사용"을 확인하지 않아서 폴더가 복사 될 때 데이터 소스 링크가 끊어집니다.

디렉토리를 크롤링하고 각 mxd를 열고 relativePaths를 true로 설정 한 다음 mxd를 저장하는 독립형 arcpy 스크립트를 작성하고 싶습니다. 이 작업을 수행하는 스크립트가 있습니까?

MapDocument 객체 의 relativePaths 속성 은 읽기 전용입니다. 이것을 바꿀 다른 방법이 있습니까?


이것이 가능한지 또는 해당 워크 플로를 사용하고 있는지 확실하지 않습니다. 그러나 내가 생각할 수있는 것은 각 .mxd를 자동으로 열고 해당 원본 .mxd의 모든 데이터 소스와 정보를 상대 경로가 확인 된 새로운 빈 .mxd로 복사 한 다음 새 파일을 다시 저장하는 것입니다. 첫 번째 방법이 불가능한 경우 해결 방법으로 생각하십시오.
MLowry

나는 그것이 가능하지 않다고 생각합니다. 그러나 절대 경로와 작성자를 사용하여 모든 문서 목록을 가져 와서 엄격한 전자 메일로 스팸을 보낼 수 있습니다.
Sean

답변:


6

이것은 다음 파이썬 스크립트를 사용하여 가능합니다 ( ESRI 포럼 의 Neil Clemmons 덕분에 ). Pierssen Consulting 의 comtypes 라이브러리와 Snippets 모듈 이 필요합니다 .

from Snippets import GetLibPath, InitStandalone
from comtypes.client import GetModule, CreateObject
import os

m = GetModule(GetLibPath() + 'esriCarto.olb')
InitStandalone()
file_dir = r'C:\dir'
for filename in os.listdir(file_dir):
   fullpath = os.path.join(file_dir, filename)
   p = CreateObject(m.MapDocument, interface=m.MapDocument)
   p.Open(fullpath)
   newpath = os.path.join(file_dir,'Changed_' + filename)
   p.SaveAs(newpath,True,False)
   del p


2

10.0 에서는 불가능 하지만 .NET 응용 프로그램을 작성하는 것이 너무 많은 작업과 같이 비교적 간단한 작업 에 Python에서 ArcObjects를 사용하여 성공 했지만 필요한 기능은 arcpy / arcgisscripting 모듈에 노출되지 않았습니다. 디렉토리 트리 부분을 크롤링 하려면 os.walk 를 사용하십시오 .

ArcObjects 비트의 IMapDocument.Open()경우 MXD를 열고 (ArcMap에서 열지 않고도) 캐스트 하고 true로 IMxDocument설정 한 다음 저장에 RelativePaths사용 IMapDocument.Save()합니다.


이것이 실제로 상대 경로를 수정 하는지 확인 했습니까 ?
Jason Scheirer

나는 그것을 직접 시도하지는 않았지만이 스레드는 그것이 작동해야한다고 제안합니다 : forums.esri.com/Thread.asp?c=93&f=1154&t=260812
blah238

또한 Kirk는 이미이 작업을 수행하는 방법을 알고 있다고 확신합니다. forums.esri.com/Thread.asp?c=93&f=992&t=64946 :)
blah238

@ blah238 VBA입니다. 필요한 것은 독립형 arcpy 스크립트입니다.
Kirk Kuykendall

1
질문은 .NET이 아닌 arcpy 로이 작업을 수행하는 것과 관련이 있으며 10.0에서 arcpy로 할 수 없다는 것을 이해했습니다 (내 대답의 첫 번째 링크 참조).
blah238
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.