17.1. Lesson: PostGIS 설정

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

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

참고

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

17.1.1. 우분투 설치

apt를 통해 PostGIS를 간단히 설치할 수 있습니다.

$ sudo apt install postgis
$ sudo apt install postgresql-9.1-postgis

네, 정말로 쉽죠…

참고

Depending on which version of Ubuntu you are using, and which repositories you have configured, these commands will install PostGIS 1.5, or 2.x. You can find the version installed by issuing a select PostGIS_full_version(); query with psql or another tool.

PostGIS 최신 버전을 설치하려면 다음 명령어를 사용하면 됩니다.

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt update
$ sudo apt install postgresql-9.1-postgis-nightly

17.1.2. 윈도우 설치

윈도우에 설치하는 것은 좀 더 복잡하지만, 어렵지는 않습니다. PostGIS 스택을 설치하려면 인터넷에 연결되어 있어야 합니다.

First Visit the download page.

Then follow this guide.

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

17.1.3. 다른 플랫폼 설치

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

17.1.4. PostGIS를 사용하기 위한 데이터베이스 설정

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

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

참고

If you are using PostGIS 1.5 and a version of PostgreSQL lower than 9.1, you will need to follow a different set of steps in order to install the postgis extensions for your database. Please consult the PostGIS Documentation for instructions on how to do this.

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

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

Our PostgreSQL address database is now geospatially enabled, thanks to PostGIS. We are going to delve a lot deeper into this in the coming sections, but let’s give you a quick little taster. Let’s say we want to create a point from text. First we use the psql command to find functions relating to point. If you are not already connected to the address database, do so now. Then run:

\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.

Try running this command:

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

결과 :

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

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

  • POINT(1 1) 을 통해 1,1 위치에 (EPSG:4326 투영체를 적용) 포인트를 정의했습니다.

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

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

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

To get the results back as text, we can do a quick scan through the function list for something that returns text:

\df *text

The query we’re looking for now is st_astext. Let’s combine it with the previous query:

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

결과 :

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

POINT(1,1) 을 입력해서 st_pointfromtext() 를 통해 포인트로 변환한 다음 st_astext() 로 사람이 읽을 수 있는 형태로 다시 바꿨습니다. 그 결과 원래 문자열을 반환했습니다.

One last example before we really get into the detail of using PostGIS:

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

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

17.1.6. 공간 참조 시스템

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

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

First, let’s look at the schema of the table by entering the following command in the psql prompt:

\d spatial_ref_sys

The result should be this:

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 쿼리를 (서론 부분에서 배웠던 것처럼) 사용해서 이 테이블을 보고 조작할 수 있습니다. 그러나 SRS에 대해 잘 모른다면 어떤 레코드도 업데이트 혹은 삭제하지 않는 편이 좋습니다.

One SRID you may be interested in is EPSG:4326 - the geographic / lat lon reference system using the WGS 84 ellipsoid. Let’s take a look at it:

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

srtext 가 WKT(well known text) 포맷으로 된 투영체 정의입니다. (사용자의 shapefile 가운데 .prj 파일에서 봤을 수도 있습니다.)

17.1.7. In Conclusion

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

17.1.8. What’s Next?

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