반응형
배경 상황
학교 과제로 거제시의 상권분석을 해야 한다. 산업단지 및 공장이 많은 거제시의 특징에 따라 위 정보를 취득하였다.
그런데 데이터를 뜯어보니, 좌표 정보가 없었다. 다만 지번 형태의 주소 정보는 존재했다. 이러한 상황에서 주소 정보만을 가지고 좌표 정보를 얻는 과정을 수행해보려 한다.
준비 사항
위 그림을 보면 인증키가 필요하다. 이는 회원가입이 필요함을 말한다. 브이월드에 회원가입한다.
회원가입 이후 서비스 -> 인증키 클릭한다.
이용약관에 동의한 후 위 내용을 기입하고 인증키를 받는다.
Geocoder API 활용 코드(파이썬)
import pandas as pd
import requests
# CSV 파일 로드
file_path = '경상남도_거제시_산업단지 및 공장등록 현황_20221231.csv'
data = pd.read_csv(file_path, encoding='cp949')
# API 요청 함수
def get_coordinates(address, api_key):
apiurl = "https://api.vworld.kr/req/address?"
params = {
"service": "address",
"request": "getcoord",
"crs": "epsg:4326",
"address": address,
"format": "json",
"type": "parcel",
"key": api_key
}
response = requests.get(apiurl, params=params)
if response.status_code == 200:
data = response.json()
try:
point = data['response']['result']['point']
return (point['y'], point['x']) # 위도, 경도
except KeyError:
return (None, None)
else:
return (None, None)
# API 키 설정
api_key = "YOUR_API_KEY"
# 데이터프레임에 위도와 경도 열 추가
data['위도'] = None
data['경도'] = None
# 모든 주소에 대해 좌표 요청 및 데이터 업데이트
for index, row in data.iterrows():
coords = get_coordinates(row['공장대표주소(지번)'], api_key)
data.at[index, '위도'] = coords[0] # 위도
data.at[index, '경도'] = coords[1] # 경도
# 결과를 새 CSV 파일로 저장
output_path = 'updated_data.csv'
data.to_csv(output_path, index=False, encoding='cp949')
위 코드에서 주의할 점은 이전 작업을 통해 발급받은 API KEY를 직접 기입할 것, 그리고 get_coordinates 함수 내에 "type" 값이 도로명주소일 경우에는 "road"로 변경해야 한다는 점이다.
결과
위 코드 실행 결과, 원래 존재하던 CSV 파일에 Geocoder를 통해 취득한 위도, 경도 정보가 추가되었다.
QGIS를 통해 띄워보니, 잘 추가된 모습이다.
CSV 파일을 통해 QGIS 내에서 지도 위에 띄우는 방법은 위 링크를 참고하길..
반응형
'개인 학습 > GIS' 카테고리의 다른 글
QGIS - 동일 레이어 내 속성별 개수 세기(Counting with Database) (0) | 2024.05.17 |
---|---|
QGIS - 동일 레이어 내 정보들을 다른 색으로 나타내기 (0) | 2024.05.17 |
QGIS - CSV 파일 지도에 나타내기 (2) | 2024.05.17 |