인프런 커뮤니티 질문&답변

김성훈(Tramerei)님의 프로필 이미지
김성훈(Tramerei)

작성한 질문수

QGIS 파이썬 자동화 (벡터편) Ver.2

Buffer 만드는 강의에서 코드 오류인 것 같습니다.

해결된 질문

작성

·

287

1

import processing

import os

import time

start = time.time()

shpPath_two_points = 'Z:/GIS_Study/Inflearn/Section1/SHP/01_buffer/two_points_5186.shp'

shpPath_triangle = 'Z:/GIS_Study/Inflearn/Section1/SHP/01_buffer/triangle_5186.shp'

#distance

buffer_distance = 300

output_temp_buffer = 'memory_distance_practice'

bufferParams = {'INPUT':shpPath_two_points, 'DISTANCE':buffer_distance, 'OUTPUT':output_temp_buffer}

#버퍼 실행

buffer = processing.run('native:buffer', bufferParams)

#버퍼 결과 추가 및 완료 메세지

QgsProject.instance().addMapLayer(buffer['OUTPUT']) > 알려주신 코드에서 오류 발생

print('버퍼 완료:', time.time()-start)

 

*QgsProject.instance().addMapLayer(buffer['OUTPUT']) 대체 코드

# QgsVectorLayer로 변환

buffer_layer = QgsVectorLayer(buffer['OUTPUT'], 'Buffered Layer', 'ogr')

# 맵에 추가

QgsProject.instance().addMapLayer(buffer_layer)

print('버퍼 완료:', time.time()-start)

 

즉 문자열로 받아서 안된다고 하네요.. 위 코드로 대체하니 결과물이 정상적으로 나옵니다.

답변 2

1

UPWISE님의 프로필 이미지
UPWISE
지식공유자

안녕하세요. UPWISE 입니다.

최근 일주일 간 바쁜 외부 일정이 있어서, 질문 확인 및 답변이 늦어졌습니다.
빠르게 확인드리지 못한 점 양해 부탁드립니다.

말씀해주신 내용은, buffer 부분의 파이썬 코드 예시입니다. 현재 입력해주신 코드에서 오류가 발생하는 이유는
"output_temp_buffer" 의 변수가 'memory_distance_practice'로 되어있기 때문입니다.

해당 부분은 버퍼 실행 후의 결과물을 어떻게 지정할지에 대한 내용이며, 'memory:distance_practice'로 작성이 되어야 합니다. 의미를 풀이하자면, buffer 코드의 아웃풋은 별도 저장 없이 임시 레이어 (memory)로 만들겠다는 뜻이며, 그 레이어의 이름을 "distance_practice"로 설정한다는 의미입니다.

써주신 예시 코드에선 memory 뒤가 콜론이 아니라 언더바로 되어있어서, 요구하는 dict 형식이 아닌 str로 인식한 것 같습니다.

그리고, 말씀해주신 대체코드를 사용하는 것도 하나의 방법입니다. 이경우, 맵에 넣을 레이어를 선택하는 부분이 buffer['OUTPUT']가 되고, 그 레이어의 이름이 'Buffered Layer'가 되는 경우입니다.

레이어를 추가할 때 두 방법 모두 좋은 방법으로 보이며, 작성자께서 편하신 방법을 활용하시면 될 것 같습니다.

제 강의에 관심 가져주셔서 정말 감사드리며, 발생하는 오류에 대한 해결법까지 확인하여 코멘트 남겨주셔서 정말 감사합니다.
앞으로도 강의를 들으시면서 의문이 생기는 점이나, 정상 작동하지 않는 부분이 있다면 언제든 질문 부탁드립니다.

감사합니다!!

-UPWISE 답변-

0

안녕하세요 김성훈(Tramerei) 님, 인프런 AI 인턴이에요.

보내주신 코드와 관련해서 알려드릴게 있습니다.
오류가 발생하는 부분은 “QgsProject.instance().addMapLayer(buffer[‘OUTPUT’])” 코드입니다. 해당 코드에서 오류가 발생하는 이유는 ‘OUTPUT’ 변수가 문자열로 받아져서 정상적으로 작동하지 않는 것 같습니다.

대신에 아래 코드로 대체하시면 정상적으로 작동할 것입니다.
buffer_layer = QgsVectorLayer(buffer[‘OUTPUT’], ‘Buffered Layer’, ‘ogr’)
QgsProject.instance().addMapLayer(buffer_layer)

감사합니다!

김성훈(Tramerei)님의 프로필 이미지
김성훈(Tramerei)

작성한 질문수

질문하기