MXD의 모든 레이어에 대한 데이터 소스를 변경 하시겠습니까?


25

MXD가 있습니다. SDE 데이터베이스 중 하나에서 약 30 개의 레이어에 연결됩니다. 그들이 연결하는 SDE 데이터베이스를 변경하고 싶습니다.

모든 레이어를 마우스 오른쪽 버튼으로 클릭하고 개별적으로 변경하지 않고도이 작업을 수행 할 수 있습니까?

답변:


37

ArcCatalog에서 mxd를 마우스 오른쪽 버튼으로 클릭하고 데이터 소스 설정을 클릭 한 다음 대량 변경을 클릭하십시오. 그러나이 도구는 다음을 경고합니다.

참고 :이 대화 상자는 주로 게시 할지도 문서를 준비하기위한 것입니다. 이 대화 상자를 사용하여 데이터 소스를 업데이트하면 사용자 정의 (VBA 코드, UI 컨트롤 및 사용자 정의 도구 모음), 그래프 및 테이블 창 모양 속성이 .mxd 파일에서 제거됩니다. 이를 유지하려면 대신 ArcMap에서 데이터 소스를 업데이트하십시오.

arcpy.mapping 파이썬 라이브러리를 사용할 수도 있습니다 .


이것은 10.1에서 작동하지 않는 것 같습니다. 데이터 소스는 변경되었지만 (적어도 SDE 연결의 경우) 링크는 "데이터베이스 연결"로 변경됩니다. 즉 계층이 더 이상 가리 키지 않아 링크가 끊어집니다.
Michael Todd

16

ArcGIS 10을 사용 중이고 Python 사용에 관심이있는 경우 arcpy.mapping레이어 의 메소드를 사용하여 데이터 소스 업데이트 및 수정 에 대한 도움말을 확인하십시오. 객체 .

예:

import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project_SDE1.mxd")
mxd.findAndReplaceWorkspacePaths(r"Database Connections\Connection to GISSDE1.sde", 
                                r"Database Connections\Connection to GISSDE2.sde")
mxd.saveACopy(r"C:\Project\Project_SDE2.mxd")
del mxd

계층이 모두 동일한 원본 연결 파일을 소싱하지 않거나 대상 기능 클래스 이름이 새 SDE에서 다른 경우 Layer.replaceDataSource대신 사용해야 합니다.


이것은 완벽하게 감사합니다! 추가 할 한 가지는 "Database Connections \ Connection to GISSDE1.sde"를 .gdb 위치로 대체 할 수 있다는 것입니다.
Jack Fairfield

SAME SDE에서 버전 1에서 버전 2로 데이터 소스를 전환하지 않고 어떻게 이것을 사용할 수 있습니까?
NULL.Dude

3
  1. ArcCatalog에서 데이터 소스 연결을 작성하십시오.
  2. MXD를 열고 레이어를 확장 한 후 레이어에서 빨간색 느낌표를 클릭하십시오. 데이터베이스 연결이있는 데이터 소스가 포함 된 팝업 창이 열립니다.
  3. 작성한 데이터베이스 연결을 선택하고 두 번 클릭하여 클릭 한 계층으로 이동 한 후 해당 계층을 선택하고 확인, 열기 또는 추가를 누르십시오.

그러면 MXD에 레이어가 포함 된 모든 빨간색 느낌표가 제거되고 새로 작성된 데이터 소스를 가리 킵니다. 한 번에 당신은 이것을 할 수 있습니다; 빨간색 느낌표를 클릭 할 때마다 클릭하고 데이터 소스를 클릭하고 설정할 필요가 없습니다.


매우 유용합니다. 한번만 가십시오
Inderjeet singh bhambra

3
연결이 끊어진 경우에만 작동합니다. 그렇지 않으면 다른 답변 중 하나가 더 적합합니다.
blah238

1

http://arcscripts.esri.com/details.asp?dbid=14922

링크는 다른 사이트에서 구할 수있는 GDK 도구라고하는 오래된 Arcscript에 연결되어 있습니다. 프로그램은 선택한 레이어 (원하는 레이어의 소스)를 변경할 수있는 툴바를 아크 맵으로 만듭니다. SDE 연결 또는 SDE간에 로컬 파일 지오 데이터베이스로 작동합니다. SDE 사용자 다음 점.

이것은 매우 유용하지만 arcgis 9.3에서만 가능합니다.


1
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
BradHards

수정했습니다!
jonaktiv

1

.mxd가 이미 열려 있으면 @ blah238이 수행 한 작업을 수행하지만 'CURRENT'전체 경로 대신 사용 하십시오. 검색 및 바꾸기가 전체 문자열 일 필요는 없다는 것을 잊지 마십시오.

import arcpy
mxd = arcpy.mapping.MapDocument('CURRENT')
mxd.findAndReplaceWorkspacePaths(r"scratch", 
                                r"project/draft")

그런 다음 어쨌든 .mxd 파일을 저장하고 다시 열어야합니다.


1

하나의 mxd의 경우 기본 ESRI 도구로 충분할 수 있습니다. 그러나 깨진 링크로 여러 mxd를 수정하면 악몽이 될 수 있습니다. UpdateLayerRefs 도구를 사용하여 몇 초 안에 무제한 MXD를 수정하십시오. https://github.com/jswagger/UpdateLayerRefs 입력 MXD의 이름을 목록으로 제공하십시오 [ "Name1.mxd", "Name2.mxd", "Name3.mxd "]


좋은 코드 공유 :) 어떻게 코드를 사용할 수 있는지 자세히 설명해 주시겠습니까?
gisnside

물론 : JSON 설정 파일 밖으로 1. 채우기 :
제레미 자신감

첫번째 단계, 나는 추측했다! 그러나 나는 후에 궁금합니다-귀하의 의견이 나머지 메시지에 대한 근거를 얻지 못한 것 같습니다. 대신 답을 편집해야 할 수도 있습니다 :) :)
gisnside

1
미안, 뭔가를 뽑아 냈어 .... 지금 readme 파일을 업데이트
제레미 자신감

1
맞아요. python 실행 UpdateLayerRefs.py --config "update_layer_refs.config.json"을 사용하면 모든 폴더에서 실행할 수 있습니다.
Jeremy Swagger

0

이 게시물은 오래된 것 같지만 작동하지 않습니다. 코드는 다음과 같습니다.

import arcpy, glob

#specify MXD location to change source data
mxd = arcpy.mapping.MapDocument(r"C:\\Users\\jrender\\Documents\\LandbaseEditing PreProd Pub Check.mxd")
workspaceCurrent = r"Database Connections\Connection to PP_GISLand_Landbase.sde"
workspaceTarget = r"Database Connections\Connection to PP_Publication_GISLand.sde" 

mxd.findAndReplaceWorkspacePaths(workspaceCurrent, workspaceTarget)

#save a new copy of MXD
mxd.saveACopy(r"C:\Users\jrender\Documents\LandbaseEditing PreProd Pub Check Repathed.mxd")

GIS SE에 오신 것을 환영합니다. 그렇지 않은 경우 둘러보기 를 통해이 Q & A 형식에 대해 알아보십시오. 답변은 자체 질문으로 다시 게시하는 것이 가장 좋습니다. 코드를 실행할 때받은 오류 메시지를 반드시 포함하십시오!
Andy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.