• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

외부데이터 연결

23.01.05 17:12 작성 조회수 317

1

안녕하세요

동영상을 보고 파이썬 콘솔에서 shp파일로는 불러와서 작업하는 아주 유용하게 사용하고 있습니다~

그런데 궁금한건 외부데이터(csv,txt .. )등의 x,y값을 이용하여 python으로 포인트를 만들고자 한다면 어떻게 하나요???

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변이 늦었습니다.

csv 등의 데이터를 통해 포인트 레이어를 생성하는 방법은 QGIS 기능 중 "테이블에서 포인트 생성" (or "Create points layer from table" 영어 버전) 기능을 활용하시어, 추가가 가능합니다.
(참고 URL : https://freegistutorial.com/how-to-create-points-from-a-table-in-qgis/)

하지만, 질문해주신 대로 python을 이용하여 포인트를 만드시고자 한다면, 아래 예시 코드와 같이 코드를 실행시켜 포인트 레이어 생성 및 추가가 가능합니다.

import processing

# 레이어 지정 (현재 qgis 프로젝트에 추가된 레이어 명을 활용)
layer = QgsProject.instance().mapLayersByName("서울시 (안심이) CCTV 설치 현황")[0]
# 일시 산출물
output_point = 'memory:output_point'
# 테이블 투 포인트 파라미터 (input은 레이어로, x와 y는 layer의 속성에서 필드명 확인 후 지정. 좌표계는 x,y 좌표의 형식에 맞게 지정)
#tabletopointParams = {'INPUT' : input, 'XFIELD' : x, 'YFIELD' : y,'TARGET_CRS' : crs, 'OUTPUT' : output_point}
tabletopointParams = {'INPUT' : layer, 'XFIELD' : '경도', 'YFIELD' : '위도','TARGET_CRS' : 'EPSG:4326', 'OUTPUT' : output_point}
# 테이블 투 포인트 실행
tabletopoint = processing.run('native:createpointslayerfromtable', tabletopointParams)
# 결과 추가 및 완료 메시지
QgsProject.instance().addMapLayer(tabletopoint['OUTPUT'])

해당 코드를 실행하기 위해선, QGIS 실행 및 레이어에 csv 파일 추가가 필요합니다.

예시에 사용된 자료는 https://data.seoul.go.kr/dataList/OA-20923/S/1/datasetView.do#AXexec 에서 다운로드 받으실 수 있으며, QGIS 레이어에 추가 후 코드를 복사하여 실행해보시면 포인트 레이어가 생성되는 걸 확인하실 수 있습니다.

코드 사용 시 주의해야 할 점은,

  1. QGIS 프로젝트에 csv 레이어가 추가되어 있어야 함 (레이어 이름과 코드의 레이어 이름을 동일하게 설정)

  2. 파라미터의 "XFIELD", "YFIELD"를 레이어의 필드명으로 설정해주어야 함

  3. 파라미터의 TARGET_CRS는 레이어의 x, y 좌표계에 따라 설정해야 함 (예시 자료는 위경도를 사용하고 있으므로 EPSG:4326 crs 를 사용하였음)

등 입니다.

저는 csv 등의 파일에서 포인트를 생성할 때는 python보단 QGIS의 기능을 더 자주 활용합니다.
그 이유는, 코드 실행을 위해선 레이어의 필드값을 확인해야 하기 때문에, 코드로 작성하는게 더 번거롭기 때문이며,
또한, 데이터를 직접 확인하여 생성된 포인트 레이어의 오류를 최소화하기 위함입니다.

질문하신 내용에 충분한 답변이 되었길 바라며, 추가적인 질문이 있다면 말씀 부탁드립니다.

감사합니다 :)

-UPWISE 답변-

이미진님의 프로필

이미진

질문자

2023.01.09

상세한 답변 너무 감사합니다.

참고하여 해보겠습니다. ^^