중요

번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 87.76% 번역되었습니다.

16.1. 수업: PostGIS 설정하기

PostGIS 기능을 설정하면 PostgreSQL에 내장된 공간 기능에 접근할 수 있습니다.

이 수업의 목표: 공간 기능을 설치하고 그 효과를 간단히 실행해보기.

참고

이번 예제에서는 PostGIS 2.1 이후 버전을 사용한다고 가정합니다. 설치 및 데이터베이스 설정이 이전 버전과 다르지만, 이 강의에서 소개하는 다른 기능을 실행하는 데 문제는 없을 겁니다. 설치 및 데이터베이스 설정에 대한 도움말은 사용자 플랫폼에 대한 PostGIS 문서를 참조하십시오.

16.1.1. 우분투에 설치하기

apt 명령어를 사용하면 PostGIS를 간단히 설치할 수 있습니다.

$ sudo apt install postgresql
$ sudo apt install postgis

네, 정말로 쉽죠…

참고

여러분의 우분투 버전 및 환경설정한 저장소에 따라 설치될 정확한 버전이 달라질 것입니다. 설치 후, psql이나 다른 도구를 통해 select PostGIS_full_version(); 쿼리를 실행하면 설치된 버전을 알 수 있습니다.

특정 버전을 (예를 들면 PostgreSQL 13 및 PostGIS 3을) 설치하려면, 다음 명령어를 사용하면 됩니다.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. 윈도우에 설치하기

일반적인 윈도우 설치 대화창을 사용하는 바이너리 패키지로 윈도우에 설치할 수 있습니다.

먼저 다운로드 페이지 로 간 다음, 이 지침 을 따르십시오.

More information about installing on Windows can be found on the PostGIS website.

16.1.3. 기타 플랫폼에 설치하기

The PostGIS website download has information about installing on other platforms including macOS and on other Linux distributions

16.1.4. PostGIS를 사용하기 위해 데이터베이스 환경설정하기

PostGIS 설치가 끝나면 이 확장 프로그램을 사용하기 위해 사용자 데이터베이스를 환경설정해줘야 합니다. PostGIS 2.0 이상 버전을 설치했다면, 이전 강의에서 사용했던 주소 데이터베이스를 사용하는 다음 psql 명령어를 실행해서 손쉽게 환경설정할 수 있습니다.

$ psql -d address -c "CREATE EXTENSION postgis;"

참고

사용 버전에 따라, https://postgis.net/docs/postgis_administration.html#create_spatial_db 에서 데이터베이스를 공간적으로 활성화시키는 방법에 대한 자세한 지침을 찾아볼 수 있습니다.

16.1.5. 설치된 PostGIS의 기능 살펴보기

PostGIS를 PostgreSQL의 핵심 기능을 공간 데이터를 다룰 수 있도록 확장하는 데이터베이스 내장 기능들의 집합으로 생각할 수 있습니다. ‘다룬다’라는 말은 저장, 검색, 쿼리, 조작을 뜻합니다. 이를 위해, 데이터베이스에 많은 기능들이 설치되어 있습니다.

PostGIS 덕분에 이제 여러분의 PostgreSQL address 데이터베이스가 공간 데이터를 다룰 수 있게 되었습니다. 다음 강의에서 이를 심도 있게 살펴보겠지만, 먼저 간단한 예를 들어보겠습니다. 텍스트에서 포인트를 생성하려 한다고 해봅시다. 먼저 포인트에 관련된 기능을 찾기 위해 psql 명령어를 사용합니다. 아직 address 데이터베이스에 접속하지 않았다면 지금 하십시오. 그리고 다음 명령어를 실행합니다:

\df *point*

This is the command we’re looking for: st_pointfromtext. To page through the list, use the down arrow, then press Q to quit back to the psql shell.

다음 명령어를 실행해보십시오:

select st_pointfromtext('POINT(1 1)');

결과:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

세 가지 사실을 알 수 있습니다:

  • We defined a point at position 1,1 (EPSG:4326 is assumed) using POINT(1 1),

  • SQL 선언문을 테이블이 아니라 SQL 프롬프트에서 입력된 데이터에 대해 실행했습니다.

  • 결과물 행을 이해하기 힘듭니다.

결과물 행은 ‘WKB(Well Known Binary)’라는 OGC 포맷으로 되어 있습니다. 다음 수업에서 이 포맷을 자세히 살펴볼 것입니다.

결과물을 텍스트로 받아보려면, 텍스트를 반환하는 기능을 찾기 위해 기능 목록을 검색해보면 됩니다:

\df *text

지금 찾고 있는 쿼리는 st_astext 입니다. 이 명령어를 이전 쿼리와 합쳐봅시다:

select st_astext(st_pointfromtext('POINT(1 1)'));

결과:

 st_astext
------------
  POINT(1 1)
  (1 row)

Here, we entered the string POINT(1,1), turned it into a point using st_pointfromtext(), and turned it back into a human-readable form with st_astext(), which gave us back our original string.

다음은 PostGIS 사용법을 자세히 알아보기 전, 마지막 예시입니다:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

어떤 의미일까요? 이 명령은 포인트 주변에 1˚의 버퍼를 생성하고 그 결과를 텍스트로 반환합니다.

16.1.6. 공간 참조 시스템

PostGIS는 이런 기능 외에도 EPSG(European Petroleum Survey Group)가 정의한 SRS(spatial reference system) 모음을 포함하고 있습니다. CRS(coordinate reference system) 변환과 같은 작업 시 SRS를 사용합니다.

SRS가 일반 데이터베이스 테이블에 저장되어 있기 때문에, 여러분의 데이터베이스에서 이 SRS의 정의를 조사할 수 있습니다.

먼저 psql 프롬프트에 다음 명령어를 입력해서 테이블의 스키마를 살펴봅시다:

\d spatial_ref_sys

다음과 같은 결과가 나와야 합니다:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

표준 SQL 쿼리를 (앞의 수업들에서 배웠던 것처럼) 사용해서 이 테이블을 보고 조작할 수 있습니다. 그러나 이런 작업들에 대해 잘 모른다면 어떤 레코드도 업데이트 혹은 삭제하지 않는 편이 좋습니다.

사용자가 관심을 가져야 할 SRID가 있다면 바로 EPSG:4326입니다. WGS84 타원체를 사용하는 지리/경위도 참조 시스템입니다. 한번 살펴봅시다:

select * from spatial_ref_sys where srid=4326;

결과:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

The srtext is the projection definition in well known text (you may recognise this from .prj files in your shapefile collection).

16.1.7. 결론

이제 PostgreSQL에 PostGIS 기능을 설치했습니다. 이것으로 PostGIS의 광범위한 공간 기능들을 이용할 수 있게 되었습니다.

16.1.8. 다음은 무엇을 배우게 될까요?

다음으로 공간 피처가 데이터베이스 안에서 어떻게 표현되는지 알아보겠습니다.