공간정보

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

요긴소프트 2024. 11. 1. 08:05
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
반응형