티스토리 뷰
반응형
이번 글은 파이썬에서 GIS 경위도 좌표에 해당하는 다양한 환경변수 주제도의 값들을 추출하고 엑셀파일로 저장하는 일련의 과정을 설명한다.
1. 관련 패키지를 불러온다.
import os
from osgeo import gdal
import affine
import pandas as pd
import numpy as np
import glob
2. GIS 경위도 좌표를 불러온다.
in_xy = "./data/samples/in_xy.csv"
df = pd.read_csv(in_xy, encoding="euc-kr")
3. GIS 위치좌표에 해당하는 환경변수의 값을 일괄로 추출하는 함수를 작성
# asc파일의 특정 위치에서 해당 값 추출하기
# 해발고도와 관련 asc파일에서 특정위치의 해발고도 값을 추출하기
for env in glob.glob("./data/layers/*.asc"):
val = []
# print(env)
env_name = env.split("\\")[-1].split(".")[0]
ds = gdal.Open(env)
# print(ds.GetGeoTransform())
tl_x, x_res, _, tl_y, _, y_res = ds.GetGeoTransform()
# print(tl_x, x_res, tl_y, y_res)
array = ds.ReadAsArray()
for i, row in df.iterrows():
# print(i, row["longitude"])
# x = df.loc[0, "longitude"]
# y = df.loc[0, "latitude"]
x = row["longitude"]
y = row["latitude"]
x_index = int((x - tl_x) / x_res)
y_index = int((y - tl_y) / y_res)
# print(x_index, y_index)
val.append(array[y_index, x_index])
# print(val)
df[env_name] = val
print(df)
4. 실행결과를 csv파일로 저장한다.
df.to_csv("xy_env_data.csv", index=False)
ds = None
5. 전체 코드는 다음과 같다.
import os
from osgeo import gdal
import affine
import pandas as pd
import numpy as np
import glob
in_xy = "./data/samples/in_xy.csv"
in_asc = "./data/layers/alt_110_skorea.asc"
out_tif = "./data/outputs/alt_100_skorea.tif"
df = pd.read_csv(in_xy, encoding="euc-kr")
# print(df.head())
# ds = gdal.Open(in_asc)
# print(ds.GetGeoTransform())
# tl_x, x_res, _, tl_y, _, y_res = ds.GetGeoTransform()
# print(tl_x, x_res, tl_y, y_res)
# array = ds.ReadAsArray()
# print(array)
# asc파일의 특정 위치에서 해당 값 추출하기
# 해발고도와 관련 asc파일에서 특정위치의 해발고도 값을 추출하기
for env in glob.glob("./data/layers/*.asc"):
val = []
# print(env)
env_name = env.split("\\")[-1].split(".")[0]
ds = gdal.Open(env)
# print(ds.GetGeoTransform())
tl_x, x_res, _, tl_y, _, y_res = ds.GetGeoTransform()
# print(tl_x, x_res, tl_y, y_res)
array = ds.ReadAsArray()
for i, row in df.iterrows():
# print(i, row["longitude"])
# x = df.loc[0, "longitude"]
# y = df.loc[0, "latitude"]
x = row["longitude"]
y = row["latitude"]
x_index = int((x - tl_x) / x_res)
y_index = int((y - tl_y) / y_res)
# print(x_index, y_index)
val.append(array[y_index, x_index])
# print(val)
df[env_name] = val
print(df)
df.to_csv("xy_env_data.csv", index=False)
ds = None
반응형
'머신러닝 & 딥러닝' 카테고리의 다른 글
위성영상을 이용한 딥러닝 활용 - 2) 샘플데이터 와 필요패키지 설치 (0) | 2023.04.14 |
---|---|
위성영상을 이용한 딥러닝 활용 - 1) 환경설정 (0) | 2023.04.14 |
python을 이용해서 asc 파일을 tiff 파일로 일괄 변환하기 (0) | 2023.04.07 |
pytorch 설치(CUDA 11.8버전 기준) 후 GPU인식 확인 (0) | 2023.04.06 |
텐서플로우(Tensorflow) 2.x GPU 설정하는 법(윈도우11 기준, RTX 4070 laptop GPU) (0) | 2023.04.06 |
댓글