본문 바로가기
공간정보

pgOSM Flex: docker를 이용해 osm 데이터 postgresql 임포트하기

by 요긴소프트 2024. 11. 1.
728x90
반응형

osm 데이터를 postgresql로 임포트하는 방법은 여러가지가 있겠지만, pgOSM Flex를 이용하면 간단게 고품질 OpenStreetMap 데이터셋을 postgresql(postGIS)로 임포트 가능합니다.

아래는 docker를 이용해 우리나라 데이터를 import 하는 스트립트 예제입니다.

mkdir ~/pgosm-data
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=mysecretpassword

# Ensure you have the latest Docker image
docker pull rustprooflabs/pgosm-flex

docker run --name pgosm -d --rm \
    -v ~/pgosm-data:/app/output \
    -v /etc/localtime:/etc/localtime:ro \
    -e POSTGRES_USER=$POSTGRES_USER \
    -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
    -p 5433:5432 -d rustprooflabs/pgosm-flex

docker exec -it \
    pgosm python3 docker/pgosm_flex.py \
    --ram=8 \
    --region=north-america/us \
    --subregion=district-of-columbia

 

스크립트 의미는 다음과 같습니다.

 

로컬 디렉토리 생성: ~/pgosm-data라는 디렉토리를 만들어 데이터를 저장합니다.
mkdir ~/pgosm-data

환경 변수 설정:PostgreSQL 사용자 이름과 비밀번호를 환경 변수로 설정합니다.
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=mysecretpassword

Docker 이미지 업데이트:rustprooflabs/pgosm-flex라는 Docker 이미지를 최신 버전으로 가져옵니다.
docker pull rustprooflabs/pgosm-flex

Docker 컨테이너 실행:
--name pgosm: 컨테이너 이름을 pgosm으로 지정합니다.
-d: 백그라운드에서 실행합니다.
--rm: 컨테이너 종료 시 자동 삭제합니다.
-v ~/pgosm-data:/app/output: 호스트의 ~/pgosm-data 디렉토리를 컨테이너의 /app/output에 마운트합니다.
-v /etc/localtime:/etc/localtime:ro: 호스트의 시간대를 컨테이너에 읽기 전용으로 마운트합니다.
-e POSTGRES_USER와 -e POSTGRES_PASSWORD: PostgreSQL 사용자와 비밀번호를 환경 변수로 전달합니다.
-p 5433:5432: 호스트의 포트 5433을 컨테이너의 포트 5432에 연결합니다.

rustprooflabs/pgosm-flex: 사용할 Docker 이미지입니다.
docker run --name pgosm -d --rm \
    -v ~/pgosm-data:/app/output \
    -v /etc/localtime:/etc/localtime:ro \
    -e POSTGRES_USER=$POSTGRES_USER \
    -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD \
    -p 5433:5432 -d rustprooflabs/pgosm-flex

pgosm_flex.py 실행:
docker exec -it pgosm: 실행 중인 pgosm 컨테이너에서 명령어를 실행합니다.
python3 docker/pgosm_flex.py: pgosm_flex.py 스크립트를 실행합니다.
--ram=8: 8GB의 RAM을 사용하도록 설정합니다.
--region=asia와 --subregion=south-korea: 아시아 지역의 대한민국 데이터만 처리합니다.
docker exec -it \
    pgosm python3 docker/pgosm_flex.py \
    --ram=8 \
    --region=asia \
    --subregion=south-korea

728x90
반응형