공간 데이터베이스를 구성 하는 방법을 알아보고자 합니다. 공간 데이터베이스는 지도 서비스를 하기 위해 근간이 되는 데이터베이스를 말하는 것입니다.
0. 공간 데이터베이스 만들기
가. PostGIS 활성화 하기
우선 다음과 같이 PostGIS 가 활성화 되어 있는 지 확인 할 수 있습니다.
SELECT PostGIS_Version();
아직 활성화 되어 있지 않은 듯 합니다.
다음과 같이 데이터베이스를 생성하고 활성화 해주는 작업을 해 줍니다.
C:\DEV\Tools\postgresql\bin>psql -d postgis_sample
psql (17.2)
도움말을 보려면 "help"를 입력하십시오.
postgis_sample=# CREATE EXTENSION postgis;
CREATE EXTENSION
postgis_sample=# CREATE EXTENSION postgis_topology;
CREATE EXTENSION
postgis_sample=#
다시 한번 확인 해 봅니다.
postgis_sample=# SELECT PostGIS_Version();
postgis_version
---------------------------------------
3.5 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1개 행)
나. postgis.sql 파일 실행하기
해당 파일은 아래 디렉토리에 있습니다.
C:\DEV\Tools\postgresql\home\share\contrib\postgis-3.5
파일의 실행은 다음과 같이 할 수 있습니다.
\i C:/DEV/Tools/postgresql/home/share/contrib/postgis-3.5/postgis.sql
여기서 오류 메시지가 다음과 같이 나왔습니다.
오류: 현재 트랜잭션은 중지되어 있습니다. 이 트랜잭션을 종료하기 전까지는 모든 명령이 무시될 것입니다
스크립트를 하나하나 실행해 보고 나니 다음과 같은 오류가 나는 것을 확인 할 수 있습니다.
오류: PostGIS is already installed in schema 'public'
위의 내용은 이미 PostGIS 를 설치하고 난 다음 위의 스크립트를 실행 하려고 해서 나는 오류 였습니다.
따라서, 그냥 다시 데이터베이스를 삭제하고 다시 만들었습니다.
다시 로그인 해서
psql -U postgres -d postgis_sample
\i C:/DEV/Tools/postgresql/home/share/contrib/postgis-3.5/postgis.sql
별 탈 없이 수행 되는 것을 확인 할 수 있습니다.
다. 토폴로지 기능도 추가
다음과 같이 토폴로지 기능도 추가 할 수 있습니다.(선택사항)
\i C:/DEV/Tools/postgresql/home/share/contrib/postgis-3.5/topology.sql;
라. 확인하기
다음과 같이 다시 확인 해 보기로 합니다.
SELECT PostGIS_Full_Version();
마. 좌표계 데이터 로드
다음과 같이 좌표계 데이터도 로드 할 수 있습니다.
\i C:/DEV/Tools/postgresql/home/share/contrib/postgis-3.5/spatial_ref_sys.sql
1. 데이터 준비하기
호노룰루 데이터가 있다고 해서 열심히 뒤진 끝에 다음 URL 에서 찾았습니다.
아래와 같은 형식으로 서비스를 해주고 있네요
아래와 같이 몇개의 데이터 셑을 받아 보았습니다.
가. 데이터베이스 생성
다음과 같이 데이터베이스를 하나 생성 해 줍니다.
createdb HONOLULU
createlang plpgsql HONOLULU
createlang 의 경우 사용하지 않아도 된다고 합니다.
psql -d HONOLULU -f %PG_HOME%\share\contrib\postgis-3.5\postgis.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\postgis_comments.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\spatial_ref_sys.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\rtpostgis.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\raster_comments.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\topology.sql
psql -d HONOLULU -f %PG_HOME%\pgsql\share\contrib\postgis-3.5\topology_comments.sql
이런것도 해볼까요?
psql -d HONOLULU -c "CREATE EXTENSION postgis;"
psql -d HONOLULU -c "CREATE EXTENSION postgis_topology;"
다 설치 되어 있다고 나오네
2. gdal 라이브러리 다운로드
현재 17 버전을 사용하고 있는 데, 사용해야할 ogr2ogr 명령이 있기는 합니다만, 이 명령어를 사용하기 위한 환경설정이 까다로워서, 정확히는 폴더를 정해 주는 것이 어려워서 그냥 다운로드 받아서 사용해 보기로 하겠습니다.
가. gdal 환경 설정
위의 내용을 살펴보면, 아래와 같은 환경 설정 변수가 필요합니다.
GDAL_DATA=<설치경로>\bin\gdal-data
GDAL_DRIVER_PATH=<설치경로>\bin\gdal\plugins
PROJ_LIB=<설치경로>\bin\proj9\share
예> gdal_env.bat
SET GDAL_ROOT=C:\DEV\Tools\gdal
SET GDAL_HOME=%GDAL_ROOT%\bin
SET GDAL_APPS=%GDAL_HOME%\gdal\apps
SET GDAL_DATA=%GDAL_HOME%\gdal-data
SET GDAL_DRIVER_PATH=%GDAL_HOME%\gdal\plugins
SET PROJ_LIB=%GDAL_HOME%\proj9\share
SET PATH=%GDAL_HOME%;%GDAL_APPS%;%GDAL_DATA%;%GDAL_DRIVER_PATH%;%PROJ_LIB%;%PATH%;..
아래 사이트에서 다운로드를 받습니다.
제대로 구성 되었는 지 확인을 해 봅시다.
3. 데이터 임포트
일단 데이터를 받아야 하고 이제 툴은 다 설치 된 것 같으니 이렇게 받은 지오데이터베이스를 다운 받아서 직접 넣어주도록 하겠습니다.
몽땅 Shape 파일로 받아다가, gdb로 변환 해 주는 것입니다.
ogr2ogr -f "OpenFileGDB" Building_Footprints_(CCH).gdb Building_Footprints_(CCH).shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" PIM_Lines.gdb PIM_Lines.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Sewer_Mains.gdb Sewer_Main.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Sewer_Lateral.gdb Sewer_Lateral.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Address_Points.gdb Address_Points.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Tax.gdb Tax.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Regulatory.gdb Regulatory.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Ohana.gdb Ohana.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" Zoning.gdb Zoning.shp -t_srs EPSG:4326
ogr2ogr -f "OpenFileGDB" State_Land_Use_Districts.gdb State_Land_Use_Districts.shp -t_srs EPSG:4326
그런다음, 해당 gdb 파일을 데이터베이스에 넣어 주도록 합니다.
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "C:\DEV\DB\SHP\Building_Footprints_(CCH)\Building_Footprints_(CCH).gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "PIM_Lines.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Sewer_Mains.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Sewer_Lateral.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Address_Points.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Tax.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Regulatory.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Ohana.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "State_Land_Use_Districts.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
ogr2ogr –f "PostgreSQL" "PG:host=localhost port=5432 dbname=HONOLULU user=postgres" "Zoning.gdb" –overwrite –skipfailures -progress –-config PG_USE_COPY YES
약간 우스운 얘기일 수가 있으나, 아래와 같은 오류가 발생 할 수 있다.
>>ERROR 1: Unable to open datasource `PostgreSQL' with the following drivers.
ogrinfo로 확인 해 보고 이상이 없으면,
ogrinfo "PG:host= localhost user=postgres password=postgres dbname=HONOLULU"
인코딩 문제가 생긴 것이므로, 두 가지를 시도해 본다.
1. 전체 명령을 손수 직접 넣어본다 만약, 이상없이 진행 된다면 인코딩 문제다.
2. 다음과 같이 명령을 구성해 본다.
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Zoning.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "State_Land_Use_Districts.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Ohana.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Regulatory.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Tax.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Address_Points.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Sewer_Lateral.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Sewer_Main.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "PIM_Lines.gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
ogr2ogr -f PostgreSQL "PG:host= localhost user=postgres password=postgres dbname=HONOLULU" "Building_Footprints_(CCH).gdb" -overwrite -skipfailures -progress --config PG_USE_COPY YES
데이터베이스를 확인 해 봅시다.
이상.
'프로그래밍 > GIS' 카테고리의 다른 글
공간 데이터베이스 서비스 이용하기 (0) | 2025.01.10 |
---|---|
공간 데이터베이스 서비스하기 (0) | 2025.01.09 |
PostgreSQL과 PostGIS 설치 (0) | 2025.01.07 |
[OSRM] Chat GPT와 함께하는 TSP - 지도 표시 (1) | 2024.12.09 |
[OSRM] Chat GPT와 함께하는 TSP - 마무리 (1) | 2024.12.06 |