티스토리 뷰
이번 글은 R 프로그램을 이용해서 좌표계가 없는 asc 파일형식의 래스터 파일에 좌표계를 부여하는 방법을 설명한다.
우선 작업에 필요한 라이브러리를 아래 구문과같이 설치하고불러온다.
기존에는 rgdal 라이브러리를 사용했는데 2023년에 단종된다고 한다. 이를 대체하는 3가지 라이브러리가 sf, stars, terra이다.
################################## 좌표계 정보가 없는 asc파일에 좌표계 부여하기
# 라이브러리 불러오기
library(raster)
library(sf)
library(stars)
library(terra)
이번 글에서는 1개의 파일에 적용하는 경우로 라이브러리를 설치한 다음
현재 폴더의 경로와 파일 경로를 가져오고, 파일이름을 추출한다.
# 단일파일를 이용하기
current_folder<-getwd()
data_folder<-paste0(current_folder, "/data")
filename<-"/BiO01.asc"
file_path <- paste0(data_folder, filename)
file_name <- substr(basename(file_path), 1, nchar(basename(file_path))-4)
다음으로 래스터 파일 경로를 통해서 실제로 래스터 파일을 불러와서 래스터 파일을 좌표계가 있는지 확인한다.
projection(raster_file)로 결과가 NA이면 좌표계 정보가 없다는 의미이다.
# 래스터 파일로 불러오기
raster_file<-raster(file_path)
# 좌표계 정보 확인
projection(raster_file)
그럼 지정하고자 하는 좌표계 정보를 지정한다. 여기서는 기본 wgs84 경위도 좌표계 정보이다.
기존 텍스트 기반의 좌표계 정의보다 다음과 같이 EPSG 정보 기반 좌표계 정의하는 것이 더 효율적이다.
예를 들어 우리나라에서 가장 자주 사용되는 GRS80 중부원점에 대한 좌표계 정보를 기억하는 사람은 없다. epsg:5186이 바로 그 정보이다. 그리고 좌표계 정의하는 방법은 다음과 같다.
projection(raster_file)<-crs("+init=epsg:5186")
그래서 GRS80 중부원점에 대한 좌표계 정보를 정의하기 위해서는 해당하는 epsg 숫자를 다음사이트에서 접속해서 부여하면 된다.
다음은 south korea로 검색한 우리나라 좌표계 정보들이다.
다음은 좌표계를 정의하는 방법을 보여준다.
# 좌표게 정보지정
# 기존 텍스트 기반 좌표계 정의
# new_crs <-"+proj=longlat +datum=WGS84"
# projection(raster_file)<- new_crs
# EPSG 정보 기반 좌표계 정의
projection(raster_file)<-crs("+init=epsg:4326")
좌표를 정의된 asc파일을 tif파일 형태로 저장한다.
# 좌표계 갖는 tif파일로 저장하기
# 생성할 폴더 경로
output_folder<-paste0(current_folder, "/output")
# 폴더 생성
dir.create(output_folder)
# 생성된 폴더 확인
if (dir.exists(output_folder)) {
print("폴더가 성공적으로 생성되었습니다.")
} else {
print("폴더 생성에 실패했습니다.")
}
output_name<-paste0(output_folder,"/", file_name, ".tif")
writeRaster(raster_file, output_name, format = "GTiff", overwrite = TRUE)
전체 코드는 다음과 같다.
################################## 좌표계 정보가 없는 asc파일에 좌표계 부여하기
# 라이브러리 불러오기
library(raster)
library(sf)
library(stars)
library(terra)
# 단일파일를 이용하기
current_folder<-getwd()
data_folder<-paste0(current_folder, "/data")
filename<-"/BiO01.asc"
file_path <- paste0(data_folder, filename)
file_name <- substr(basename(file_path), 1, nchar(basename(file_path))-4)
# 래스터 파일로 불러오기
raster_file<-raster(file_path)
# 좌표계 정보 확인
projection(raster_file)
# 좌표게 정보지정
# 1) 기존 방법
#new_crs <-"+proj=longlat +datum=WGS84"
#projection(raster_file)<-new_crs
# 2) 효융적 방법
projection(raster_file)<-crs("+init=epsg:4326")
# 좌표계 갖는 tif파일로 저장하기
# 생성할 폴더 경로
output_folder<-paste0(current_folder, "/output")
# 폴더 생성
dir.create(output_folder)
# 생성된 폴더 확인
if (dir.exists(output_folder)) {
print("폴더가 성공적으로 생성되었습니다.")
} else {
print("폴더 생성에 실패했습니다.")
}
output_name<-paste0(output_folder,"/", file_name, ".tif")
writeRaster(raster_file, output_name, format = "GTiff", overwrite = TRUE)
############좌표계 정보가 있는 asc파일에 기준 래스터 파일과 동일한 정보를 부여
# 기준 파일경로 선택 (해상도, 크기, 좌표계를 맞출 파일)
reference_file <- paste0(data_folder, "/skorea_bnd_wgs84.tif")
print(reference_file)
# 래스터 파일로 불러 오기
ref_raster<-raster(reference_file)
# 기준 래스터 파일 정보 확인하기기
dim<-dim(ref_raster)
res<-res(ref_raster)
crs<-crs(ref_raster)
ext<-extent(ref_raster)
# 기준이 되는 래스터 파일의 해상도, 크기 , 좌료게로 맞추기
resampled_raster<-resample(raster_file, ref_raster)
# 확인하기
ref_raster # 기준 래스터
resampled_raster # 재배열된 래스터
# ASC 파일로 변환하여 저장
writeRaster(resampled_raster, filename = "asc_file.asc", format = "ascii")
다음 글에서는 한개의 파일이 아닌 여러개의 파일을 동시에 하는 과정을 보여줄 예정이다.