QGIS에서 레이어를 어떻게 복제 할 수 있습니까?


9

다른 레이어와 다른 방식으로 동일한 벡터 데이터를 표시하고 싶습니다. 1.8 이상 에서 레이어 스타일 을 복사하여 붙여 넣는 것이 매우 편리하지만 레이어 를 선택하고 마우스 오른쪽 단추를 클릭하여 직접 복사하거나 복제 할 수있는 것이 좋습니다.

파이썬 명령처럼 이것을 쉽게 할 수 있습니까?


업데이트 : @ dakcarto의 제안은 완벽하게 작동합니다. 중복 레이어를 여러 개 추가해야했기 때문에 필요한만큼 반복하도록 레이어를 조정했습니다.

for n in range(1,5): 
    iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone" + str(n), vl.providerType())

유일한 문제는 새 레이어가 activeLayer가되므로 "_clone"과 숫자를 이전 이름에 추가하고 example_clone1, example_clone1_clone2로 끝나고, unwieldy example_clone1_clone2_clone3_clone4_clone5가됩니다. 이제 원래 선택된 레이어에서 복제하는 방법을 알아야합니다.


이것은 실제로 답은 아니지만 QGIS는 프로젝트에 동일한 벡터 레이어를 두 번 추가해도 상관 없습니다.
L_Holcombe

예, 나중에 여러 개의 복제본을 추가했지만 "레이어 추가"와 매번 레이어를 선택하기 만하면됩니다. 최소 4 회의 클릭과 스크롤링으로 레이어를 20 번 복제해야하는 번거 로움이 있습니다.
Simbamangu

1
@Simbamangu 이것에 대해 다른 견해가 있습니다. 나는 GIS 위키를 겪었습니다. 나는 당신의 견해를 분명히 고맙게 생각합니다. 나는 질문 제목을 질문의 요점에 대한 지시로 생각합니다. 그것은 질문에 관한 것이기 때문에 "어떻게 ...", "왜 그런지 ..."를 소개합니다. 이것이 질문이라는 것이 분명하기 때문에 새로운 것을 추가하지 마십시오. 질문을 더 읽기 쉽게 만들 수 있지만 질문의 내용을 보려면 질문의 본문을 살펴 봐야합니다. "어떻게 ..."으로 시작하는 질문의 전체 페이지를 보는 것은 적어도 비생산적입니다.
TomazicM

1
그리고 내가 당신의 오래된 질문의 제목을 변경 한 이유는 무엇입니까? 그것은 누군가의 행동으로 인해 GIS 홈페이지에서 부딪 쳤고 질문의 "어떻게"와 "왜"부분을 제거하는 (나쁜) 습관이 있음을 인정합니다.
TomazicM

1
@Simbamangu 나는 개인적으로 "어떻게"와 "왜"가없는 질문들을 선호한다. 왜냐하면이 단어들은 내용에 아무 것도 추가하지 않기 때문이다. 제목을 좀 더 읽기 편하게 만들 수 있지만 제목이 약간 모호한 경우 문제가 발생하지 않습니다. 어쨌든 질문의 본문을 읽어야합니다. 그리고 나는 PolyGeo가 그것을하고 나서 질문을 게시 / 편집 할 때 모범 사례에 관한 메타 기사를 읽은 후 그 단어를 제거하기 시작했습니다.
TomazicM

답변:


10

이에 관한 두 가지 기능 요청이 있습니다 ( # 5899# 1483 ). 이것은 확실히 가능한 기능이며, 개발자가 기능 추가에 관심이 있다면 버전 2.0에 포함될 수 있습니다. 또는 파이썬 플러그인 개발자가 고려해 보았습니다.

# 5899 호에는 레이어 복제를위한 일부 Python 코드도 포함되어 있습니다 (개발자 Giuseppe Sucameli가 제출 함).

그 동안 벡터 레이어를 선택한 다음 QGis python 콘솔을 열고 다음을 실행하십시오.

iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone", vl.providerType())

이전 코드는 동일한 하위 레이어를 맵에 추가합니다.

그것은 이전과 같은 한 줄 파이썬 스크립트를 사용하여 작업을 수행하기는 어렵습니다,하지만 당신은 하위 계층 이름을 알고 있다면 당신은 대체 할 수 vl.source()vl.source().split("|")[0] + "|layername=my_sublayer_name"my_sublayer_name이 하위 계층의 이름입니다.

복제 코드를 실행 한 후에는 원본 레이어의 스타일을 복사 / 붙여 넣기해야합니다.


완벽하게 작동합니다. 레이어 스타일을 붙여 넣기위한 키로 'v'를 추가하면 레이어와 스타일의 복제에 몇 초 밖에 걸리지 않습니다.
Simbamangu

이 기능은 개정판 c11df1aa79에서 구현됩니다. hub.qgis.org/projects/quantum-gis/repository/revisions/…
Vladimir

2
마스터 브랜치에 대한 커밋에 대한 Python 바인딩은 다음과 같이 작동합니다. iface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()여기서 my_layer는 범례에서 활성화 된 선택된 레이어로 설정된 QgsMapLayer입니다. 그러면 actionDuplicateLayer ()가 범례의 선택된 레이어에서 작동하도록 트리거됩니다 (기본값).
dakcarto

1

최신 버전의 QGIS에는 이제 "중복 레이어"옵션이 있습니다. 복제하려는 레이어를 마우스 오른쪽 버튼으로 클릭하면 바로 아래에 새 사본이 삽입됩니다.

참고 사항 : View --> Refresh한 레이어에서 변경 한 내용을 다음 레이어로 전파하려면 적중해야 할 것 같습니다 .

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