본문 바로가기
카테고리 없음

[Ubuntu 16.04] PostGIS 설치 후 GeoServer에 연결하고 지도 띄우는 방법

by 롱일스 2020. 7. 15.
반응형

이번 포스트에서는 GeoServer를 설치하고 PostGIS도 설치하고 GeoServer에서 PostGIS 저장소에 접근해서 지도를 띄우는 방법을 알아보겠습니다!!!!!!

 

 

먼저 GeoServer를 설치해 보겠습니다.

1. GeoServer 설치

gist.github.com/falu/f3fb6931618c1ed87ce4539cee92dcde

 

Install Geoserver on Ubuntu Server 16.04 LTS

Install Geoserver on Ubuntu Server 16.04 LTS. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

위의 링크를 따라해서 Ubuntu 16.04에 Geoserver를 설치했습니다.
설치하고 나면 아래와 같이 뜹니다

Geoserver가 설치되었으니 한번 실행해봅시다.

2. GeoServer 실행

Geoserver는 웹 서버를 대부분 로컬호스트(localhost)의 8080번 포트에서 시작하므로
웹 브라우저에
http://localhost:8080/geoserver/web
치면 웹 관리 인터페이스로 진입할 수 있습니다.
기본 사용자명 및 비밀번호는 admin 및 geoserver입니다.

서버 상태 탭을 누르면 아래와 같이 서버 설정 파라미터와 실행 상태를 요약해서 볼 수 있습니다. 진단 도구로 활용하면 됩니다.

 

WMS는 지리공간 맵 이미지를 요청하기 위한 표준 인터페이스를 제공합니다. WMS의 장점이라고 하면 WMS 클라이언트가 복수의 WMS 서버에서 이미지를 요청, 이미지들을 단일뷰(view)로 결합해서 사용자에게 표출할 수 있다는 점입니다. 이 표준은 현실의 출력물을 실제로 다루는 것처럼 이미지들을 모두 서로 겹칠 수 있습니다. 수많은 서버와 클라이언트들이 WMS를 지원하고 있습니다

본격적으로 postGIS에 저장되어 있는 데이터를 간단하게 시각화하고 서비스 해보도록 하겠씁니당.

 PostgreSQL은 관계형 데이터베이스로, PostGIS는 지도 데이터와 같은 지리적 객체를 저장할 수 있는 공간 확장 개념입니다. PostgreSQL + PostGIS는 렌더링 맵, 지오코딩, 분석 등 매우 다양한 기능에 사용됩니다.

PostGIS와 PostgreSQL 데이터베이스를 먼저 다운받기 위해 OSM에서 제공하는 아래 링크를 참고해서 설치햇습니다.

https://ircama.github.io/osm-carto-tutorials/tile-server-ubuntu/#install-mapnik-library-from-package

저는 우분투에 설치해야 해서 위 링크를 참고했는데, 윈도우나 다른 OS에서 다운받으시는 분들은 postGIS 홈페이지에 가면 상세히 설명 나와있으니 참고하세요!

일단 위의 링크에 맵 서버 설치부터 엄청 자세히 나와있기 때문에 PostgreSQL + PostGIS 설치에 해당되는 부분만 발췌해 보겠습니다.

3. PostgreSQL 설치

먼저 환경변수를 설정합시다.

PostgreSQL 포트는 default로 5432 입니다.
비번을 여기서는 postgres_007%로 했는데 맘대로 설정해도 됩니다.
유저 이름은 postgres이라고 설정했습니다.

export PGHOST=localhost
export PGPORT=5432
export PGUSER=postgres
export PGPASSWORD=postgres_007%

Ubuntu에는 PostGIS와 PostgreSQL의 사전 패키징 버전이 있으므로 Ubuntu 패키지 관리자를 통해 간단하게 설치할 수 있습니다. 여기선 postgresql 10을 설치합니다.

sudo apt-get update
sudo apt-get install -y postgresql-10

다음으로 postgres 사용자의 암호를 아까 환경변수 설정한 걸로 정해줍니다.

방법1)

psql -U postgres
\password postgres

방법2)  방법 1에서 인증 오류가 나시면 아래 방법으로 해주세요.

sudo su -
sudo -i -u postgres
psql -U postgres
\password postgres

비번 치라고 하면 postgres_007%를 2번 쳐주면 됩니다.

다음으로 psql에서 나가려면 \q 쳐주면 됩니다.

\q

그리고 postgres 유저에서도 나가고 sudo  상태에서도 나가기 위해 아래 명령어를 쳐줍니다.

exit # from 'sudo -i -u postgres'
exit # from 'sudo su -'

이제 PostGIS 인스턴스를 생성해줍니다.

4. PostGIS 데이터베이스 생성

먼저 인코딩 설정을 해줍니다.

>> export PGPASSWORD=postgres_007%
>> HOSTNAME=localhost # set it to the actual ip address or host name
>> psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8'"

이렇게 했는데 아래와 같은 오류가 뜨면 

ERROR:  invalid locale name: "en_GB.utf8"

‘en_GB.utf8' locale을 추가해줍니다.

sudo dpkg-reconfigure locales

그리고 첫 번째 화면에서 'en_GB.UTF-8 UTF-8' 를 선택해줍니다.

그담에는 db를 재시작해줍니다. 설정을 바꿨으니까요.

sudo service postgresql restart

그런데도 아래와 같은 오류가 나시면

ERROR:  new collation (en_GB.utf8) is incompatible with the collation of the template database (en_US.UTF-8)
HINT:  Use the same collation as in the template database, or use template0 as template.

(오류난경우) 아래와 같이 쳐줍니다. 

psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8' TEMPLATE template0"

다음으로 DB를 생성할 폴더 위치를 정해서 폴더를 만들어줍니다.  여기선 /mnt/db 로 위치를 정했씁니다.

>> sudo mkdir /mnt/db # Suppose this is the tablespace location
>> sudo chown postgres:postgres /mnt/db
>> psql -U postgres -h $HOSTNAME -c "CREATE TABLESPACE gists LOCATION '/mnt/db'"
>> psql -U postgres -h $HOSTNAME -c "ALTER DATABASE gis SET TABLESPACE gists"

postgis와 hstore extension을 생성합니다.

psql -U postgres -h $HOSTNAME -c "\connect gis"
psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION postgis"
psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION hstore"

다음으로 gis DB에 사용자를 등록하고 접근가능하게 설정합니다. UNIX 유저 이름이 tileserver일 때 이렇게 씁니다.

psql -U postgres -c "create user tileserver;grant all privileges on database gis to tileserver;"

PostgreSQL에 원격 접근이 가능하도록 설정합니다.

sudo vi /etc/postgresql/9.5/main/pg_hba.conf

pg_hba.conf 파일을 열어서 아래 코드를 추가해줍니다. 

host    all             all             <your IP set>/<your netmask>             md5

다음으로 postgresql.conf 파일을 열어서 

sudo vi /etc/postgresql/9.5/main/postgresql.conf

다음 항목을 아래와 같이 고쳐줍니다. 

listen_addresses = '*'

그리고 설정이 바꼈으니 DB를 재시작 해줍니다.

sudo /etc/init.d/postgresql restart

gis 데이터베이스가 잘 설치됐는지 확인해봅니다

psql -U postgres -h $HOSTNAME -c "\l+"

아래 항목이 보이면 지금까지 문제 없이 잘 진행된 겁니다.

그럼 여기까지 PostgreSQL와 PostGIS 설치와 설정이 끝났습니다. 이제 osm 파일 형태도 받은 걸 PostgreSQL로 변환 후 저장소에 연결해줘야 합니다 !!

 

3. OSM 형태의 지도 데이터를 PostgreSQL 형태로 변환

저는 제가 아는 국가들 중에서 북한이 가장 데이터 크기가 작아서 테스트 용으로 북한의 osm.pbf 파일을 다운받았씁니다. (north-korea-latest.osm.pbf)

이걸 GeoServer에서 사용하려면 osm2pgsql을 통해서 변환을 해줘야 합니다.

먼저 osm2pgsql을 할 수 있도록 깃에서 다운받아줍니다.

>>sudo apt-get install -y make cmake g++ libboost-dev libboost-system-dev \
  libboost-filesystem-dev libexpat1-dev zlib1g-dev \
  libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 \
  liblua5.2-dev


>>mkdir -p ~/src ; cd ~/src
>>git clone git://github.com/openstreetmap/osm2pgsql.git 
>>cd osm2pgsql
>>mkdir build
>>cd build
>>cmake -DCMAKE_BUILD_TYPE=Release ..
>>make
>>sudo make install
>>cd

그 다음에 postgres 유저 상태에서 osm2pgsql을 통해 변환해줍니다.

postgis_db-# \q
postgres@jiyoon-pc:~$ osm2pgsql --create --database postgis_db /home/jiyoon/다운로드/north-korea-latest.osm.pbf;
postgres@jiyoon-pc:~$ psql -U postgres -h $HOSTNAME -d gis -c "\dt+"

이렇게 하면 GeoServer에 북한의 지도를 띄울 준비가 다 된겁니다 ㅎㅎ..

 

4. GeoServer에 PostGIS 데이터 저장소 연결하기

Geoserver에 로그인하고 (기본 사용자명 및 비밀번호는 admin 및 geoserver입니다.)

왼쪽에 데이터 목록 하단에 저장소 클릭 -> 새로운 저장소 생성하기 -> PostGIS 클릭

데이터가 있는 PostGIS의 연결 정보를 입력하고 [저장]을 클릭합니다.

이 때 user는 postgres고 password는 postgres_007%가 됩니다.

저장 누르면 아래와 같이 PostGIS 테이블 목록이 뜹니다 !!

성공적으로 연결되었씁니다!!! 

GeoServer의 데이터 -> 레이어 미리보기 항목에 들어가서 한 번 확인해보세요~~ 

짜잔!! 레이어 미리보기를 누르면 나오는 항목들 중에 PostGIS로 연결한 북한의 레이어의 Openlayers를 클릭하면 이렇게 띄울 수 있습니다! 

 

출처: www.oss.kr/storage/app/public/oss/c0/77/[GeoServer]%20Solution%20Guide%20V0.95.pdf

728x90
반응형