도메인 domains/위치 기반 Location-based

PostgreSQL에 PostGIS 플러그인 설치해서 DBeaver로 간단히 실습해보기

Tap to restart 2023. 10. 3. 17:00
반응형

설치

도커를 이용한 설치

postgis 플러그인까지 설치된 postgis 도커 이미지가 존재하므로 바로 사용해서 도커에서 실행할 수 있다. 물론 postgres 도커 이미지를 실행한 뒤 postgis 플러그인을 따로 설치할 수도 있다. 아래 예와 같은 도커 명령어로 도커 이미지 설치 및 실행할 수 있다. POSTGRES_PASSWORD=password로 비밀번호는 password가 된다.

docker run --name postgis-container -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgis/postgis

DBeaver로 접속해보면 아래처럼 잘 접속이 된다.

아래 예처럼 postgis에 접속하면 테이블이 이미 존재한다. spatial_ref_sys 테이블에는 8500개 행으로 이루어진 데이터가 존재한다.

 

실습

데이터베이스 생성

데이터베이스를 직접 만들자.

 create database gis_test;

 

만든 직후에는 아무 테이블이 없다. 

 

아래 명령어로 PostGIS 확장 모듈을 로드한다. 

CREATE EXTENSION postgis;

spatial_ref_sys 테이블이 생성된다.

 

 

테이블 생성

이번에는 gis_test 밑에 테이블을 만들자. 

9. Geometries — Introduction to PostGIS 에 나온 예제 코드 중 일부다.

CREATE TABLE geometries (id SERIAL PRIMARY KEY, name varchar, geom geometry);

 

geometry 데이터 유형

위에서 테이블을 만들 때 geom의 데이터 타입을 geometry로 했다. geometry 데이터 타입에 넣을 수 있는 데이터 유형은 아래와 같다.

분류 GEO 데이터 유형 설명
기본 POINT POINT(0 0)
LINESTRING LINESTRING(0 0,1 1,2 1,2 2)
POLYGON 다각형(면) POLYGON((0 0,1 0,1 1,0 1,0 0))
복합 MULTIPOINT 점 여러 개 MULTIPOINT(0 0, 1 1)
MULTILINESTRING 선 여러 개 MULTILINESTRING((0 0, 1 1, 2 1, 2 2), (0 1, 1 2, 2 2, 2 3))
MULTIPOLYGON 다각형(면) 여러 개 MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))
GEOMETRYCOLLECTION 점, 선, 다각형 다양하게 복합 GEOMETRYCOLLECTION(POINT (2 0),POLYGON((0 0,1 0,1 1,0 1,0 0)))

 

데이터 입력

실제 값을 넣고 select까지 실행해보자.

9. Geometries — Introduction to PostGIS 에 나온 예제 코드를 조금 변형했다.

INSERT INTO geometries (name, geom) VALUES
 ('Point', 'POINT(0 0)'),
 ('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),
 ('Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
 ('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),
 ('MultiPoint', 'MULTIPOINT(0 0, 1 1)'),
 ('MultiLinestring', 'MULTILINESTRING((0 0, 1 1, 2 1, 2 2), (0 1, 1 2, 2 2, 2 3))'),
 ('MultiPolygon', 'MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))'),
 ('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');

SELECT name, ST_AsText(geom) FROM geometries;

아래와 같은 결과를 얻을 수 있다.

 

데이터 타입은 geometry이고 그 안에 데이터는 POINT(), LINESTRING(), ... 형태로 넣는다는 것을 확인할 수 있다.

DBeaver에서 데이터를 더블 클릭하면 지도 데이터이므로 지도가 뜬다.

 

 

PostGIS가 제공해주는 SELECT 기능 실습

ST_AsGeoJSON

ST_AsGeoJSON를 활용하면 geometry 데이터를 바로 GeoJSON으로 바꿔준다.

{"type":"LineString","coordinates":[[0,0],[1,1],[2,1],[2,2]]}

 

반응형