ArcPy를 사용하여 여러 MXD에서 데이터 소스를 복구 하시겠습니까?


14

내가 겪은 모든 깨진 레이어가 있고 수동으로 재설정하는 약 50 mxd가 있습니다.

데이터가 다른 컴퓨터에서 이동되었고 폴더 구조가 변경되어 단순한 변경 프로세스가 아닙니다 (예).

"F : \ Data \ Rivers.shp"를 "C : \ Data \ Rivers.shp"로

그것은 더 같다 :

"F : \ Data \ Rivers.shp"를 C : \ Data \ Park \ Water \ Rivers.shp로

그 자체의 하위 폴더에있는 모든 종류의 데이터 (경계선, 채식 표지, 도로 등)에 대해서도 마찬가지입니다.

적어도 mxd의 대부분에서 발견되는 더 일반적인 레이어 중 일부를 복구하는 mxd 중 하나를 열 때마다 반복적으로 실행할 수있는 스크립트를 만들고 싶습니다. 그런 다음 나머지를 수동으로 복구 할 수 있습니다. 나 자신 저장 적어도 수있는 그런 식으로 시간.

나는 라인을 따라 무언가를 사용하고있다 :

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr == "Rivers": #Should this be the layner name in TOC or FC name?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

아이디어는 어떻게 든 내 mxd에있는 다른 공통 레이어에 대해 위의 여러 대체 스크립트를 추가하는 것입니다.

그러나 위의 스크립트는 Rivers 레이어를 수정조차하지 않습니다.

파일 경로가 다른 수리 할 다른 레이어를 추가하려면 어떻게해야합니까?

답변:


14

당신은 당신의 스크립트와 함께 올바른 길을 가고 있습니다. 그것은 당신이 비교하는 방법에 문제가 거짓말처럼 보이는 Layer사람, 개체 이름Layer목차 .

ListLayers 함수 를 사용할 때 반환되는 것은 Layer객체입니다. 그런 다음이를 a text string와 비교하여 동일한 지 확인할 수 없으므로 대신 이름 에 액세스해야합니다 Layer.

import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")

선택기를 더 추가하려면 if/then코드 의 일부를 확장하여 다른 레이어 이름을 찾으십시오.

for lyr in arcpy.mapping.ListLayers(mxd):
    if lyr.name.lower() == "rivers": #This should be the Layer name in the TOC?
        lyr.replaceDataSource(r"C:\Data\Park\Water", "SHAPEFILE_WORKSPACE", "Rivers")
    elif lyr.name.lower() == "streets":
        lyr.replaceDataSource(r"C:\Data\Facilities\Streets", "SHAPEFILE WORKSPACE", "Streets")

name선택기를 계속 수정하여 에서 고유 한 특정 레이어를 찾은 다음 처리 할 함수를 .mxd추가하면 replaceDataSource됩니다. lower이름을 테스트 할 때이 기능을 사용했습니다 . 이것은 ESRI의 도움말 문서에서도 사용되며, 대소 문자가 일치하지 않아 레이어 이름이 일치하지 않을 가능성이 있다는 추론이 있습니다.

다음은 Arcpy 매핑으로 데이터 소스 업데이트 및 수정 에 대한 ESRI 도움말입니다.

ArcGIS의 도움말 파일은 일반적으로 명확한 설명과 특정 요구에 맞게 간단히 복사 / 붙여 넣기 및 수정할 수 있는 많은 Python 코드 샘플을 포함하므로 매우 유용 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.