inflearn logo
강의

Course

Instructor

QGIS Python Automation (Vector Edition) Ver.2

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

Resolved

379

kie0096507

1 asked

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)

 

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

python qgis GIS

Answer 2

1

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

communityai8509

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

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

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

감사합니다!

작업형 1 유형 부분

0

9

1

수강평 이벤트

0

16

2

작업형 1 (삭제예정, 구 버전)

0

28

2

강의노트는 어디있나요?

0

15

1

노션 학습 자료 권한 요청

0

15

1

수강기간 연장 문의드립니다.

0

20

1

2유형 레이블 인코딩 VS 원핫 인코딩

0

21

3

part2강의 문의사항입니다.

0

19

2

수강기간 연장 문의드립니다.

0

26

1

인덱스 슬라이싱

0

26

2

디졸브 강의 관련 문의

0

81

2

섹션4 버퍼실습 자료 어디있을까요?

1

164

2

qgis에서 오차범위 내의 객체만 속성 결합을 할 수 있나요?

1

820

3

인코딩 적용관련 문의 드립니다.

1

340

1

스크립트 불러오기

1

288

1

홀삭제 좌표 지정

1

279

1

강의 자료는 어디서?(포인트 5186 자료는 어디서?

1

317

1

merge 관련 문의 입니다.

2

1237

2

실전3 오류 문의

1

448

1

실전1_와이파이 소외지역

1

417

1

실습 중의 데이터 입력 오류

2

521

2

외부데이터 연결

1

530

1

안녕하세요 향후 계획이 궁금합니다^^

1

441

1

버퍼 강의 중 VWorld StateTile 레이어

2

442

1