[QGIS] 좌표와 격자데이터 연결하기-'지리/공간 데이터를 통해 '시대 상황을 고려한' 전기차 충전소 입지 예측 모델 구현

2024. 3. 13. 18:31Data Science/프로젝트

전기차 충전소 입지 모델 예측을 하기 위해 격자 데이터를 수집하고 각종 csv파일과 geoJson파일을 수집해 데이터 전처리를 하기 시작했다.

https://map.ngii.go.kr/ms/map/NlipMap.do# 

 

국토정보플랫폼 국토정보맵

선택 선택

map.ngii.go.kr

국토 정보 플랫폼을 통해서 많은정보를 수집했고 추가적으로 필요한 것 들은 공공데이터 자료를 통해서 수집하였다.

 

QGIS로 국토정보맵 파일을 다운 받아 확인해 보면 geoJson파일이 아니여서 따로 작업이 필요하다.

 

geoJson 변환

- shp을 geoJson변환(로컬로 실행)

#다운로드 한 파일을 모두 한 폴더에 넣고 로컬로 실행해야함 
# Shapefile의 경로
shp_file_path = 'Downloads/(B100)국토통계_국토정책지표-소방서 접근성 -250M_2022/206.1 소방서(읍면동격자) 접근성.shp'  # shp파일 경로

# Fiona를 사용하여 인코딩을 UTF-8로 지정하고 Shapefile 열기
with fiona.open(shp_file_path, encoding='utf-8') as source:
    gdf = gpd.GeoDataFrame.from_features(source)

# GeoJSON으로 변환하여 파일로 저장하기
geojson_path = 'Downloads/(B100)국토통계_국토정책지표-소방서 접근성 -250M_2022/naju_fire.geojson'  # 저장할 경로와 GeoJson파일이름
gdf.to_file(geojson_path, driver='GeoJSON')

print(f"GeoJSON 파일이 성공적으로 저장되었습니다: {geojson_path}")

 

- csv을 geoJson변환

import geopandas as gpd
import pandas as pd
from shapely.geometry import Point

# CSV 파일 경로
csv_path = '전라남도_나주시_주유소및LPG충전소_20230104 - 전라남도_나주시_주유소및LPG충전소_20230104.csv'

# CSV 파일 로드
csv_data = pd.read_csv(csv_path, encoding='utf-8')

# CSV 데이터에서 GeoDataFrame 생성
csv_gdf = gpd.GeoDataFrame(csv_data, geometry=gpd.points_from_xy(csv_data.Longitude, csv_data.Latitude))

# GeoDataFrame의 CRS를 WGS 84 (EPSG:4326)로 설정
csv_gdf.crs = "EPSG:4326"

csv_gdf.head()

# 결과를 GeoJSON 파일로 저장하는 코드 예시
output_path = 'stations_in_naju_grid.geojson'  # 실제 경로로 변경 필요
csv_gdf.to_file(output_path, driver='GeoJSON')

 

 

사용한 파일은 전기차충전소의 접근성을 거리로 나타낸 geoJson파일과 나주시의 충전소 현황을 알려주는 csv파일을 geoJson으로 변환한 데이터를 사용하였다.

 

변경한 파일들을 QGIS로 살펴보니 생성된격자의 폴리곤의 좌표가 현재 우리가 사용하는 위도, 경도 데이터와 차이가 있어 꽤나 애를 먹었다.

결론적으로 해결방법은

해당 레이어 속성- 원본-지정된좌표계 --> 5179좌표계로 변경 후 적용

오른쪽 하단맨끝에있는 좌표 설정을 누르면 아래와 같은 창이뜨는데 여기서도 5179로 바꿔준다.

상위메뉴에서 벡터-데이터관리도구-위치에 따라 속성결합--> JOIN과 COMPARING을 결정을 한 뒤 실행 

Join에 들어간게 폴리곤 격자데이터 , Comparing에 들어간게 좌표값이 들어있는 포인트 데이터이다.

 

실행을 누르고나면 레이어 창에 '결합된데이터'가 생성이 된다.

속성레이블로 가보면 좌표데이터가 포함이된것을 알 수 있다.

 

여기서 주의할점은 원래 데이터가 9688개 였는데 격자안에 주유소가 2개가 있는 경우도 존재하기 때문에 데이터의 수가 9696개로 늘어났다.

정확한 주유소의 좌표를 포함하는 데이터를 사용해야 한다면 이와 같은 방법으로 격자에 좌표를 넣는 작업을 하면 되고,

 

 

 

 

격자안에 갯수데이터로 넣어서 하면 기존 데이터수를 유지하면서 결합이 가능하다, 대신 정확한 좌표가 아니라 그 격자안에 속해있는 좌표의 갯수를 보여주는 방식이다.

벡터 - 분석도구 - 폴리곤에 포함되는 포인트 개수 계산

폴리곤에 내가 가지고 있는 원본 격자데이터 

포인트에 좌표가 포인트로 표시되어있는 데이터를 넣고 실행해준다.

 

레이어에 개수라는 이름의 레이어가 추가가된걸 볼 수 있다.

속성 테이블로 들어가보면 아까와는 다르게 좌표가 표시되어 있는게 아니라 폴리곤안에 주유소의 갯수가 몆개인지 표시가 된다.

 

설정된 격자에서도 주유소를 포함한 격자폴리곤이 잘 표시가 된다.