공개 SW 솔루션설치 & 활용가이드 기타 > GIS 제대로배워보자 How to Use Open Source Software Open Source Software Installation & Application Guide
CONTENTS 1. 개요 2. 기능요약 3. 실행환경 5. 기능소개 6. 활용예제 7. FAQ 8. 용어정리
- 3-1. 개요 소개 주요기능 PostGIS 는 PostgreSQL 의플러그인으로일반 DBMS 인 PostgreSQL 에서공간데이터를관리, 처리, 분석할수있도록해주는소프트웨어 PostGIS 는 GiST 기반 R-Tree 공간인덱스를지원하며, GIS 객체의분석및공간처리를위한기능제공 공간데이터관리 공간데이터연산, 분석 공간인덱스지원 대분류 기타소분류 GIS 라이선스형태 PostGIS : GPL v2 사전설치솔루션 운영제제 Windows, macos, Linux 등버전 PostGIS : 2.3.2 특징 일반 DBMS 를확장하여공간 DBMS 로사용 공간정보를다루는다양한기능제공 GDAL, GEOS, PROJ 등의오픈소스라이브러리기반 보안취약점 N/A 개발회사 / 커뮤니티 OSGeo 공식홈페이지 http://www.postgis.net/
- 4-2. 기능요약 PostgreSQL에 PostGIS를설치하여공간데이터처리지원 다양한 vector 타입지원 - GeometryCollection, MultiPolygon, MultiLineString, MultiPoint, Polygon, LineString, Point raster 타입지원 공간쿼리기능 (Function) 지원 - ST_Union, ST_Intersects, ST_Intersection, ST_DWithin 등 공간인덱스지원 - GIST GeoServer, QGIS, udig 등오픈소스소프트웨어와연동지원
- 5-3. 실행환경 지원 OS - Windows 32bit / 64bit - MacOS - Linux ( RedHat, CentOS, Debian, Ubuntu, SuSE 등 ) - BSD (FreeBSD, OpenBSD) PostgreSQL과 PostGIS는단독실행가능한소프트웨어로별도의 JAVA, C++, Python 과같은프로그래밍언어는필요하지않다. 설치파일이아닌 source를컴파일하여사용할경우에는 gcc와 gcc-c++ 컴파일러가설치되어있어야하고, PostGIS의경우필수라이브러리인 GDAL, GEOS, PROJ가설치되어있어야한다.
- 6 - 세부목차 4.1 Windows 설치 4.2 MacOS 설치 4.3 Linux(CentOS) 설치및초기설정 4.4 pgadmin 3 설치
- 7-4.1 Windows 설치 (1/8) PostgeSQL 홈페이지 (https://www.postgresql.org) 에접속하여 Window 용설치파일을 다운로드합니다.
- 8-4.1 Windows 설치 (2/8) 자신에게맞는 OS 환경과버전을선택후설치파일을다운로드합니다.
- 9-4.1 Windows 설치 (3/8) 다운받은설치파일 (postgresql-x.x.x-x-windows-xxx.exe) 을실행합니다. 설치과정은다음과 같습니다. * [ 설치폴더선택 ] [ 데이터폴더선택 ] * 설치중데이터폴더의기본위치는 PostgreSQL 이설치되는폴더하위로되어있습니다. 하지만실제운영서버에 설치할경우에는데이터폴더를따로분리하여관리하는것을권장한다.
- 10-4.1 Windows 설치 (4/8) [ postgres 유저비밀번호설정 ] [ 포트설정 ] [ locale 설정 ]
- 11-4.1 Windows 설치 (5/8) PostgreSQL 의설치가완료되면, PostGIS 를설치합니다. PostGIS 설치파일은 Stack Builder 를사용하여다운로드한다. 체크후진행
- 12-4.1 Windows 설치 (6/8) PostGIS는 PostgreSQL의버전에따라의존성을갖고있다. 사용할 PostgreSQL을선택하고, PostGIS의버전을선택하여설치파일을다운로드한다. [ PostgreSQL 선택 ] [ PostGIS 버전선택 ] [ 다운로드폴더선택 ]
- 13-4.1 Windows 설치 (7/8) 다운로드가완료되면바로 PostGIS 설치를진행할수있다. 체크해지후진행 [ PostGIS 설치진행 ]
- 14-4.1 Windows 설치 (8/8) [ 설치폴더선택 ] [ 설정옵션선택 ] [ 설치완료 ]
- 15-4.2 MacOS 설치 (1/8) PostgeSQL 홈페이지 (https://www.postgresql.org) 에접속하여 MacOS 용설치파일을다운 로드한다.
4.2 MacOS 설치 (2/8) 자신에게맞는 OS 환경과버전을선택후설치파일을다운로드한다.
4.2 MacOS 설치 (3/8) 다운받은설치파일 (postgresql-x.x.x-x-osx.dmg) 을실행하고, 내부의 postgresql-x.x.x-xosx.pkg 를실행한다. 설치과정은다음과같습니다. * [ 데이터폴더선택 ] [ 설치폴더선택 ] * 설치중데이터폴더의기본위치는 PostgreSQL이설치되는폴더하위로되어있습니다. 하지만실제운영서버에 설치할경우에는데이터폴더를따로분리하여관리하는것을권장한다.
4.2 MacOS 설치 (4/8) [ postgres 유저비밀번호설정 ] [ 포트설정 ] [ locale 설정 ]
4.2 MacOS 설치 (5/8) PostgreSQL 의설치가완료되면, PostGIS 를설치한다. PostGIS 설치파일은 Stack Builder 를 사용하여다운로드한다. 체크후진행
4.2 MacOS 설치 (6/8) PostGIS는 PostgreSQL의버전에따라의존성을갖고있다. 사용할 PostgreSQL을선택하고, PostGIS의버전을선택하고설치파일을다운로드한다. [ PostgreSQL 선택 ] [ PostGIS 버전선택 ] [ 다운로드폴더선택 ]
4.2 MacOS 설치 (7/8) 다운로드가완료되면바로 PostGIS 설치를진행할수있다. 체크해지후진행 [ PostGIS 설치진행 ]
4.2 MacOS 설치 (8/8) [ 업데이트모드설정 ] [ postgres 유저비밀번호입력 ] [ 설치완료 ]
- 23-4.3 Linux(CentOS) 설치및초기설정 (1/11) 최신버전의 PostgreSQL 과 PostGIS 를 CentOS 7.2 버전에설치하며, 간편한설치를위하여 yum 을이용한다. 먼저 CentOS 설치시 PostgreSQL을함께설치했을경우 9.2버전이설치되게된다. 최신버전설치를위하여설치된 PostgreSQL 9.2를제거한다. PostgreSQL이실행중이라면종료한다. $ ps -ef grep postgres $ sudo su - postgres $ pg_ctl -m fast stop
- 24-4.3 Linux(CentOS) 설치및초기설정 (2/11) PostgreSQL이종료되면 yum을사용하여 PostgreSQL을제거한다. $ sudo yum install installed grep postgres $ sudo yum erase postgresql-docs.x86_64 postgresql.x86_64 postgresql-libs.x86_64 postgresql-server.x86_64 yum 으로제거후남아있는파일과 postgres 유저를지워준다. $ sudo rm -rf /var/lib/pgsql $ sudo userdel postgres * 별도의데이터폴더가있을경우제거한다.
- 25-4.3 Linux(CentOS) 설치및초기설정 (3/11) 이전의 PostgreSQL 이완전히제거한후에최신버전의 PostgreSQL 을받을수있도록저장 소를추가한다. $ sudo yum install -y https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdgcentos95-9.5-2.noarch.rpm PostgreSQL 을설치한다. $ sudo yum install -y postgresql95-server postgresql95-contrib
- 26-4.3 Linux(CentOS) 설치및초기설정 (4/11) PostgreSQL 설치가완료되면 PostGIS 을설치한다. $ sudo yum install -y epel-release $ sudo yum install -y postgis2_95 postgis2_95-client
- 27-4.3 Linux(CentOS) 설치및초기설정 (5/11) 필요라이브러리와 PostGIS 가설치되었다는메세지가나오면설치가완료된것이다.
- 28-4.3 Linux(CentOS) 설치및초기설정 (6/11) PostgreSQL 과 PostGIS 설치가끝나게되면 PostgreSQL 을실행할수있도록설정초기화를 해주어야한다. PostgreSQL의설정파일과데이터를관리할폴더를생성하고, 폴더의소유자를 postgres로변경한다. (PostgreSQL 설치가완료되면 postgres 유저가생성된다.) $ sudo mkdir /pg_data $ sudo chown postgres:postgres /pg_data postgres 유저로로그인하여 PostgreSQL을초기화해준다. initdb를실행할때, -D data_dir 옵션을설정해야원하는폴더에설정파일과데이터를넣을수있다. $ sudo su - postgres $ /usr/pgsql-9.5/bin/initdb -D /pg_data -E UTF8 --locale=c * locale 설정을하지않을경우한국어데이터를다룰때문제가발생할수있다.
- 29-4.3 Linux(CentOS) 설치및초기설정 (7/11) PostgreSQL 초기화가정상적으로이루어지면아래의메세지가나타난다. PostgreSQL 을실행하고, psql 을통해서접속한다. $ /usr/pgsql-9.5/bin/pg_ctl -D /pg_data -l logfile start psql 을통하여 PostgreSQL 에접속할때, 옵션을주지않을경우 postgres 유저를통하여 postgres 데이터베이스로접속한다. $ psql 현재 Database
- 30-4.3 Linux(CentOS) 설치및초기설정 (8/11) PostGIS extension 을추가한다. # create extension postgis; 정상적으로 PostGIS extension 이추가되었다면, 좌표계정보를가진 spatial_ref_sys 테이 블이생성된다. postgis_version() 을이용하여사용중인 PostGIS 의버전을확인할수있다. # \dt ( 현재데이터베이스의테이블목록조회 ) # select postgis_version();
- 31-4.3 Linux(CentOS) 설치및초기설정 (9/11) PostgreSQL 을외부에서접근해야하는경우, PostgreSQL 의설정을변경한다. 설정파일들은 PostgreSQL 의데이터폴더안에있다. postgresql.conf : PostgreSQL 의기본설정들을변경할수있다. $ sudo su - postgres $ vi /pg_data/postgresql.conf 접속가능한 IP 를제한하는설정입니다. 주석 (#) 을제거하고이설정을 * 으로변경합니다. listen_addresses = * 포트를변경하고싶은경우, 주석 (#) 을제거하고원하는포트를입력합니다. 기본포트는 5432 입니다.
- 32-4.3 Linux(CentOS) 설치및초기설정 (10/11) pg_hba.conf : PostgreSQL 의접근을제어하는설정을관리한다. $ sudo su - postgres $ vi /pg_data/pg_hba.conf 허용할 IP 또는 IP 대역 인증방식 METHOD는유저인증방식입니다. 일반적으로 trust, md5를사용한다. - trust : 설정된유저는별도의인증을필요로하지않음 - md5 : 비밀번호 (md5 암호화를거친후통신 ) 를통해서인증 ADDRESS는 IP/mask로구성되어특정 IP 또는 IP 대역에대한접근을제한한다. - 192.168.0.1/32 : 192.168.0.1만허용 - 192.168.0.0/24 : 192.168.0.x 대역의 IP 허용
- 33-4.3 Linux(CentOS) 설치및초기설정 (11/11) PostgreSQL 설정을변경한뒤에외부에서접근할수있도록 PostgreSQL port 를외부로 열어주어야한다. 기본 port 는 5432, 변경하였을경우변경된 port 를열어준다. $ sudo firewall-cmd --permanent --add-port=5432/tcp 설정이끝나면 PostgreSQL 을재시작한다. $ sudo su - postgres $ /usr/pgsql-9.5/bin/pg_ctl -D /pg_data -l logfile restart
- 34-4.4 pgadmin 3 설치 pgadmin 은 PostgreSQL GUI 클라이언트이다. GUI 를통하여편리하게 PostgreSQL 을 다룰수있다. pgadmin 은 PostgreSQL 을설치하면자동으로설치된다. 별도의클라이언트장비를사 용할경우 pgadmin 홈페이지에접속하여설치파일을다운받아설치할수있다. https://www.pgadmin.org/ 에서자신의 OS 에맞는설치파일을다운받아설치한다.
- 35-4.5 Windows MSI 설치 (1/2) msi 패키지프로그램을다운로드받아실행하여서비스프로그램으로설치한다.
- 36-4.5 Windows MSI 설치 (2/2) 프로그램서비스목록에서 Elasticsearch 를찾아실행, 중지를시킬수있다. 세부설정은 Windows install 메뉴얼페이지를참고한다. https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html
- 37-4.6 실행확인 유닉스계열에서 curl 명령을사용해서 localhost 의 9200 번포트를확인한다. 또는웹브라우저에서 http://localhost:9200 로접속해서도확인이가능하다.
- 38-5. 기능소개 세부목차 5.1 공간데이터베이스생성하기 5.2 공간테이블생성하기 5.3 공간인덱스사용하기 5.4 공간쿼리사용하기
- 39-5. 기능소개 5.1 공간데이터베이스생성하기 (psql)(1/7) CLI 를사용할경우, psql 을통해서 PostgreSQL 에작업을할수있다. PostgreSQL 이설치된서버에접속하여 psql 을실행한다. $ psql U postgres d postgres 유저 데이터베이스 새로운데이터베이스 (database) 를생성하고, PostGIS extension 을추가한다. # create database opensw; # \c opensw # create extension postgis;
- 40-5. 기능소개 5.1 공간데이터베이스생성하기 (psql)(2/7) # select postgis_version(); PostGIS에서지원하는한국좌표계는변환하는데필요한인자들이잘못되어있어수정이필요하다. 아래의링크에서파일을 SQL 파일을다운받아실행한다. http://www.osgeo.kr/205 # \i /tmp/postgis_korea_epsg_towgs84.sql
- 41-5. 기능소개 5.1 공간데이터베이스생성하기 (3/7) pgadmin 3 를실행하고, PostgreSQL 을연결한다.
- 42-5. 기능소개 5.1 공간데이터베이스생성하기 (4/7) 새로운데이터베이스를생성하기위해서 Databases 항목을마우스오른쪽으로클릭하고, [ New Database ] 메뉴를선택합니다. 새로운데이터베이스의이름과사용계정을선택 하고 [ OK ] 버튼을클릭한다.
- 43-5. 기능소개 5.1 공간데이터베이스생성하기 (5/7) 새로만든데이터베이스를공간데이터베이스로확장시키기위해서 PostGIS extension 을 추가한다. 데이터베이스를선택하고 Query Tool( ) 을실행하고, create extension postgis; 를입 력하고쿼리를실행 ( ) 한다.
- 44-5. 기능소개 5.1 공간데이터베이스생성하기 (6/7) 정상적으로 PostGIS extension이추가되었는지확인한다. Query Tool에 select postgis_version(); 을입력하고실행한다. 쿼리가정상적으로작동하면 extension이정상적으로추가된것이다. PostGIS extension을추가한데이터베이스는공간데이터베이스로사용가능하다.
- 45-5. 기능소개 5.1 공간데이터베이스생성하기 (7/7) PostGIS에서지원하는한국좌표계는변환하는데필요한인자들이잘못되어있어수정이 필요하다. 아래의링크에서파일을 SQL 파일을다운받아실행한다. http://www.osgeo.kr/205 데이터베이스를선택하고 Query Tool( ) 을실행하고, SQL을불러와쿼리를실행 ( ) 한다.. 변경된좌표계
- 46-5. 기능소개 5.2 공간테이블생성하기 (psql)(1/2) 공간데이터를다루기위해서는공간데이터를저장할수있는타입의칼럼이필요하다. Vector는 Geometry 타입, Raster는 Raster 타입이있어야한다. psql을실행하여새로운테이블을만들데이터베이스에접속한다. $ psql -U postgres -d opensw # create table vector_data ( gid serial, odj_nm character varying(100), geom geometry(polygon, 4326) ); # create table raster_data ( gid serial, image_nm character varying(100), rast raster );
- 47-5. 기능소개 5.2 공간테이블생성하기 (pgadmin)(2/2) pgadmin 을실행하고새로운테이블을생성한데이터베이스를선택하고, Query Tool 을 실행한다.
- 48-5. 기능소개 5.3 공간인덱스사용하기 (1/2) PostgreSQL 는공간데이터를위한공간인덱스를제공한다. 공간인덱스의대표방법은 GIST 이다. GIST 는객체의 MBR(Minimum Bounding Rectangle) 을 R-tree 방식으로인덱싱한다. A B C a b c d e f g [ GIST 인덱싱방식 ]
5. 기능소개 5.3 공간인덱스사용하기 (2/2) psql을실행하여인덱스를생성할테이블이있는데이터베이스에접속한다. $ psql -U postgres -d opensw $ create index vector_data_idx vector_data using gist(geom); pgadmin 을실행하고인덱스를생성할 테이블이있는데이터베이스를선택하고, Query Tool 을생성한다. - 49 -
- 50-5. 기능소개 5.4 공간쿼리사용하기 PostGIS 는공간정보를처리, 연산, 분석할수있는기능들을제공한다. 기능들의상세정보는 PostGIS 매뉴얼 (http://postgis.net/docs/manual-2.2/) 에서확인할수 있다. 기능 설명 ST_Area ST_Centroid ST_Distance ST_DWithin ST_Intersects ST_Length ST_Buffer ST_Intersection ST_Simplify 면타입객체의면적리턴객체의중심점을리턴두객체의직교최단거리리턴두객체가지정된거리안에있는지판단두객체가교차하는지여부판단선타입객체의길이리턴일정거리의버퍼를생성하여리턴두객체의겹치는부분을리턴객체를단순화하여리턴
- 51-6. 활용예제 세부목차 6.1 예제소개
- 52-6. 활용예제 6.1 예제소개 (1/6) ST_Union 은여러객체를하나로합쳐주는기능을제공한다. 예 ) 서울특별시의읍면동데이터를통하여시구군데이터를생산할수있다. ST_Union(geometry geom) 결과타입 : geometry
- 53-6. 활용예제 6.1 예제소개 (2/6) ST_DWithin 은두객체가일정거리안에있는지판단한다. 예 ) 서울특별시의지하철데이터와도서관데이터를사용하여지하철에서반경 200m 안에 있는도관을찾을수있다. ST_DWithin(geometry g1, geometry g2, double distance) 결과타입 : Boolean(true / false)
- 54-6. 활용예제 6.1 예제소개 (3/6) ST_Intersects 는두객체가교차하는지판단한다. 예 ) 서울특별시의구별도서관수를구할수있다. ST_Intersects(geometry g1, geometry g2) 결과타입 : Boolean(true / false)
- 55-6. 활용예제 6.1 예제소개 (4/6) QGIS 는 PostgreSQL 에있는공간정보를불러와바로시각화할수있다. PostgreSQL 정보입력 Add PostGIS Layer
- 56-6. 활용예제 6.1 예제소개 (5/6) [Browser Panel] 의 PostGIS 에있는데이터를더블클릭하거나드래그하여 [Layers Panel] 에 놓으면데이터를불러올수있다.
- 57-6. 활용예제 6.1 예제소개 (6/6) GeoServer 에 PostgreSQL 을연결하면 WMS, WFS 등을이용하여데이터를서비스할수 있다. PostgreSQL 정보입력
- 58-7. FAQ Q pgadmin 을사용해서도형열 (geometry 칼럼 ) 이비어있습니다. 왜그런거죠? & A 도형열 (geometry 칼럼 ) 에들어가는데이터의길이가너무길경우에는 pgadmin에서는공백으로보입니다만, 실제로는데이터가들어가있습니다. Q 대용량테이블에서공간쿼리속도를어떻게높일수있나요? & A 대용량의데이터일경우, 쿼리의속도를높이기위해서는인덱스를적절히생성하여야합니다. 특히, 공간쿼리의경우는공간인덱스를생성해주어속도를향상시킬수있습니다.
- 59-7. FAQ Q 쿼리를통하여좌표를다른좌표계로재투영할수있나요? & A 재투영을실행하기위해서는먼저 spatial_ref_sys 테이블에원본및바꾸려는좌표계가정의되어있어야하며, 원본의좌표에정확한좌표가정의되어있어야합니다. 기본조건이갖춰져있다면 PostGIS에서제공하는기능중 ST_Transform을이용하여쉽게변환할수있습니다. 예 ) select ST_Transform(geometry, srid) from table; Q ST_Intersects 와 ST_Intersection의차이점이무엇인가요? & A 가장큰차이점은결과값입니다. ST_Intersect는두객체가교차하지여부를판단하여 TRUE/FALSE를반환하는반면, ST_Intersection은두객체의교차하는부분의 geometry를반환합니다.
- 60-8. 용어정리 용어 CLI GeometryCollection WMS WFS 설명 CLI(Command Line Interface) 는작업명령을사용자가텍스트로입력하여진행하고, 결과값역시텍스트로반환되는방식입니다. GeometryCollection 은 1 개이상의 geometry 또는 geography 를가진집합체입니다. WMS(Web Map Service) 는웹에서지도이미지를교환하기위한인터페이스입니다. WFS(Web Feature Service) 는웹에서벡터형식의데이터를교환하기위한인터페이스입니다. 인덱스 (index) 인덱스란 DBMS 에서데이터를조회할사용하는색인입니다. 인덱스를생성함으로써 DBMS 는빠르고효율적으로데이터를검색할수있습니다. Extension PostgreSQL 에서 Extension 은 PostgreSQL 의기능을확장할수있는플러그인과같은기능을합니다.
Open Source Software Installation & Application Guide 이저작물은크리에이티브커먼즈 [ 저작자표시 비영리 동일조건변경허락 2. 0 대한민국라이선스 ] 에따라이용하실수있습니다.