해결된 질문
작성
·
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 입니다.
최근 일주일 간 바쁜 외부 일정이 있어서, 질문 확인 및 답변이 늦어졌습니다.
빠르게 확인드리지 못한 점 양해 부탁드립니다.
말씀해주신 내용은, 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)
감사합니다!