PostGIS 筆記(一):安裝 PostGIS

之前我曾在這裡提到如何安裝 PostGIS,我再次嘗試按著這裡的方法進行安裝。

我在 Ubuntu 12.10 上進行安裝,先是安裝一系列需要的套件,它們包括編譯器、PostgreSQL Server 9.1 和一系列編譯 PostGIS 時用到的套件。
sudo apt-get install build-essential postgresql-9.1 postgresql-server-dev-9.1 libgeos-c1 libxml2-dev libproj-dev libjson0-dev xsltproc docbook-xsl docbook-mathml libgdal1-dev

然後下載及解壓 PostGIS 原始碼(網址視乎當時的最新版本):
wget http://download.osgeo.org/postgis/source/postgis-2.0.2.tar.gz
tar xfvz postgis-2.0.2.tar.gz

進入該資料夾,再進行編譯及安裝:
cd postgis-2.0.2
./configure
make
sudo make install
sudo ldconfig
sudo make comments-install

之後將工具連結起來,以方便直接使用:
sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/shp2pgsql
sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/pgsql2shp
sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/raster2pgsql

由於這個版本支援 CREATE EXTENSION,所以我們可以先創建資料庫,再在此資料庫上啟用 PostGIS 功能。

利用 postgres 這個用戶創建名為 template_postgis 的資料庫:
sudo -u postgres createdb template_postgis

進入 PostgreSQL 的指令介面:
sudo -u postgres psql template_postgis

啟用 PostGIS 功能:
template_postgis=# CREATE EXTENSION postgis;
template_postgis=# CREATE EXTENSION postgis_topology;

由於 PostgreSQL Server 預設只可用其用戶在本機登入,如果想利用其他用戶名稱及密碼登入,需作以下修改:

設定 postgres 用戶也可用密碼登入:
sudo -u postgres psql template_postgis

template_postgis=# ALTER USER postgres with encrypted password 'xxxxxxx';

修改 pg_hba.conf 的設定:
sudo vim /etc/postgresql/9.1/main/pg_hba.conf

將第一句改成第二句,即是由直接連接改成密碼登入:
local      all     postgres     peer
local      all     postgres     md5

重新啟動 PostgreSQL Server:
sudo service postgresql restart

然後利用 postgres 這個用戶去創建另一個新用戶,user 為新用戶名,按指示輸入密碼。參數可參考說明文件:
createuser -U postgres -d -e -E -l -P -r -s user

再修改 pg_hba.conf 的設定:
sudo vim /etc/postgresql/9.1/main/pg_hba.conf

將第一句改成第二句,也加入第三句:
local      all     all	peer
local      all     all	md5
host      all     all      0.0.0.0/0      md5

為了讓其他電腦也可連接到這台 PostgreSQL Server,所以要修改 postgresql.conf:

將第一句改成第二句:
listen_addresses = 'localhost'
listen_addresses = '*'

重新啟動 PostgreSQL Server:
sudo service postgresql restart

之後我們可以利用它的指令介面或利用 pgAdmin III 操作,以下例子修改自這裡
postgis1

postgis2

-- Create table with spatial column
CREATE TABLE mytable ( 
  id SERIAL PRIMARY KEY,
  geom GEOMETRY(Point, 4326),
  name VARCHAR(128)
); 
 
-- Add a spatial index
CREATE INDEX mytable_gix
  ON mytable 
  USING GIST (geom); 
 
-- Add points
INSERT INTO mytable (geom,name) VALUES
(ST_GeomFromText('POINT(114 22)', 4326),'a'),
(ST_GeomFromText('POINT(115 23)', 4326),'b');

輸入資料之後便可進行查詢:
SELECT id, name
FROM mytable
WHERE ST_DWithin(
  geom, 
  ST_GeomFromText('POINT(114 22.1)', 4326),
  0.5
);

若見到以下結果,安裝便算成功:
postgis3

當然我們亦可使用網頁的介面,先安裝 Apache、PHP 和相關模組,再下載使用 Adminer 或其他工具使用便可:
sudo apt-get install apache2
sudo apt-get install php5 php5-pgsql

postgis4

參考資料:
PostgreSQL
PostGIS.net
PostGIS.org
How to configure postgresql for the first time?
PostGIS Install Guide

內部連結:
【目錄】地理/地理資訊系統/空間資料庫/大地測量內部連結

本文連結