이번 포스트에서는 GeoServer를 설치하고 PostGIS도 설치하고 GeoServer에서 PostGIS 저장소에 접근해서 지도를 띄우는 방법을 알아보겠습니다!!!!!!
먼저 GeoServer를 설치해 보겠습니다.
1. GeoServer 설치
gist.github.com/falu/f3fb6931618c1ed87ce4539cee92dcde
위의 링크를 따라해서 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